summaryrefslogtreecommitdiff
path: root/macros/unicodetex
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-09-26 03:03:17 +0000
committerNorbert Preining <norbert@preining.info>2020-09-26 03:03:17 +0000
commit66ebd4914b367eb00a52ce5d5bb51f695101931b (patch)
treee5e4a5148bbf213f7ecc242d333bbde165d41e3b /macros/unicodetex
parent56c9134f4aa02292ed17e726efd8e493b90e6011 (diff)
CTAN sync 202009260303
Diffstat (limited to 'macros/unicodetex')
-rw-r--r--macros/unicodetex/README.txt13
-rw-r--r--macros/unicodetex/generic/README.txt7
-rw-r--r--macros/unicodetex/latex/fontsetup/README15
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdfbin0 -> 710593 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex339
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-cambria.pdfbin0 -> 60986 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-cmr.pdfbin0 -> 27714 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-ebgaramond.pdfbin0 -> 30994 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-fira.pdfbin0 -> 21396 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-gfsartemisia.pdfbin0 -> 27819 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidot.pdfbin0 -> 31224 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidotclassic.pdfbin0 -> 32654 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-gfsneohellenic.pdfbin0 -> 27539 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-kerkis.pdfbin0 -> 25282 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-libertinus.pdfbin0 -> 33644 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-lucida.pdfbin0 -> 16379 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-minion.pdfbin0 -> 27885 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-msgaramond.pdfbin0 -> 71020 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-neoeuler.pdfbin0 -> 28482 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-newdefault.pdfbin0 -> 44495 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-palatino.pdfbin0 -> 94241 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-stixtwo.pdfbin0 -> 28947 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample-times.pdfbin0 -> 23139 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/doc/fspsample.tex75
-rw-r--r--macros/unicodetex/latex/fontsetup/fontsetup.sty110
-rw-r--r--macros/unicodetex/latex/fontsetup/fspcambria.sty9
-rw-r--r--macros/unicodetex/latex/fontsetup/fspdefault.sty251
-rw-r--r--macros/unicodetex/latex/fontsetup/fspebgaramondot.sty12
-rw-r--r--macros/unicodetex/latex/fontsetup/fspfiraot.sty26
-rw-r--r--macros/unicodetex/latex/fontsetup/fspgfsartemisiaot.sty16
-rw-r--r--macros/unicodetex/latex/fontsetup/fspgfsdidotclassicot.sty24
-rw-r--r--macros/unicodetex/latex/fontsetup/fspgfsdidotot.sty49
-rw-r--r--macros/unicodetex/latex/fontsetup/fspgfsneohellenicot.sty53
-rw-r--r--macros/unicodetex/latex/fontsetup/fspkerkisot.sty15
-rw-r--r--macros/unicodetex/latex/fontsetup/fsplucidaot.sty28
-rw-r--r--macros/unicodetex/latex/fontsetup/fspminion.sty20
-rw-r--r--macros/unicodetex/latex/fontsetup/fspmsgaramondot.sty23
-rw-r--r--macros/unicodetex/latex/fontsetup/fspneoeulerot.sty41
-rw-r--r--macros/unicodetex/latex/fontsetup/fspolddefault.sty251
-rw-r--r--macros/unicodetex/latex/fontsetup/fsppalatinoot.sty17
-rw-r--r--macros/unicodetex/latex/fontsetup/fspstixtwoot.sty17
-rw-r--r--macros/unicodetex/latex/fontsetup/fsptimesot.sty16
-rw-r--r--macros/unicodetex/latex/fontsetup/system-install-fonts/fsplpscel.otfbin0 -> 20472 bytes
-rw-r--r--macros/unicodetex/latex/fontsetup/system-install-fonts/fspmnscel.otfbin0 -> 17944 bytes
-rw-r--r--macros/unicodetex/latex/fontspec/CHANGES.md492
-rw-r--r--macros/unicodetex/latex/fontspec/LICENSE416
-rw-r--r--macros/unicodetex/latex/fontspec/README.md83
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-api.dtx390
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-closing.dtx44
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-enc.dtx158
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-feat-aat.dtx243
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-feat-opentype.dtx583
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-fontload.dtx136
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-graphite.dtx128
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-interfaces.dtx296
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-internal.dtx1217
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-keyval.dtx905
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-lang.dtx419
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-load.dtx72
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-math.dtx260
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-msg.dtx280
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-opening.dtx213
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-opentype.dtx478
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-scripts.dtx194
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-user.dtx552
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-vars.dtx336
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code-xfss.dtx310
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code.ltx42
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-code.pdfbin0 -> 629912 bytes
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-api.tex352
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-enc.tex216
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-featset.tex629
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-fontsel.tex629
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-intro.tex196
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-luatex.tex94
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-opentype.tex1478
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-style.sty292
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-doc-xetex.tex294
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-example.tex48
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec-lua.dtx101
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec.cfg22
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec.dtx116
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec.ins60
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec.ltx40
-rw-r--r--macros/unicodetex/latex/fontspec/fontspec.pdfbin0 -> 600048 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/CHANGES.md142
-rw-r--r--macros/unicodetex/latex/lilyglyphs/INSTALL44
-rw-r--r--macros/unicodetex/latex/lilyglyphs/README44
-rw-r--r--macros/unicodetex/latex/lilyglyphs/VERSION2
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-400.pngbin0 -> 38525 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-600.pngbin0 -> 78141 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-de.pdfbin0 -> 75153 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-de.tex91
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.pdfbin0 -> 74791 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.pngbin0 -> 102939 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.tex89
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs.pdfbin0 -> 539669 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs.tex1429
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.pdfbin0 -> 22496 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.pngbin0 -> 9893 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.tex57
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-088c978c.pngbin0 -> 10336 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-1981c3c7.pngbin0 -> 9104 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-20e8632d.pngbin0 -> 70410 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-2abb8a04.pngbin0 -> 15011 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-2be182be.pngbin0 -> 5779 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-3b47d3fe.pngbin0 -> 6756 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-3f4afecc.pngbin0 -> 20569 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-40869867.pngbin0 -> 8021 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-5b13ce04.pngbin0 -> 18669 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-5c91a201.pngbin0 -> 57774 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-707477b7.pngbin0 -> 33720 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-76dbcd67.pngbin0 -> 9447 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-7fd84ff8.pngbin0 -> 2446 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8155deab.pngbin0 -> 1144 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8b332c94.pngbin0 -> 2226 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8d82df0c.pngbin0 -> 4655 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8d8bb8a3.pngbin0 -> 5948 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-907bc72d.pngbin0 -> 58314 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-a2bf82dd.pngbin0 -> 2686 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-ae3fd948.pngbin0 -> 1583 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-b3dc0958.pngbin0 -> 5776 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-b69af986.pngbin0 -> 20817 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-d9988a2c.pngbin0 -> 10241 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-dffaecd2.pngbin0 -> 2229 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-f4d0afc9.pngbin0 -> 5433 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lilyglyphsManualFonts.sty51
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lilyglyphsStyle.sty186
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/resources/lilypond-manuals.css469
-rw-r--r--macros/unicodetex/latex/lilyglyphs/documentation/the-feta-font-2-18-0.html571
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/FONTLOG23
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/LICENSE.OFL95
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-11.otfbin0 -> 160820 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-13.otfbin0 -> 160980 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-14.otfbin0 -> 160828 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-16.otfbin0 -> 160552 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-18.otfbin0 -> 160560 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-20.otfbin0 -> 160332 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-23.otfbin0 -> 160728 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-26.otfbin0 -> 160780 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-brace.otfbin0 -> 200704 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/license/COPYING.LPPL419
-rw-r--r--macros/unicodetex/latex/lilyglyphs/license/MANIFEST180
-rw-r--r--macros/unicodetex/latex/lilyglyphs/license/license-preamble.inp31
-rw-r--r--macros/unicodetex/latex/lilyglyphs/scripts/README-scripts3
-rwxr-xr-xmacros/unicodetex/latex/lilyglyphs/scripts/lily-glyph-commands.py136
-rwxr-xr-xmacros/unicodetex/latex/lilyglyphs/scripts/lily-image-commands.py321
-rwxr-xr-xmacros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py142
-rw-r--r--macros/unicodetex/latex/lilyglyphs/scripts/lilyglyphs_common.py360
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/fonts/README-emmentaler8
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/_template.ly54
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/beamednotes.ly111
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/dynamicsigns.ly62
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/fancyexamples.ly61
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/score.ily49
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/singlenotes.ly377
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/singlenotes.pdfbin0 -> 25328 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crescHairpin.ly69
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchet.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDotted.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDouble.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDoubleDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-decrescHairpin.ly69
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaver.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDotted.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDouble.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDoubleDown.ly72
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDown.ly72
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDown.ly72
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-fancyExample.ly74
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNote.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDotted.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDouble.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDoubleDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaver.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDotted.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDouble.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDoubleDdown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDoubleDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaver.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDotted.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDouble.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDoubleDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDown.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuavers.ly71
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversI.ly72
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversII.ly72
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversIII.ly72
-rw-r--r--macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-twoBeamedQuavers.ly70
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/README-tex7
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/README-commands2
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/accidentals.inp120
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/accordion.inp116
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/beamednotes.inp81
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/clefs.inp76
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/dynamics.inp97
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/fancyexamples.inp51
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/noteheads.inp48
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/numbers.inp53
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/rests.inp141
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/scripts.inp121
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/singlenotes.inp321
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/commands/timesignatures.inp63
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/core/README-core2
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/core/dotted.inp114
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/core/genericAccess.inp189
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/core/keyval.inp100
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/core/opticals.inp55
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/lilyglyphs.sty103
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crescHairpin.pdfbin0 -> 2421 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchet.pdfbin0 -> 8799 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDotted.pdfbin0 -> 9104 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDouble.pdfbin0 -> 9111 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDoubleDown.pdfbin0 -> 9109 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDown.pdfbin0 -> 9102 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDown.pdfbin0 -> 8798 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-decrescHairpin.pdfbin0 -> 2421 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaver.pdfbin0 -> 9148 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDotted.pdfbin0 -> 9226 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDouble.pdfbin0 -> 9230 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDoubleDown.pdfbin0 -> 9226 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDown.pdfbin0 -> 9220 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDown.pdfbin0 -> 9145 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-fancyExample.pdfbin0 -> 9140 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNote.pdfbin0 -> 8778 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDotted.pdfbin0 -> 9086 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDouble.pdfbin0 -> 9092 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDoubleDown.pdfbin0 -> 9088 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDown.pdfbin0 -> 9082 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDown.pdfbin0 -> 8774 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaver.pdfbin0 -> 9209 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDotted.pdfbin0 -> 9285 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDouble.pdfbin0 -> 9289 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDoubleDdown.pdfbin0 -> 9000 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDoubleDown.pdfbin0 -> 9000 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDown.pdfbin0 -> 8995 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDown.pdfbin0 -> 8921 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaver.pdfbin0 -> 9296 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDotted.pdfbin0 -> 9371 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDouble.pdfbin0 -> 9376 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDoubleDown.pdfbin0 -> 9092 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDown.pdfbin0 -> 9086 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDown.pdfbin0 -> 9015 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuavers.pdfbin0 -> 8804 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversI.pdfbin0 -> 9081 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversII.pdfbin0 -> 9074 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversIII.pdfbin0 -> 9075 bytes
-rw-r--r--macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-twoBeamedQuavers.pdfbin0 -> 8870 bytes
-rw-r--r--macros/unicodetex/latex/polyglossia/README.md42
-rw-r--r--macros/unicodetex/latex/polyglossia/polyglossia.dtx20295
-rw-r--r--macros/unicodetex/latex/polyglossia/polyglossia.pdfbin0 -> 269164 bytes
-rw-r--r--macros/unicodetex/latex/unicode-math/CHANGES.md363
-rw-r--r--macros/unicodetex/latex/unicode-math/LICENSE416
-rw-r--r--macros/unicodetex/latex/unicode-math/MANIFEST.md258
-rw-r--r--macros/unicodetex/latex/unicode-math/README.md116
-rw-r--r--macros/unicodetex/latex/unicode-math/RELEASE_CHECKLIST.md11
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-alphabets.dtx934
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-amsmath.dtx173
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-api.dtx43
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-compat.dtx157
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-epilogue.dtx420
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-fontopt.dtx326
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-fontparam.dtx345
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-main.dtx700
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-mathmap.dtx595
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-mathtext.dtx259
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-msg.dtx156
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-opening.dtx410
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-pkgopt.dtx330
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-primes.dtx385
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-setchar.dtx298
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-sscript.dtx238
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-sym-commands.dtx216
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-ui.dtx101
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-usv.dtx592
-rw-r--r--macros/unicodetex/latex/unicode-math/um-code-variables.dtx257
-rw-r--r--macros/unicodetex/latex/unicode-math/um-doc-legacyfontdimen.tex76
-rw-r--r--macros/unicodetex/latex/unicode-math/um-doc-main.tex1238
-rw-r--r--macros/unicodetex/latex/unicode-math/um-doc-mathfontdimen.tex151
-rw-r--r--macros/unicodetex/latex/unicode-math/um-doc-nfsssummary.tex87
-rw-r--r--macros/unicodetex/latex/unicode-math/um-doc-stixextract.tex38
-rw-r--r--macros/unicodetex/latex/unicode-math/um-doc-style.tex131
-rw-r--r--macros/unicodetex/latex/unicode-math/unicode-math-code.ltx35
-rw-r--r--macros/unicodetex/latex/unicode-math/unicode-math-code.pdfbin0 -> 325165 bytes
-rw-r--r--macros/unicodetex/latex/unicode-math/unicode-math-table.tex2467
-rw-r--r--macros/unicodetex/latex/unicode-math/unicode-math.dtx116
-rw-r--r--macros/unicodetex/latex/unicode-math/unicode-math.ins64
-rw-r--r--macros/unicodetex/latex/unicode-math/unicode-math.ltx38
-rw-r--r--macros/unicodetex/latex/unicode-math/unicode-math.pdfbin0 -> 162723 bytes
-rw-r--r--macros/unicodetex/latex/unicode-math/unimath-example.ltx69
-rw-r--r--macros/unicodetex/latex/unicode-math/unimath-example.pdfbin0 -> 21851 bytes
-rw-r--r--macros/unicodetex/latex/unicode-math/unimath-symbols.ltx469
-rw-r--r--macros/unicodetex/latex/unicode-math/unimath-symbols.pdfbin0 -> 1194223 bytes
300 files changed, 57884 insertions, 0 deletions
diff --git a/macros/unicodetex/README.txt b/macros/unicodetex/README.txt
new file mode 100644
index 0000000000..351c0bd7d4
--- /dev/null
+++ b/macros/unicodetex/README.txt
@@ -0,0 +1,13 @@
+
+ README.txt for CTAN:/macros/unicodetex/ :
+
+ This directory tree is meant for packages that work with
+ _either_ of the “modern” TeX engines XeTeX or LuaTeX,
+ but _not_ with the “traditional” TeX engines TeX and pdfTeX.
+
+ For packages that require LuaTeX (and will work with _none_
+ of the other engines!) go to CTAN:/macros/luatex/ .
+
+ For packages that require XeTeX (and will work with _none_
+ of the other engines!) go to CTAN:/macros/xetex/ .
+
diff --git a/macros/unicodetex/generic/README.txt b/macros/unicodetex/generic/README.txt
new file mode 100644
index 0000000000..d702a21ea4
--- /dev/null
+++ b/macros/unicodetex/generic/README.txt
@@ -0,0 +1,7 @@
+
+ README.txt for CTAN:/macros/unicodetex/generic/ :
+
+ This directory tree is meant for packages that
+ -> require a “modern” TeX engine like XeTeX or LuaTeX
+ and
+ -> are compatible with LaTeX _and_ Plain formats.
diff --git a/macros/unicodetex/latex/fontsetup/README b/macros/unicodetex/latex/fontsetup/README
new file mode 100644
index 0000000000..377b78a5f5
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/README
@@ -0,0 +1,15 @@
+ The fontsetup package
+ (Version 1.007, GPL3)
+
+This simple package makes it trivial to switch quickly between
+different quality fonts supporting Mathematics.
+
+For more information read the file fontsetup-doc.pdf in
+the doc subdirectory.
+
+Antonis Tsolomitis
+Professor
+University of the Aegean
+Department of Mathematics
+83200 Samos, Greece
+
diff --git a/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf b/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf
new file mode 100644
index 0000000000..7bbc3d52ba
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex b/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex
new file mode 100644
index 0000000000..b9ddc3ddcd
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fontsetup-doc.tex
@@ -0,0 +1,339 @@
+\documentclass{book}
+\usepackage[default]{fontsetup}
+\usepackage{graphicx,fullpage,supertabular}
+\begin{document}
+
+
+ \begin{center}
+ {\LARGE The \texttt{fontsetup} package}\\[1ex]
+ \textit{by}\\[1ex]
+ {\large Antonis Tsolomitis}\\
+University of the Aegean\\ Department of Mathematics\\[1ex]
+ \textsc{24} August \textsc{2020}\\[1ex]
+ Version 1.007, \textsc{gpl3}
+ \end{center}
+
+ This package is a simple wrapper-type package that makes the setup of fonts easy and
+ quick for XeLaTeX and LuaLaTeX. You just load the package using one of the supported
+ fonts as an option.
+
+ The target is to provide easy access to fonts with a matching Mathematics font available in
+ TeX distributions plus a few commercial if available.
+
+ The package will include more font combinations in the future, however there are
+ some restrictions. The fonts must have some commercial-level quality and must support
+ Mathematics.
+
+ The options (in alphabetic order after the default option) are as follows:
+
+ \begin{description}
+ \item[default] Loads the NewComputerModern fonts (in Book weight),
+ which is an assembly of cm fonts plus
+ more fonts to support Greek (cbgreek) and Cyrillic languages. It also provides
+ \begin{itemize}
+ \item commands to access prosgegrammeni instead of ypogegrammeni for capitals and small
+ capitals, by writing \verb|\textprosgegrammeni{<text>}| or \verb|{\prosgegrammeni <text>}|.
+ \item commands to access 4th and 6th century bce Greek by writing
+ \verb|\textivbce{<text>}| or \verb|{\ivbce <text>}| and
+ \verb|\textvibce{<text>}| or \verb|{\vibce <text>}|. For example, write
+ \verb|\textivbce{ΕΠΙΚΟΥΡΟΣ}| to get \textivbce{ΕΠΙΚΟΥΡΟΣ}.
+ \item commands to access Sans Greek (upright and oblique) in math mode although these are
+ not included in the unicode standard. The commands follow the unicode-math.sty notation, so
+ to get $\msansLambda$ and $\mitsanspi$ you write \verb|$\msansLambda$| and \verb|$\mitsanspi$|.
+ \item commands to access the Ancient Greek Numbers (Unicode u10140--u1018E)
+ documented in the Appendix
+ \item commands to access the negation of uniform convergence symbols \verb|\nrightrightarrows|
+ for $\nrightrightarrows$ and \verb|\nleftleftarrows| for $\nleftleftarrows$.
+ \item commands to access the IPA symbols. These are \verb|\ipatext| and \verb|\ipatextsans|
+ to select the fonts properly or \verb|\textipa{...}| and \verb|\textsansipa{...}| to select the fonts
+ for IPA symbols locally. Compare \textipa{ðŋβθχ}
+ (produced with \verb|\textipa{ðŋβθχ}|) with ðŋβθχ.
+ \end{itemize}
+ \item[olddefault] Loads the NewComputerModern fonts (in Regular weight)
+ similarly to the default option.
+ \item[cambria] Loads the Cambria fonts of Microsoft. These must be already installed
+ as a system font (in \verb|C:\Windows\Fonts| in MS-Windows, in \verb|/home/user/.fonts/| in Linux
+ or elsewhere by the system administratior).
+ \item[ebgaramond] Loads the EB-Garamond fonts with Garamond-Math.
+ \item[fira] Loads the Fira family, a sans-serif font.
+ \item[gfsartemisia] Loads the GFSArtemisia, a font family designed to be used
+ as a Times replacement. The Mathematics is from stix2 but latin
+ and greek letters are substituted from GFSArtemisia to provide a better match.
+ \item[gfsdidotclassic] Uses the GFSDidotClassic for Greek with GFSPorson for italic.
+ The latin part is URW garamond. The Mathematics is from Garamond-Math but the greek
+ letters are substituted from GFSDidotClassic to provide a better match. Notice that
+ the Bold versions of the Greek fonts are faked using fontspec mechanism as
+ the Greek part does not have bold versions.
+ \item[gfsdidot] Loads the GFSDidot fonts. NewCMMath-Book is the Mathematics font, but latin
+ and greek letters are substituted from GFSdidot to provide a better match.
+ \item[gfsneohellenic] Loads the GFSNeohellenic family with GFSNeohellenic-Math.
+ \item[kerkis] Loads the kerkis font family and texgyrebonum-math.
+ \item[libertinus] Loads the Libertinus and LibertinusMath fonts.
+ \item[lucida] Loads the Lucida font family if available (a commercial font).
+ \item[minion] Loads the MinionPro family. To install it, find the fonts MinionPro and
+ MyriadPro from the installation of Adobe PDF Reader and install the fonts to your system
+ (in \verb|C:\Windows\Fonts| in MS-Windows, in \verb|/home/user/.fonts/| in Linux
+ or elsewhere by the system administratior). Moreover, install the supplied
+ fspmnscel.otf as a system font to have access to Greek small caps.
+ Mathematics is from stix2
+ with letters replaced from MinionPro. Sans is MyriadPro.
+ \item[msgaramond] Loads the MS-Garamond fonts. These must be system installed
+ (in \verb|C:\Windows\Fonts| in MS-Windows, in \verb|/home/user/.fonts/| in Linux
+ or elsewhere by the system administratior). Mathematics is from
+ Garamond-Math with letters replaced
+ from MS-Garamond.
+ \item[neoeuler] Loads the Concrete fonts with the Euler for Mathematics.
+ Needs euler.otf to be instaled in the TeX installation.
+ \item[palatino] Loads the Linotype Palatino Fonts available from some versions of Windows.
+ Thefonts must be system installed (in \verb|C:\Windows\Fonts| in MS-Windows,
+ in \verb|/home/user/.fonts/| in Linux or elsewhere by the system administratior). The supplied
+ fsplpscel.otf must be also
+ system-installed to allow access to Greek small caps.
+ Mathematics font is texgyrepagella-math.
+ \item[stixtwo] Loads the stix2 fonts, a Times-type font.
+ \item[times] Loads the FreeSerifb fonts, a Times font and stix2 for Mathematics
+ with letters replaced from FreeSerifb.
+ \end{description}
+
+ You do not need to load \verb|fontspec|. This, as well as \verb|unicode-math|, are
+ automatically loaded. A minimal file is
+\begin{verbatim}
+ \documentclass{article}
+ \usepackage[default]{fontsetup}
+ \begin{document}
+ ...
+ \end{document}
+\end{verbatim}
+
+The switch to another font is trivial. You just change the option of \verb|fontsetup|
+to another among the supported ones.
+
+
+\bigskip
+
+\textbf{Summary of installation steps to support all fonts}
+
+\medskip
+
+You do not have to do any of these steps if you rely on free fonts
+(except step 6 if you want to use the \verb|neoeuler| option) and do not want
+to use the commercial ones.
+
+\medskip
+
+\begin{enumerate}
+\item Install as system fonts the supplied \verb|fspmnscel.otf|
+ and \verb|fsplpscel.otf| (in \verb|C:\Windows\Fonts\| on MS-Windows or in
+ \verb|/home/user/.fonts/| in Linux or system-wide install as administrator)
+\item Repeat the previous step for all MinionPro and MyriadPro fonts from the
+ installation of the free Adobe Acrobat Reader.
+\item Repeat the above for the MS-Garamond fonts (\verb|Gara.ttf|, \verb|Garabd.ttf|
+ and \verb|Garait.ttf|) as well as for the Linotype Palatino fonts
+ found in some versions of Microsoft Windows (\verb|palabi.ttf|, \verb|palab.ttf|,
+ \verb|palai.ttf|, and \verb|pala.ttf|).
+\item Repeat the above for the Cambria fonts (\verb|cambria.ttc|, \verb|cambriab.ttf|,
+ \verb|cambriai.ttf|, \verb|cambriaz.ttf|).
+\item Install the commercial Lucida fonts (if available) in your TeX tree.
+\item Install \verb|euler.otf| in your TeX tree from
+ here: \verb|https://github.com/khaledhosny/euler-otf|
+\end{enumerate}
+
+\bigskip
+
+
+
+
+You can indeed suggest a new combination of fonts and I will add them. However, I do
+reserve the right to reject them if the font quality is bad or if Mathematics is not supported
+with a matching font.
+
+Samples follow.
+
+\newpage
+
+\begin{center}
+{\Large Cambria and CambriaMath: option \verb|cambria|}\\
+Cambria Fonts must be installed as system fonts\\[1cm]
+\includegraphics[scale=1.2]{fspsample-cambria.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large ComputerModern fonts (Book weight): option \verb|default|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-newdefault.pdf}
+\end{center}
+\newpage
+
+\begin{center}
+{\Large ComputerModern fonts (old Regular weight): option \verb|olddefault|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-cmr.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large EB-Garamond and Garamond-Math fonts: option \verb|ebgaramond|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-ebgaramond.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large Fira fonts: option \verb|fira|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-fira.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large GFSArtemisia and Stix2Math fonts: option \verb|gfsartemisia|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-gfsartemisia.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large GFSDidotClassic, GFSPorson Italic, and Garamond-Math fonts: option \verb|gfsdidotclassic|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-gfsdidotclassic.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large GFSDidot and NewCMMath-Book: option \verb|gfsdidot|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-gfsdidot.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large GFSNeohellenic and GFSNeohellenic-Math: option \verb|gfsneohellenic|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-gfsneohellenic.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large Kerkis and texgyrebonum-math: option \verb|kerkis|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-kerkis.pdf}
+\end{center}
+
+
+
+\newpage
+
+\begin{center}
+{\Large Libertinus and LibertinusMath: option \verb|libertinus|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-libertinus.pdf}
+\end{center}
+
+
+
+\newpage
+
+\begin{center}
+{\Large Lucida and Lucida-Math (commercial): option \verb|lucida|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-lucida.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large MinionPro (commercial) and Stix2Math: option \verb|minion|}\\
+MinionPro Fonts and the supplied fspmnscel.otf must
+be installed as system fonts\\[1cm]
+\includegraphics[scale=1.2]{fspsample-minion.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large MS-Garamond (commercial) and Garamond-Math: option \verb|msgaramond|}\\
+MS-Garamond Fonts must be installed as system fonts\\[1cm]
+\includegraphics[scale=1.2]{fspsample-msgaramond.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large Concrete fonts and NeoEuler Math: option \verb|neoeuler|}\\
+NeoEuler font must be installed in TeX tree\\[1cm]
+\includegraphics[scale=1.2]{fspsample-neoeuler.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large Linotype Palatino (commercial) and texgyrepagella-math: option \verb|palatino|}\\
+Linotype Palatino Fonts and the supplied fsplpscel.otf must be installed as system fonts\\[1cm]
+\includegraphics[scale=1.2]{fspsample-palatino.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large Stix2 and Stix2Math: option \verb|stixtwo|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-stixtwo.pdf}
+\end{center}
+
+\newpage
+
+\begin{center}
+{\Large FreeSerifb and Stix2Math: option \verb|times|}\\[1cm]
+\includegraphics[scale=1.2]{fspsample-times.pdf}
+\end{center}
+
+\appendix
+
+\chapter{Ancient Greek Numbers}
+The following table lists the commands and the symbol produced for the Unicode range
+\texttt{u10140--u1018E}.
+\begin{center}\enlargethispage{1cm}
+ \begin{supertabular}{|l|l||l|l|}
+ \hline
+\verb|\atticonequarter| & \atticonequarter &\verb|\hermionianfifty| & \hermionianfifty \\ \hline
+\verb|\atticonehalf| & \atticonehalf &\verb|\thespianfifty| & \thespianfifty \\ \hline
+\verb|\atticonedrachma| & \atticonedrachma &\verb|\thespianonehundred| & \thespianonehundred \\ \hline
+\verb|\atticfive| & \atticfive &\verb|\thespianthreehundred| & \thespianthreehundred \\ \hline
+\verb|\atticfifty| & \atticfifty &\verb|\epidaurianfivehundred| & \epidaurianfivehundred \\ \hline
+\verb|\atticfivehundred| & \atticfivehundred &\verb|\troezenianfivehundred| & \troezenianfivehundred \\ \hline
+\verb|\atticfivethousand| & \atticfivethousand &\verb|\thespianfivehundred| & \thespianfivehundred \\ \hline
+\verb|\atticfiftythousand| & \atticfiftythousand &\verb|\carystianfivehundred| & \carystianfivehundred \\ \hline
+\verb|\atticfivetalents| & \atticfivetalents &\verb|\naxianfivehundred| & \naxianfivehundred \\ \hline
+\verb|\attictentalents| & \attictentalents &\verb|\thespianonethousand| & \thespianonethousand \\ \hline
+\verb|\atticfiftytalents| & \atticfiftytalents &\verb|\thespianfivethousand| & \thespianfivethousand \\ \hline
+\verb|\atticonehundredtalents| & \atticonehundredtalents &\verb|\delphicfivemnas| & \delphicfivemnas \\ \hline
+\verb|\atticfivehundredtalents| & \atticfivehundredtalents &\verb|\stratianfiftymnas| & \stratianfiftymnas \\ \hline
+\verb|\atticonethousandtalents| & \atticonethousandtalents &\verb|\greekonehalfsign| & \greekonehalfsign \\ \hline
+\verb|\atticfivethousandtalents| & \atticfivethousandtalents &\verb|\greekonehalfsignalt| & \greekonehalfsignalt \\ \hline
+\verb|\atticfivestaters| & \atticfivestaters &\verb|\greektwothirdssign| & \greektwothirdssign \\ \hline
+\verb|\attictenstaters| & \attictenstaters &\verb|\greekthreequarterssign| & \greekthreequarterssign \\ \hline
+\verb|\atticfiftystaters| & \atticfiftystaters &\verb|\greekyearsign| & \greekyearsign \\ \hline
+\verb|\atticonehundredstaters| & \atticonehundredstaters &\verb|\greektalentsign| & \greektalentsign \\ \hline
+\verb|\atticfivehundredstaters| & \atticfivehundredstaters &\verb|\greekdrachmasign| & \greekdrachmasign \\ \hline
+\verb|\atticonethousandstaters| & \atticonethousandstaters &\verb|\greekobolsign| & \greekobolsign \\ \hline
+\verb|\attictenthousandstaters| & \attictenthousandstaters &\verb|\greektwoobolssign| & \greektwoobolssign \\ \hline
+\verb|\atticfiftythousandstaters| & \atticfiftythousandstaters &\verb|\greekthreeobolssign| & \greekthreeobolssign \\ \hline
+\verb|\attictenmnas| & \attictenmnas &\verb|\greekfourobolssign| & \greekfourobolssign \\ \hline
+\verb|\heraleumoneplethron| & \heraleumoneplethron &\verb|\greekfiveobolssign| & \greekfiveobolssign \\ \hline
+\verb|\thespianone| & \thespianone &\verb|\greekmetretessign| & \greekmetretessign \\ \hline
+\verb|\ermionianone| & \ermionianone &\verb|\greekkyathosbasesign| & \greekkyathosbasesign \\ \hline
+\verb|\epidauriantwo| & \epidauriantwo &\verb|\greeklytrasign| & \greeklytrasign \\ \hline
+\verb|\thespiantwo| & \thespiantwo &\verb|\greekounkiasign| & \greekounkiasign \\ \hline
+\verb|\cyrenaictwodrachmas| & \cyrenaictwodrachmas &\verb|\greekxestessign| & \greekxestessign \\ \hline
+\verb|\epidauriantwodrachmas| & \epidauriantwodrachmas &\verb|\greekartabesign| & \greekartabesign \\ \hline
+\verb|\troezenianfive| & \troezenianfive &\verb|\greekarourasign| & \greekarourasign \\ \hline
+\verb|\troezenianten| & \troezenianten &\verb|\greekgrammasign| & \greekgrammasign \\ \hline
+\verb|\troezeniantenalt| & \troezeniantenalt &\verb|\greektryblionbasesign| & \greektryblionbasesign \\ \hline
+\verb|\hermionianten| & \hermionianten &\verb|\greekzerosign| & \greekzerosign \\ \hline
+\verb|\messenianten| & \messenianten &\verb|\greekonequartersign| & \greekonequartersign \\ \hline
+\verb|\thespianten| & \thespianten &\verb|\greeksinusoidsign| & \greeksinusoidsign \\ \hline
+\verb|\thespianthirty| & \thespianthirty &\verb|\greekindictionsign| & \greekindictionsign \\ \hline
+\verb|\troezenianfifty| & \troezenianfifty &\verb|\nomismasign| & \nomismasign \\ \hline
+\verb|\troezenianfiftyalt| & \troezenianfiftyalt & & \\ \hline
+ \end{supertabular}
+\end{center}
+
+
+\end{document}
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-cambria.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-cambria.pdf
new file mode 100644
index 0000000000..f003f22208
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-cambria.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-cmr.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-cmr.pdf
new file mode 100644
index 0000000000..8423318316
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-cmr.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-ebgaramond.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-ebgaramond.pdf
new file mode 100644
index 0000000000..6084e0e3bf
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-ebgaramond.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-fira.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-fira.pdf
new file mode 100644
index 0000000000..479fecca54
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-fira.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsartemisia.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsartemisia.pdf
new file mode 100644
index 0000000000..1d1365d8ca
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsartemisia.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidot.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidot.pdf
new file mode 100644
index 0000000000..9e4ccd3545
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidot.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidotclassic.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidotclassic.pdf
new file mode 100644
index 0000000000..873efb92dc
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsdidotclassic.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsneohellenic.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsneohellenic.pdf
new file mode 100644
index 0000000000..3f1817a12e
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-gfsneohellenic.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-kerkis.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-kerkis.pdf
new file mode 100644
index 0000000000..5161451c9f
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-kerkis.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-libertinus.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-libertinus.pdf
new file mode 100644
index 0000000000..845f5cf7be
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-libertinus.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-lucida.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-lucida.pdf
new file mode 100644
index 0000000000..bebf3ceff9
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-lucida.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-minion.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-minion.pdf
new file mode 100644
index 0000000000..ef26ae6481
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-minion.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-msgaramond.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-msgaramond.pdf
new file mode 100644
index 0000000000..e411c077d6
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-msgaramond.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-neoeuler.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-neoeuler.pdf
new file mode 100644
index 0000000000..545c0d7ace
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-neoeuler.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-newdefault.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-newdefault.pdf
new file mode 100644
index 0000000000..736690886c
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-newdefault.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-palatino.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-palatino.pdf
new file mode 100644
index 0000000000..48644e576d
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-palatino.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-stixtwo.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-stixtwo.pdf
new file mode 100644
index 0000000000..bcec3a110a
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-stixtwo.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample-times.pdf b/macros/unicodetex/latex/fontsetup/doc/fspsample-times.pdf
new file mode 100644
index 0000000000..f1dea75182
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample-times.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/doc/fspsample.tex b/macros/unicodetex/latex/fontsetup/doc/fspsample.tex
new file mode 100644
index 0000000000..23ec736e02
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/doc/fspsample.tex
@@ -0,0 +1,75 @@
+%% after xelatex run
+%% pdfcrop fspsample.pdf output.pdf
+%% to crop it
+\documentclass{article}
+\pagestyle{empty}
+\usepackage{xgreek,graphicx}
+\pagestyle{empty}
+%\usepackage[greek]{babel}
+%\usepackage[utf8x]{inputenc}
+%\usepackage{amsfonts}
+
+\usepackage[default]{fontsetup}
+%\usepackage[gfsartemisia]{fontsetup}
+%\usepackage[gfsdidot]{fontsetup}
+%\usepackage[gfsdidotclassic]{fontsetup}
+%\usepackage[gfsneohellenic]{fontsetup}
+%\usepackage[cambria]{fontsetup}
+%\usepackage[lucida]{fontsetup}
+%\usepackage[kerkis]{fontsetup}
+%\usepackage[fira]{fontsetup}
+%\usepackage[times]{fontsetup}
+%\usepackage[palatino]{fontsetup}
+%\usepackage[stixtwo]{fontsetup}
+%\usepackage[neokadmus]{fontsetup}
+%\usepackage[msgaramond]{fontsetup}
+%\usepackage[ebgaramond]{fontsetup}
+%\usepackage[minion]{fontsetup}
+%\usepackage[neoeuler]{fontsetup}
+%\usepackage[libertinus]{fontsetup}
+%\usepackage[olddefault]{fontsetup}
+
+
+
+\newtheorem{theorem}{Theorem}
+\newtheorem{theoremg}[theorem]{Θεώρημα}
+
+
+\begin{document}
+
+\begin{theorem}[Dominated convergence of Lebesgue]
+%Let $g$ be an
+Assume that $g$ is an
+in\-te\-grable func\-tion defined on the measurable set $E$ and that
+ $(\,f_n)_{n\in\mathbb N}$ is a sequence of mea\-sur\-able functions so that
+ $|\,f_n|\leq g$. If $f$ is a function so that $f_n\to f$ almost everywhere
+ then $$\lim_{n\to\infty}\int f_n=\int f.$$
+\end{theorem}
+\textit{Proof}: The function $g-f_n$ is non-negative and thus from Fatou lemma
+we have that $\int(g-f\,)\leq\liminf\int(g-f_n)$. Since $|\,f\,|\leq g$ and
+$|\,f_n|\leq g$ the functions $f$ and $f_n$ are integrable and we have
+$$\int g-\int f\,\leq \int g-\limsup\int f_n,$$ so
+$$\int f\,\geq \limsup \int f_n.$$
+\par
+\begin{theoremg}[Κυριαρχημένης σύγκλισης του Lebesgue]
+ Έστω ότι
+η $g$ είναι μια ολοκληρώσιμη συνάρτηση ορισμένη στο μετρήσιμο σύνολο
+$E$ και η $(\,f_n)_{n\in\mathbb N}$ είναι μια ακολουθία μετρήσιμων συναρτήσεων ώστε
+$|\,f_n| ≤ g$. Υποθέτουμε ότι υπάρχει μια συνάρτηση $f$
+ώστε η $(f_n)_{n\in\mathbb N}$ να
+τείνει στην $f$ σχεδόν παντού. Τότε
+$$\lim \int f_n =\int f.$$
+\end{theoremg}
+\textit{Απόδειξη}: Η συνάρτηση $g − f_n$ είναι μη αρνητική και άρα από
+το Λήμμα του Fatou ισχύει
+$\int (f-g) ≤ \liminf \int (g-f_n)$. Επειδή
+$|\,f\,| ≤ g$ και $|\,f_n| ≤g$ οι $f$ και $f_n$ είναι ολοκληρώσιμες, έχουμε
+$$\int g −\int f\, ≤ \int g − \limsup\int f_n,$$
+άρα
+$$\int f\,\geq \limsup \int f_n.$$
+
+
+
+
+
+\end{document}
diff --git a/macros/unicodetex/latex/fontsetup/fontsetup.sty b/macros/unicodetex/latex/fontsetup/fontsetup.sty
new file mode 100644
index 0000000000..32ed9bc0d4
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fontsetup.sty
@@ -0,0 +1,110 @@
+%\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{fontsetup}[2019/12/20 Easy font setup by Antonis Tsolomitis]
+\typeout{fontsetup: Easy font setup by Antonis Tsolomitis}
+
+\chardef\fontsetupdefault=0 %
+\chardef\fontsetupgfsartemisia=1
+\chardef\fontsetupgfsdidot=2
+\chardef\fontsetupgfsdidotclassic=3
+\chardef\fontsetupgfsneohellenic=4
+\chardef\fontsetupcambria=5 %install cambria as a system font. cambria.ttc, cambriai.ttf, cambriab.ttf, cambriaz.ttf
+\chardef\fontsetuplucida=6 %install in TeX tree
+\chardef\fontsetupkerkis=7
+\chardef\fontsetupfira=8
+\chardef\fontsetuptimes=9
+\chardef\fontsetuppalatino=10 %install Linotype Palatino as a System font. Files pala.ttf palai, palab, palabi. Install fspPalatinoGreekSmallCaps as a System font.
+\chardef\fontsetupstixtwo=11
+\chardef\fontsetupneokadmus=12
+\chardef\fontsetupmsgaramond=13 %install Microsoft Garamond as a System font. Gara.TTF, Garai, Garabd
+\chardef\fontsetupebgaramond=14
+\chardef\fontsetupminion=15 % Install MinionPro and provided fspMinionGreekSmallCaps as a system font.
+\chardef\fontsetupneoeuler=16
+\chardef\fontsetuplibertinus=17
+\chardef\fontsetupolddefault=18 % old (thin) CMR
+
+\chardef\fontsetupfont\fontsetupdefault
+\DeclareOption{default}{\chardef\fontsetupfont\fontsetupdefault}
+\DeclareOption{gfsartemisia}{\chardef\fontsetupfont\fontsetupgfsartemisia}
+\DeclareOption{gfsdidot}{\chardef\fontsetupfont\fontsetupgfsdidot}
+\DeclareOption{gfsdidotclassic}{\chardef\fontsetupfont\fontsetupgfsdidotclassic}
+\DeclareOption{gfsneohellenic}{\chardef\fontsetupfont\fontsetupgfsneohellenic}
+\DeclareOption{cambria}{\chardef\fontsetupfont\fontsetupcambria}
+\DeclareOption{lucida}{\chardef\fontsetupfont\fontsetuplucida}
+\DeclareOption{kerkis}{\chardef\fontsetupfont\fontsetupkerkis}
+\DeclareOption{fira}{\chardef\fontsetupfont\fontsetupfira}
+\DeclareOption{times}{\chardef\fontsetupfont\fontsetuptimes}
+\DeclareOption{palatino}{\chardef\fontsetupfont\fontsetuppalatino}
+\DeclareOption{stixtwo}{\chardef\fontsetupfont\fontsetupstixtwo}
+\DeclareOption{neokadmus}{\chardef\fontsetupfont\fontsetupneokadmus}
+\DeclareOption{msgaramond}{\chardef\fontsetupfont\fontsetupmsgaramond}
+\DeclareOption{ebgaramond}{\chardef\fontsetupfont\fontsetupebgaramond}
+\DeclareOption{minion}{\chardef\fontsetupfont\fontsetupminion}
+\DeclareOption{neoeuler}{\chardef\fontsetupfont\fontsetupneoeuler}
+\DeclareOption{libertinus}{\chardef\fontsetupfont\fontsetuplibertinus}
+\DeclareOption{olddefault}{\chardef\fontsetupfont\fontsetupolddefault}
+\DeclareOption*{\PackageWarning{fontsetup}{Unknown ‘\CurrentOption’}}
+\ProcessOptions
+
+%provide a test to know if a 16bits TeX is used.
+\RequirePackage{ifthen}
+\RequirePackage{iftex}
+\newboolean{TeXUnicode}
+\ifXeTeX
+ \setboolean{TeXUnicode}{true}
+\fi
+\ifLuaTeX
+ \setboolean{TeXUnicode}{true}
+\fi
+
+
+
+\ifthenelse{\boolean{TeXUnicode}}{%
+ %The user runs unicode engine
+ \ifcase\fontsetupfont
+ \RequirePackage{fspdefault}
+\or
+ \RequirePackage{fspgfsartemisiaot}
+\or
+ \RequirePackage{fspgfsdidotot}
+\or
+ \RequirePackage{fspgfsdidotclassicot}
+\or
+ \RequirePackage{fspgfsneohellenicot}
+\or
+ \RequirePackage{fspcambria}
+\or
+ \RequirePackage{fsplucidaot}
+% \RequirePackage[usefilenames]{lucida-otf} %for some reason it fails
+\or
+ \RequirePackage{fspkerkisot}
+\or
+ \RequirePackage{fspfiraot}
+\or
+ \RequirePackage{fsptimesot}
+\or
+ \RequirePackage{fsppalatinoot}
+\or
+ \RequirePackage{fspstixtwoot}
+\or
+ \RequirePackage{neokadmus}
+\or
+ \RequirePackage{fspmsgaramondot}
+\or
+ \RequirePackage{fspebgaramondot}
+\or
+ \RequirePackage{fspminion}
+\or
+ \RequirePackage{fspneoeulerot}
+\or
+ \RequirePackage{libertinus-otf}
+\or
+ \RequirePackage{fspolddefault}
+ \fi
+}{%the user runs 8bit engine
+\relax}
+
+
+
+
+\endinput
+
diff --git a/macros/unicodetex/latex/fontsetup/fspcambria.sty b/macros/unicodetex/latex/fontsetup/fspcambria.sty
new file mode 100644
index 0000000000..b2947bb3d6
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspcambria.sty
@@ -0,0 +1,9 @@
+%%
+%% Load Cambria fonts (C) A. Tsolomitis
+%%
+\RequirePackage{fontspec}
+\setmainfont[Contextuals=AlternateOff,BoldFont=Cambria-Bold,ItalicFont=Cambria-Italic,BoldItalicFont=Cambria-BoldItalic]{Cambria}
+\RequirePackage{unicode-math}
+\setmathfont{Cambria Math}
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fspdefault.sty b/macros/unicodetex/latex/fontsetup/fspdefault.sty
new file mode 100644
index 0000000000..da0a494155
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspdefault.sty
@@ -0,0 +1,251 @@
+%% (C) Antonis Tsolomitis, GPL3.
+\RequirePackage{fontspec}
+\RequirePackage{unicode-math}
+\setmainfont[%
+ItalicFont=NewCM10-BookItalic.otf,%
+BoldFont=NewCM10-Bold.otf,%
+BoldItalicFont=NewCM10-BoldItalic.otf,%
+SlantedFont=NewCM10-Book.otf,%
+SlantedFeatures={FakeSlant=0.25},
+BoldSlantedFont=NewCM10-Bold.otf,%
+BoldSlantedFeatures={FakeSlant=0.25},
+SmallCapsFeatures={Numbers=OldStyle}]{NewCM10-Book.otf}
+
+\setsansfont[%
+ItalicFont=NewCMSans10-BookOblique.otf,%
+BoldFont=NewCMSans10-Bold.otf,%
+BoldItalicFont=NewCMSans10-BoldOblique.otf,%
+SlantedFont=NewCMSans10-BookOblique.otf,%
+BoldSlantedFont=NewCMSans10-BoldOblique.otf,%
+SmallCapsFeatures={Numbers=OldStyle}]{NewCMSans10-Book.otf}
+
+\setmonofont[%
+ItalicFont=NewCMMono10-BookItalic.otf,%
+BoldFont=NewCMMono10-Bold.otf,%
+BoldItalicFont=NewCMMono10-BoldOblique.otf,%
+SlantedFont=NewCMMono10-Book.otf,%
+SlantedFeatures={FakeSlant=0.25},
+BoldSlantedFont=NewCMMono10-Bold.otf,%
+BoldSlantedFeatures={FakeSlant=0.25},
+SmallCapsFeatures={Numbers=OldStyle}]{NewCMMono10-Book.otf}
+
+\setmathfont{NewCMMath-Book.otf}
+
+\newcommand{\tttextsc}[1]{{\ttscshape#1}}
+%
+\newcommand{\prosgegrammeni}{\addfontfeature{StylisticSet=1}}
+\newcommand{\textprosgegrammeni}[1]{{\prosgegrammeni#1}}
+%
+\newfontfamily{\ivbce}[StylisticSet=2]{NewCMSans10-Book.otf}
+\newcommand{\textivbce}[1]{{\ivbce#1}}
+%
+\newfontfamily{\ivbcealt}[StylisticSet=3]{NewCMSans10-Book.otf}
+\newcommand{\textivbcealt}[1]{{\ivbcealt#1}}
+%
+\newfontfamily{\vibce}[StylisticSet=4]{NewCMSans10-Book.otf}
+\newcommand{\textvibce}[1]{{\vibce#1}}
+%
+%% math (upright) sans Greek
+\newcommand{\msansAlpha}{\char"E000}
+\newcommand{\msansBeta}{\char"E001}
+\newcommand{\msansGamma}{\char"E002}
+\newcommand{\msansDelta}{\char"E003}
+\newcommand{\msansEpsilon}{\char"E004}
+\newcommand{\msansZeta}{\char"E005}
+\newcommand{\msansEta}{\char"E006}
+\newcommand{\msansTheta}{\char"E007}
+\newcommand{\msansIota}{\char"E008}
+\newcommand{\msansKappa}{\char"E009}
+\newcommand{\msansLambda}{\char"E00A}
+\newcommand{\msansMu}{\char"E00B}
+\newcommand{\msansNu}{\char"E00C}
+\newcommand{\msansXi}{\char"E00D}
+\newcommand{\msansOmicron}{\char"E00E}
+\newcommand{\msansPi}{\char"E00F}
+\newcommand{\msansRho}{\char"E010}
+\newcommand{\msansSigma}{\char"E011}
+\newcommand{\msansTau}{\char"E012}
+\newcommand{\msansUpsilon}{\char"E013}
+\newcommand{\msansPhi}{\char"E014}
+\newcommand{\msansChi}{\char"E015}
+\newcommand{\msansPsi}{\char"E016}
+\newcommand{\msansOmega}{\char"E017}
+\newcommand{\msansalpha}{\char"E018}
+\newcommand{\msansbeta}{\char"E019}
+\newcommand{\msansgamma}{\char"E01A}
+\newcommand{\msansdelta}{\char"E01B}
+\newcommand{\msansepsilon}{\char"E01C}
+\newcommand{\msanszeta}{\char"E01D}
+\newcommand{\msanseta}{\char"E01E}
+\newcommand{\msanstheta}{\char"E01F}
+\newcommand{\msansiota}{\char"E020}
+\newcommand{\msanskappa}{\char"E021}
+\newcommand{\msanslambda}{\char"E022}
+\newcommand{\msansmu}{\char"E023}
+\newcommand{\msansnu}{\char"E024}
+\newcommand{\msansxi}{\char"E025}
+\newcommand{\msansomicron}{\char"E026}
+\newcommand{\msanspi}{\char"E027}
+\newcommand{\msansrho}{\char"E028}
+\newcommand{\msansvarsigma}{\char"E029}
+\newcommand{\msanssigma}{\char"E02A}
+\newcommand{\msanstau}{\char"E02B}
+\newcommand{\msansupsilon}{\char"E02C}
+\newcommand{\msansphi}{\char"E02D}
+\newcommand{\msanschi}{\char"E02E}
+\newcommand{\msanspsi}{\char"E02F}
+\newcommand{\msansomega}{\char"E030}
+\newcommand{\msansvarepsilon}{\char"E031}
+% math italic sans Greek
+\newcommand{\mitsansAlpha}{\char"E041}
+\newcommand{\mitsansBeta}{\char"E042}
+\newcommand{\mitsansGamma}{\char"E043}
+\newcommand{\mitsansDelta}{\char"E044}
+\newcommand{\mitsansEpsilon}{\char"E045}
+\newcommand{\mitsansZeta}{\char"E046}
+\newcommand{\mitsansEta}{\char"E047}
+\newcommand{\mitsansTheta}{\char"E048}
+\newcommand{\mitsansIota}{\char"E049}
+\newcommand{\mitsansKappa}{\char"E04A}
+\newcommand{\mitsansLambda}{\char"E04B}
+\newcommand{\mitsansMu}{\char"E04C}
+\newcommand{\mitsansNu}{\char"E04D}
+\newcommand{\mitsansXi}{\char"E04E}
+\newcommand{\mitsansOmicron}{\char"E04F}
+\newcommand{\mitsansPi}{\char"E050}
+\newcommand{\mitsansRho}{\char"E051}
+\newcommand{\mitsansSigma}{\char"E052}
+\newcommand{\mitsansTau}{\char"E053}
+\newcommand{\mitsansUpsilon}{\char"E054}
+\newcommand{\mitsansPhi}{\char"E055}
+\newcommand{\mitsansChi}{\char"E056}
+\newcommand{\mitsansPsi}{\char"E057}
+\newcommand{\mitsansOmega}{\char"E058}
+\newcommand{\mitsansalpha}{\char"E059}
+\newcommand{\mitsansbeta}{\char"E05A}
+\newcommand{\mitsansgamma}{\char"E05B}
+\newcommand{\mitsansdelta}{\char"E05C}
+\newcommand{\mitsansepsilon}{\char"E05D}
+\newcommand{\mitsanszeta}{\char"E05E}
+\newcommand{\mitsanseta}{\char"E05F}
+\newcommand{\mitsanstheta}{\char"E060}
+\newcommand{\mitsansiota}{\char"E061}
+\newcommand{\mitsanskappa}{\char"E062}
+\newcommand{\mitsanslambda}{\char"E063}
+\newcommand{\mitsansmu}{\char"E064}
+\newcommand{\mitsansnu}{\char"E065}
+\newcommand{\mitsansxi}{\char"E066}
+\newcommand{\mitsansomicron}{\char"E067}
+\newcommand{\mitsanspi}{\char"E068}
+\newcommand{\mitsansrho}{\char"E069}
+\newcommand{\mitsansvarsigma}{\char"E06A}
+\newcommand{\mitsanssigma}{\char"E06B}
+\newcommand{\mitsanstau}{\char"E06C}
+\newcommand{\mitsansupsilon}{\char"E06D}
+\newcommand{\mitsansphi}{\char"E06E}
+\newcommand{\mitsanschi}{\char"E06F}
+\newcommand{\mitsanspsi}{\char"E070}
+\newcommand{\mitsansomega}{\char"E071}
+\newcommand{\mitsansvarepsilon}{\char"E072}
+% Ancient Greek Numerals u10140-u1018E
+\newcommand{\atticonequarter}{\char"10140}
+\newcommand{\atticonehalf}{\char"10141}
+\newcommand{\atticonedrachma}{\char"10142}
+\newcommand{\atticfive}{\char"10143}
+\newcommand{\atticfifty}{\char"10144}
+\newcommand{\atticfivehundred}{\char"10145}
+\newcommand{\atticfivethousand}{\char"10146}
+\newcommand{\atticfiftythousand}{\char"10147}
+\newcommand{\atticfivetalents}{\char"10148}
+\newcommand{\attictentalents}{\char"10149}
+\newcommand{\atticfiftytalents}{\char"1014A}
+\newcommand{\atticonehundredtalents}{\char"1014B}
+\newcommand{\atticfivehundredtalents}{\char"1014C}
+\newcommand{\atticonethousandtalents}{\char"1014D}
+\newcommand{\atticfivethousandtalents}{\char"1014E}
+\newcommand{\atticfivestaters}{\char"1014F}
+\newcommand{\attictenstaters}{\char"10150}
+\newcommand{\atticfiftystaters}{\char"10151}
+\newcommand{\atticonehundredstaters}{\char"10152}
+\newcommand{\atticfivehundredstaters}{\char"10153}
+\newcommand{\atticonethousandstaters}{\char"10154}
+\newcommand{\attictenthousandstaters}{\char"10155}
+\newcommand{\atticfiftythousandstaters}{\char"10156}
+\newcommand{\attictenmnas}{\char"10157}
+\newcommand{\heraleumoneplethron}{\char"10158}
+\newcommand{\thespianone}{\char"10159}
+\newcommand{\ermionianone}{\char"1015A}
+\newcommand{\epidauriantwo}{\char"1015B}
+\newcommand{\thespiantwo}{\char"1015C}
+\newcommand{\cyrenaictwodrachmas}{\char"1015D}
+\newcommand{\epidauriantwodrachmas}{\char"1015E}
+\newcommand{\troezenianfive}{\char"1015F}
+\newcommand{\troezenianten}{\char"10160}
+\newcommand{\troezeniantenalt}{\char"10161}
+\newcommand{\hermionianten}{\char"10162}
+\newcommand{\messenianten}{\char"10163}
+\newcommand{\thespianten}{\char"10164}
+\newcommand{\thespianthirty}{\char"10165}
+\newcommand{\troezenianfifty}{\char"10166}
+\newcommand{\troezenianfiftyalt}{\char"10167}
+\newcommand{\hermionianfifty}{\char"10168}
+\newcommand{\thespianfifty}{\char"10169}
+\newcommand{\thespianonehundred}{\char"1016A}
+\newcommand{\thespianthreehundred}{\char"1016B}
+\newcommand{\epidaurianfivehundred}{\char"1016C}
+\newcommand{\troezenianfivehundred}{\char"1016D}
+\newcommand{\thespianfivehundred}{\char"1016E}
+\newcommand{\carystianfivehundred}{\char"1016F}
+\newcommand{\naxianfivehundred}{\char"10170}
+\newcommand{\thespianonethousand}{\char"10171}
+\newcommand{\thespianfivethousand}{\char"10172}
+\newcommand{\delphicfivemnas}{\char"10173}
+\newcommand{\stratianfiftymnas}{\char"10174}
+\newcommand{\greekonehalfsign}{\char"10175}
+\newcommand{\greekonehalfsignalt}{\char"10176}
+\newcommand{\greektwothirdssign}{\char"10177}
+\newcommand{\greekthreequarterssign}{\char"10178}
+\newcommand{\greekyearsign}{\char"10179}
+\newcommand{\greektalentsign}{\char"1017A}
+\newcommand{\greekdrachmasign}{\char"1017B}
+\newcommand{\greekobolsign}{\char"1017C}
+\newcommand{\greektwoobolssign}{\char"1017D}
+\newcommand{\greekthreeobolssign}{\char"1017E}
+\newcommand{\greekfourobolssign}{\char"1017F}
+\newcommand{\greekfiveobolssign}{\char"10180}
+\newcommand{\greekmetretessign}{\char"10181}
+\newcommand{\greekkyathosbasesign}{\char"10182}
+\newcommand{\greeklytrasign}{\char"10183}
+\newcommand{\greekounkiasign}{\char"10184}
+\newcommand{\greekxestessign}{\char"10185}
+\newcommand{\greekartabesign}{\char"10186}
+\newcommand{\greekarourasign}{\char"10187}
+\newcommand{\greekgrammasign}{\char"10188}
+\newcommand{\greektryblionbasesign}{\char"10189}
+\newcommand{\greekzerosign}{\char"1018A}
+\newcommand{\greekonequartersign}{\char"1018B}
+\newcommand{\greeksinusoidsign}{\char"1018C}
+\newcommand{\greekindictionsign}{\char"1018D}
+\newcommand{\nomismasign}{\char"1018E}
+%
+% some math symbols
+\DeclareRobustCommand\nrightrightarrows{\mathrel{\char"E033}}
+\DeclareRobustCommand\nleftleftarrows{\mathrel{\char"E032}}
+%
+% select ss02 lookup table for IPA symbols
+\newfontfamily{\ipatext}[StylisticSet=5,%
+BoldFont=NewCM10-Bold.otf,%
+SlantedFont=NewCM10-Regular.otf,%
+SlantedFeatures={FakeSlant=0.25},
+BoldSlantedFont=NewCM10-Bold.otf,%
+BoldSlantedFeatures={FakeSlant=0.25},
+SmallCapsFeatures={Numbers=OldStyle}]{NewCM10-Book.otf}
+\newcommand{\textipa}[1]{{\ipatext#1}}
+\newfontfamily{\ipatextsans}[StylisticSet=5,%
+ItalicFont=NewCMSans10-BookOblique.otf,%
+BoldFont=NewCMSans10-Bold.otf,%
+BoldItalicFont=NewCMSans10-BoldOblique.otf,%
+SlantedFont=NewCMSans10-Oblique.otf,%
+BoldSlantedFont=NewCMSans10-BoldOblique.otf,%
+SmallCapsFeatures={Numbers=OldStyle}]{NewCMSans10-Book.otf}
+\newcommand{\textsansipa}[1]{{\ipatextsans#1}}
diff --git a/macros/unicodetex/latex/fontsetup/fspebgaramondot.sty b/macros/unicodetex/latex/fontsetup/fspebgaramondot.sty
new file mode 100644
index 0000000000..a819513535
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspebgaramondot.sty
@@ -0,0 +1,12 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+\setmainfont[ItalicFont=EBGaramond-Italic.otf,
+BoldFont=EBGaramond-Bold.otf,
+BoldItalicFont=EBGaramond-BoldItalic.otf,SmallCapsFeatures={Numbers=OldStyle}]{EBGaramond-Regular.otf}
+
+\RequirePackage{unicode-math}
+\setmathfont{Garamond-Math.otf}
+
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fspfiraot.sty b/macros/unicodetex/latex/fontsetup/fspfiraot.sty
new file mode 100644
index 0000000000..172bf45dab
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspfiraot.sty
@@ -0,0 +1,26 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+\setmainfont[%
+ItalicFont=FiraSans-Italic.otf,%
+BoldFont=FiraSans-Bold.otf,
+BoldItalicFont=FiraSans-BookItalic.otf,%
+SmallCapsFeatures={Numbers=OldStyle}%
+]{FiraSans-Regular.otf}
+
+\setsansfont[%
+ItalicFont=FiraSans-Italic.otf,%
+BoldFont=FiraSans-Bold.otf,%
+BoldItalicFont=FiraSans-BookItalic.otf,%
+SmallCapsFeatures={Numbers=OldStyle}%
+]{FiraSans-Regular.otf}
+
+\setmonofont[ItalicFont=FiraMono-Regular.otf,ItalicFeatures={FakeSlant=0.2},%
+BoldFont=FiraMono-Bold.otf,%
+BoldItalicFont=FiraMono-Bold.otf,BoldItalicFeatures={FakeSlant=0.2}%
+]{FiraMono-Regular.otf}
+
+\RequirePackage{unicode-math}
+\setmathfont{FiraMath-Regular.otf}
+
+\endinput \ No newline at end of file
diff --git a/macros/unicodetex/latex/fontsetup/fspgfsartemisiaot.sty b/macros/unicodetex/latex/fontsetup/fspgfsartemisiaot.sty
new file mode 100644
index 0000000000..c4dc761f87
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspgfsartemisiaot.sty
@@ -0,0 +1,16 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+\setmainfont[ItalicFont=GFSArtemisiaIt.otf,
+BoldFont=GFSArtemisiaBold.otf,
+BoldItalicFont=GFSArtemisiaBoldIt.otf,SmallCapsFeatures={Numbers=OldStyle}]{GFSArtemisia.otf}
+
+\RequirePackage{unicode-math}
+%\setmathfont{XITSMath-Regular.otf}
+\setmathfont{STIX2Math.otf}
+\setmathfont[range=\mathup/{num,latin,Latin,greek,Greek}]{GFSArtemisia.otf}
+\setmathfont[range=\mathbfup/{num,latin,Latin,greek,Greek}]{GFSArtemisiaBold.otf}
+\setmathfont[range=\mathit/{num,latin,Latin,greek,Greek}]{GFSArtemisiaIt.otf}
+\setmathfont[range=\mathbfit/{num,latin,Latin,greek,Greek}]{GFSArtemisiaBoldIt.otf}
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fspgfsdidotclassicot.sty b/macros/unicodetex/latex/fontsetup/fspgfsdidotclassicot.sty
new file mode 100644
index 0000000000..d1f26d14c7
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspgfsdidotclassicot.sty
@@ -0,0 +1,24 @@
+%\RequirePackage[no-math]{fontspec}
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+%\RequirePackage[garamond]{mathdesign}
+
+
+%\newfontfamily{\defaultfont}[Scale=1.087,ItalicFont=GFSDidot_Classic,ItalicFeatures={FakeSlant=0.2},BoldFont=GFSDidot_Classic,BoldFeatures={FakeBold=2},BoldItalicFont=GFSDidot_Classic,BoldItalicFeatures={FakeSlant=0.2,FakeBold=2}]{GFSDidot_Classic.otf}
+
+\newfontfamily{\defaultfont}[Scale=1.05,
+ ItalicFont=GFSPorson,ItalicFeatures={FakeSlant=0.1,FakeStretch=.92},BoldFont=GFSDidot_Classic,BoldFeatures={FakeBold=1.4,LetterSpace=2},BoldItalicFont=GFSPorson,BoldItalicFeatures={FakeBold=1.4,FakeStretch=.92,FakeSlant=0.1,LetterSpace=2}]{GFSDidot_Classic.otf}
+
+\newfontfamily{\latinfont}[ItalicFont=ugmri8a,BoldFont=ugmm8a,BoldItalicFont=ugmmi8a]{ugmr8a.otf}
+\RequirePackage[Latin, Greek]{ucharclasses}
+\setDefaultTransitions{\defaultfont}{}
+
+\setTransitionsForLatin{\latinfont}{}
+\setTransitionsForGreek{\defaultfont}{}
+
+\RequirePackage{unicode-math}
+\setmathfont{Garamond-Math.otf}
+
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fspgfsdidotot.sty b/macros/unicodetex/latex/fontsetup/fspgfsdidotot.sty
new file mode 100644
index 0000000000..f8c312c02c
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspgfsdidotot.sty
@@ -0,0 +1,49 @@
+
+\RequirePackage{fontspec}
+
+\setmainfont[ItalicFont=GFSOlga,
+ BoldFont=GFSDidotBold,
+ BoldItalicFont=GFSDidotBoldItalic,SlantedFont=GFSDidotItalic,
+ SmallCapsFeatures={Numbers=OldStyle}]{GFSDidot.otf}
+\newfontfamily{\GFSDidotoSubstFont}[%
+ ItalicFont=GFSDidotItalic,
+ BoldFont=GFSDidotBold,
+ BoldItalicFont=GFSDidotBoldItalic,
+ SmallCapsFeatures={Numbers=OldStyle}]{GFSDidot.otf}
+
+
+\RequirePackage{unicode-math}
+%\setmathfont{XITSMath-Regular.otf}
+\setmathfont{NewCMMath-Book.otf}
+\setmathfont[range=\mathup/{num,latin,Latin,greek,Greek}]{GFSDidot.otf}
+\setmathfont[range=\mathbfup/{num,latin,Latin,greek,Greek}]{GFSDidotBold.otf}
+\setmathfont[range=\mathit/{greek,Greek}]{GFSOlga.otf}
+\setmathfont[range=\mathit/{num,latin,Latin}]{GFSDidotItalic.otf}
+\setmathfont[range=\mathbfit/{num,latin,Latin,greek,Greek}]{GFSDidotBoldItalic.otf}
+
+%% the next code replaces non-existent Olga Latin with GFSDidotItalic Latin
+\XeTeXinterchartokenstate=1%
+\newXeTeXintercharclass\GFSDidotoSubst%
+\count255="0021%
+\loop\ifnum\count255<"0341%
+ \XeTeXcharclass\count255=\GFSDidotoSubst%
+ \advance\count255 by 1%
+\repeat%
+\XeTeXinterchartoks 0 \GFSDidotoSubst = {\begingroup\GFSDidotoSubstFont}%
+\XeTeXinterchartoks 4095 \GFSDidotoSubst = {\begingroup\GFSDidotoSubstFont}%
+\XeTeXinterchartoks \GFSDidotoSubst 0 = {\endgroup}%
+\XeTeXinterchartoks \GFSDidotoSubst 4095 = {\endgroup}%
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%% Fix epsilons %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\AtBeginDocument{\renewcommand{\epsilon}{\textit{ε}}
+\renewcommand{\varepsilon}{\textsl{ε}}}
+%%%%%%%%% Fix phi %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\newfontfamily\phifix[Scale=1.2]{GFSDidotItalic.otf}
+\AtBeginDocument{\renewcommand{\phi}{\textrm{\phifix\char"03D5}}}
+%%%%%%%%% Fix theta %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+\AtBeginDocument{\renewcommand{\theta}{\textsl{θ}}
+\renewcommand{\vartheta}{\textit{θ}}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fspgfsneohellenicot.sty b/macros/unicodetex/latex/fontsetup/fspgfsneohellenicot.sty
new file mode 100644
index 0000000000..76e0d0a653
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspgfsneohellenicot.sty
@@ -0,0 +1,53 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+\RequirePackage{fontspec}
+
+\setmainfont[% main font
+ UprightFont=GFSNeohellenic,
+ ItalicFont=GFSNeohellenicIt,
+ BoldFont=GFSNeohellenicBold,
+ BoldItalicFont=GFSNeohellenicBoldIt,
+ RawFeature=+pnum,% variable width numbers
+ WordSpace={0.75,0.75,1},%
+ Scale=1.2,%use instead of 12pt
+SmallCapsFeatures={Numbers=OldStyle,WordSpace={0.75,0.75,1},LetterSpace=0.06}]{GFSNeohellenic.otf}
+%\renewfontfamily\scshape[%
+% RawFeature=+smcp,RawFeature=+onum,WordSpace={0.75,0.75,1},LetterSpace=0.06,%
+% Scale=1.2%use instead of 12pt
+%]{GFSNeohellenic.otf}
+
+
+\RequirePackage{unicode-math}
+\setmathfont[%
+ Scale=1.2%use instead of 12pt
+]{GFSNeohellenicMath.otf}
+
+\renewcommand{\baselinestretch}{1.086} %~1/0.92, use when at 10pt scaled by 1.2
+
+%%%%%%%%% special symbols %%%%%%%%%%%%%%%%%%%%%
+%fixes the delimiters so that all big sizes appear. TeX default is 5pt.
+% run texdoc mathmode and check the "problems with parentheses" section
+%\delimitershortfall=1pt
+%\newcommand{\myvarnothing}{\symbol{"E000}}
+\let\varnothing\undefined
+\let\emptyset\undefined
+\AtBeginDocument{
+\def\varnothing{\symbol{"E000}}%
+\def\emptyset{\symbol{"2205}}}
+\DeclareRobustCommand\nrightrightarrows{\mathrel{\char"2B5A}}
+\DeclareRobustCommand\nleftleftarrows{\mathrel{\char"2B5B}}
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%\let\bigint\undefined
+\DeclareRobustCommand\smallprod{\mathop{\char"2B5E}\nolimits}
+\DeclareRobustCommand\smallcoprod{\mathop{\char"2B5F}\nolimits}
+\DeclareRobustCommand\smallsum{\mathop{\char"2B60}\nolimits}
+\DeclareRobustCommand\smallint{\mathop{\char"2B61}\nolimits}
+\DeclareRobustCommand\Bigint{\mathop{\char"2B62}\nolimits}
+\DeclareRobustCommand\biggint{\mathop{\char"2B63}\nolimits}
+\DeclareRobustCommand\Biggint{\mathop{\char"2B64}\nolimits}
+\DeclareRobustCommand\bigggint{\mathop{\char"2B65}\nolimits}
+
+
+\renewcommand{\LaTeX}{L\kern-.75ex\raisebox{.7ex}{\textsc{a}}\kern-.1ex\hbox{T}\kern-.4ex\raisebox{-.5ex}{E}\kern-.3exX}
+
+\endinput \ No newline at end of file
diff --git a/macros/unicodetex/latex/fontsetup/fspkerkisot.sty b/macros/unicodetex/latex/fontsetup/fspkerkisot.sty
new file mode 100644
index 0000000000..8315fa6f9e
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspkerkisot.sty
@@ -0,0 +1,15 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+\setmainfont[ItalicFont=Kerkis-Italic.otf,
+BoldFont=Kerkis-Bold.otf,
+BoldItalicFont=Kerkis-BoldItalic.otf,SmallCapsFont=Kerkis-SmallCaps.otf]{Kerkis.otf}
+
+\setsansfont[ItalicFont=KerkisSans-Italic.otf,
+BoldFont=KerkisSans-Bold.otf,
+BoldItalicFont=KerkisSans-BoldItalic.otf,SmallCapsFont=KerkisSans-SmallCaps.otf]{KerkisSans.otf}
+
+\RequirePackage{unicode-math}
+\setmathfont{texgyrebonum-math.otf}
+
+\endinput \ No newline at end of file
diff --git a/macros/unicodetex/latex/fontsetup/fsplucidaot.sty b/macros/unicodetex/latex/fontsetup/fsplucidaot.sty
new file mode 100644
index 0000000000..2287f48685
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fsplucidaot.sty
@@ -0,0 +1,28 @@
+\RequirePackage{fontspec}
+\setmainfont[% main font
+ UprightFont=LucidaBrightOT,
+ ItalicFont=LucidaBrightOT-Italic,
+ BoldFont=LucidaBrightOT-Demi,
+ BoldItalicFont=LucidaBrightOT-DemiItalic,
+ SmallCapsFeatures={Numbers=OldStyle},
+ ]{LucidaBrightOT.otf}
+\setsansfont[%
+ UprightFont=LucidaSansOT,
+ ItalicFont=LucidaSansOT-Italic,
+ BoldFont=LucidaSansOT-Demi,
+ BoldItalicFont=LucidaSansOT-DemiItalic,
+ SmallCapsFeatures={Numbers=OldStyle},
+]{LucidaSansOT.otf}
+%
+\setmonofont[%
+ UprightFont=LucidaSansTypewriterOT,
+ ItalicFont=LucidaSansTypewriterOT-Oblique,
+ BoldFont=LucidaSansTypewriterOT-Bold,
+ BoldItalicFont=LucidaSansTypewriterOT-BoldOblique,
+ SmallCapsFeatures={Numbers=OldStyle},
+ ]{LucidaSansTypewriterOT.otf}
+% support for OpenType math fonts:
+\RequirePackage{unicode-math}
+\setmathfont{LucidaBrightMathOT.otf}
+\setmathfont[version=bold]{LucidaBrightMathOT-Demi.otf}
+
diff --git a/macros/unicodetex/latex/fontsetup/fspminion.sty b/macros/unicodetex/latex/fontsetup/fspminion.sty
new file mode 100644
index 0000000000..f39448227f
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspminion.sty
@@ -0,0 +1,20 @@
+
+
+
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+\setmainfont[SmallCapsFeatures={Numbers=OldStyle}]{Minion Pro}
+\setsansfont[SmallCapsFeatures={Numbers=OldStyle}]{Myriad Pro}
+\newfontfamily{\defaultfont}[SmallCapsFeatures={Numbers=OldStyle}]{Minion Pro}
+\newfontfamily{\greekfont}[SmallCapsFont=fspmnscel]{Minion Pro}
+\RequirePackage[Latin, Greek]{ucharclasses}
+\setDefaultTransitions{\defaultfont}{}
+\setTransitionsForLatin{\defaultfont}{}
+\setTransitionsForGreek{\greekfont}{}
+
+\RequirePackage{unicode-math}
+\setmathfont{STIX2Math.otf}
+\setmathfont[range=\mathup/{num,latin,Latin,greek,Greek}]{Minion Pro}
+\setmathfont[range=\mathbfup/{num,latin,Latin,greek,Greek}]{Minion Pro Bold}
+\setmathfont[range=\mathit/{num,latin,Latin,greek,Greek}]{Minion Pro Italic}
+\setmathfont[range=\mathbfit/{num,latin,Latin,greek,Greek}]{Minion Pro Bold Italic}
diff --git a/macros/unicodetex/latex/fontsetup/fspmsgaramondot.sty b/macros/unicodetex/latex/fontsetup/fspmsgaramondot.sty
new file mode 100644
index 0000000000..3d3907cb8b
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspmsgaramondot.sty
@@ -0,0 +1,23 @@
+%\RequirePackage[no-math]{fontspec}
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+%\RequirePackage[garamond]{mathdesign}
+
+
+\newfontfamily{\defaultfont}{Garamond}
+\newfontfamily{\greekfont}{Garamond}
+
+\RequirePackage[Latin, Greek]{ucharclasses}
+\setDefaultTransitions{\defaultfont}{}
+\setTransitionsForLatin{\defaultfont}{}
+\setTransitionsForGreek{\greekfont}{}
+
+\RequirePackage{unicode-math}
+\setmathfont{Garamond-Math.otf}
+\setmathfont[range=\mathup/{num,latin,Latin,greek,Greek}]{Garamond}
+\setmathfont[range=\mathbfup/{num,latin,Latin,greek,Greek}]{Garamond Bold}
+\setmathfont[range=\mathit/{num,latin,Latin,greek,Greek}]{Garamond Italic}
+\setmathfont[range=\mathbfit/{num,latin,Latin,greek,Greek}]{Garamond Bold}
+
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fspneoeulerot.sty b/macros/unicodetex/latex/fontsetup/fspneoeulerot.sty
new file mode 100644
index 0000000000..725686c3a8
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspneoeulerot.sty
@@ -0,0 +1,41 @@
+\RequirePackage{fontspec}
+\RequirePackage{unicode-math}
+%\unimathsetup{math-style=upright}
+\setmainfont[ItalicFont=cmunoti.otf,
+ BoldFont=cmunobx.otf,
+ BoldItalicFont=cmunobi.otf,
+ % RawFeature=+pnum,% variable width numbers
+SmallCapsFeatures={Numbers=OldStyle}]{cmunorm.otf}
+\defaultfontfeatures{Scale=MatchLowercase}
+\setmathfont{LibertinusMath-Regular.otf}
+\setmathfont[range={"0000-"0001,"0020-"007E,
+ "00A0,"00A7-"00A8,"00AC,"00AF,"00B1,"00B4-"00B5,"00B7,
+ "00D7,"00F7,
+ "0131,
+ "0237,"02C6-"02C7,"02D8-"02DA,"02DC,
+ "0300-"030C,"030F,"0311,"0323-"0325,"032E-"0332,"0338,
+ "0391-"0393,"0395-"03A1,"03A3-"03A8,"03B1-"03BB,
+ "03BD-"03C1,"03C3-"03C9,"03D1,"03D5-"03D6,"03F5,
+ "2016,"2018-"2019,"2021,"2026-"202C,"2032-"2037,"2044,
+ "2057,"20D6-"20D7,"20DB-"20DD,"20E1,"20EE-"20EF,
+ "210B-"210C,"210E-"2113,"2118,"211B-"211C,"2126-"2128,
+ "212C-"212D,"2130-"2131,"2133,"2135,"2190-"2199,
+ "21A4,"21A6,"21A9-"21AA,"21BC-"21CC,"21D0-"21D5,
+ "2200,"2202-"2209,"220B-"220C,"220F-"2213,"2215-"221E,
+ "2223,"2225,"2227-"222E,"2234-"2235,"2237-"223D,
+ "2240-"224C,"2260-"2269,"226E-"2279,"2282-"228B,"228E,
+ "2291-"2292,"2295-"2299,"22A2-"22A5,"22C0-"22C5,
+ "22DC-"22DD,"22EF,"22F0-"22F1,
+ "2308-"230B,"2320-"2321,"2329-"232A,"239B-"23AE,
+ "23DC-"23DF,
+ "27E8-"27E9,"27F5-"27FE,"2A0C,"2B1A,
+ "1D400-"1D433,"1D49C,"1D49E-"1D49F,"1D4A2,"1D4A5-"1D4A6,
+ "1D4A9-"1D4AC,"1D4AE-"1D4B5,"1D4D0-"1D4E9,"1D504-"1D505,
+ "1D507-"1D50A,"1D50D-"1D514,"1D516-"1D51C,"1D51E-"1D537,
+ "1D56C-"1D59F,"1D6A8-"1D6B8,"1D6BA-"1D6D2,"1D6D4-"1D6DD,
+ "1D6DF,"1D6E1,"1D7CE-"1D7D7
+ }]{euler.otf}
+\setmathfont[range=up/{greek,Greek}, script-features={}, sscript-features={}
+ ]{euler.otf}
+\setmathfont[range=up/{latin,Latin,num}, script-features={}, sscript-features={}
+ ]{euler.otf}
diff --git a/macros/unicodetex/latex/fontsetup/fspolddefault.sty b/macros/unicodetex/latex/fontsetup/fspolddefault.sty
new file mode 100644
index 0000000000..1c52a8ff0c
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspolddefault.sty
@@ -0,0 +1,251 @@
+%% (C) Antonis Tsolomitis, GPL3.
+\RequirePackage{fontspec}
+\RequirePackage{unicode-math}
+\setmainfont[%
+ItalicFont=NewCM10-Italic.otf,%
+BoldFont=NewCM10-Bold.otf,%
+BoldItalicFont=NewCM10-BoldItalic.otf,%
+SlantedFont=NewCM10-Regular.otf,%
+SlantedFeatures={FakeSlant=0.25},
+BoldSlantedFont=NewCM10-Bold.otf,%
+BoldSlantedFeatures={FakeSlant=0.25},
+SmallCapsFeatures={Numbers=OldStyle}]{NewCM10-Regular.otf}
+
+\setsansfont[%
+ItalicFont=NewCMSans10-Oblique.otf,%
+BoldFont=NewCMSans10-Bold.otf,%
+BoldItalicFont=NewCMSans10-BoldOblique.otf,%
+SlantedFont=NewCMSans10-Oblique.otf,%
+BoldSlantedFont=NewCMSans10-BoldOblique.otf,%
+SmallCapsFeatures={Numbers=OldStyle}]{NewCMSans10-Regular.otf}
+
+\setmonofont[%
+ItalicFont=NewCMMono10-Italic.otf,%
+BoldFont=NewCMMono10-Bold.otf,%
+BoldItalicFont=NewCMMono10-BoldOblique.otf,%
+SlantedFont=NewCMMono10-Regular.otf,%
+SlantedFeatures={FakeSlant=0.25},
+BoldSlantedFont=NewCMMono10-Bold.otf,%
+BoldSlantedFeatures={FakeSlant=0.25},
+SmallCapsFeatures={Numbers=OldStyle}]{NewCMMono10-Regular.otf}
+
+\setmathfont{NewCMMath-Regular.otf}
+
+\newcommand{\tttextsc}[1]{{\ttscshape#1}}
+%
+\newcommand{\prosgegrammeni}{\addfontfeature{StylisticSet=1}}
+\newcommand{\textprosgegrammeni}[1]{{\prosgegrammeni#1}}
+%
+\newfontfamily{\ivbce}[StylisticSet=2]{NewCMSans10-Regular.otf}
+\newcommand{\textivbce}[1]{{\ivbce#1}}
+%
+\newfontfamily{\ivbcealt}[StylisticSet=3]{NewCMSans10-Regular.otf}
+\newcommand{\textivbcealt}[1]{{\ivbcealt#1}}
+%
+\newfontfamily{\vibce}[StylisticSet=4]{NewCMSans10-Regular.otf}
+\newcommand{\textvibce}[1]{{\vibce#1}}
+%
+%% math (upright) sans Greek
+\newcommand{\msansAlpha}{\char"E000}
+\newcommand{\msansBeta}{\char"E001}
+\newcommand{\msansGamma}{\char"E002}
+\newcommand{\msansDelta}{\char"E003}
+\newcommand{\msansEpsilon}{\char"E004}
+\newcommand{\msansZeta}{\char"E005}
+\newcommand{\msansEta}{\char"E006}
+\newcommand{\msansTheta}{\char"E007}
+\newcommand{\msansIota}{\char"E008}
+\newcommand{\msansKappa}{\char"E009}
+\newcommand{\msansLambda}{\char"E00A}
+\newcommand{\msansMu}{\char"E00B}
+\newcommand{\msansNu}{\char"E00C}
+\newcommand{\msansXi}{\char"E00D}
+\newcommand{\msansOmicron}{\char"E00E}
+\newcommand{\msansPi}{\char"E00F}
+\newcommand{\msansRho}{\char"E010}
+\newcommand{\msansSigma}{\char"E011}
+\newcommand{\msansTau}{\char"E012}
+\newcommand{\msansUpsilon}{\char"E013}
+\newcommand{\msansPhi}{\char"E014}
+\newcommand{\msansChi}{\char"E015}
+\newcommand{\msansPsi}{\char"E016}
+\newcommand{\msansOmega}{\char"E017}
+\newcommand{\msansalpha}{\char"E018}
+\newcommand{\msansbeta}{\char"E019}
+\newcommand{\msansgamma}{\char"E01A}
+\newcommand{\msansdelta}{\char"E01B}
+\newcommand{\msansepsilon}{\char"E01C}
+\newcommand{\msanszeta}{\char"E01D}
+\newcommand{\msanseta}{\char"E01E}
+\newcommand{\msanstheta}{\char"E01F}
+\newcommand{\msansiota}{\char"E020}
+\newcommand{\msanskappa}{\char"E021}
+\newcommand{\msanslambda}{\char"E022}
+\newcommand{\msansmu}{\char"E023}
+\newcommand{\msansnu}{\char"E024}
+\newcommand{\msansxi}{\char"E025}
+\newcommand{\msansomicron}{\char"E026}
+\newcommand{\msanspi}{\char"E027}
+\newcommand{\msansrho}{\char"E028}
+\newcommand{\msansvarsigma}{\char"E029}
+\newcommand{\msanssigma}{\char"E02A}
+\newcommand{\msanstau}{\char"E02B}
+\newcommand{\msansupsilon}{\char"E02C}
+\newcommand{\msansphi}{\char"E02D}
+\newcommand{\msanschi}{\char"E02E}
+\newcommand{\msanspsi}{\char"E02F}
+\newcommand{\msansomega}{\char"E030}
+\newcommand{\msansvarepsilon}{\char"E031}
+% math italic sans Greek
+\newcommand{\mitsansAlpha}{\char"E041}
+\newcommand{\mitsansBeta}{\char"E042}
+\newcommand{\mitsansGamma}{\char"E043}
+\newcommand{\mitsansDelta}{\char"E044}
+\newcommand{\mitsansEpsilon}{\char"E045}
+\newcommand{\mitsansZeta}{\char"E046}
+\newcommand{\mitsansEta}{\char"E047}
+\newcommand{\mitsansTheta}{\char"E048}
+\newcommand{\mitsansIota}{\char"E049}
+\newcommand{\mitsansKappa}{\char"E04A}
+\newcommand{\mitsansLambda}{\char"E04B}
+\newcommand{\mitsansMu}{\char"E04C}
+\newcommand{\mitsansNu}{\char"E04D}
+\newcommand{\mitsansXi}{\char"E04E}
+\newcommand{\mitsansOmicron}{\char"E04F}
+\newcommand{\mitsansPi}{\char"E050}
+\newcommand{\mitsansRho}{\char"E051}
+\newcommand{\mitsansSigma}{\char"E052}
+\newcommand{\mitsansTau}{\char"E053}
+\newcommand{\mitsansUpsilon}{\char"E054}
+\newcommand{\mitsansPhi}{\char"E055}
+\newcommand{\mitsansChi}{\char"E056}
+\newcommand{\mitsansPsi}{\char"E057}
+\newcommand{\mitsansOmega}{\char"E058}
+\newcommand{\mitsansalpha}{\char"E059}
+\newcommand{\mitsansbeta}{\char"E05A}
+\newcommand{\mitsansgamma}{\char"E05B}
+\newcommand{\mitsansdelta}{\char"E05C}
+\newcommand{\mitsansepsilon}{\char"E05D}
+\newcommand{\mitsanszeta}{\char"E05E}
+\newcommand{\mitsanseta}{\char"E05F}
+\newcommand{\mitsanstheta}{\char"E060}
+\newcommand{\mitsansiota}{\char"E061}
+\newcommand{\mitsanskappa}{\char"E062}
+\newcommand{\mitsanslambda}{\char"E063}
+\newcommand{\mitsansmu}{\char"E064}
+\newcommand{\mitsansnu}{\char"E065}
+\newcommand{\mitsansxi}{\char"E066}
+\newcommand{\mitsansomicron}{\char"E067}
+\newcommand{\mitsanspi}{\char"E068}
+\newcommand{\mitsansrho}{\char"E069}
+\newcommand{\mitsansvarsigma}{\char"E06A}
+\newcommand{\mitsanssigma}{\char"E06B}
+\newcommand{\mitsanstau}{\char"E06C}
+\newcommand{\mitsansupsilon}{\char"E06D}
+\newcommand{\mitsansphi}{\char"E06E}
+\newcommand{\mitsanschi}{\char"E06F}
+\newcommand{\mitsanspsi}{\char"E070}
+\newcommand{\mitsansomega}{\char"E071}
+\newcommand{\mitsansvarepsilon}{\char"E072}
+% Ancient Greek Numerals u10140-u1018E
+\newcommand{\atticonequarter}{\char"10140}
+\newcommand{\atticonehalf}{\char"10141}
+\newcommand{\atticonedrachma}{\char"10142}
+\newcommand{\atticfive}{\char"10143}
+\newcommand{\atticfifty}{\char"10144}
+\newcommand{\atticfivehundred}{\char"10145}
+\newcommand{\atticfivethousand}{\char"10146}
+\newcommand{\atticfiftythousand}{\char"10147}
+\newcommand{\atticfivetalents}{\char"10148}
+\newcommand{\attictentalents}{\char"10149}
+\newcommand{\atticfiftytalents}{\char"1014A}
+\newcommand{\atticonehundredtalents}{\char"1014B}
+\newcommand{\atticfivehundredtalents}{\char"1014C}
+\newcommand{\atticonethousandtalents}{\char"1014D}
+\newcommand{\atticfivethousandtalents}{\char"1014E}
+\newcommand{\atticfivestaters}{\char"1014F}
+\newcommand{\attictenstaters}{\char"10150}
+\newcommand{\atticfiftystaters}{\char"10151}
+\newcommand{\atticonehundredstaters}{\char"10152}
+\newcommand{\atticfivehundredstaters}{\char"10153}
+\newcommand{\atticonethousandstaters}{\char"10154}
+\newcommand{\attictenthousandstaters}{\char"10155}
+\newcommand{\atticfiftythousandstaters}{\char"10156}
+\newcommand{\attictenmnas}{\char"10157}
+\newcommand{\heraleumoneplethron}{\char"10158}
+\newcommand{\thespianone}{\char"10159}
+\newcommand{\ermionianone}{\char"1015A}
+\newcommand{\epidauriantwo}{\char"1015B}
+\newcommand{\thespiantwo}{\char"1015C}
+\newcommand{\cyrenaictwodrachmas}{\char"1015D}
+\newcommand{\epidauriantwodrachmas}{\char"1015E}
+\newcommand{\troezenianfive}{\char"1015F}
+\newcommand{\troezenianten}{\char"10160}
+\newcommand{\troezeniantenalt}{\char"10161}
+\newcommand{\hermionianten}{\char"10162}
+\newcommand{\messenianten}{\char"10163}
+\newcommand{\thespianten}{\char"10164}
+\newcommand{\thespianthirty}{\char"10165}
+\newcommand{\troezenianfifty}{\char"10166}
+\newcommand{\troezenianfiftyalt}{\char"10167}
+\newcommand{\hermionianfifty}{\char"10168}
+\newcommand{\thespianfifty}{\char"10169}
+\newcommand{\thespianonehundred}{\char"1016A}
+\newcommand{\thespianthreehundred}{\char"1016B}
+\newcommand{\epidaurianfivehundred}{\char"1016C}
+\newcommand{\troezenianfivehundred}{\char"1016D}
+\newcommand{\thespianfivehundred}{\char"1016E}
+\newcommand{\carystianfivehundred}{\char"1016F}
+\newcommand{\naxianfivehundred}{\char"10170}
+\newcommand{\thespianonethousand}{\char"10171}
+\newcommand{\thespianfivethousand}{\char"10172}
+\newcommand{\delphicfivemnas}{\char"10173}
+\newcommand{\stratianfiftymnas}{\char"10174}
+\newcommand{\greekonehalfsign}{\char"10175}
+\newcommand{\greekonehalfsignalt}{\char"10176}
+\newcommand{\greektwothirdssign}{\char"10177}
+\newcommand{\greekthreequarterssign}{\char"10178}
+\newcommand{\greekyearsign}{\char"10179}
+\newcommand{\greektalentsign}{\char"1017A}
+\newcommand{\greekdrachmasign}{\char"1017B}
+\newcommand{\greekobolsign}{\char"1017C}
+\newcommand{\greektwoobolssign}{\char"1017D}
+\newcommand{\greekthreeobolssign}{\char"1017E}
+\newcommand{\greekfourobolssign}{\char"1017F}
+\newcommand{\greekfiveobolssign}{\char"10180}
+\newcommand{\greekmetretessign}{\char"10181}
+\newcommand{\greekkyathosbasesign}{\char"10182}
+\newcommand{\greeklytrasign}{\char"10183}
+\newcommand{\greekounkiasign}{\char"10184}
+\newcommand{\greekxestessign}{\char"10185}
+\newcommand{\greekartabesign}{\char"10186}
+\newcommand{\greekarourasign}{\char"10187}
+\newcommand{\greekgrammasign}{\char"10188}
+\newcommand{\greektryblionbasesign}{\char"10189}
+\newcommand{\greekzerosign}{\char"1018A}
+\newcommand{\greekonequartersign}{\char"1018B}
+\newcommand{\greeksinusoidsign}{\char"1018C}
+\newcommand{\greekindictionsign}{\char"1018D}
+\newcommand{\nomismasign}{\char"1018E}
+%
+% some math symbols
+\DeclareRobustCommand\nrightrightarrows{\mathrel{\char"E033}}
+\DeclareRobustCommand\nleftleftarrows{\mathrel{\char"E032}}
+%
+% select ss02 lookup table for IPA symbols
+\newfontfamily{\ipatext}[StylisticSet=5,%
+BoldFont=NewCM10-Bold.otf,%
+SlantedFont=NewCM10-Regular.otf,%
+SlantedFeatures={FakeSlant=0.25},
+BoldSlantedFont=NewCM10-Bold.otf,%
+BoldSlantedFeatures={FakeSlant=0.25},
+SmallCapsFeatures={Numbers=OldStyle}]{NewCM10-Regular.otf}
+\newcommand{\textipa}[1]{{\ipatext#1}}
+\newfontfamily{\ipatextsans}[StylisticSet=5,%
+ItalicFont=NewCMSans10-Oblique.otf,%
+BoldFont=NewCMSans10-Bold.otf,%
+BoldItalicFont=NewCMSans10-BoldOblique.otf,%
+SlantedFont=NewCMSans10-Oblique.otf,%
+BoldSlantedFont=NewCMSans10-BoldOblique.otf,%
+SmallCapsFeatures={Numbers=OldStyle}]{NewCMSans10-Regular.otf}
+\newcommand{\textsansipa}[1]{{\ipatextsans#1}}
diff --git a/macros/unicodetex/latex/fontsetup/fsppalatinoot.sty b/macros/unicodetex/latex/fontsetup/fsppalatinoot.sty
new file mode 100644
index 0000000000..3487754dde
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fsppalatinoot.sty
@@ -0,0 +1,17 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+\newfontfamily{\defaultfont}[SmallCapsFeatures={Numbers=OldStyle}]{Palatino Linotype}
+
+\newfontfamily{\greekfont}[SmallCapsFont=fsplpscel]{Palatino Linotype}
+
+\RequirePackage[Latin, Greek]{ucharclasses}
+\setDefaultTransitions{\defaultfont}{}
+\setTransitionsForLatin{\defaultfont}{}
+\setTransitionsForGreek{\greekfont}{}
+
+\RequirePackage{unicode-math}
+\setmathfont{texgyrepagella-math.otf}
+
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fspstixtwoot.sty b/macros/unicodetex/latex/fontsetup/fspstixtwoot.sty
new file mode 100644
index 0000000000..f38c44654d
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fspstixtwoot.sty
@@ -0,0 +1,17 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+
+\setmainfont[%
+ Script=Default,% make small caps work for both latn and grek
+ ItalicFont=STIX2Text-Italic.otf,
+ BoldFont=STIX2Text-Bold.otf,
+ BoldItalicFont=STIX2Text-BoldItalic.otf,
+ % RawFeature=+pnum,% variable width numbers
+SmallCapsFeatures={Numbers=OldStyle}]{STIX2Text-Regular.otf}
+
+\RequirePackage{unicode-math}
+\setmathfont{STIX2Math.otf}
+
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/fsptimesot.sty b/macros/unicodetex/latex/fontsetup/fsptimesot.sty
new file mode 100644
index 0000000000..772be2b633
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/fsptimesot.sty
@@ -0,0 +1,16 @@
+\RequirePackage{fontspec}
+\defaultfontfeatures{Ligatures=TeX}
+
+\setmainfont[ItalicFont=FreeSerifbItalic.otf,
+BoldFont=FreeSerifbBold.otf,
+BoldItalicFont=FreeSerifbBoldItalic.otf,SmallCapsFont=FreeSerifb-SmallCapsAlt.otf]{FreeSerifb.otf}
+
+\RequirePackage{unicode-math}
+%\setmathfont{XITSMath-Regular.otf}
+\setmathfont{STIX2Math.otf}
+\setmathfont[range=\mathup/{num,latin,Latin,greek,Greek}]{FreeSerifb.otf}
+\setmathfont[range=\mathbfup/{num,latin,Latin,greek,Greek}]{FreeSerifbBold.otf}
+\setmathfont[range=\mathit/{num,latin,Latin,greek,Greek}]{FreeSerifbItalic.otf}
+\setmathfont[range=\mathbfit/{num,latin,Latin,greek,Greek}]{FreeSerifbBoldItalic.otf}
+
+\endinput
diff --git a/macros/unicodetex/latex/fontsetup/system-install-fonts/fsplpscel.otf b/macros/unicodetex/latex/fontsetup/system-install-fonts/fsplpscel.otf
new file mode 100644
index 0000000000..b505b6b96f
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/system-install-fonts/fsplpscel.otf
Binary files differ
diff --git a/macros/unicodetex/latex/fontsetup/system-install-fonts/fspmnscel.otf b/macros/unicodetex/latex/fontsetup/system-install-fonts/fspmnscel.otf
new file mode 100644
index 0000000000..c0e233f43c
--- /dev/null
+++ b/macros/unicodetex/latex/fontsetup/system-install-fonts/fspmnscel.otf
Binary files differ
diff --git a/macros/unicodetex/latex/fontspec/CHANGES.md b/macros/unicodetex/latex/fontspec/CHANGES.md
new file mode 100644
index 0000000000..63ae8620b4
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/CHANGES.md
@@ -0,0 +1,492 @@
+Change history
+==============
+
+## v2.7i (2020/02/21)
+
+ * Define both `b` and `bx` font series by default to avoid spurious warnings in some
+ cases, and broken behaviour in pathological cases.
+
+
+## v2.7h (2020/02/03)
+
+ * Eroneous uses of `language=DFLT` changed to `language=dflt`.
+ * Fix spurious error in some cases of `SlantedFont` and `BoldSlantedFont`
+ being specified in a `.fontspec` file.
+ * Fix regression with `unicode-math` related log files showing the wrong
+ NFSS-based font ‘identifier’.
+
+## v2.7g (2020/01/26)
+
+ * Fix regression that broke changing the default encoding after `fontspec` was loaded
+ (e.g., to use legacy fonts by default but use a `fontspec` font occassionally).
+ * Fix bug exhibited in `polyglossia` and perhaps elsewhere when `Script` is set without
+ a corresponding `Language`.
+ * Use `\familydefault` instead of `\rmdefault` when calculating scaling parameters in
+ `Scale=MatchLowercase` and `Scale=MatchUppercase`.
+
+## v2.7f (2020/01/24)
+
+ * Rename font feature `Letters=Uppercase` to `Style=Uppercase`, as this feature does
+ not generally affect the letters themselves, only symbols and accents.
+ The old name will be retained for the time being.
+ * Rename `Style=TitlingCaps` to `Style=Titling`.
+ * Track changes in both LaTeX2e and `expl3`.
+ * Fix long-standing (but never noticed?) bug that successive `\addfontfeatures`
+ would overwrite previous ones when using `UprightFeatures={...}` or similar.
+ Now the ‘`UprightFeatures`’ are accumulated.
+ * Remove AAT font examples from the documentation — support for many AAT fonts now
+ appears broken with latest versions of macOS.
+
+
+## v2.7e (2020/01/09)
+
+ * Rename for `Renderer=HarfBuzz` (the old `Harfbuzz` name is kept for compatibility)
+ * Track upcoming changes in LaTeX2e release for 2020.
+ * Remove/reword some out-of-date documentation.
+ * Remove entirely the patches for 3rd party verbatim packages as `\verbvisiblespace`
+ has now been offered by the kernel for a year.
+
+
+## v2.7d (2019/10/19)
+
+ * Allow the user to manually change `\rmdefault`, `\sfdefault`, `\ttdefault`
+ if desired. Note this could cause problems if the `fontspec` encoding does not
+ match the encoding of the specified families.
+ * Additional optional argument for `\EncodingCommand`.
+ * Suppress spurious warnings for `HyphenChar` feature in XeLaTeX.
+ * Add `Ligatures=TeXOff` even though it's not a real OpenType feature.
+ (Functionally equivalent to `Ligatures=TeXReset`.)
+ * New scripts definitions to match OpenType 1.8.3 (thanks Werner!).
+ * Documentation changes for `Numbers=Arabic`, `HypenChar=None` for `\ttfamily`.
+ * Documentation fixes (thanks `muzimuzhi`!).
+ * Prepare for `FakeBold` being available in `luaotfload` (thanks Khaled!).
+ * Bug fix for doubled + symbol when setting `tlig` feature in LuaTeX.
+ * Bug fix for Harfbuzz use. (Support still very minimal I'm afraid.)
+
+
+## v2.7c (2019/03/15)
+
+ * Two optimisations reduce time for font definitions with a large number of
+ `FontFace` options. Thanks to Bob Tennent for the test file and bringing
+ the problem to my attention.
+
+
+## v2.7b (2019/02/12)
+
+ * Fix regression in loading `Language=Turkish`. This now allows users to define more
+ than one OpenType tag when defining a language name, where the first tag found is
+ the one selected for the font. E.g.,
+
+ \newfontlanguage{Turkish}{TRK,TUR}
+
+ when selected, this first checks for the existance of the TRK language tag, and if
+ not found then checks for the TUR language tag to use if available.
+
+ * Add new `Renderer` options for LuaTeX that enable the HarfBuzz engine. These only
+ work running under `luahbtex` and are currently experimental. The new options are
+ `Harfbuzz`, `OpenType`, `AAT`, and `Graphite`.
+
+ * Always try to remove ‘clashing’ font features inside `\addfontfeatures` even in
+ cases when the requested font feature doesn't exist. E.g., now if a font is loaded
+ with `Numbers=OldStyle` and *doesn't have* `Numbers=Lining`, requesting the latter
+ will still reset the former.
+
+ * Add `pxfonts`, `txfonts`, `newpxmath`, `newtxmath`, `mtpro2` to the list
+ of packages that automatically invoke `no-math`.
+
+ * Add `\providefontfamily`, `\setfontface`, `\renewfontface`, and `\providefontface`.
+
+ * Add local/global distinction with `\fontspec_(g)set_family:Nnn` and `\fontspec_(g)set_fontface:NNnn`.
+
+
+## v2.7a (2019/01/25)
+
+ * One last (?!) fix for recent regression (!!). I am not getting enough sleep at the moment and it is too hot.
+ * Add `LocalForms=On/Off/Reset` to control the `locl` OpenType tag.
+ * Reorganise some documentation.
+ * Remove redundant redefinition of `\-` which is nowadays defined correctly by the LaTeX2e kernel.
+ * Add code to remove the patching of verbatim commands and environments when the new
+ `\verbvisiblespace` command is defined in a future version of LaTeX2e.
+
+
+## v2.7 (2019/01/24)
+
+ * Add new `ScaleAgain` feature for compounding scale factors.
+ (This is largely to support `unicode-math` but may be useful by others.)
+ * `\oldstylenums` no longer overwritten if `textcomp` loaded after `fontspec`.
+ * More fixes for recent regressions (sorry!).
+
+
+## v2.6l (2019/01/18)
+
+ * REALLY fix crash when loading fonts that are missing a requested script.
+ * Lots of internal logic changes for what should have been an easy fix :(
+
+
+## v2.6k (2019/01/16)
+
+ * Fix crash when loading fonts that are missing a requested script.
+
+
+## v2.6j (2019/01/10)
+
+ * Re-sync with `expl3` for deprecated commands.
+ * Added support for `\hbar` if anyone is relying on `fontspec` to emulate legacy maths.
+
+
+## v2.6i (2018/08/02)
+
+ * Emergency bug-fix -- a one-char typo broke loading of bold fonts!
+ * Some minor updates to the docs regarding “family names” of fonts.
+ * Using `\defaultfontfeatures` to specify a font face by a custom name can now use
+ `Font=` to specify the filename.
+
+
+## v2.6h (2018/07/30)
+
+ * `expl3` internals updated so loading `expl3` with the `check-declarations` option will run without error.
+ * Fix bug with `FontFace` in which spaces weren't being ignored.
+
+
+## v2.6g (2017-11-09)
+
+ * Bugfix for clash introduced with last version. When loading `babel`
+ before `fontspec` the following error arose:
+
+ ! Control sequence \latinencoding already defined.
+
+
+## v2.6f (2017-11-05)
+
+ * Fix loading of Graphite fonts and add a little documentation (a better interface is needed, though)
+ * Correct and simplify some internal code that fixes a bug in the way some fonts are displayed in `\tracingoutput` mode.
+ * This also fixes an obscure bug using the API in which a query for a selected font feature
+ would test against the upright font in the current family regardless of the face/shape actually in use.
+ * This package now complies with the `expl3` option `check-declarations`.
+
+
+## v2.6e (2017/09/22)
+
+ * Re-enable use of `HyphenChar=None` in LuaLaTeX. (Hyphenation and font choice are
+ decoupled in LuaTeX, except for this one setting.)
+ * Some internal changes needed by `unicode-math` to fix some cross-over code.
+
+
+## v2.6d (2017/08/14)
+
+ * Update Scripts to Unicode 1.8.2 (thanks Werner)
+ * Remove `HyphenChar` feature when running LuaTeX — use `\prehyphenchar` LuaTeX primitive instead.
+ * Rewrite test suite so that automated testing actually functions correctly and automatically. Thanks to Joseph for introducing me to Travis CI.
+
+
+## v2.6c (2017/07/23)
+
+ * Emergency bug-fix.
+
+
+## v2.6b (2017/07/16)
+
+ * Fix conflict with Polyglossia and `Scale=MatchLowercase`.
+ * New feature `IgnoreFontspecFile` to avoid loading the `.fontspec` file for a font.
+ * Fix regression with `\fontspec_if_feature:nTF`
+ (which broke `realscripts`, oops — must improve my test suite)
+
+
+## v2.6a (2017/03/31)
+
+ * Fix crashing bug with `..Reset` and `ResetAll` keys.
+ * Fix crashing bug with `\newfontface`.
+
+## v2.6 (2017/02/12)
+
+ * Change the new behaviour of `\emph` (and `\emfontdeclare`) to act only on the NFSS font shape; using the series as well was too fragile.
+ * Add `\strong` as the "weight" analogy to `\emph`. This will need some extra syntactic sugar from `fontspec` before it becomes truly useful.
+ * Add `Numbers=Tabular` alias for `Numbers=Monospaced`.
+ * Fix occasional bug with "chained" keyval choices such as `Numbers={Lining,Proportional}` in which only the first choice would be recognised.
+ * Fix interaction with `RawFeature` and "proper" `fontspec` features.
+ * Fix regression in which `C:\...` file paths in Windows couldn't be used.
+ * Fix regression in XeTeX in which `Ligatures=TeX` overrode `Mapping=..` regardless of where the former was declared in the feature list.
+ * Fix bug (sorry!) in `\newopentypefeature`.
+ * Improve monospace font in documentation.
+
+ * N.B. There is currently a known issue with TTC fonts and LuaTeX; currently they cannot be loaded through the `fontspec` interface, but this issue should soon be addressed by the `luaotfload` package.
+
+## v2.5d (2017/01/24) "oops"
+
+ * Add `\fontspec_if_small_caps:TF`
+ * Fix bug in `\emph` (!!)
+
+## v2.5c (2017/01/20) "Christmas 2016 release"
+
+ * `TU` font encoding now default, with encoding files provided by the kernel.
+ * Experimental interface added for customising encodings.
+ * Add feature `Ornament=`*n* corresponding to OpenType feature `+ornm=`*n*.
+ * Add feature `FontIndex=`*n* to support TrueType Collection (TTC) files.
+ * Nested `\emph` is now much smarter and will cleverly nest even if manual font changes are made.
+ * Tries to resolve situations when font features clash.
+ E.g., `Numbers={Uppercase,Lowercase}` will define only `+onum` rather than the previous behaviour of `+lnum;+onum` to let the engine sort things out. Coverage may still be preliminary.
+ * Add API function `\fontspec_if_current_feature:nTF` for querying selected features based on their OpenType tag.
+ * Add user function `\IfFontFeatureActiveTF` for querying selected features based on their `fontspec` specification.
+ * All "tag-based" OpenType features are now provided in `Feat`/`FeatOff`/`FeatReset` forms to disable and reset them.
+ * `ResetAll` provided for all "tag-based" OpenType feature keys. (E.g., `Ligatures=ResetAll`.)
+ * Big table of OpenType feature tags to help cross-reference which fontspec feature (if any) corresponds to which OpenType feature.
+ * Bug fixed for `Script` selection.
+
+## v2.5b (2016/05/14) "More bugs" (somehow never released)
+
+ * Fixed bug with garbage text printed in certain "verbatim" situations under LuaTeX.
+ * Improve interaction between optical sizes and small caps.
+ * Remove documentation for `FeatureFile`, since this is no longer supported under LuaLaTeX
+ (there are other methods to perform the same thing, but no "easy" user interface that `fontspec` can provide at this stage).
+ * Fix regression causing an error message if `fontspec` loaded before `\documentclass'.
+
+## v2.5a (2016/02/01) "Bugs fixed"
+
+ * Rather embarrassing bug fix! (`unicode-math` was broken.)
+ * Remember to add the `fontspec.cfg` file to the distribution.
+ * Remove `+trep` from `Ligatures=TeX` (no longer necessary).
+ * Add some basic tests using `l3build`; more to come.
+ * Simplify some internal Lua code and package loading code.
+
+## v2.5 (2016/01/30) "TL2016 release"
+
+ * Provide a new Unicode font encoding ("TU") to replace EU1/EU2 and xunicode.
+ * Activate with package option `[tuenc]'; once it becomes the default (later this year), `[euenc]` option will revert to the old behaviour.
+ * New command `\emfontdeclare` for defining font shapes when arbitrarily nesting the `\emph` command.
+ * Allow slanted small caps and better internal methods for "combining" font shapes; this fixes a few bugs.
+ * Incorporate "new" font script tags for Indic fonts. E.g., when selecting `Script=Bengali`, fontspec will first query the font for the `bng2` OpenType script, and if not found select `beng`.
+ * Restrict some font features from being able to be used within `\addfontfeatures` that were causing some font-loading confusion.
+ * Fixed behaviour in which `\baselineskip` and `\f@size` would (possibly) change values after loading the packge.
+ * Remove copy of `fixltx2e`'s code for footnote symbols; handled by LaTeX2e now.
+ * Deprecate `ExternalLocation` for the simpler (and identical) `Path` option.
+ * Improvement to some warnings/info messages.
+ * Improve structure of code.
+
+## v2.4e (2015/09/24)
+
+ * Allow `[Path=...]` to be specified for individual font faces.
+ * Continue to normalise naming with expl3. (Ongoing.)
+
+## v2.4d (2015/07/22)
+
+ * Rename an internal expl3 function or two.
+
+## v2.4c (2015/03/14)
+
+ * v2.4b was never released, sorry!
+ * This time *really* fix `\@fnsymbol` and avoid overwriting it if already fixed.
+ * Fix "`Renderer=Graphite`" (off-by-one error).
+ * Fix some edge cases for `\aliasfontfeature`.
+
+## v2.4b (2014/08/23)
+
+ * Improve backwards compatibility w.r.t. recent argument order change;
+ specifically, if an optional argument is presented before the font name
+ then avoid looking for one afterwards.
+ * Fix \@fnsymbol; it was defined as a \protected macro, where in fact its internal text-or-math switch needed to be instead.
+ * No longer lowercase fontnames internally; this fixes a bug with loading
+ mixed-case ".fontspec" files.
+ * Fixed some documentation typos/inconsistencies related to recent changes.
+
+## v2.4a (2014/06/21)
+
+ * No longer load fixltx2e.sty -- this package should really be loaded before \documentclass.
+ * Avoid deprecated l3fp code.
+ * A couple of bugs introduced with v2.4 fixed.
+
+## v2.4 (2014/06/01)
+
+ * Significant change to the user interface: instead of `\setmainfont[features]{font}`, you now write `\setmainfont{font}[features]`.
+ Backwards compatibility is of course preserved.
+
+ The reason for this change is to improve the visual comprehension of the font loading syntax with large numbers of font features.
+
+ * Defaults for symbolic font families like this can now be specified with
+
+ \defaultfontfeatures[\rmfamily]{...}
+
+ or
+
+ \defaultfontfeatures[\headingsfont]{...}
+ \newfontfamily\headingsfont{...}
+
+ * New `PunctuationSpace=WordSpace` and `PunctuationSpace=TwiceWordSpace` settings, intended for monospaced fonts; these force the space after a period to be exactly one or two spaces wide, respectively, which preserves character alignment across lines.
+
+ * The features above now allow changes to the default settings:
+
+ * `Ligatures=TeX` is enabled by default with `\setmainfont` and `\setsansfont`.
+ * `WordSpace={1,0,0}` and `PunctuationSpace=WordSpace` are now enabled by default for `\setmonofont` to produce better monospaced results.
+ * (These can be adjusted by created your own `fontspec.cfg` file.)
+
+ * `SizeFeatures` can now be nested inside `ItalicFeatures` (etc.) and behaves correctly. This has been a very long overdue bug!
+
+ * New feature `NFSSFamily=ABC` to set the NFSS family of a font to “`ABC`”. Useful
+ when other packages use the `\fontfamily{ABC}\selectfont` interface.
+
+ * New feature `FontFace = {series}{shape}{font}` allows a font face to be loaded with a specific NFSS font series and font shape.
+ A more verbose syntax allows arbitrary font features as well (and this also plays nicely with `SizeFeatures`):
+
+ \fontspec{myfont.otf}[
+ FontFace = {b}{ui}{Font = myfont-bui.otf, <features>} ,
+ ]
+
+ The code above, for example, will allow a bold upright italic font to be selected using the standard NFSS interface: `\fontseries{b}\fontshape{ui}\selectfont`.
+
+ * `\defaultfontfeatures+` (note the `+`) can now be used to append to the default font feature set.
+
+ * Setting the `SmallCapsFont` using the `*`-replacement notation has been improved/fixed.
+
+## v2.3c (2013/05/20)
+
+ * Compatbility with luaotfload 2013/05/20 2.2c, support for older version
+ removed.
+
+## v2.3b (2013/05/12)
+
+ * Compatibility with new (and future) version of luaotfload
+
+## v2.3a (2013/03/16)
+
+ * Bug fix update to retain compatibility with new expl3
+
+## v2.3 (2013/02/25)
+
+ * Add support for per-font options in `\defaultfontfeatures`
+ * Add support for `<fontname>.fontspec` per-font configuration files
+ * Keep up-to-date with expl3 changes
+
+## v2.2b (2012/05/06) "TL2012 version"
+
+ * Fix error with AutoFakeSlant/Bold (#113) and when used with external fonts (#128)
+ * Add warning when using FakeBold in LuaLaTeX, where it's not supported
+ * Fix slshape misassignment introduced in v2.2
+ * Allow fontspec to be loaded before \documentclass
+ (or rather fix the regression that broke this)
+ * Avoid using the calc package now that it's no longer loaded by expl3
+ * Allow multiple values to StylisticSet and Alternate font options
+
+## v2.2a (2011/09/14)
+
+ * Bug fix: improve backwards compatibility for packages that use old
+ fontspec internals such as mathspec.
+
+## v2.2 (2011/09/13)
+
+ * Support alternate selections in CharacterVariant (cvxx in OpenType)
+ using new syntax `[CharacterVariant=5:2]`.
+ * Add `fontspec`-compatible `\oldstylenums` and `\liningnums` commands.
+ * New programmer's function `\fontspec_set_fontface:NNnn` (for use when
+ `\zf@basefont` might previously have been queried).
+ * Log file output is slightly tidier.
+ * Some old lingering bugs squashed:
+ - Small caps font selection was broken in some cases.
+ (Thanks Enrico Gregorio.)
+ - Fonts loaded by filename with under-specified shapes threw an error
+ (e.g., asking explicitly for bold but not italic).
+ (Thanks Vafa Khalighi.)
+ * Documentation improvements largely due to Markus Böhning.
+ * Many internal changes, among which:
+ - `xkeyval` package no longer used for option processing;
+ `expl3`'s `l3keys` used instead.
+ This allows `fontspec` to be loaded before `\documentclass`
+ (thanks Heiko Oberdiek for reporting the issue)
+ and fixes a potential conflict with the `preview` package
+ (thanks again Vafa).
+ - Internal names changed; avoid "\zf@basefont", "\zf@family", etc.
+ from now on -- there are public interfaces now to get access to the
+ same information
+ - Update `expl3` support to latest CTAN version.
+
+## v2.1g (2011/08/02)
+
+ * No longer uses the binhex package, avoiding some name clashes with TIPA
+
+## v2.1f (2011/02/26)
+
+ * Finally add a real error message when a font cannot be found!
+ * Add "Letters=Random" feature.
+ * Fix bug in which "Unknown feature `'..." warnings
+ were shown in the log file.
+ * Some small documentation improvements.
+
+## v2.1e (2010/11/17)
+
+ * Internal changes for luatexbase v0.3.
+
+## v2.1d (2010/11/07)
+
+ * Bug fix when \itdefault is "sl" rather than "it".
+ E.g., when using the "slides" class.
+ * Minor internal changes, including merging some code from unicode-math.
+
+## v2.1c (2010/10/13)
+
+ * New documentation for defining custom kerning and ligatures
+ when using LuaLaTeX.
+ * Fix bug when defining bold italic fonts by filename.
+ * Avoid infinite loop when the Latin script is requested for a font
+ that does not contain it. TODO: a suitable fallback script should be
+ chosen; right now we just ignore the script selection.
+
+## v2.1b (2010/09/29)
+
+ * Fix for bug introduced in the last release:
+ small caps weren't being automatically selected correctly
+
+## v2.1a (2010/09/27)
+
+ * Fix for colours bug introduced in the last update
+ * Fix for for bad interaction with LuaLaTeX and fallback fonts
+ (such as using \slshape when no slanted font specified)
+ * Behaviour/messaging improvement when scripts/languages are requested
+ that do not exist in the font
+ * Fix bug with detecting font features/scripts in some cases with:
+
+ - `\fontspec_if_feature:n(TF)`
+ - `\fontspec_if_language:n(TF)`
+ - `\fontspec_if_current_script:n(TF)`
+ - `\fontspec_if_current_language:n(TF)`
+
+ * Some messages in the log file are improved
+ * Code for "visible space" fixed for LuaLaTeX use
+ * Lots of internal changes to bring the implementation closer
+ to being "native expl3".
+
+## v2.1 (2010/09/19)
+
+ * Now load xunicode internally for consistent behaviour in
+ XeLaTeX and LuaLaTeX.
+ * Font commands now include \fontencoding internally, easing their
+ use together with legacy TeX fonts.
+ * Colour & Opacity now behave a little better.
+ * Nested emphasis with \emph now also occurs inside a "slanted" shape.
+ * Some compatibility commands/options added that were removed.
+ in the transition to v2.
+ * Bug fix for a problem triggered after counters got too high.
+
+## v2.0c (2010/08/01)
+ Bug fix and documentation tune-up.
+
+ * Significant bug fix reported simultaneously by Enrico Gregorio and
+ Don Hosek.
+ * Many documentation improvements and additions due to David Perry.
+ * Documentation typo thanks to John McChesney-Young
+
+## v2.0b (2010/07/14)
+ *Actually* the final release before TeX Live 2010.
+
+ * Improved examples in the documentation, with fewer proprietary fonts
+ * All font examples are included as separate images on CTAN, so the
+ manual can be compiled (with pdfLaTeX) by anyone, anywhere
+ * LuaLaTeX fixes for the StylisticSet and Annotation features
+ * New OpenType feature `CharacterVariant` now supported
+ * Minor change: `Ligatures=Historical` is now `Ligatures=Historic` for consistency
+
+## v2.0a (2010/07/11)
+ Final release before TeX Live 2010.
+
+ * Bug fix for the Language setting being ignored
+ * Add programmer's command `\fontspec_glyph_if_exist:NnTF`
+ * Many documentation improvements, especially for LuaTeX features
+ `FeatureFile=...` and `Numbers=Arabic`.
+ * Add `Parsi` and `Persian` synonyms for `Language=Farsi`
diff --git a/macros/unicodetex/latex/fontspec/LICENSE b/macros/unicodetex/latex/fontspec/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/LICENSE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/unicodetex/latex/fontspec/README.md b/macros/unicodetex/latex/fontspec/README.md
new file mode 100644
index 0000000000..cd01b539d8
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/README.md
@@ -0,0 +1,83 @@
+The FONTSPEC package
+====================
+
+The `fontspec` package provides an automatic and unified interface for loading
+fonts in LaTeX. XeTeX and LuaTeX (the latter through the `luaotfload` package)
+allows a direct interface to fonts which may be loaded by their name or filename,
+so no manual font installation is required.
+
+This package also provides access to the large number of font features
+available with OpenType (and other) fonts, including upper and lower case numbers,
+proportional and monospaced numbers, swash letters, ligature control, and many
+many others.
+
+See the documentation `fontspec.pdf` for full information.
+
+
+Summary of user commands
+------------------------
+
+To define commands for selecting fonts efficiently through a document:
+
+ \newfontfamily\<font switch>{<font name>}[<font options>]
+ \newfontface \<font switch>{<font name>}[<font options>]
+
+To select the default document fonts:
+
+ \setmainfont{<font name>}[<font options>]
+ \setsansfont{<font name>}[<font options>]
+ \setmonofont{<font name>}[<font options>]
+
+To define an ad hoc font family individually:
+
+ \fontspec{<font name>}[<font options>]
+
+To specify features to be used for every subsequently defined font:
+
+ \defaultfontfeatures{<default font options>}
+ \defaultfontfeatures+{<add to default font options>}
+
+To specify features to be used for specific fonts:
+
+ \defaultfontfeatures[<font name or switch>]{<default font options>}
+ \defaultfontfeatures+[<font name or switch>]{<add to defaults>}
+
+To add features to the font family currently in use:
+
+ \addfontfeatures{<font options to add>}
+
+
+Package details
+---------------
+
+Release versions of fontspec are available from CTAN:
+ <http://www.ctan.org/pkg/fontspec>
+
+Development and historical versions are available from Github:
+ <http://github.com/wspr/fontspec>
+
+Please offer suggestions and file bug reports in the issue tracker:
+ <http://github.com/wspr/fontspec/issues>
+
+If you are running TeX Live, you can update to the latest version of this package by running
+
+ tlmgr install fontspec
+
+If you wish to manually download the latest release version from CTAN, get the pre-built TDS package and extract it into your local texmf tree:
+
+ http://mirror.ctan.org/install/macros/latex/contrib/fontspec.tds.zip
+
+If you wish to use the latest development version from Github, either use git to obtain the bleeding edge version with
+
+ git clone git://github.com/wspr/fontspec.git
+
+(For bleeding edge versions, see the `working` branch.)
+Having obtained the package from Github, install the package code by running
+
+ texlua build.lua install
+
+This will compile the documentation and install all necessary files in your
+local texmf tree. Depending how your TeX distribution is configured
+you may then need to update the filename database with `texhash`.
+
+
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-api.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-api.dtx
new file mode 100644
index 0000000000..b0b6b0a87d
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-api.dtx
@@ -0,0 +1,390 @@
+%%^^A%% fontspec-code-api.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{Programmer's interface}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+%
+%
+% These functions are not used directly by fontspec when defining fonts;
+% they are designed to be used by other packages who wish to do font-related
+% things on top of fontspec itself.
+%
+% Because I haven't fully explored how these functions will behave in
+% practise, I am not giving them user-level names. As it becomes more clear
+% which of these should be accessible by document writers, I'll open them up
+% a little more.
+%
+% All functions are defined assuming that the font to be queried is
+% currently selected as a fontspec font. (I.e., via \verb|\fontspec| or
+% from a \verb|\newfontfamily| macro or from \verb|\setmainfont| and so on.)
+%
+% \begin{macro}{\fontspec_if_fontspec_font:TF}
+% Test whether the currently selected font has been loaded by fontspec.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_fontspec_font: {TF,T,F}
+ {
+ \cs_if_exist:cTF {g_@@_fontinfo_ \f@family _prop} \prg_return_true: \prg_return_false:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fontspec_if_aat_feature:nnTF}
+% Conditional to test if the currently selected font contains the \AAT\
+% feature (|#1|,|#2|).
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_aat_feature:nn {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_atsui_bool
+ {
+ \@@_make_AAT_feature_string:NnnTF \font {#1} {#2}
+ \prg_return_true: \prg_return_false:
+ }
+ {
+ \prg_return_false:
+ }
+ }
+ {
+ \prg_return_false:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fontspec_if_opentype:TF}
+% Test whether the currently selected font is an OpenType font.
+% Always true for LuaTeX fonts.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_opentype: {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_ot_bool \prg_return_true: \prg_return_false:
+ }
+ {
+ \prg_return_false:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_if_feature:nTF}
+% Test whether the currently selected font contains the raw OpenType
+% feature |#1|. E.g.: |\fontspec_if_feature:nTF {pnum} {True} {False}|
+% Returns false if the font is not loaded by fontspec or is not an OpenType
+% font.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_feature:n {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_ot_bool
+ {
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-num} \l_@@_tmp_tl
+ \int_set:Nn \l_@@_script_int {\l_@@_tmp_tl}
+
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-num} \l_@@_tmp_tl
+ \int_set:Nn \l_@@_language_int {\l_@@_tmp_tl}
+
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_@@_script_tl
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-tag} \l_@@_lang_tl
+
+ \@@_check_ot_feat:NnTF \font {#1} {\prg_return_true:} {\prg_return_false:}
+ }
+ {
+ \prg_return_false:
+ }
+ }
+ {
+ \prg_return_false:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_if_feature:nnnTF}
+% Test whether the currently selected font with raw OpenType script tag |#1| and
+% raw OpenType language tag |#2| contains the raw OpenType feature tag |#3|.
+% E.g.:\\ | \fontspec_if_feature:nTF {latn} {ROM} {pnum} {True} {False}|
+% Returns false if the font is not loaded by fontspec or is not an OpenType
+% font.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_feature:nnn {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_ot_bool
+ {
+ \@@_check_ot_feat:NnnnTF \font {#3} {#2} {#1} \prg_return_true: \prg_return_false:
+ }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_if_script:nTF}
+% Test whether the currently selected font contains the raw OpenType
+% script |#1|. E.g.: |\fontspec_if_script:nTF {latn} {True} {False}|
+% Returns false if the font is not loaded by fontspec or is not an OpenType
+% font.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_script:n {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_ot_bool
+ {
+ \@@_check_script:NnTF \font {#1} \prg_return_true: \prg_return_false:
+ }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_if_language:nTF}
+% Test whether the currently selected font contains the raw OpenType language
+% tag |#1|. E.g.: |\fontspec_if_language:nTF {ROM} {True} {False}|.
+% Returns false if the font is not loaded by fontspec or is not an OpenType
+% font.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_language:n {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_ot_bool
+ {
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-num} \l_@@_tmp_tl
+ \int_set:Nn \l_@@_script_int {\l_@@_tmp_tl}
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_@@_script_tl
+
+ \@@_check_lang:NnTF \font {#1} \prg_return_true: \prg_return_false:
+ }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_if_language:nnTF}
+% Test whether the currently selected font contains the raw OpenType language
+% tag |#2| in script |#1|. E.g.: |\fontspec_if_language:nnTF {cyrl} {SRB} {True} {False}|.
+% Returns false if the font is not loaded by fontspec or is not an OpenType
+% font.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_language:nn {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_ot_bool
+ {
+ \@@_check_lang:NnnTF \font {#2} {#1} \prg_return_true: \prg_return_false:
+ }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fontspec_if_current_script:nTF}
+% Test whether the currently loaded font is using the specified raw
+% OpenType script tag |#1|.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_current_script:n {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_ot_bool
+ {
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {script-tag} \l_@@_tmp_tl
+ \str_if_eq:nVTF {#1} \l_@@_tmp_tl
+ {\prg_return_true:} {\prg_return_false:}
+ }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_if_current_language:nTF}
+% Test whether the currently loaded font is using the specified raw
+% OpenType language tag |#1|.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_current_language:n {TF,T,F}
+ {
+ \fontspec_if_fontspec_font:TF
+ {
+ \@@_set_font_type:N \font
+ \bool_if:NTF \l_@@_ot_bool
+ {
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {lang-tag} \l_@@_tmp_tl
+ \str_if_eq:nVTF {#1} \l_@@_tmp_tl
+ {\prg_return_true:} {\prg_return_false:}
+ }
+ { \prg_return_false: }
+ }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fontspec_set_family:Nnn}
+% \darg{family}
+% \darg{fontspec features}
+% \darg{font name}
+% Defines a new font family from given \meta{features} and \meta{font},
+% and stores the name in the variable \meta{family}.
+% See the standard \pkg{fontspec} user commands for applications of this
+% function.
+%
+% We want to store the actual name of the font family within the \meta{family}
+% variable because the actual \LaTeX\ family name is automatically generated
+% by fontspec and it's easier to keep it that way.
+% \begin{macrocode}
+\cs_new:Nn \@@_tl_new_if_free:N { \tl_if_exist:NF #1 { \tl_new:N #1 } }
+\cs_new:Nn \@@_set_family:NnnN
+ {
+ \tl_set:Nn \l_@@_fontface_cs_tl {\l_fontspec_font} % reset
+ \tl_set:Nn \l_@@_family_label_tl {#1}
+ \@@_select_font_family:nn {#2} {#3}
+ \@@_tl_new_if_free:N #1
+ #4 #1 \l_fontspec_family_tl
+ \tl_set:Nn \l_@@_fontface_cs_tl {\l_fontspec_font} % reset
+ }
+\cs_new:Nn \fontspec_gset_family:Nnn { \@@_set_family:NnnN #1 {#2} {#3} \tl_gset_eq:NN }
+\cs_new:Nn \fontspec_set_family:Nnn { \@@_set_family:NnnN #1 {#2} {#3} \tl_set_eq:NN }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \fontspec_set_family:Nnn {c}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\fontspec_set_fontface:NNnn}
+% TODO: the round-about approach of using \cs{fontname}
+% means that settings such as fontdimens will be lost.
+% (Discovered in unicode-math.) Investigate!
+% \begin{macrocode}
+\tl_new:N \l_@@_fontface_cs_tl
+\tl_set:Nn \l_@@_fontface_cs_tl {\l_fontspec_font}
+\cs_new:Nn \@@_set_fontface:NNnnN
+ {
+ \tl_set:Nn \l_@@_fontface_cs_tl {#1}
+ \tl_set:Nn \l_@@_family_label_tl {#2}
+ \@@_select_font_family:nn {#3} {#4}
+ #5 #2 \l_fontspec_family_tl
+ \tl_set:Nn \l_@@_fontface_cs_tl {\l_fontspec_font} % reset
+ }
+\cs_new:Nn \fontspec_gset_fontface:NNnn { \@@_set_fontface:NNnnN #1 #2 {#3} {#4} \tl_gset_eq:NN }
+\cs_new:Nn \fontspec_set_fontface:NNnn { \@@_set_fontface:NNnnN #1 #2 {#3} {#4} \tl_set_eq:NN }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\fontspec_font_if_exist:n}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_font_if_exist:n {TF,T,F}
+ {
+ \group_begin:
+ \@@_init:
+ \@@_if_detect_external:nT {#1} { \@@_font_is_file: }
+ \@@_primitive_font_if_exist:nTF { \@@_construct_font_call:nn {#1} {} }
+ { \group_end: \prg_return_true: }
+ { \group_end: \prg_return_false: }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set_eq:NN \IfFontExistsTF \fontspec_font_if_exist:nTF
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\fontspec_if_current_feature:nTF}
+% Test whether the currently loaded font is using the specified raw
+% OpenType feature tag |#1|.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_current_feature:n {TF,T,F}
+ {
+%<debug>\typeout{::~fontspec_if_current_feature:n~{#1}}
+%<debug>\typeout{::::~primitive_font_current_name:~=~\@@_primitive_font_current_name:}
+ \exp_args:Nxx \tl_if_in:nnTF
+ { \@@_primitive_font_current_name: } { \tl_to_str:n {#1} }
+ { \prg_return_true: } { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_if_small_caps:TF}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \fontspec_if_small_caps: {TF,T,F}
+ {
+ \@@_if_merge_shape:nTF {sc}
+ {
+ \tl_set_eq:Nc \l_@@_smcp_shape_tl { \@@_shape_merge:nn {\f@shape} {sc} }
+ }
+ {
+ \tl_set:Nn \l_@@_smcp_shape_tl {sc}
+ }
+
+ \cs_if_exist:cTF { \f@encoding/\f@family/\f@series/\l_@@_smcp_shape_tl }
+ {
+ \tl_if_eq:ccTF
+ { \f@encoding/\f@family/\f@series/\l_@@_smcp_shape_tl }
+ { \f@encoding/\f@family/\f@series/\shapedefault }
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-closing.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-closing.dtx
new file mode 100644
index 0000000000..4dca137a7d
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-closing.dtx
@@ -0,0 +1,44 @@
+%%^^A%% fontspec-code-closing.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%
+% \section{Closing code}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% \subsection{Finishing up}
+% Now we just want to set up loading the \texttt{.cfg} file, if it exists.
+% \begin{macrocode}
+\bool_if:NT \g_@@_cfg_bool
+ {
+ \InputIfFileExists{fontspec.cfg}
+ {}
+ { \typeout{No~ fontspec.cfg~ file~ found;~ no~ configuration~ loaded.} }
+ }
+% \end{macrocode}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-enc.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-enc.dtx
new file mode 100644
index 0000000000..7d30448002
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-enc.dtx
@@ -0,0 +1,158 @@
+%%^^A%% fontspec-code-enc.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{Extended font encodings}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+%
+% \begin{macro}{\EncodingCommand}
+% \begin{macrocode}
+\DeclareDocumentCommand \EncodingCommand { m O{} O{} m }
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \EncodingCommand }
+ \DeclareTextCommand{#1}{\UnicodeEncodingName}[#2][#3]{#4}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EncodingAccent}
+% \begin{macrocode}
+\DeclareDocumentCommand \EncodingAccent {mm}
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \EncodingAccent }
+ \DeclareTextCommand{#1}{\UnicodeEncodingName}{\add@unicode@accent{#2}}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EncodingSymbol}
+% \begin{macrocode}
+\DeclareDocumentCommand \EncodingSymbol {mm}
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \EncodingSymbol }
+ \DeclareTextSymbol{#1}{\UnicodeEncodingName}{#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EncodingComposite}
+% \begin{macrocode}
+\DeclareDocumentCommand \EncodingComposite {mmm}
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \EncodingComposite }
+ \DeclareTextComposite{#1}{\UnicodeEncodingName}{#2}{#3}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\EncodingCompositeCommand}
+% \begin{macrocode}
+\DeclareDocumentCommand \EncodingCompositeCommand {mmm}
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \EncodingCompositeCommand }
+ \DeclareTextCompositeCommand{#1}{\UnicodeEncodingName}{#2}{#3}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\DeclareUnicodeEncoding}
+% \begin{macrocode}
+\DeclareDocumentCommand \DeclareUnicodeEncoding {mm}
+ {
+ \DeclareFontEncoding{#1}{}{}
+ \DeclareFontSubstitution{#1}{lmr}{m}{n}
+ \DeclareFontFamily{#1}{lmr}{}
+
+ \DeclareFontShape{#1}{lmr}{m}{n}
+ {<->\UnicodeFontFile{lmroman10-regular}{\UnicodeFontTeXLigatures}}{}
+ \DeclareFontShape{#1}{lmr}{m}{it}
+ {<->\UnicodeFontFile{lmroman10-italic}{\UnicodeFontTeXLigatures}}{}
+ \DeclareFontShape{#1}{lmr}{m}{sc}
+ {<->\UnicodeFontFile{lmromancaps10-regular}{\UnicodeFontTeXLigatures}}{}
+ \DeclareFontShape{#1}{lmr}{bx}{n}
+ {<->\UnicodeFontFile{lmroman10-bold}{\UnicodeFontTeXLigatures}}{}
+ \DeclareFontShape{#1}{lmr}{bx}{it}
+ {<->\UnicodeFontFile{lmroman10-bolditalic}{\UnicodeFontTeXLigatures}}{}
+
+ \tl_set_eq:NN \l_@@_prev_unicode_name_tl \UnicodeEncodingName
+ \tl_set:Nn \UnicodeEncodingName {#1}
+ \bool_set_true:N \l_@@_defining_encoding_bool
+ #2
+ \bool_set_false:N \l_@@_defining_encoding_bool
+ \tl_set_eq:NN \UnicodeEncodingName \l_@@_prev_unicode_name_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\UndeclareSymbol}
+% \begin{macro}{\UndeclareAccent}
+% \begin{macro}{\UndeclareCommand}
+% Synonyms for each other but all included for completeness.
+% \begin{macrocode}
+\DeclareDocumentCommand \UndeclareSymbol {m}
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \UndeclareSymbol }
+ \UndeclareTextCommand {#1} {\UnicodeEncodingName}
+ }
+\DeclareDocumentCommand \UndeclareAccent {m}
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \UndeclareAccent }
+ \UndeclareTextCommand {#1} {\UnicodeEncodingName}
+ }
+\DeclareDocumentCommand \UndeclareCommand {m}
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \UndeclareCommand }
+ \UndeclareTextCommand {#1} {\UnicodeEncodingName}
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\UndeclareComposite}
+% \begin{macrocode}
+\DeclareDocumentCommand \UndeclareComposite {mm}
+ {
+ \bool_if:NF \l_@@_defining_encoding_bool
+ { \@@_error:nn {only-inside-encdef} \UndeclareComposite }
+ \cs_undefine:c
+ { \c_backslash_str \UnicodeEncodingName \token_to_str:N #1 - \tl_to_str:n {#2} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-feat-aat.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-feat-aat.dtx
new file mode 100644
index 0000000000..cf9736c035
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-feat-aat.dtx
@@ -0,0 +1,243 @@
+%%^^A%% fontspec-code-feat-aat.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{AAT feature definitions}
+%
+% These are only defined for \XeTeX.
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec&XE>
+% \end{macrocode}
+% \fi
+
+% \subsection{Ligatures}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Ligatures}
+\@@_define_aat_feature:nnnn {Ligatures} {Required} {1} {0}
+\@@_define_aat_feature:nnnn {Ligatures} {NoRequired} {1} {1}
+\@@_define_aat_feature:nnnn {Ligatures} {Common} {1} {2}
+\@@_define_aat_feature:nnnn {Ligatures} {NoCommon} {1} {3}
+\@@_define_aat_feature:nnnn {Ligatures} {Rare} {1} {4}
+\@@_define_aat_feature:nnnn {Ligatures} {NoRare} {1} {5}
+\@@_define_aat_feature:nnnn {Ligatures} {Discretionary} {1} {4}
+\@@_define_aat_feature:nnnn {Ligatures} {NoDiscretionary} {1} {5}
+\@@_define_aat_feature:nnnn {Ligatures} {Logos} {1} {6}
+\@@_define_aat_feature:nnnn {Ligatures} {NoLogos} {1} {7}
+\@@_define_aat_feature:nnnn {Ligatures} {Rebus} {1} {8}
+\@@_define_aat_feature:nnnn {Ligatures} {NoRebus} {1} {9}
+\@@_define_aat_feature:nnnn {Ligatures} {Diphthong} {1} {10}
+\@@_define_aat_feature:nnnn {Ligatures} {NoDiphthong} {1} {11}
+\@@_define_aat_feature:nnnn {Ligatures} {Squared} {1} {12}
+\@@_define_aat_feature:nnnn {Ligatures} {NoSquared} {1} {13}
+\@@_define_aat_feature:nnnn {Ligatures} {AbbrevSquared} {1} {14}
+\@@_define_aat_feature:nnnn {Ligatures} {NoAbbrevSquared} {1} {15}
+\@@_define_aat_feature:nnnn {Ligatures} {Icelandic} {1} {32}
+\@@_define_aat_feature:nnnn {Ligatures} {NoIcelandic} {1} {33}
+% \end{macrocode}
+% Emulate CM extra ligatures.
+% \begin{macrocode}
+\keys_define:nn {fontspec-aat}
+ {
+ Ligatures / TeX .code:n =
+ {
+ \tl_set:Nn \l_@@_mapping_tl { tex-text }
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{Letters}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Letters}
+\@@_define_aat_feature:nnnn {Letters} {Normal} {3} {0}
+\@@_define_aat_feature:nnnn {Letters} {Uppercase} {3} {1}
+\@@_define_aat_feature:nnnn {Letters} {Lowercase} {3} {2}
+\@@_define_aat_feature:nnnn {Letters} {SmallCaps} {3} {3}
+\@@_define_aat_feature:nnnn {Letters} {InitialCaps} {3} {4}
+% \end{macrocode}
+%
+% \subsection{Numbers}
+%
+% These were originally separated into \feat{NumberCase} and
+% \feat{NumberSpacing} following \AAT, but it makes more sense to
+% combine them.
+%
+% Both naming conventions are offered to select the number case.
+%
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Numbers}
+\@@_define_aat_feature:nnnn {Numbers} {Monospaced} {6} {0}
+\@@_define_aat_feature:nnnn {Numbers} {Proportional} {6} {1}
+\@@_define_aat_feature:nnnn {Numbers} {Lowercase} {21} {0}
+\@@_define_aat_feature:nnnn {Numbers} {OldStyle} {21} {0}
+\@@_define_aat_feature:nnnn {Numbers} {Uppercase} {21} {1}
+\@@_define_aat_feature:nnnn {Numbers} {Lining} {21} {1}
+\@@_define_aat_feature:nnnn {Numbers} {SlashedZero} {14} {5}
+\@@_define_aat_feature:nnnn {Numbers} {NoSlashedZero} {14} {4}
+% \end{macrocode}
+%
+% \subsection{Contextuals}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Contextuals}
+\@@_define_aat_feature:nnnn {Contextuals} {WordInitial} {8} {0}
+\@@_define_aat_feature:nnnn {Contextuals} {NoWordInitial} {8} {1}
+\@@_define_aat_feature:nnnn {Contextuals} {WordFinal} {8} {2}
+\@@_define_aat_feature:nnnn {Contextuals} {NoWordFinal} {8} {3}
+\@@_define_aat_feature:nnnn {Contextuals} {LineInitial} {8} {4}
+\@@_define_aat_feature:nnnn {Contextuals} {NoLineInitial} {8} {5}
+\@@_define_aat_feature:nnnn {Contextuals} {LineFinal} {8} {6}
+\@@_define_aat_feature:nnnn {Contextuals} {NoLineFinal} {8} {7}
+\@@_define_aat_feature:nnnn {Contextuals} {Inner} {8} {8}
+\@@_define_aat_feature:nnnn {Contextuals} {NoInner} {8} {9}
+% \end{macrocode}
+%
+% \subsection{Diacritics}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Diacritics}
+\@@_define_aat_feature:nnnn {Diacritics} {Show} {9} {0}
+\@@_define_aat_feature:nnnn {Diacritics} {Hide} {9} {1}
+\@@_define_aat_feature:nnnn {Diacritics} {Decompose} {9} {2}
+% \end{macrocode}
+%
+%
+% \subsection{Vertical position}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {VerticalPosition}
+\@@_define_aat_feature:nnnn {VerticalPosition} {Normal} {10} {0}
+\@@_define_aat_feature:nnnn {VerticalPosition} {Superior} {10} {1}
+\@@_define_aat_feature:nnnn {VerticalPosition} {Inferior} {10} {2}
+\@@_define_aat_feature:nnnn {VerticalPosition} {Ordinal} {10} {3}
+% \end{macrocode}
+%
+% \subsection{Fractions}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Fractions}
+\@@_define_aat_feature:nnnn {Fractions} {On} {11} {1}
+\@@_define_aat_feature:nnnn {Fractions} {Off} {11} {0}
+\@@_define_aat_feature:nnnn {Fractions} {Diagonal} {11} {2}
+% \end{macrocode}
+%
+% \subsection{Alternate}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n { Alternate }
+\keys_define:nn {fontspec-aat}
+ {
+ Alternate .default:n = {0} ,
+ Alternate / unknown .code:n =
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_make_AAT_feature:nn {17}{##1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Variant / StylisticSet}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Variant}
+\keys_define:nn {fontspec-aat}
+ {
+ Variant .default:n = {0} ,
+ Variant / unknown .code:n =
+ {
+ \clist_map_inline:nn {#1}
+ { \@@_make_AAT_feature:nn {18}{##1} }
+ }
+ }
+\aliasfontfeature{Variant}{StylisticSet}
+% \end{macrocode}
+%
+%
+%
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Vertical}
+\keys_define:nn {fontspec-aat}
+ {
+ Vertical .choice: ,
+ Vertical / RotatedGlyphs .code:n =
+ {
+ \__fontspec_update_featstr:n {vertical}
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Style}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Style}
+\@@_define_aat_feature:nnnn {Style} {Italic} {32} {2}
+\@@_define_aat_feature:nnnn {Style} {Ruby} {28} {2}
+\@@_define_aat_feature:nnnn {Style} {Display} {19} {1}
+\@@_define_aat_feature:nnnn {Style} {Engraved} {19} {2}
+\@@_define_aat_feature:nnnn {Style} {Titling} {19} {4}
+\@@_define_aat_feature:nnnn {Style} {TitlingCaps} {19} {4} % backwards compat
+\@@_define_aat_feature:nnnn {Style} {TallCaps} {19} {5}
+% \end{macrocode}
+%
+% \subsection{CJK shape}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {CJKShape}
+\@@_define_aat_feature:nnnn {CJKShape} {Traditional} {20} {0}
+\@@_define_aat_feature:nnnn {CJKShape} {Simplified} {20} {1}
+\@@_define_aat_feature:nnnn {CJKShape} {JIS1978} {20} {2}
+\@@_define_aat_feature:nnnn {CJKShape} {JIS1983} {20} {3}
+\@@_define_aat_feature:nnnn {CJKShape} {JIS1990} {20} {4}
+\@@_define_aat_feature:nnnn {CJKShape} {Expert} {20} {10}
+\@@_define_aat_feature:nnnn {CJKShape} {NLC} {20} {13}
+% \end{macrocode}
+%
+% \subsection{Character width}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {CharacterWidth}
+\@@_define_aat_feature:nnnn {CharacterWidth} {Proportional} {22} {0}
+\@@_define_aat_feature:nnnn {CharacterWidth} {Full} {22} {1}
+\@@_define_aat_feature:nnnn {CharacterWidth} {Half} {22} {2}
+\@@_define_aat_feature:nnnn {CharacterWidth} {Third} {22} {3}
+\@@_define_aat_feature:nnnn {CharacterWidth} {Quarter} {22} {4}
+\@@_define_aat_feature:nnnn {CharacterWidth} {AlternateProportional} {22} {5}
+\@@_define_aat_feature:nnnn {CharacterWidth} {AlternateHalf} {22} {6}
+\@@_define_aat_feature:nnnn {CharacterWidth} {Default} {22} {7}
+% \end{macrocode}
+%
+% \subsection{Annotation}
+% \begin{macrocode}
+\@@_define_aat_feature_group:n {Annotation}
+\@@_define_aat_feature:nnnn {Annotation} {Off} {24} {0}
+\@@_define_aat_feature:nnnn {Annotation} {Box} {24} {1}
+\@@_define_aat_feature:nnnn {Annotation} {RoundedBox} {24} {2}
+\@@_define_aat_feature:nnnn {Annotation} {Circle} {24} {3}
+\@@_define_aat_feature:nnnn {Annotation} {BlackCircle} {24} {4}
+\@@_define_aat_feature:nnnn {Annotation} {Parenthesis} {24} {5}
+\@@_define_aat_feature:nnnn {Annotation} {Period} {24} {6}
+\@@_define_aat_feature:nnnn {Annotation} {RomanNumerals} {24} {7}
+\@@_define_aat_feature:nnnn {Annotation} {Diamond} {24} {8}
+\@@_define_aat_feature:nnnn {Annotation} {BlackSquare} {24} {9}
+\@@_define_aat_feature:nnnn {Annotation} {BlackRoundSquare} {24} {10}
+\@@_define_aat_feature:nnnn {Annotation} {DoubleCircle} {24} {11}
+% \end{macrocode}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec&XE>
+% \end{macrocode}
+% \fi
+
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-feat-opentype.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-feat-opentype.dtx
new file mode 100644
index 0000000000..77d431ccf8
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-feat-opentype.dtx
@@ -0,0 +1,583 @@
+%%^^A%% fontspec-code-feat-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{OpenType feature definitions}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+%
+% \begin{macrocode}
+\@@_feat_prop_add:nn {salt} { Alternate\,=\,$N$ }
+\@@_feat_prop_add:nn {nalt} { Annotation\,=\,$N$ }
+\@@_feat_prop_add:nn {ornm} { Ornament\,=\,$N$ }
+\@@_feat_prop_add:nn {cvNN} { CharacterVariant\,=\,$N$:$M$ }
+\@@_feat_prop_add:nn {ssNN} { StylisticSet\,=\,$N$ }
+% \end{macrocode}
+%
+% \section{Regular key=val / tag definitions}
+%
+% \subsection{Ligatures}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Ligatures}
+\@@_define_opentype_feature:nnnnn {Ligatures} {ResetAll} {} {}
+ {
+ +dlig,-dlig,+rlig,-rlig,+liga,-liga,+dlig,-dlig,+clig,-clig,+hlig,-hlig,
+%<XE> mapping = tex-text
+%<LU> +tlig,-tlig
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Required} {rlig} {rlig} {}
+\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Common} {liga} {liga} {}
+\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Rare} {dlig} {dlig} {}
+\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Discretionary} {dlig} {dlig} {}
+\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Contextual} {clig} {clig} {}
+\@@_define_opentype_onoffreset:nnnnn {Ligatures} {Historic} {hlig} {hlig} {}
+% \end{macrocode}
+% Emulate CM extra ligatures.
+% \begin{macrocode}
+%<*XE>
+\keys_define:nn {fontspec-opentype}
+ {
+ Ligatures / TeX .code:n = { \tl_set:Nn \l_@@_mapping_tl {tex-text} },
+ Ligatures / TeXOff .code:n = { \tl_clear:N \l_@@_mapping_tl },
+ Ligatures / TeXReset .code:n = { \tl_clear:N \l_@@_mapping_tl },
+ }
+%</XE>
+%<LU>\@@_define_opentype_onoffreset:nnnnn {Ligatures} {TeX} {} {tlig} {}
+% \end{macrocode}
+%
+% \subsection{Letters}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Letters}
+\@@_define_opentype_feature:nnnnn {Letters} {ResetAll} {} {}
+ {
+ +case,+smcp,+pcap,+c2sc,+c2pc,+unic,+rand,
+ -case,-smcp,-pcap,-c2sc,-c2pc,-unic,-rand
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {Letters} {Uppercase} {case} {case} {}
+\@@_define_opentype_onoffreset:nnnnn {Letters} {SmallCaps} {smcp} {smcp} {+pcap,+unic}
+\@@_define_opentype_onoffreset:nnnnn {Letters} {PetiteCaps} {pcap} {pcap} {+smcp,+unic}
+\@@_define_opentype_onoffreset:nnnnn {Letters} {UppercaseSmallCaps} {c2sc} {c2sc} {+c2pc,+unic}
+\@@_define_opentype_onoffreset:nnnnn {Letters} {UppercasePetiteCaps} {c2pc} {c2pc} {+c2sc,+unic}
+\@@_define_opentype_onoffreset:nnnnn {Letters} {Unicase} {unic} {unic} {}
+\@@_define_opentype_onoffreset:nnnnn {Letters} {Random} {rand} {rand} {}
+% \end{macrocode}
+%
+% \subsection{Numbers}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Numbers}
+\@@_define_opentype_feature:nnnnn {Numbers} {ResetAll} {} {}
+ {
+ +tnum,-tnum,
+ +pnum,-pnum,
+ +onum,-onum,
+ +lnum,-lnum,
+ +zero,-zero,
+ +anum,-anum,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {Numbers} {Monospaced} {tnum} {tnum} {+pnum,-pnum}
+\@@_define_opentype_onoffreset:nnnnn {Numbers} {Proportional} {pnum} {pnum} {+tnum,-tnum}
+\@@_define_opentype_onoffreset:nnnnn {Numbers} {Lowercase} {onum} {onum} {+lnum,-lnum}
+\@@_define_opentype_onoffreset:nnnnn {Numbers} {Uppercase} {lnum} {lnum} {+onum,-onum}
+\@@_define_opentype_onoffreset:nnnnn {Numbers} {SlashedZero} {zero} {zero} {}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\aliasfontfeatureoption {Numbers} {Monospaced} {Tabular}
+\aliasfontfeatureoption {Numbers} {Lowercase} {OldStyle}
+\aliasfontfeatureoption {Numbers} {Uppercase} {Lining}
+% \end{macrocode}
+%
+% |luaotload| provides a custom |anum| feature for replacing Latin
+% (AKA Arabic) numbers with Arabic (AKA Indic-Arabic). The same feature
+% maps to Farsi (Persian) numbers if font language is Farsi.
+% \begin{macrocode}
+%<LU> \@@_define_opentype_onoffreset:nnnnn {Numbers} {Arabic} {anum} {anum} {}
+% \end{macrocode}
+%
+% \subsection{Vertical position}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {VerticalPosition}
+\@@_define_opentype_feature:nnnnn {VerticalPosition} {ResetAll} {} {}
+ {
+ +sups,-sups,
+ +subs,-subs,
+ +ordn,-ordn,
+ +numr,-numr,
+ +dnom,-dnom,
+ +sinf,-sinf,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Superior} {sups} {sups} {+subs,+ordn,+numr,+dnom,+sinf}
+\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Inferior} {subs} {subs} {+sups,+ordn,+numr,+dnom,+sinf}
+\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Ordinal} {ordn} {ordn} {+sups,+subs,+numr,+dnom,+sinf}
+\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Numerator} {numr} {numr} {+sups,+subs,+ordn,+dnom,+sinf}
+\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {Denominator} {dnom} {dnom} {+sups,+subs,+ordn,+numr,+sinf}
+\@@_define_opentype_onoffreset:nnnnn {VerticalPosition} {ScientificInferior} {sinf} {sinf} {+sups,+subs,+ordn,+numr,+dnom}
+% \end{macrocode}
+%
+% \subsection{Contextuals}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Contextuals}
+\@@_define_opentype_feature:nnnnn {Contextuals} {ResetAll} {} {}
+ {
+ +cswh,-cswh,
+ +calt,-calt,
+ +init,-init,
+ +fina,-fina,
+ +falt,-falt,
+ +medi,-medi,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Swash} {cswh} {cswh} {}
+\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Alternate} {calt} {calt} {}
+\@@_define_opentype_onoffreset:nnnnn {Contextuals} {WordInitial} {init} {init} {}
+\@@_define_opentype_onoffreset:nnnnn {Contextuals} {WordFinal} {fina} {fina} {}
+\@@_define_opentype_onoffreset:nnnnn {Contextuals} {LineFinal} {falt} {falt} {}
+\@@_define_opentype_onoffreset:nnnnn {Contextuals} {Inner} {medi} {medi} {}
+% \end{macrocode}
+%
+% \subsection{Diacritics}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Diacritics}
+\@@_define_opentype_feature:nnnnn {Diacritics} {ResetAll} {} {}
+ {
+ +mark,-mark,
+ +mkmk,-mkmk,
+ +abvm,-abvm,
+ +blwm,-blwm,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToBase} {mark} {mark} {}
+\@@_define_opentype_onoffreset:nnnnn {Diacritics} {MarkToMark} {mkmk} {mkmk} {}
+\@@_define_opentype_onoffreset:nnnnn {Diacritics} {AboveBase} {abvm} {abvm} {}
+\@@_define_opentype_onoffreset:nnnnn {Diacritics} {BelowBase} {blwm} {blwm} {}
+% \end{macrocode}
+%
+% \subsection{Kerning}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Kerning}
+\@@_define_opentype_feature:nnnnn {Kerning} {ResetAll} {} {}
+ {
+ +cpsp,-cpsp,
+ +kern,-kern,
+ }
+\@@_define_opentype_onoffreset:nnnnn {Kerning} {Uppercase} {cpsp} {cpsp} {}
+\@@_define_opentype_feature:nnnnn {Kerning} {On} {kern} {+kern} {-kern}
+\@@_define_opentype_feature:nnnnn {Kerning} {Off} {kern} {-kern} {+kern}
+\@@_define_opentype_feature:nnnnn {Kerning} {Reset} {} {} {+kern,-kern}
+% \end{macrocode}
+%
+% \subsection{Fractions}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Fractions}
+\@@_define_opentype_feature:nnnnn {Fractions} {ResetAll} {} {}
+ {
+ +frac,-frac,
+ +afrc,-afrc,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_feature:nnnnn {Fractions} {On} {frac} {+frac} {}
+\@@_define_opentype_feature:nnnnn {Fractions} {Off} {frac} {-frac} {}
+\@@_define_opentype_feature:nnnnn {Fractions} {Reset} {} {} {+frac,-frac}
+\@@_define_opentype_onoffreset:nnnnn {Fractions} {Alternate} {afrc} {afrc} {-frac}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {LocalForms}
+\@@_define_opentype_feature:nnnnn {LocalForms} {On} {locl} {+locl} {}
+\@@_define_opentype_feature:nnnnn {LocalForms} {Off} {locl} {-locl} {}
+\@@_define_opentype_feature:nnnnn {LocalForms} {Reset} {} {} {+locl,-locl}
+% \end{macrocode}
+%
+
+% \subsection{Style}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Style}
+\@@_define_opentype_feature:nnnnn {Style} {ResetAll} {} {}
+ {
+ +salt,-salt,
+ +ital,-ital,
+ +ruby,-ruby,
+ +swsh,-swsh,
+ +hist,-hist,
+ +titl,-titl,
+ +hkna,-hkna,
+ +vkna,-vkna,
+ +ssty=0,-ssty=0,
+ +ssty=1,-ssty=1,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {Style} {Alternate} {salt} {salt} {}
+\@@_define_opentype_onoffreset:nnnnn {Style} {Italic} {ital} {ital} {}
+\@@_define_opentype_onoffreset:nnnnn {Style} {Ruby} {ruby} {ruby} {}
+\@@_define_opentype_onoffreset:nnnnn {Style} {Swash} {swsh} {swsh} {}
+\@@_define_opentype_onoffreset:nnnnn {Style} {Cursive} {swsh} {curs} {}
+\@@_define_opentype_onoffreset:nnnnn {Style} {Historic} {hist} {hist} {}
+\@@_define_opentype_onoffreset:nnnnn {Style} {Titling} {titl} {titl} {}
+\@@_define_opentype_onoffreset:nnnnn {Style} {TitlingCaps} {titl} {titl} {} % backwards compat
+\@@_define_opentype_onoffreset:nnnnn {Style} {HorizontalKana} {hkna} {hkna} {+vkna,+pkna}
+\@@_define_opentype_onoffreset:nnnnn {Style} {VerticalKana} {vkna} {vkna} {+hkna,+pkna}
+\@@_define_opentype_onoffreset:nnnnn {Style} {ProportionalKana} {pkna} {pkna} {+vkna,+hkna}
+\@@_define_opentype_feature:nnnnn {Style} {MathScript} {ssty} {+ssty=0} {+ssty=1}
+\@@_define_opentype_feature:nnnnn {Style} {MathScriptScript} {ssty} {+ssty=1} {+ssty=0}
+\@@_define_opentype_onoffreset:nnnnn {Style} {Uppercase} {case} {case} {}
+% \end{macrocode}
+%
+% \subsection{CJK shape}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {CJKShape}
+\@@_define_opentype_feature:nnnnn {CJKShape} {ResetAll} {} {}
+ {
+ +trad,-trad,
+ +smpl,-smpl,
+ +jp78,-jp78,
+ +jp83,-jp83,
+ +jp90,-jp90,
+ +jp04,-jp04,
+ +expt,-expt,
+ +nlck,-nlck,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Traditional} {trad} {trad} {+smpl,+jp78,+jp83,+jp90,+jp04,+expt,+nlck}
+\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Simplified} {smpl} {smpl} {+trad,+jp78,+jp83,+jp90,+jp04,+expt,+nlck}
+\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1978} {jp78} {jp78} {+trad,+smpl,+jp83,+jp90,+jp04,+expt,+nlck}
+\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1983} {jp83} {jp83} {+trad,+smpl,+jp78,+jp90,+jp04,+expt,+nlck}
+\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS1990} {jp90} {jp90} {+trad,+smpl,+jp78,+jp83,+jp04,+expt,+nlck}
+\@@_define_opentype_onoffreset:nnnnn {CJKShape} {JIS2004} {jp04} {jp04} {+trad,+smpl,+jp78,+jp83,+jp90,+expt,+nlck}
+\@@_define_opentype_onoffreset:nnnnn {CJKShape} {Expert} {expt} {expt} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+nlck}
+\@@_define_opentype_onoffreset:nnnnn {CJKShape} {NLC} {nlck} {nlck} {+trad,+smpl,+jp78,+jp83,+jp90,+jp04,+expt}
+% \end{macrocode}
+%
+% \subsection{Character width}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {CharacterWidth}
+\@@_define_opentype_feature:nnnnn {CharacterWidth} {ResetAll} {} {}
+ {
+ +pwid,-pwid,
+ +fwid,-fwid,
+ +hwid,-hwid,
+ +twid,-twid,
+ +qwid,-qwid,
+ +palt,-palt,
+ +halt,-halt,
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Proportional} {pwid} {pwid} {+fwid,+hwid,+twid,+qwid,+palt,+halt}
+\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Full} {fwid} {fwid} {+pwid,+hwid,+twid,+qwid,+palt,+halt}
+\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Half} {hwid} {hwid} {+pwid,+fwid,+twid,+qwid,+palt,+halt}
+\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Third} {twid} {twid} {+pwid,+fwid,+hwid,+qwid,+palt,+halt}
+\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {Quarter} {qwid} {qwid} {+pwid,+fwid,+hwid,+twid,+palt,+halt}
+\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateProportional} {palt} {palt} {+pwid,+fwid,+hwid,+twid,+qwid,+halt}
+\@@_define_opentype_onoffreset:nnnnn {CharacterWidth} {AlternateHalf} {halt} {halt} {+pwid,+fwid,+hwid,+twid,+qwid,+palt}
+% \end{macrocode}
+%
+% \subsection{Vertical}
+% According to spec |vkrn| must also activate |vpal| if available but for simplicity we don't do that here (yet?).
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Vertical}
+\@@_define_opentype_onoffreset:nnnnn {Vertical} {RotatedGlyphs} {vrt2} {vrt2} {+vrtr,+vert}
+\@@_define_opentype_onoffreset:nnnnn {Vertical} {AlternatesForRotation} {vrtr} {vrtr} {+vrt2}
+\@@_define_opentype_onoffreset:nnnnn {Vertical} {Alternates} {vert} {vert} {+vrt2}
+\@@_define_opentype_onoffreset:nnnnn {Vertical} {KanaAlternates} {vkna} {vkna} {+hkna}
+\@@_define_opentype_onoffreset:nnnnn {Vertical} {Kerning} {vkrn} {vkrn} {}
+\@@_define_opentype_onoffreset:nnnnn {Vertical} {AlternateMetrics} {valt} {valt} {+vhal,+vpal,+kern}
+\@@_define_opentype_onoffreset:nnnnn {Vertical} {HalfMetrics} {vhal} {vhal} {+valt,+vpal,+kern}
+\@@_define_opentype_onoffreset:nnnnn {Vertical} {ProportionalMetrics} {vpal} {vpal} {+valt,+vhal}
+% \end{macrocode}
+%
+%
+%
+%
+% \section{OpenType features that need numbering}
+%
+% \subsection{Alternate}
+%
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Alternate}
+\keys_define:nn {fontspec-opentype}
+ {
+ Alternate .default:n = {0} ,
+ Alternate .groups:n = {opentype},
+ Alternate / unknown .code:n =
+ {
+ \clist_map_inline:nn {#1}
+ { \@@_make_OT_feature:nnn {salt}{ +salt = ##1 }{} }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*LU>
+\keys_define:nn {fontspec-opentype}
+ {
+ Alternate / Random .code:n =
+ { \@@_make_OT_feature:nnn {salt}{ +salt = random }{} } ,
+ }
+%</LU>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\aliasfontfeature{Alternate}{StylisticAlternates}
+% \end{macrocode}
+%
+%
+% \subsection{Variant / StylisticSet}
+%
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Variant}
+\keys_define:nn {fontspec-opentype}
+ {
+ Variant .default:n = {0} ,
+ Variant .groups:n = {opentype} ,
+ Variant / unknown .code:n =
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_make_OT_feature:xxx { ss \two@digits {##1} } { +ss \two@digits {##1} } {}
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\aliasfontfeature{Variant}{StylisticSet}
+% \end{macrocode}
+%
+% \subsection{CharacterVariant}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {CharacterVariant}
+\use:x
+ {
+ \cs_new:Npn \exp_not:N \fontspec_parse_cv:w
+ ##1 \c_colon_str ##2 \c_colon_str ##3 \exp_not:N \q_nil
+ {
+ \@@_make_OT_feature:xxx
+ { cv \exp_not:N \two@digits {##1} }
+ { +cv \exp_not:N \two@digits {##1} = ##2 } {}
+ }
+ \keys_define:nn {fontspec-opentype}
+ {
+ CharacterVariant / unknown .code:n =
+ {
+ \clist_map_inline:nn {##1}
+ {
+ \exp_not:N \fontspec_parse_cv:w
+ ####1 \c_colon_str 0 \c_colon_str \exp_not:N \q_nil
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% Possibilities: \verb|a:0:\q_nil| or \verb|a:b:0:\q_nil|.
+%
+%
+% \subsection{Annotation}
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Annotation}
+\keys_define:nn {fontspec-opentype}
+ {
+ Annotation .default:n = {0} ,
+ Annotation .groups:n = {opentype},
+ Annotation / unknown .code:n =
+ {
+ \@@_make_OT_feature:nnn {nalt} {+nalt=#1} {}
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{Ornament}
+%
+% \begin{macrocode}
+\@@_define_opentype_feature_group:n {Ornament}
+\keys_define:nn {fontspec-opentype}
+ {
+ Ornament .default:n = {0} ,
+ Ornament .groups:n = {opentype},
+ Ornament / unknown .code:n =
+ {
+ \@@_make_OT_feature:nnn {ornm} { +ornm=#1 } {}
+ }
+ }
+% \end{macrocode}
+%
+%
+% \section{Script and Language}
+%
+%
+% \subsection{Script}
+%
+% \begin{macrocode}
+\keys_define:nn {fontspec-opentype}
+ {
+ Script .choice: ,
+ Script .groups:n = {opentype} ,
+ }
+\cs_new:Nn \fontspec_new_script:nn
+ {
+ \keys_define:nn {fontspec-opentype} { Script / #1 .code:n =
+ {
+%<debug>\typeout{Trying~[Script=#1]}
+ \bool_set_false:N \l_@@_scriptlang_exist_bool
+ \clist_map_inline:nn {#2}
+ {
+ \exp_args:No \@@_check_script:NnT \l_@@_fontface_cs_tl {####1}
+ {
+%<debug>\typeout{Script~tag~found:~####1}
+ \tl_set:Nn \l_@@_script_name_tl {#1}
+ \tl_set:Nn \l_@@_script_tl {####1}
+ \int_set:Nn \l_@@_script_int {\l_@@_strnum_int}
+ \bool_set_true:N \l_@@_scriptlang_exist_bool
+ \tl_gset:Nx \g_@@_single_feat_tl { script=####1 }
+ \clist_map_break:
+ }
+ }
+
+ \bool_if:NF \l_@@_scriptlang_exist_bool
+ {
+%<debug>\typeout{Script~not~found!}
+ \bool_if:nF { \str_if_eq_p:ee {#1} {CustomDefault} }
+ {
+ \tl_clear:N \l_@@_script_name_tl
+ \@@_warning:nxx {no-script} {\l_fontspec_fontname_tl} {#1}
+ }
+
+ \bool_if:nF
+ {
+ \str_if_eq_p:ee {#1} {Default} ||
+ \str_if_eq_p:ee {#1} {Latin} ||
+ \str_if_eq_p:ee {#1} {CustomDefault}
+ }
+ {
+ \keys_set:nn {fontspec-opentype} { Script = CustomDefault }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Language}
+%
+% \begin{macrocode}
+\keys_define:nn {fontspec-opentype}
+ {
+ Language .choice: ,
+ Language .groups:n = {opentype} ,
+ }
+\cs_new:Nn \fontspec_new_lang:nn
+ {
+ \keys_define:nn {fontspec-opentype} { Language / #1 .code:n =
+ {
+ \bool_set_false:N \l_@@_scriptlang_exist_bool
+ \clist_map_inline:nn {#2}
+ {
+ \exp_args:No \@@_check_lang:NnTF \l_@@_fontface_cs_tl {####1}
+ {
+ \tl_set:Nn \l_@@_lang_tl {####1}
+ \int_set:Nn \l_@@_language_int {\l_@@_strnum_int}
+ \tl_gset:Nx \g_@@_single_feat_tl { language=####1 }
+ \bool_set_true:N \l_@@_scriptlang_exist_bool
+ \clist_map_break:
+ }
+ }
+ \bool_if:NF \l_@@_scriptlang_exist_bool
+ {
+ \@@_warning:nx {language-not-exist} {#1}
+ \keys_set:nn {fontspec-opentype} { Language = Default }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Language=Default}
+% These are special-cased to avoid the additional logic above.
+% From memory, the OpenType default
+% language is hardcoded to have a zero value,
+% although this might be some \XeTeX-specific thing.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-opentype} { Language / Default }
+ {
+ \tl_set:Nn \l_@@_lang_tl {dflt}
+ \int_zero:N \l_@@_language_int
+ \tl_gset:Nn \g_@@_single_feat_tl { language=dflt }
+ }
+% \end{macrocode}
+%
+%
+% \section{Backwards compatibility}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_ot_compat:nn
+ {
+ \aliasfontfeatureoption {#1} {#2Off} {No#2}
+ }
+\@@_ot_compat:nn {Ligatures} {Rare}
+\@@_ot_compat:nn {Ligatures} {Required}
+\@@_ot_compat:nn {Ligatures} {Common}
+\@@_ot_compat:nn {Ligatures} {Discretionary}
+\@@_ot_compat:nn {Ligatures} {Contextual}
+\@@_ot_compat:nn {Ligatures} {Historic}
+\@@_ot_compat:nn {Numbers} {SlashedZero}
+\@@_ot_compat:nn {Contextuals} {Swash}
+\@@_ot_compat:nn {Contextuals} {Alternate}
+\@@_ot_compat:nn {Contextuals} {WordInitial}
+\@@_ot_compat:nn {Contextuals} {WordFinal}
+\@@_ot_compat:nn {Contextuals} {LineFinal}
+\@@_ot_compat:nn {Contextuals} {Inner}
+\@@_ot_compat:nn {Diacritics} {MarkToBase}
+\@@_ot_compat:nn {Diacritics} {MarkToMark}
+\@@_ot_compat:nn {Diacritics} {AboveBase}
+\@@_ot_compat:nn {Diacritics} {BelowBase}
+% \end{macrocode}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-fontload.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-fontload.dtx
new file mode 100644
index 0000000000..ac403028e1
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-fontload.dtx
@@ -0,0 +1,136 @@
+%%^^A%% fontspec-code-fontload.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{expl3 interface for primitive font loading}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% \begin{macro}{\@@_primitive_font_set:Nnn,\@@_primitive_font_gset:Nnn}
+% \begin{macrocode}
+\cs_set:Npn \@@_primitive_font_set:Nnn #1#2#3
+ {
+ \font #1 = #2 ~at~ \dim_eval:n {#3} \scan_stop:
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_set:Npn \@@_primitive_font_gset:Nnn #1#2#3
+ {
+ \global \font #1 = #2 ~at~ \dim_eval:n {#3} \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_suppress_not_found_error:}
+% \begin{macrocode}
+\cs_set:Npn \@@_font_suppress_not_found_error:
+ {
+ \int_set:Nn \suppressfontnotfounderror {1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[pTF]{\@@_primitive_font_if_null:N}
+% \begin{macrocode}
+\prg_set_conditional:Nnn \@@_primitive_font_if_null:N {p,TF,T,F}
+ {
+ \ifx #1 \nullfont
+ \prg_return_true:
+ \else
+ \prg_return_false:
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[pTF]{\@@_primitive_font_set:NnnTF,\@@_primitive_font_gset:NnnTF}
+% \begin{macrocode}
+\prg_set_conditional:Nnn \@@_primitive_font_set:Nnn {TF,T,F}
+ {
+ \@@_primitive_font_set:Nnn #1 {#2} {#3}
+ \@@_primitive_font_if_null:NTF #1 {\prg_return_false:} {\prg_return_true:}
+ }
+\prg_set_conditional:Nnn \@@_primitive_font_gset:Nnn {TF,T,F}
+ {
+ \@@_primitive_font_gset:Nnn #1 {#2} {#3}
+ \@@_primitive_font_if_null:NTF #1 {\prg_return_false:} {\prg_return_true:}
+ }
+\cs_set:Npn \@@_primitive_font_set:Onn { \exp_last_unbraced:No \@@_primitive_font_set:Nnn }
+\cs_set:Npn \@@_primitive_font_set:OnnF { \exp_last_unbraced:No \@@_primitive_font_set:NnnF }
+\cs_set:Npn \@@_primitive_font_gset:Onn { \exp_last_unbraced:No \@@_primitive_font_gset:Nnn }
+\cs_set:Npn \@@_primitive_font_gset:OnnF { \exp_last_unbraced:No \@@_primitive_font_gset:NnnF }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[TF]{\@@_primitive_font_if_exist:n}
+% \begin{macrocode}
+\prg_set_conditional:Nnn \@@_primitive_font_if_exist:n {TF,T,F}
+ {
+ \group_begin:
+ \@@_font_suppress_not_found_error:
+ \@@_primitive_font_set:Nnn \l_@@_primitive_font {#1} { \f@size pt - 1sp }
+ \@@_primitive_font_if_null:NTF \l_@@_primitive_font
+ { \group_end: \prg_return_false: }
+ { \group_end: \prg_return_true: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_primitive_font_glyph_if_exist:NnTF}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_primitive_font_glyph_if_exist:Nn {p,TF,T,F}
+ {
+ \tex_iffontchar:D #1 #2 \scan_stop:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_primitive_font_set_hyphenchar:Nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_primitive_font_set_hyphenchar:Nn
+ {
+ \tex_hyphenchar:D #1 = #2 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_primitive_font_get_name:N}
+% \begin{macro}{\@@_primitive_font_current_name:}
+% \begin{macrocode}
+\cs_new_eq:NN \@@_primitive_font_get_name:N \fontname
+\cs_new:Npn \@@_primitive_font_current_name:
+ {
+ \@@_primitive_font_get_name:N \tex_font:D
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-graphite.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-graphite.dtx
new file mode 100644
index 0000000000..c840d2af60
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-graphite.dtx
@@ -0,0 +1,128 @@
+%%^^A%% fontspec-code-graphite.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{Graphite/AAT code}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec&XE>
+% \end{macrocode}
+% \fi
+%
+
+
+% \begin{macro}{\@@_define_aat_feature_group:n}
+% \begin{macrocode}
+\cs_new:Nn \@@_define_aat_feature_group:n
+ {
+ \keys_define:nn {fontspec-aat} { #1 .multichoice: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_define_aat_feature:nnnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_define_aat_feature:nnnn
+ {
+ \keys_define:nn {fontspec-aat}
+ {
+ #1/#2 .code:n = { \@@_make_AAT_feature:nn {#3}{#4} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+
+% \begin{macro}{\@@_make_AAT_feature:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_make_AAT_feature:nn
+ {
+ \tl_if_empty:nTF {#1}
+ { \@@_warning:n {aat-feature-not-exist} }
+ {
+ \exp_args:No \@@_make_AAT_feature_string:NnnTF \l_@@_fontface_cs_tl {#1} {#2}
+ {
+ \@@_update_featstr:n {\l_fontspec_feature_string_tl}
+ }
+ {
+ \@@_warning:nx {aat-feature-not-exist-in-font} {#1,#2}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_make_AAT_feature_string:NnnTF}
+% This macro takes the numerical codes for a font feature and
+% creates a specified macro containing the string required in the
+% font definition to turn that feature on or off. Used primarily in
+% [...], but also used to check if small caps
+% exists in the requested font (see page~\pageref{mac:makesmallcaps}).
+%
+% For exclusive selectors, it's easy; just grab the string:
+% For \emph{non}-exclusive selectors, it's a little more complex.
+% If the selector is even, it corresponds to switching the feature on.
+% If the selector is \emph{odd}, it corresponds to switching the feature off.
+% But \XeTeX\ doesn't return a selector string for this number, since the
+% feature is defined for the `switching on' value. So we need to check the
+% selector of the previous number, and then prefix the feature string with |!|
+% to denote the switch.
+%
+% Finally, save out the complete feature string in \cmd\l_fontspec_feature_string_tl.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_make_AAT_feature_string:Nnn {TF,T,F}
+ {
+ \tl_set:Nx \l_@@_tmpa_tl { \XeTeXfeaturename #1 #2 }
+ \tl_if_empty:NTF \l_@@_tmpa_tl
+ { \prg_return_false: }
+ {
+ \int_compare:nTF { \XeTeXisexclusivefeature #1 #2 > 0 }
+ {
+ \tl_set:Nx \l_@@_tmpb_tl {\XeTeXselectorname #1 #2\space #3}
+ }
+ {
+ \int_if_even:nTF {#3}
+ {
+ \tl_set:Nx \l_@@_tmpb_tl {\XeTeXselectorname #1 #2\space #3}
+ }
+ {
+ \tl_set:Nx \l_@@_tmpb_tl
+ {
+ \XeTeXselectorname #1 #2\space \numexpr#3-1\relax
+ }
+ \tl_if_empty:NF \l_@@_tmpb_tl { \tl_put_left:Nn \l_@@_tmpb_tl {!} }
+ }
+ }
+
+ \tl_if_empty:NTF \l_@@_tmpb_tl
+ { \prg_return_false: }
+ {
+ \tl_set:Nx \l_fontspec_feature_string_tl { \l_@@_tmpa_tl = \l_@@_tmpb_tl }
+ \prg_return_true:
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec&XE>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-interfaces.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-interfaces.dtx
new file mode 100644
index 0000000000..b5c909fcfc
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-interfaces.dtx
@@ -0,0 +1,296 @@
+%%^^A%% fontspec-code-interfaces.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{User commands}\label{sec:codeuser}
+%
+% This section contains the definitions of the commands detailed in
+% the user documentation. Only the `top level' definitions of the
+% commands are contained herein; they all use or define macros which
+% are defined or used later on in \vref{sec:codeinternal}.
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% \begin{macrocode}
+\NewDocumentCommand \fontspec { O{} m O{} }
+ {
+ \@@_main_fontspec:nn {#1,#3} {#2}
+ \ignorespaces
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setmainfont { O{} m O{} }
+ {
+ \@@_main_setmainfont:nn {#1,#3} {#2}
+ \ignorespaces
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setsansfont { O{} m O{} }
+ {
+ \@@_main_setsansfont:nn {#1,#3} {#2}
+ \ignorespaces
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setmonofont { O{} m O{} }
+ {
+ \@@_main_setmonofont:nn {#1,#3} {#2}
+ \ignorespaces
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setmathrm { O{} m O{} }
+ {
+ \@@_main_setmathrm:nn {#1,#3} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setboldmathrm { O{} m O{} }
+ {
+ \@@_main_setboldmathrm:nn {#1,#3} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setmathsf { O{} m O{} }
+ {
+ \@@_main_setmathsf:nn {#1,#3} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setmathtt { O{} m O{} }
+ {
+ \@@_main_setmathtt:nn {#1,#3} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\setromanfont}
+% This is the old name for \cs{setmainfont}, retained \emph{ad infinitum}
+% for backwards compatibility. It was deprecated in 2010.
+% \begin{macrocode}
+\NewDocumentCommand \setromanfont { O{} m O{} }
+ {
+ \@@_main_setmainfont:nn {#1,#3} {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\NewDocumentCommand \newfontfamily { m O{} m O{} }
+ {
+ \@@_main_newfontfamily:NnnN #1 {#2,#4} {#3} \NewDocumentCommand
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \renewfontfamily { m O{} m O{} }
+ {
+ \@@_main_newfontfamily:NnnN #1 {#2,#4} {#3} \RenewDocumentCommand
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setfontfamily { m O{} m O{} }
+ {
+ \@@_main_newfontfamily:NnnN #1 {#2,#4} {#3} \DeclareDocumentCommand
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \providefontfamily { m O{} m O{} }
+ {
+ \@@_main_newfontfamily:NnnN #1 {#2,#4} {#3} \ProvideDocumentCommand
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \newfontface { m O{} m O{} }
+ {
+ \@@_main_newfontface:NnnN #1 {#2,#4} {#3} \NewDocumentCommand
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \renewfontface { m O{} m O{} }
+ {
+ \@@_main_newfontface:NnnN #1 {#2,#4} {#3} \RenewDocumentCommand
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \setfontface { m O{} m O{} }
+ {
+ \@@_main_newfontface:NnnN #1 {#2,#4} {#3} \DeclareDocumentCommand
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \providefontface { m O{} m O{} }
+ {
+ \@@_main_newfontface:NnnN #1 {#2,#4} {#3} \ProvideDocumentCommand
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\defaultfontfeatures}
+% This macro takes one argument that consists of all of feature
+% options that will be applied by default to all subsequent \cs{fontspec} commands.
+% \begin{macrocode}
+\NewDocumentCommand \defaultfontfeatures { t+ o m }
+ {
+ \IfNoValueTF {#2}
+ { \@@_set_default_features:nn {#1} {#3} }
+ { \@@_set_font_default_features:nnn {#1} {#2} {#3} }
+ \ignorespaces
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\NewDocumentCommand \addfontfeatures {m}
+ {
+ \@@_main_addfontfeatures:n {#1}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \addfontfeature {m}
+ {
+ \@@_main_addfontfeatures:n {#1}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \newfontfeature {mm}
+ {
+ \@@_main_newfontfeature:nn {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \newAATfeature {mmmm}
+ {
+ \@@_main_newAATfeature:nnnn {#1} {#2} {#3} {#4}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \newopentypefeature {mmm}
+ {
+ \@@_main_newopentypefeature:nnn {#1} {#2} {#3}
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\newICUfeature}
+% Deprecated.
+% \begin{macrocode}
+\NewDocumentCommand \newICUfeature {mmm}
+ {
+ \@@_main_newopentypefeature:nnn {#1} {#2} {#3}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\NewDocumentCommand \aliasfontfeature {mm}
+ {
+ \@@_main_aliasfontfeature:nn {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \aliasfontfeatureoption {mmm}
+ {
+ \@@_main_aliasfontfeatureoption:nnn {#1} {#2} {#3}
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\newfontscript}
+% Mostly used internally, but also possibly useful for users, to define new OpenType
+% `scripts', mapping logical names to OpenType script tags.
+% \begin{macrocode}
+\NewDocumentCommand \newfontscript {mm}
+ {
+ \fontspec_new_script:nn {#1} {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newfontlanguage}
+% Mostly used internally, but also possibly useful for users, to define new OpenType
+% `languages', mapping logical names to OpenType language tags.
+% \begin{macrocode}
+\NewDocumentCommand \newfontlanguage {mm}
+ {
+ \fontspec_new_lang:nn {#1} {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\NewDocumentCommand \DeclareFontExtensions {m}
+ {
+ \@@_main_DeclareFontExtensions:n {#1}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\NewDocumentCommand \IfFontFeatureActiveTF {mmm}
+ {
+ \@@_main_IfFontFeatureActiveTF:nnn {#1} {#2} {#3}
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\oldstylenums}
+% This is performed only after the preamble to overwrite any redefinition by \pkg{textcomp}:
+% \begin{macrocode}
+\AtBeginDocument
+ {
+ \RenewDocumentCommand \oldstylenums {m}
+ {
+ \@@_main_oldstylenums:n {#1}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\liningnums}
+% \begin{macrocode}
+\NewDocumentCommand \liningnums {m}
+ {
+ \@@_main_liningnums:n {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-internal.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-internal.dtx
new file mode 100644
index 0000000000..375fc7be2e
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-internal.dtx
@@ -0,0 +1,1217 @@
+%%^^A%% fontspec-code-internal.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{Internals}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% \subsection{The main function for setting fonts}
+%
+% \begin{macro}{\@@_select_font_family:nn}
+% This is the command that defines font families for use, the underlying
+% procedure of all \cmd\fontspec-like commands. Given a
+% list of font features (|#1|) for a requested font (|#2|),
+% it will define an NFSS
+% family for that font and put the family name (globally) into \cs{l_fontspec_family_tl}.
+% The \TeX\ `\cs{font}' command is (globally) stored in \cs{l_fontspec_font}.
+%
+% This macro does its processing inside a group to attempt to restrict the scope of its internal processing.
+% This works to some degree to insulate the internal commands from having to be manually cleared.
+%
+% Some often-used variables to know about:
+% \begin{itemize}
+% \item \cmd{\l_fontspec_fontname_tl} is used as the generic name of the font being defined.
+% \item \cmd{\l_@@_fontid_tl} is the unique identifier of the font with all its features.
+% \item \cmd{\l_@@_fontname_up_tl} is the font specifically to be used as the upright font.
+% \item \cmd{\l_@@_basename_tl} is the (immutable) original argument used for |*|-replacing.
+% \item \cmd{\l_fontspec_font} is the plain \TeX{} font of the upright font requested.
+% \end{itemize}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_select_font_family:nn
+ {
+%<debug>\typeout{^^J^^J::::::::::::::::::::::::::::::^^J:: fontspec_select:nn~ {#1}~ {#2} }
+ \group_begin:
+ \@@_font_suppress_not_found_error:
+ \@@_init:
+
+ \@@_sanitise_fontname:Nn \l_fontspec_fontname_tl {#2}
+ \@@_sanitise_fontname:Nn \l_@@_fontname_up_tl {#2}
+ \@@_sanitise_fontname:Nn \l_@@_basename_tl {#2}
+
+ \@@_if_detect_external:nT {#2}
+ { \keys_set:nn {fontspec-preparse-external} {Path} }
+
+ \keys_set_known:nn {fontspec-preparse-cfg} {#1}
+
+ \@@_init_ttc:n {#2}
+ \@@_load_external_fontoptions:Nn \l_fontspec_fontname_tl {#2}
+
+ \@@_extract_all_features:n {#1}
+ \tl_set:Nx \l_@@_fontid_tl { \tl_to_str:N \l_fontspec_fontname_tl-:-\tl_to_str:N \l_@@_all_features_clist }
+
+%<debug>\typeout{fontid: \l_@@_fontid_tl}
+
+ \@@_preparse_features:
+ \@@_load_font:
+ \@@_set_scriptlang:
+ \@@_get_features:n {}
+ \bool_set_false:N \l_@@_firsttime_bool
+
+ \@@_save_family_needed:nTF {#2}
+ {
+ \@@_save_family:nn {#1} {#2}
+%<debug>\@@_warning:nxx {defining-font} {#1} {#2}
+ }
+ {
+%<debug>\typeout{Font~ family~ already~ defined.}
+ }
+ \group_end:
+
+ \tl_set_eq:NN \l_fontspec_family_tl \g_@@_nfss_family_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_select:nn}
+% This old name has been used by 3rd party packages so for compatibility:
+% \begin{macrocode}
+\cs_set_eq:NN \fontspec_select:nn \@@_select_font_family:nn %% deprecated, for compatibility only
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_sanitise_fontname:Nn}
+% Assigns font name |#2| to token list variable |#1| and strips extension(s) from it in the case of an external font.
+% We strip spaces for luatex for consistency with luaotfload, although I'm not sure this is necessary any more.
+% At one stage this also lowercased the name, but this step has been removed unless someone can remind me why it was necessary.
+% \begin{macrocode}
+\cs_new:Nn \@@_sanitise_fontname:Nn
+ {
+ \tl_set:Nx #1 {#2}
+%<LU> \tl_remove_all:Nn #1 {~}
+ \clist_map_inline:Nn \l_@@_extensions_clist
+ {
+ \tl_if_in:NnT #1 {##1}
+ {
+ \tl_remove_once:Nn #1 {##1}
+ \tl_set:Nn \l_@@_extension_tl {##1}
+ \clist_map_break:
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_if_detect_external:nT}
+% Check if either the fontname ends with a known font extension.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_if_detect_external:n {T}
+ {
+%<debug> \typeout{:: @@_if_detect_external:n { \exp_not:n {#1} } }
+ \clist_map_inline:Nn \l_@@_extensions_clist
+ {
+ \bool_set_false:N \l_@@_tmpa_bool
+ \exp_args:Nx % <- this should be handled earlier
+ \tl_if_in:nnT {#1 <= end_of_string} {##1 <= end_of_string}
+ { \bool_set_true:N \l_@@_tmpa_bool \clist_map_break: }
+ }
+ \bool_if:NTF \l_@@_tmpa_bool \prg_return_true: \prg_return_false:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_init_ttc:n}
+% For TTC fonts we assume they will be loading the italic/bold fonts from the same file,
+% so prepopulate the fontnames to avoid needing to do it manually.
+% \begin{macrocode}
+\cs_new:Nn \@@_init_ttc:n
+ {
+ \str_if_eq:eeT { \str_lowercase:f {\l_@@_extension_tl} } {.ttc}
+ {
+ \@@_sanitise_fontname:Nn \l_@@_fontname_it_tl {#1}
+ \@@_sanitise_fontname:Nn \l_@@_fontname_bf_tl {#1}
+ \@@_sanitise_fontname:Nn \l_@@_fontname_bfit_tl {#1}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_external_fontoptions:Nn}
+% Load a possible \texttt{.fontspec} font configuration file.
+% This file could set font-specific options for the font about to be loaded.
+% \begin{macrocode}
+\cs_new:Nn \@@_load_external_fontoptions:Nn
+ {
+ \bool_if:NT \l_@@_fontcfg_bool
+ {
+%<debug> \typeout{:: @@_load_external_fontoptions:Nn \exp_not:N #1 {#2} }
+ \@@_sanitise_fontname:Nn #1 {#2}
+ \tl_set:Nx \l_@@_ext_filename_tl {#1.fontspec}
+ \tl_remove_all:Nn \l_@@_ext_filename_tl {~}
+ \prop_if_in:NVF \g_@@_fontopts_prop #1
+ {
+ \exp_args:No \file_if_exist:nT { \l_@@_ext_filename_tl }
+ { \file_input:n { \l_@@_ext_filename_tl } }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_extract_all_features:}
+% \begin{macrocode}
+\cs_new:Nn \@@_extract_all_features:n
+ {
+%<debug> \typeout{:: @@_extract_all_features:n { \unexpanded {#1} } }
+ \bool_if:NTF \l_@@_disable_defaults_bool
+ {
+ \clist_set:Nx \l_@@_all_features_clist {#1}
+ }
+ {
+ \prop_get:NVNF \g_@@_fontopts_prop \l_fontspec_fontname_tl \l_@@_fontopts_clist
+ { \clist_clear:N \l_@@_fontopts_clist }
+
+ \prop_get:NVNF \g_@@_fontopts_prop \l_@@_family_label_tl \l_@@_family_fontopts_clist
+ { \clist_clear:N \l_@@_family_fontopts_clist }
+ \tl_clear:N \l_@@_family_label_tl
+
+ \clist_set:Nx \l_@@_all_features_clist
+ {
+ \g_@@_default_fontopts_clist,
+ \l_@@_family_fontopts_clist,
+ \l_@@_fontopts_clist,
+ #1
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_preparse_features:}
+% \darg{feature options}
+% \darg{font name}
+% Perform the (multi-step) feature parsing process.
+%
+% Convert the requested features to font definition
+% strings. First the features are parsed for information about font
+% loading (whether it's a named font or external font, etc.), and then
+% information is extracted for the names of the other shape fonts.
+% \begin{macrocode}
+\cs_new:Nn \@@_preparse_features:
+ {
+%<debug> \typeout{:: @@_preparse_features:}
+% \end{macrocode}
+% Detect if external fonts are to be used, possibly automatically, and
+% parse fontspec features for bold/italic fonts and their features.
+% \begin{macrocode}
+
+ \@@_keys_set_known:nxN {fontspec-preparse-external}
+ { \l_@@_all_features_clist }
+ \l_@@_keys_leftover_clist
+
+% \end{macrocode}
+% When \cmd{\l_fontspec_fontname_tl} is augmented with a prefix or whatever to create
+% the name of the upright font (\cmd{\l_@@_fontname_up_tl}), this latter is the new `general
+% font name' to use.
+% \begin{macrocode}
+ \tl_set_eq:NN \l_fontspec_fontname_tl \l_@@_fontname_up_tl
+ \@@_keys_set_known:nxN {fontspec-renderer} {\l_@@_keys_leftover_clist}
+ \l_@@_keys_leftover_clist
+ \@@_keys_set_known:nxN {fontspec-preparse} {\l_@@_keys_leftover_clist}
+ \l_@@_fontfeat_clist
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_load_font:}
+% \begin{macrocode}
+\cs_new:Nn \@@_load_font:
+ {
+%<debug>\typeout{:: @@_load_font}
+
+%<debug>\typeout{Set~ base~ font~ for~ preliminary~ analysis: \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} }
+ \@@_primitive_font_set:NnnF \l_@@_test_font
+ { \@@_construct_font_call:nn { \l_@@_fontname_up_tl } { \l_@@_pre_feat_sclist } }
+ { \f@size pt - 2sp }
+ { \@@_error:nx {font-not-found} {\l_@@_fontname_up_tl} }
+
+%<debug>\typeout{Set~ base~ font~ properly: \@@_construct_font_call:nn { \l_@@_fontname_up_tl } {} }
+ \@@_set_font_type:N \l_@@_test_font
+ \@@_primitive_font_gset:Onn \l_@@_fontface_cs_tl
+ { \@@_construct_font_call:nn { \l_@@_fontname_up_tl } { \l_@@_pre_feat_sclist } }
+ { \f@size pt + 2sp }
+
+ \l_@@_fontface_cs_tl % this is necessary for LuaLaTeX to check the scripts properly
+
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_construct_font_call:nn}
+% Constructs the complete font invocation.
+% \darg{Base name}
+% \darg{Extension}
+% \darg{TTC Index}
+% \darg{Renderer}
+% \darg{Optical size}
+% \darg{Font features}
+% We check if \meta{Font features} are empty and if so don't add in the separator colon.
+% \begin{macrocode}
+\cs_new:Nn \@@_construct_font_call:nnnnnn
+ {
+%<XE> " \@@_fontname_wrap:n { #1 #2 #3 }
+%<LU> " \@@_fontname_wrap:n { #1 #2 } #3
+ #4 #5
+ \str_if_eq:eeF {#6}{} {:#6} "
+ }
+% \end{macrocode}
+% In practice, we don't use the six-argument version, since most arguments are constructed on-the-fly:
+% \begin{macrocode}
+\cs_new:Nn \@@_construct_font_call:nn
+ {
+ \@@_construct_font_call:nnnnnn
+ {#1}
+ \l_@@_extension_tl
+ \l_@@_ttc_index_tl
+ \l_@@_renderer_tl
+ \l_@@_optical_size_tl
+ {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_is_file:,\@@_font_is_name:}
+% The \cs{@@_fontname_wrap:n} command takes the font name and either passes it through unchanged or wraps it in the syntax for loading a font `by filename'.
+% \XeTeX's syntax is followed since \pkg{luaotfload} provides compatibility.
+% \begin{macrocode}
+\cs_new:Nn \@@_font_is_name:
+ {
+ \cs_set_eq:NN \@@_fontname_wrap:n \use:n
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_font_is_file:
+ {
+ \cs_set:Npn \@@_fontname_wrap:n ##1 { [ \l_@@_font_path_tl ##1 ] }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_scriptlang:}
+% Only necessary for OpenType fonts.
+% First check if the font supports scripts, then apply defaults if
+% none are explicitly requested. Similarly with the language settings.
+% \begin{macrocode}
+\cs_new:Nn \@@_set_scriptlang:
+ {
+%<debug> \typeout{:: _set_scriptlang:}
+ \bool_if:NT \l_@@_firsttime_bool
+ {
+ \tl_if_empty:NF \l_@@_script_name_tl
+ {
+%<debug> \typeout{:::: Script=\l_@@_script_name_tl, Language=\l_@@_lang_name_tl}
+ \keys_set:nx {fontspec-opentype} {Script=\l_@@_script_name_tl}
+ \keys_set:nx {fontspec-opentype} {Language=\l_@@_lang_name_tl}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_get_features:Nn}
+% This macro is a wrapper for |\keys_set:nn| which expands and adds a
+% default specification to the original passed options. It begins by
+% initialising the commands used to hold font-feature specific
+% strings.
+% Its argument is any additional features to prepend to the default.
+%
+% Do not set the colour if not explicitly spec'd else \verb|\color| (using
+% specials) will not work.
+% \begin{macrocode}
+\cs_new:Nn \@@_get_features:n
+ {
+%<debug> \typeout{:: @@_get_features:Nn { \exp_not:n {#1} } }
+ \@@_init_fontface:
+ \@@_keys_set_known:nxN {fontspec-renderer} {\l_@@_fontfeat_clist,#1}
+ \l_@@_keys_leftover_clist
+ \@@_keys_set_known:nxN {fontspec} {\l_@@_keys_leftover_clist} \l_@@_keys_leftover_clist
+%<*XE>
+ \bool_if:NTF \l_@@_ot_bool
+ {
+%<debug> \typeout{::: Setting~ keys~ for~ OpenType~ font~ features:~"\l_@@_keys_leftover_clist"}
+ \keys_set:nV {fontspec-opentype} \l_@@_keys_leftover_clist
+ }
+ {
+%<debug> \typeout{::: Setting~ keys~ for~ AAT/Graphite~ font~ features:~"\l_@@_keys_leftover_clist"}
+ \bool_if:nT { \l_@@_atsui_bool || \l_@@_graphite_bool }
+ { \keys_set:nV {fontspec-aat} \l_@@_keys_leftover_clist }
+ }
+%</XE>
+%<*LU>
+%<debug> \typeout{::: Setting~ keys~ for~ OpenType~ font~ features:~"\l_@@_keys_leftover_clist"}
+ \keys_set:nV {fontspec-opentype} \l_@@_keys_leftover_clist
+%</LU>
+
+ \tl_if_empty:NF \l_@@_mapping_tl
+ { \@@_update_featstr:n { mapping = \l_@@_mapping_tl } }
+
+ \str_if_eq:eeF { \l_@@_hexcol_tl \l_@@_opacity_tl }
+ { \c_@@_hexcol_tl \c_@@_opacity_tl }
+ { \@@_update_featstr:n { color = \l_@@_hexcol_tl\l_@@_opacity_tl } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_save_family_needed:nTF}
+% Check if the family is unique and, if so, save its information.
+% (\cs{addfontfeature} and other macros use this data.)
+% Then the font family and its shapes are defined in the NFSS.
+%
+% Now we have a unique (in fact, too unique!) string that contains
+% the family name and every option in abbreviated form. This is used
+% with a counter to create a simple NFSS family name for the font we're
+% selecting.
+%
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_save_family_needed:n { TF }
+ {
+
+%<debug> \typeout{save~ family:~ #1}
+%<debug> \typeout{== fontid_tl: "\l_@@_fontid_tl".}
+
+ \tl_if_empty:NTF \l_@@_nfss_fam_tl
+ {
+ \prop_get:NVNTF \g_@@_fontid_family_prop \l_@@_fontid_tl \l_@@_tmp_tl
+ {
+ \tl_gset_eq:NN \g_@@_nfss_family_tl \l_@@_tmp_tl
+ \prg_return_false:
+ }
+ {
+ \tl_set:Nx \l_@@_tmp_tl {#1}
+ \tl_remove_all:Nn \l_@@_tmp_tl { ~ }
+ \@@_save_fontid_family:VV \l_@@_fontid_tl \l_@@_tmp_tl
+ \prg_return_true:
+ }
+ }
+ {
+ \tl_gset_eq:NN \g_@@_nfss_family_tl \l_@@_nfss_fam_tl
+ \cs_undefine:c { g_@@_fontinfo_ \g_@@_nfss_family_tl _prop }
+ \prg_return_true:
+ }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Nn \@@_save_fontid_family:nn
+ {
+ \prop_get:NnNTF \g_@@_family_int_prop {#2} \l_@@_tmp_tl
+ {
+ \tl_set:Nx \l_@@_tmp_tl
+ { \int_eval:n { \l_@@_tmp_tl + 1 } }
+ }
+ { \tl_set:Nn \l_@@_tmp_tl { 0 } }
+ \prop_gput:NnV \g_@@_family_int_prop {#2} \l_@@_tmp_tl
+ \tl_gset:Nx \g_@@_nfss_family_tl { #2 ( \l_@@_tmp_tl ) }
+ \prop_gput:NnV \g_@@_fontid_family_prop {#1} \g_@@_nfss_family_tl
+ }
+\cs_generate_variant:Nn \@@_save_fontid_family:nn { VV }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_save_family:nn}
+% Saves the relevant font information for future processing.
+% \begin{macrocode}
+\cs_new:Nn \@@_save_family:nn
+ {
+ \@@_save_fontinfo:n {#2}
+ \@@_find_autofonts:
+ \DeclareFontFamily{\g_@@_nfss_enc_tl}{\g_@@_nfss_family_tl}{}
+ \@@_set_faces:
+ \@@_info:nxx {defining-font} {#1} {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_save_fontinfo:n}
+% Saves the relevant font information for future processing.
+% \begin{macrocode}
+\cs_new:Nn \@@_save_fontinfo:n
+ {
+ \prop_new:c {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop}
+ \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {fontname} { #1 }
+ \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {options} { \l_@@_all_features_clist }
+ \prop_gput:cnx {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {fontdef}
+ {
+ \@@_construct_font_call:nn {\l_fontspec_fontname_tl}
+ { \l_@@_pre_feat_sclist \g_@@_rawfeatures_sclist }
+ }
+ \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {script-num} \l_@@_script_int
+ \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {lang-num} \l_@@_language_int
+ \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {script-tag} \l_@@_script_tl
+ \prop_gput:cnV {g_@@_fontinfo_ \g_@@_nfss_family_tl _prop} {lang-tag} \l_@@_lang_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Setting font shapes in a family}
+%
+% All NFSS specifications take their default values, so if any of them
+% are redefined, the shapes will be selected to fit in with the
+% current state. For example, if \cmd\bfdefault\ is redefined to |b|, all
+% bold shapes defined by this package will also be assigned to |b|.
+%
+% The combination shapes are searched first because they use information that may be redefined in the single cases.
+% E.g., if no bold font is specified then |set_autofont| will attempt to set it.
+% This has subtle/small ramifications on the logic of choosing the bold italic font.
+%
+% \begin{macro}{\@@_find_autofonts:}
+% \begin{macrocode}
+\cs_new:Nn \@@_find_autofonts:
+ {
+ \bool_if:nF {\l_@@_noit_bool || \l_@@_nobf_bool}
+ {
+ \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_@@_fontname_it_tl} {/B}
+ \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_@@_fontname_bf_tl} {/I}
+ \@@_set_autofont:Nnn \l_@@_fontname_bfit_tl {\l_fontspec_fontname_tl} {/BI}
+ }
+
+ \bool_if:NF \l_@@_nobf_bool
+ {
+ \@@_set_autofont:Nnn \l_@@_fontname_bf_tl {\l_fontspec_fontname_tl} {/B}
+ }
+
+ \bool_if:NF \l_@@_noit_bool
+ {
+ \@@_set_autofont:Nnn \l_@@_fontname_it_tl {\l_fontspec_fontname_tl} {/I}
+ }
+
+ \@@_set_autofont:Nnn \l_@@_fontname_bfsl_tl {\l_@@_fontname_sl_tl} {/B}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_faces:}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_faces:
+ {
+ \@@_add_nfssfont:nnnn \mddefault \shapedefault \l_fontspec_fontname_tl \l_@@_fontfeat_up_clist
+ \@@_add_nfssfont:nnnn \bfdefault \shapedefault \l_@@_fontname_bf_tl \l_@@_fontfeat_bf_clist
+ \@@_add_nfssfont:nnnn \mddefault \itdefault \l_@@_fontname_it_tl \l_@@_fontfeat_it_clist
+ \@@_add_nfssfont:nnnn \mddefault \sldefault \l_@@_fontname_sl_tl \l_@@_fontfeat_sl_clist
+ \@@_add_nfssfont:nnnn \bfdefault \itdefault \l_@@_fontname_bfit_tl \l_@@_fontfeat_bfit_clist
+ \@@_add_nfssfont:nnnn \bfdefault \sldefault \l_@@_fontname_bfsl_tl \l_@@_fontfeat_bfsl_clist
+ \prop_map_inline:Nn \l_@@_nfssfont_prop { \@@_set_faces_aux:nnnnn ##2 }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_faces_aux:nnnnn
+ {
+ \fontspec_complete_fontname:Nn \l_@@_curr_fontname_tl {#3}
+ \@@_make_font_shapes:Nnnnn \l_@@_curr_fontname_tl {#1} {#2} {#4} {#5}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_complete_fontname:Nn}
+% This macro defines |#1| as the input with any |*| tokens of its input
+% replaced by the font name. This lets us define supplementary fonts in full
+% (``\texttt{Baskerville Semibold}'') or in abbreviation (``\texttt{* Semibold}'').
+% \begin{macrocode}
+\cs_new:Nn \fontspec_complete_fontname:Nn
+ {
+ \tl_set:Nx #1 {#2}
+ \tl_replace_all:Nnx #1 {*} {\l_@@_basename_tl}
+%<LU> \tl_remove_all:Nn #1 {~}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_add_nfssfont:nnnn}
+% \darg{series}
+% \darg{shape}
+% \darg{fontname}
+% \darg{fontspec features}
+% \begin{macrocode}
+\cs_new:Nn \@@_add_nfssfont:nnnn
+ {
+ \tl_set:Nx \l_@@_this_font_tl {#3}
+
+ \tl_if_empty:xTF {#4}
+ { \clist_set:Nn \l_@@_sizefeat_clist {Size={-}} }
+ { \@@_keys_set_known:nxN {fontspec-preparse-nested} {#4} \l_@@_tmp_tl }
+
+ \tl_if_empty:NF \l_@@_this_font_tl
+ {
+ \prop_put:Nxx \l_@@_nfssfont_prop {#1/#2}
+ { {#1}{#2}{\l_@@_this_font_tl}{#4}{\l_@@_sizefeat_clist} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsubsection{Fonts}
+%
+% \begin{macro}{\@@_set_font_type:N}
+% Now check if the font is to be rendered with \ATSUI\ or Harfbuzz. This will either
+% be automatic (based on the font type), or specified by the user via a font feature.
+%
+% This macro sets booleans
+% accordingly depending if the font in \cmd\l_fontspec_test_font\ is an \AAT\
+% font or an OpenType font or a font with feature axes (either \AAT\ or
+% Multiple Master), respectively.
+% \begin{macrocode}
+\cs_new:Nn \@@_set_font_type:N
+ {
+%<debug> \typeout{:: @@_set_font_type:}
+%<*XE>
+ \bool_set_false:N \l_@@_tfm_bool
+ \bool_set_false:N \l_@@_atsui_bool
+ \bool_set_false:N \l_@@_ot_bool
+ \bool_set_false:N \l_@@_mm_bool
+ \bool_set_false:N \l_@@_graphite_bool
+ \ifcase\XeTeXfonttype #1
+%<debug> \typeout{:::: TFM}
+ \bool_set_true:N \l_@@_tfm_bool
+ \or
+%<debug> \typeout{:::: AAT}
+ \bool_set_true:N \l_@@_atsui_bool
+ \tl_if_empty:NT \l_@@_renderer_tl { \tl_set:Nn \l_@@_renderer_tl {/AAT} }
+ \ifnum\XeTeXcountvariations #1 > 0\relax
+%<debug> \typeout{:::: MM}
+ \bool_set_true:N \l_@@_mm_bool
+ \fi
+ \or
+%<debug> \typeout{:::: OpenType}
+ \bool_set_true:N \l_@@_ot_bool
+ \tl_if_empty:NT \l_@@_renderer_tl { \tl_set:Nn \l_@@_renderer_tl {/OT} }
+ \or
+%<debug> \typeout{:::: Graphite}
+ \bool_set_true:N \l_@@_graphite_bool
+ \tl_if_empty:NT \l_@@_renderer_tl { \tl_set:Nn \l_@@_renderer_tl {/GR} }
+ \fi
+%</XE>
+% \end{macrocode}
+% If automatic, the \cmd{\l_@@_renderer_tl} token list will still be
+% empty (other suffices that could be added will be later in the feature
+% processing), and if it is indeed still empty, assign it a value so that the
+% other weights of the font are specifically loaded with the same renderer.
+%
+% LuaTeX only supports one:
+% \begin{macrocode}
+%<*LU>
+ \bool_set_true:N \l_@@_ot_bool
+%</LU>
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_autofont:Nnn}
+% \darg{Font name tl}
+% \darg{Base font name}
+% \darg{Font name modifier}
+%
+% This function looks for font with \meta{name} and \meta{modifier} |#2#3|, and if found (i.e., different to font with name |#2|) stores it in tl |#1|. A modifier is something like |/B| to look for a bold font, for example.
+%
+% We can't match external fonts in this way (in \XeTeX\ anyway; todo: test with LuaTeX).
+% If \meta{font name tl} is not empty, then it's already been specified by the user so abort.
+% If \meta{Base font name} is not given, we also abort for obvious reasons.
+%
+% If \meta{font name tl} is empty, then proceed.
+% If not found, \meta{font name tl} remains empty.
+% Otherwise, we have a match.
+% \begin{macrocode}
+\cs_new:Nn \@@_set_autofont:Nnn
+ {
+ \bool_if:NF \l_@@_external_bool
+ {
+ \tl_if_empty:xF {#2}
+ {
+ \tl_if_empty:NT #1
+ {
+ \@@_if_autofont:nnTF {#2} {#3}
+ { \tl_set:Nx #1 {#2#3} }
+ { \@@_info:nx {no-font-shape} {#2#3} }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_if_autofont:nn {T,TF}
+ {
+ \group_begin:
+ \@@_primitive_font_set:Nnn \l_@@_tmpa_font { \@@_construct_font_call:nn {#1} { \l_@@_pre_feat_sclist } } { \f@size pt + 1sp }
+ \@@_primitive_font_set:Nnn \l_@@_tmpb_font { \@@_construct_font_call:nn {#1#2} { \l_@@_pre_feat_sclist } } { \f@size pt + 1sp }
+ \str_if_eq:eeTF { \@@_primitive_font_get_name:N \l_@@_tmpa_font } { \@@_primitive_font_get_name:N \l_@@_tmpb_font }
+ { \group_end: \prg_return_false: }
+ { \group_end: \prg_return_true: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_make_font_shapes:Nnnnn}
+% \darg{Font name}
+% \darg{Font series}
+% \darg{Font shape}
+% \darg{Font features}
+% \darg{Size features}
+% This macro eventually uses \cs{DeclareFontShape} to define the font shape in
+% question.
+% \begin{macrocode}
+\cs_new:Nn \@@_make_font_shapes:Nnnnn
+ {
+ \group_begin:
+ \@@_keys_set_known:nxN {fontspec-preparse-external} { #4 } \l_@@_leftover_clist
+ \@@_load_fontname:Nn \l_fontspec_fontname_tl {#1}
+ \@@_declare_shape:nnxx {#2} {#3} { \l_@@_fontopts_clist, \l_@@_leftover_clist } {#5}
+ \group_end:
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_load_fontname:Nn
+ {
+%<debug> \typeout{:: @@_load_fontname:Nn \exp_not:N #1 (#1) {#2} }
+ \@@_load_external_fontoptions:Nn #1 {#2}
+ \prop_get:NVNF \g_@@_fontopts_prop #1 \l_@@_fontopts_clist
+ { \clist_clear:N \l_@@_fontopts_clist }
+ \keys_set_groups:nnV {fontspec/fontname} {getfontname} \l_@@_fontopts_clist
+ \@@_primitive_font_set:OnnF \l_@@_fontface_cs_tl
+ { \@@_construct_font_call:nn {#1} { \l_@@_pre_feat_sclist } } { \f@size pt + 2sp }
+ { \@@_error:nx {font-not-found} {#2} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\keys_define:nn {fontspec/fontname}
+ {
+ Font .tl_set:N = \l_fontspec_fontname_tl ,
+ Font .groups:n = {getfontname} ,
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_declare_shape:nnnn}
+% \darg{Font series}
+% \darg{Font shape}
+% \darg{Font features}
+% \darg{Size features}
+% Wrapper for \cmd\DeclareFontShape.
+% And finally the actual font shape declaration using \cmd\l_@@_nfss_tl\ defined above.
+% \cmd\l_@@_postadjust_tl\ is defined in various places to deal with things like the hyphenation
+% character and interword spacing.
+%
+% The main part is to loop through \feat{SizeFeatures} arguments, which are of the form
+% {\par\centering |SizeFeatures={{<one>},{<two>},{<three>}}|.\par}
+% \begin{macrocode}
+\cs_new:Nn \@@_declare_shape:nnnn
+ {
+%<debug>\typeout{=~ declare_shape:~{\l_fontspec_fontname_tl}~{#1}~{#2}}
+ \tl_build_begin:N \l_@@_nfss_tl
+ \tl_build_begin:N \l_@@_nfss_sc_tl
+ \tl_set_eq:NN \l_@@_saved_fontname_tl \l_fontspec_fontname_tl
+
+ \exp_args:Nx \clist_map_inline:nn {#4} { \@@_setup_single_size:nn {#3} {##1} }
+
+ \tl_build_end:N \l_@@_nfss_tl
+ \tl_build_end:N \l_@@_nfss_sc_tl
+
+ \@@_declare_shapes_normal:nn {#1} {#2}
+ \@@_declare_shapes_smcaps:nn {#1} {#2}
+ \@@_declare_shape_slanted:nn {#1} {#2}
+ \@@_declare_shapes_bx:nn {#1} {#2}
+ \@@_declare_shape_loginfo:nn {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \@@_declare_shape:nnnn {nnxx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_single_size:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_setup_single_size:nn
+ {
+ \tl_clear:N \l_@@_size_tl
+ \tl_set_eq:NN \l_@@_sizedfont_tl \l_@@_saved_fontname_tl % in case not spec'ed
+
+ \keys_set_known:nxN {fontspec-sizing} { \exp_after:wN \use:n #2 }
+ \l_@@_sizing_leftover_clist
+ \tl_if_empty:NT \l_@@_size_tl { \@@_error:n {no-size-info} }
+%<debug>\typeout{==~ size:~\l_@@_size_tl}
+
+ % "normal"
+ \@@_load_fontname:Nn \l_fontspec_fontname_tl {\l_@@_sizedfont_tl}
+ \@@_setup_nfss:Nnnn \l_@@_nfss_tl {#1} {\l_@@_sizing_leftover_clist} {}
+%<debug> \typeout{===~ sized~ font:~ \l_@@_sizedfont_tl}
+
+ % small caps
+ \clist_set_eq:NN \l_@@_fontfeat_curr_clist \l_@@_fontfeat_sc_clist
+
+ \bool_if:NF \l_@@_nosc_bool
+ {
+ \tl_if_empty:NTF \l_@@_fontname_sc_tl
+ {
+ \@@_make_smallcaps:TF
+ {
+%<debug>\typeout{====~Small~ caps~ found.}
+ \clist_put_left:Nn \l_@@_fontfeat_curr_clist {Letters=SmallCaps}
+ }
+ {
+%<debug>\typeout{====~Small~ caps~ not~ found.}
+ \bool_set_true:N \l_@@_nosc_bool
+ }
+ }
+ { \@@_load_fontname:Nn \l_fontspec_fontname_tl {\l_@@_fontname_sc_tl} }% local for each size
+ }
+
+ \bool_if:NF \l_@@_nosc_bool
+ {
+ \@@_setup_nfss:Nnnn \l_@@_nfss_sc_tl
+ {#1} {\l_@@_sizing_leftover_clist} {\l_@@_fontfeat_curr_clist}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_nfss:Nnnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_setup_nfss:Nnnn
+ {
+%<debug>\typeout{====~Setup~NFSS~shape:~<\l_@@_size_tl>~\l_fontspec_fontname_tl}
+
+ \@@_get_features:n { #2 , #3 , #4 }
+%<debug>\typeout{====~Gathered~features:~\g_@@_rawfeatures_sclist}
+
+ \tl_if_empty:NF \l_@@_scale_tl
+ {
+ \tl_set:Nx \l_@@_scale_tl { s*[\l_@@_scale_tl] }
+ }
+
+ \tl_build_put_right:Nx #1
+ {
+ <\l_@@_size_tl> \l_@@_scale_tl
+ \@@_construct_font_call:nn { \l_fontspec_fontname_tl }
+ { \l_@@_pre_feat_sclist \g_@@_rawfeatures_sclist }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_declare_shapes_normal:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_declare_shapes_normal:nn
+ {
+ \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl}
+ {#1} {#2} {\l_@@_nfss_tl}{\l_@@_postadjust_tl}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_declare_shapes_smcaps:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_declare_shapes_smcaps:nn
+ {
+ \tl_if_empty:NF \l_@@_nfss_sc_tl
+ {
+ \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl} {#1}
+ { \@@_combo_sc_shape:n {#2} } {\l_@@_nfss_sc_tl} {\l_@@_postadjust_tl}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_combo_sc_shape:n
+ {
+ \tl_if_exist:cTF { \@@_shape_merge:nn {#1} {\scdefault} }
+ { \tl_use:c { \@@_shape_merge:nn {#1} {\scdefault} } }
+ { \scdefault }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_DeclareFontShape:nnnnnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_DeclareFontShape:nnnnnn
+ {
+%<debug>\typeout{DeclareFontShape:~{#1}{#2}{#3}{#4}...}
+ \group_begin:
+ \normalsize
+ \cs_undefine:c {#1/#2/#3/#4/\f@size}
+ \group_end:
+ \DeclareFontShape{#1}{#2}{#3}{#4}{#5}{#6}
+ }
+\cs_generate_variant:Nn \@@_DeclareFontShape:nnnnnn {xxxxxx}
+% \end{macrocode}
+%
+% \begin{macro}{\@@_declare_shape_slanted:nn}
+% This extra stuff for the slanted shape substitution is a little bit awkward.
+% We define the slanted shape to be a synonym for it when (a)~we're defining an italic font, but also (b)~when the default slanted shape isn't `it'.
+% (Presumably this turned up once in a test and I realised it caused problems. I doubt this would happen much.)
+%
+% We should test when a slanted font has been specified and not run this code if so, but the \verb|\@@_set_slanted:| code will overwrite this anyway if necessary.
+% \begin{macrocode}
+\cs_new:Nn \@@_declare_shape_slanted:nn
+ {
+ \bool_if:nT
+ {
+ \str_if_eq_p:ee {#2} {\itdefault} &&
+ !(\str_if_eq_p:ee {\itdefault} {\sldefault})
+ }
+ {
+ \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl}{\g_@@_nfss_family_tl}{#1}{\sldefault}
+ {<->ssub*\g_@@_nfss_family_tl/#1/\itdefault}{\l_@@_postadjust_tl}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_declare_shapes_bx:nn}
+% Similar processing for setting up b/bx substitutions.
+% \begin{macrocode}
+\cs_new:Nn \@@_declare_shapes_bx:nn
+ {
+ \bool_if:nT
+ {
+ \str_if_eq_p:ee {#1} {\bfdefault} &&
+ !(\str_if_eq_p:ee {\bfdefault} {bx})
+ }
+ {
+ % bx/?
+ \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl}
+ {bx} {#2}
+ { <->ssub*\g_@@_nfss_family_tl/\bfdefault/#2 }
+ { \l_@@_postadjust_tl }
+
+ % bx/sc -> b/sc
+ \tl_if_empty:NF \l_@@_nfss_sc_tl
+ {
+ \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl}
+ {bx} { \@@_combo_sc_shape:n {#2} }
+ { <->ssub*\g_@@_nfss_family_tl/\bfdefault/#2 }
+ { \l_@@_postadjust_tl }
+ }
+
+ % bx/sl -> bx/it
+ \bool_if:nT
+ {
+ \str_if_eq_p:ee {#2} {\itdefault} &&
+ !(\str_if_eq_p:ee {\itdefault} {\sldefault})
+ }
+ {
+ \@@_DeclareFontShape:xxxxxx {\g_@@_nfss_enc_tl} {\g_@@_nfss_family_tl}
+ {bx} {\sldefault}
+ { <->ssub*\g_@@_nfss_family_tl/bx/\itdefault }
+ { \l_@@_postadjust_tl }
+ }
+
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_declare_shape_loginfo:nn}
+% Lastly some informative messaging.
+% \begin{macrocode}
+\cs_new:Nn \@@_declare_shape_loginfo:nn
+ {
+ \tl_gput_right:Nx \g_@@_defined_shapes_tl
+ {
+ \exp_not:n { \\ }
+ -~ \exp_not:N \str_case:nn {#1/#2}
+ {
+ {\mddefault/\shapedefault} {'normal'~}
+ {\bfdefault/\shapedefault} {'bold'~}
+ {\mddefault/\itdefault} {'italic'~}
+ {\mddefault/\sldefault} {'slanted'~}
+ {\bfdefault/\itdefault} {'bold~ italic'~}
+ {\bfdefault/\sldefault} {'bold~ slanted'~}
+ } (#1/#2)~
+ with~ NFSS~ spec.:~
+ \l_@@_nfss_tl
+ \exp_not:n { \\ }
+ -~ \exp_not:N \str_case:nn { #1 / \@@_combo_sc_shape:n {#2} }
+ {
+ {\mddefault/\scdefault} {'small~ caps'~}
+ {\bfdefault/\scdefault} {'bold~ small~ caps'~}
+ {\mddefault/\scitdefault} {'italic~ small~ caps'~}
+ {\bfdefault/\scitdefault} {'bold~ italic~ small~ caps'~}
+ {\mddefault/\scsldefault} {'slanted~ small~ caps'~}
+ {\bfdefault/\scsldefault} {'bold~ slanted~ small~ caps'~}
+ }~( #1 / \@@_combo_sc_shape:n {#2} )~
+ with~ NFSS~ spec.:~
+ \l_@@_nfss_sc_tl
+ \tl_if_empty:fF {\l_@@_postadjust_tl}
+ {
+ \exp_not:N \\ and~ font~ adjustment~ code:
+ \exp_not:N \\ \l_@@_postadjust_tl
+ }
+ }
+ }
+% \end{macrocode}
+% Maybe |\str_if_eq:eeF| would be better?
+% \end{macro}
+%
+%
+% \subsubsection{Features}
+%
+% \begin{macro}{\l_@@_pre_feat_sclist}
+% These are the features always applied to a font selection before other
+% features.
+% \begin{macrocode}
+\tl_set:Nn \l_@@_pre_feat_sclist
+%<*XE>
+ {
+ \bool_if:NT \l_@@_ot_bool
+ {
+ \tl_if_empty:NF \l_@@_script_tl { script = \l_@@_script_tl ; }
+ \tl_if_empty:NF \l_@@_lang_tl { language = \l_@@_lang_tl ; }
+ }
+ }
+%</XE>
+%<*LU>
+ {
+ mode = \l_@@_mode_tl ;
+ \tl_if_empty:NF \l_@@_shaper_tl { shaper = \l_@@_shaper_tl ; }
+ \tl_if_empty:NF \l_@@_script_tl { script = \l_@@_script_tl ; }
+ \tl_if_empty:NF \l_@@_lang_tl { language = \l_@@_lang_tl ; }
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_make_ot_smallcaps:TF}
+% \label{mac:makesmallcaps}
+% This macro checks if the font contains small caps.
+% \begin{macrocode}
+%<LU>\cs_new:Nn \@@_make_smallcaps:TF
+%<XE>\cs_new:Nn \@@_make_ot_smallcaps:TF
+ {
+ \exp_args:No \@@_check_ot_feat:NnTF \l_@@_fontface_cs_tl {smcp} {#1} {#2}
+ }
+%<*XE>
+\cs_new:Nn \@@_make_smallcaps:TF
+ {
+ \bool_if:NTF \l_@@_ot_bool
+ { \@@_make_ot_smallcaps:TF {#1} {#2} }
+ {
+ \bool_if:NT \l_@@_atsui_bool
+ {
+ \exp_args:No \@@_make_AAT_feature_string:NnnTF
+ \l_@@_fontface_cs_tl {3} {3} {#1} {#2}
+ }
+ }
+ }
+%</XE>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_update_featstr:n}
+% \cmd{\g_@@_rawfeatures_sclist} is the string used to define the list of specific
+% font features. Each time another font feature is requested, this
+% macro is used to add that feature to the list. Font features are
+% separated by semicolons.
+% \begin{macrocode}
+\cs_new:Nn \@@_update_featstr:n
+ {
+%<debug> \typeout{:::: @@_update_featstr:n {#1}}
+ \bool_if:NF \l_@@_firsttime_bool
+ {
+ \tl_gset:Nx \g_@@_single_feat_tl { #1 }
+%<debug> \typeout{::::~ Adding~ feature.}
+ \tl_gput_right:Nx \g_@@_rawfeatures_sclist {#1;}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_remove_clashing_featstr:n}
+% \begin{macrocode}
+\cs_new:Nn \@@_remove_clashing_featstr:n
+ {
+%<debug> \typeout{:::: @@_remove_clashing_featstr:n {#1}}
+ \clist_map_inline:nn {#1}
+ {
+%<debug> \typeout{::::~ Removing~ feature~ "##1;"}
+ \tl_gremove_all:Nn \g_@@_rawfeatures_sclist {##1;}
+ }
+ }
+\cs_generate_variant:Nn \@@_remove_clashing_featstr:n {x}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Initialisation}
+%
+% \begin{macro}{\@@_init:}
+% Initialisations that need to occur once per fontspec font invocation.
+% (Some of these may be redundant.
+% Check whether they're assigned to globally or not.)
+% \begin{macrocode}
+\cs_set:Npn \@@_init:
+ {
+%<debug> \typeout{:: @@_init:}
+ \bool_set_false:N \l_@@_ot_bool
+ \bool_set_true:N \l_@@_firsttime_bool
+ \@@_font_is_name:
+ \tl_clear:N \l_@@_font_path_tl
+ \tl_clear:N \l_@@_optical_size_tl
+ \tl_clear:N \l_@@_ttc_index_tl
+ \tl_clear:N \l_@@_renderer_tl
+ \tl_gclear:N \g_@@_defined_shapes_tl
+ \tl_gclear:N \g_@@_curr_series_tl
+ \tl_gset_eq:NN \g_@@_nfss_enc_tl \g_fontspec_encoding_tl
+%<*LU>
+ \tl_set:Nn \l_@@_mode_tl {node}
+ \int_set:Nn \prehyphenchar { `\- } % fixme
+ \int_zero:N \posthyphenchar % fixme
+ \int_zero:N \preexhyphenchar % fixme
+ \int_zero:N \postexhyphenchar % fixme
+%</LU>
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_init_fontface:}
+% Executed in \cs{@@_get_features:Nn}.
+% \begin{macrocode}
+\cs_new:Nn \@@_init_fontface:
+ {
+ \tl_gclear:N \g_@@_rawfeatures_sclist
+ \tl_clear:N \l_@@_scale_tl
+ \tl_set_eq:NN \l_@@_opacity_tl \c_@@_opacity_tl
+ \tl_set_eq:NN \l_@@_hexcol_tl \c_@@_hexcol_tl
+ \tl_set_eq:NN \l_@@_postadjust_tl \c_@@_postadjust_tl
+ \tl_clear:N \l_@@_wordspace_adjust_tl
+ \tl_clear:N \l_@@_punctspace_adjust_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Miscellaneous}
+%
+% \begin{macro}{\@@_ot_validate_tag:n}
+% This macro takes an OpenType tag and validates it.
+% \begin{macrocode}
+%<*LU>
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_ot_validate_tag:n
+ {
+ \@@_ot_validate_tag:w #1 \q_nil
+ }
+\cs_generate_variant:Nn \@@_ot_validate_tag:n {x}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_ot_validate_tag:w #1 #2 \q_nil
+ {
+ \bool_if:nTF { \str_if_eq_p:nn {#1} {+} || \str_if_eq_p:nn {#1} {-} }
+ { \@@_ot_validate_tag_aux:w #2 \c_empty_tl \c_empty_tl \q_nil }
+ { \@@_ot_validate_tag_aux:w #1#2 \c_empty_tl \c_empty_tl \q_nil }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_ot_validate_tag_aux:w #1#2#3#4#5 \q_nil
+ {
+ \int_compare:nT { \tl_count:n {#5} > 2 }
+ { \@@_error:nx {ot-tag-too-long} {#1#2#3#4#5} }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_iv_str_to_num:Nn}
+% This macro takes a four character string and converts it to the
+% numerical representation required for \XeTeX\ OpenType script/language/feature
+% purposes. The output is stored in |#1|.
+%
+% This code is not used in Lua\TeX, as the checking for that engine is done via Lua code
+% provided by \pkg{luaotfload}.
+% \begin{macrocode}
+%<*XE>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_iv_str_to_num:Nn
+ {
+%<debug>\typeout{_iv_str_to_num:~#1~/~#2}
+ \@@_strip_leading_sign:Nw #1#2 \q_nil
+ }
+\cs_generate_variant:Nn \@@_iv_str_to_num:Nn {Nx}
+% \end{macrocode}
+%
+% The input can be of the form of any of these:
+% `|abcd|', `|abc|', `|abc |', `|ab|', `|ab |', \etc.
+% (It is assumed the first two chars are \emph{always} not spaces.) So this macro
+% reads in the string padded with \cmd\@empty s,
+% and anything beyond four chars is snipped. The \cmd\@empty s then are used to reconstruct
+% the spaces in the string to number calculation.
+%
+% For backwards compatibility this code also strips a leading |+| or |-|.
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_strip_leading_sign:Nw #1#2#3 \q_nil
+ {
+ \bool_if:nTF { \str_if_eq_p:nn {#2} {+} || \str_if_eq_p:nn {#2} {-} }
+ { \@@_iv_str_to_num:w #1 \q_nil #3 \c_empty_tl \c_empty_tl \q_nil }
+ { \@@_iv_str_to_num:w #1 \q_nil #2#3 \c_empty_tl \c_empty_tl \q_nil }
+ }
+% \end{macrocode}
+% If input string (after sign is stripped) is more than 4 chars, \verb|#6| will contain
+% `\meta{excess}\cs{c_empty_tl}\cs{c_empty_tl}'. Therefore use \verb|#6| to verify string length.
+% \begin{macrocode}
+\cs_set:Npn \@@_iv_str_to_num:w #1 \q_nil #2#3#4#5#6 \q_nil
+ {
+ \int_compare:nT { \tl_count:n {#6} > 2 }
+ { \@@_error:nx {ot-tag-too-long} {#2#3#4#5#6} }
+
+ \int_set:Nn #1
+ {
+ `#2 * "1000000
+ + `#3 * "10000
+ + \ifx \c_empty_tl #4 32 \else `#4 \fi * "100
+ + \ifx \c_empty_tl #5 32 \else `#5 \fi
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</XE>
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-keyval.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-keyval.dtx
new file mode 100644
index 0000000000..87a93c176b
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-keyval.dtx
@@ -0,0 +1,905 @@
+%%^^A%% fontspec-code-keyval.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{Font loading (\pkg{keyval}) definitions}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% This package uses a large number of keyval modules which operate sequentially on keyval
+% input to ensure priority.
+% \begin{macrocode}
+\clist_gset:Nn \g_@@_all_keyval_modules_clist
+ {
+ fontspec, fontspec-opentype, fontspec-aat,
+ fontspec-preparse, fontspec-preparse-cfg, fontspec-preparse-external, fontspec-preparse-nested,
+ fontspec-renderer
+ }
+% \end{macrocode}
+%
+% Wrapper function to save some characters in the source:
+% \begin{macrocode}
+\cs_new:Nn \@@_keys_define_code:nnn
+ {
+ \keys_define:nn {#1} { #2 .code:n = {#3} }
+ }
+% \end{macrocode}
+%
+% For catching features that cannot be used in |\addfontfeatures|:
+% \begin{macrocode}
+\cs_new:Nn \@@_aff_error:n
+ {
+ \@@_keys_define_code:nnn {fontspec-addfeatures} {#1}
+ { \@@_error:nx {not-in-addfontfeatures} {#1} }
+ }
+% \end{macrocode}
+%
+% \subsection{Pre-pre-parsing stages}
+%
+% These features are extracted from the font feature list before all others.
+%
+% \paragraph{Don't load font config file}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-cfg} {IgnoreFontspecFile}
+ {
+ \bool_set_false:N \l_@@_fontcfg_bool
+ }
+\@@_keys_define_code:nnn {fontspec-preparse-external} {IgnoreFontspecFile}
+ {
+ \bool_set_false:N \l_@@_fontcfg_bool
+ }
+% \end{macrocode}
+%
+% \begin{macro}{Path}
+% For fonts that aren't installed in the system. If no argument is given, the font is located
+% with |kpsewhich|; it's either in the current directory or the \TeX\ tree. Otherwise, the
+% argument given defines the file path of the font.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {Path}
+ {
+ \bool_set_true:N \l_@@_nobf_bool
+ \bool_set_true:N \l_@@_noit_bool
+ \bool_set_true:N \l_@@_external_bool
+ \tl_set:Nn \l_@@_font_path_tl {#1}
+ \@@_font_is_file:
+%<*XE>
+ \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
+%</XE>
+ }
+\aliasfontfeature{Path}{ExternalLocation}
+\@@_keys_define_code:nnn {fontspec} {Path} {}
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{\feat{Extension}}
+% For fonts that aren't installed in the system. Specifies the font extension
+% to use.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {Extension}
+ {
+ \tl_set:Nn \l_@@_extension_tl {#1}
+ \bool_if:NF \l_@@_external_bool
+ {
+ \keys_set:nn {fontspec-preparse-external} {Path}
+ }
+ }
+\tl_clear:N \l_@@_extension_tl
+\@@_keys_define_code:nnn {fontspec} {Extension} {}
+% \end{macrocode}
+%
+%
+% \paragraph{\feat{Renderer}}
+% This feature must be processed before all others (the other font shape and features
+% options are also pre-parsed for convenience) because the renderer determines the format
+% of the features and whether certain features are available.
+% \begin{macrocode}
+%<*XE>
+\keys_define:nn {fontspec-renderer}
+ {
+ Renderer .choices:nn =
+ {AAT,ICU,OpenType,Graphite,Full,Basic,Node,Base,HarfBuzz,Harfbuzz}
+ {
+ \int_compare:nTF {\l_keys_choice_int <= 4}
+ {
+ \tl_set:Nx \l_@@_renderer_tl
+ {
+ \int_case:nn \l_keys_choice_int { 1 {/AAT} 2 {/OT} 3 {/OT} 4 {/GR} }
+ }
+%<debug>\typeout{Renderer:~ \l_@@_renderer_tl}
+ \tl_gset:Nx \g_@@_single_feat_tl { \l_@@_renderer_tl }
+ }
+ {
+ \@@_warning:nx {only-luatex-feature} {Renderer=Full/Basic/Node/Base/HarfBuzz}
+ }
+ }
+ }
+%</XE>
+%<*LU>
+\keys_define:nn {fontspec-renderer}
+ {
+ Renderer .choices:nn =
+ {Full,Node,Basic,Base,HarfBuzz,Harfbuzz,OpenType,AAT,Graphite}
+ {
+ \int_compare:nT {\l_keys_choice_int >= 5} { \bool_set_true:N \l_@@_harfbuzz_bool }
+
+ \tl_set:Nx \l_@@_mode_tl
+ {
+ \int_case:nn \l_keys_choice_int { 1 {node} 2 {node} 3 {base} 4 {base} 5 {harf} 6 {harf} 7 {harf} 8 {harf} 9 {harf}}
+ }
+
+ \tl_set:Nx \l_@@_shaper_tl
+ {
+ \int_case:nn \l_keys_choice_int { 1 {} 2 {} 3 {} 4 {} 5 {} 6 {} 7 {ot} 8 {coretext_aat} 9 {graphite2} }
+ }
+
+%<debug>\typeout{Mode:~"\l_@@_mode_tl"~/~Shaper:~"\l_@@_shaper_tl"}
+
+ \tl_gset:Nx \g_@@_single_feat_tl
+ {
+ mode=\l_@@_mode_tl ;
+ \tl_if_empty:NF \l_@@_shaper_tl { shaper=\l_@@_shaper_tl}
+ }
+ } ,
+
+ Renderer unknown .code:n =
+ {
+ \bool_set_true:N \l_@@_harfbuzz_bool
+ \@@_warning:nx {unknown-renderer} {#1}
+ \tl_set:Nn \l_@@_mode_tl {harf}
+ \tl_set:Nn \l_@@_shaper_tl {#1}
+ } ,
+ }
+%</LU>
+% \end{macrocode}
+%
+% \subsection{Pre-parsed features}
+%
+% \paragraph{OpenType script/language}
+% See later for the resolutions from \pkg{fontspec} features to OpenType definitions.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {Script}
+ {
+%<XE> \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
+ \tl_set:Nn \l_@@_script_name_tl {#1}
+ }
+% \end{macrocode}
+% Exactly the same:
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {Language}
+ {
+%<XE> \keys_set:nn {fontspec-renderer} {Renderer=OpenType}
+ \tl_set:Nn \l_@@_lang_name_tl {#1}
+ }
+% \end{macrocode}
+%
+%
+% \paragraph{TTC font index}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {FontIndex}
+ {
+ \str_if_eq:eeF { \str_lowercase:f {\l_@@_extension_tl} } {.ttc}
+ { \@@_warning:n {font-index-needs-ttc} }
+%<XE> \tl_set:Nn \l_@@_ttc_index_tl {:#1}
+%<LU> \tl_set:Nn \l_@@_ttc_index_tl {(#1)}
+ }
+\@@_keys_define_code:nnn {fontspec} {FontIndex}
+ {
+%<XE> \tl_set:Nn \l_@@_ttc_index_tl {:#1}
+%<LU> \tl_set:Nn \l_@@_ttc_index_tl {(#1)}
+ }
+% \end{macrocode}
+%
+% \subsection{Font faces}
+%
+% \paragraph{Upright}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {UprightFont}
+ {
+ \fontspec_complete_fontname:Nn \l_@@_fontname_up_tl {#1}
+ }
+% \end{macrocode}
+%
+% \paragraph{Italic and slanted}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {ItalicFont}
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \bool_set_true:N \l_@@_noit_bool
+ }
+ {
+ \bool_set_false:N \l_@@_noit_bool
+ \fontspec_complete_fontname:Nn \l_@@_fontname_it_tl {#1}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {SlantedFont}
+ {
+ \fontspec_complete_fontname:Nn \l_@@_fontname_sl_tl {#1}
+ }
+% \end{macrocode}
+%
+%
+% \paragraph{Bold (NFSS) Series}
+% By default, \pkg{fontspec} uses the default bold series, \cs{bfdefault}.
+% We want to be able to make this extensible. This code is not yet functional!
+% \begin{macrocode}
+%\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldSeries}
+% {
+% \tl_gset:Nx \g_@@_curr_series_tl { #1 }
+% \seq_put_right:Nx \l_@@_bf_series_seq { #1 }
+% }
+% \end{macrocode}
+%
+% \paragraph{Bold}
+% This contains some stubb code to allow more than one bold font to be loaded.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldFont}
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \bool_set_true:N \l_@@_nobf_bool
+ }
+ {
+ \bool_set_false:N \l_@@_nobf_bool
+ \fontspec_complete_fontname:Nn \l_@@_curr_bfname_tl {#1}
+
+ \seq_if_empty:NT \l_@@_bf_series_seq
+ {
+ \tl_gset:Nx \g_@@_curr_series_tl {\bfdefault}
+ \seq_put_right:Nx \l_@@_bf_series_seq {\bfdefault}
+ }
+
+ \tl_if_eq:oxT \g_@@_curr_series_tl {\bfdefault}
+ {
+ \tl_set_eq:NN \l_@@_fontname_bf_tl \l_@@_curr_bfname_tl
+ }
+
+ \prop_put:NxV \l_@@_nfss_prop {BoldFont-\g_@@_curr_series_tl} \l_@@_curr_bfname_tl
+
+%<debug>\typeout{Setting~bold~font~"\l_@@_curr_bfname_tl"~with~series~"\g_@@_curr_series_tl"}
+
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Bold italic/slanted}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldItalicFont}
+ {
+ \fontspec_complete_fontname:Nn \l_@@_fontname_bfit_tl {#1}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse-external} {BoldSlantedFont}
+ {
+ \fontspec_complete_fontname:Nn \l_@@_fontname_bfsl_tl {#1}
+ }
+% \end{macrocode}
+%
+% \paragraph{Small caps}
+% Small caps isn't pre-parsed because it can vary with others above:
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {SmallCapsFont}
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \bool_set_true:N \l_@@_nosc_bool
+ }
+ {
+ \bool_set_false:N \l_@@_nosc_bool
+ \fontspec_complete_fontname:Nn \l_@@_fontname_sc_tl {#1}
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection{Preparsed font features}
+%
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {UprightFeatures}
+ {
+ \clist_put_right:Nn \l_@@_fontfeat_up_clist {#1}
+ }
+\@@_keys_define_code:nnn {fontspec-preparse} {BoldFeatures}
+ {
+ \clist_put_right:Nn \l_@@_fontfeat_bf_clist {#1}
+
+% \prop_put:NxV \l_@@_nfss_prop
+% {BoldFont-\g_@@_curr_series_tl} \l_@@_curr_bfname_tl
+ }
+\@@_keys_define_code:nnn {fontspec-preparse} {ItalicFeatures}
+ {
+ \clist_put_right:Nn \l_@@_fontfeat_it_clist {#1}
+ }
+\@@_keys_define_code:nnn {fontspec-preparse} {BoldItalicFeatures}
+ {
+ \clist_put_right:Nn \l_@@_fontfeat_bfit_clist {#1}
+ }
+\@@_keys_define_code:nnn {fontspec-preparse} {SlantedFeatures}
+ {
+ \clist_put_right:Nn \l_@@_fontfeat_sl_clist {#1}
+ }
+\@@_keys_define_code:nnn {fontspec-preparse} {BoldSlantedFeatures}
+ {
+ \clist_put_right:Nn \l_@@_fontfeat_bfsl_clist {#1}
+ }
+% \end{macrocode}
+% Note that small caps features can vary by shape, so these in fact \emph{aren't} pre-parsed.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {SmallCapsFeatures}
+ {
+ \bool_if:NF \l_@@_firsttime_bool
+ {
+ \clist_put_right:Nn \l_@@_fontfeat_sc_clist {#1}
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Features varying by size}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {SizeFeatures}
+ {
+ \clist_set:Nn \l_@@_sizefeat_clist {#1}
+ \clist_put_right:Nn \l_@@_fontfeat_up_clist { SizeFeatures = {#1} }
+ }
+\@@_keys_define_code:nnn {fontspec-preparse-nested} {SizeFeatures}
+ {
+ \clist_set:Nn \l_@@_sizefeat_clist {#1}
+ \tl_if_empty:NT \l_@@_this_font_tl
+ { \tl_set:Nn \l_@@_this_font_tl { -- } } % needs to be non-empty as a flag
+ }
+\@@_keys_define_code:nnn {fontspec-preparse-nested} {Font}
+ {
+ \tl_set:Nn \l_@@_this_font_tl {#1}
+ }
+\@@_keys_define_code:nnn {fontspec} {SizeFeatures}
+ {
+ % dummy
+ }
+\@@_keys_define_code:nnn {fontspec} {Font}
+ {
+ % dummy
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-sizing} {Size}
+ {
+ \tl_set:Nn \l_@@_size_tl {#1}
+ }
+\@@_keys_define_code:nnn {fontspec-sizing} {Font}
+ {
+ \fontspec_complete_fontname:Nn \l_@@_sizedfont_tl {#1}
+ }
+% \end{macrocode}
+%
+% A hack to fix a test, needs to be investigated why necessary!
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-opentype} {UprightFont} {}
+\@@_keys_define_code:nnn {fontspec-opentype} {ItalicFont} {}
+\@@_keys_define_code:nnn {fontspec-opentype} {SlantedFont} {}
+\@@_keys_define_code:nnn {fontspec-opentype} {BoldFont} {}
+\@@_keys_define_code:nnn {fontspec-opentype} {BoldItalicFont} {}
+\@@_keys_define_code:nnn {fontspec-opentype} {BoldSlantedFont} {}
+% \end{macrocode}
+%
+%
+%
+% \subsection{General font-independent features}
+%
+% These features can be applied to any font.
+%
+% \paragraph{NFSS encoding}
+% For the very brave.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {NFSSEncoding}
+ {
+ \tl_gset:Nx \g_@@_nfss_enc_tl { #1 }
+ }
+% \end{macrocode}
+%
+% \paragraph{NFSS family}
+% Interactions with other packages will sometimes require setting the NFSS family explicitly.
+% (By default \pkg{fontspec} auto-generates one based on the font name.)
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {NFSSFamily}
+ {
+ \tl_set:Nx \l_@@_nfss_fam_tl { #1 }
+ }
+% \end{macrocode}
+%
+% \paragraph{NFSS series/shape}
+% This option looks similar in name but has a very different function.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-preparse} {FontFace}
+ {
+ \tl_clear:N \l_@@_this_font_tl
+ \clist_set:No \l_@@_arg_clist { \use_iii:nnn #1 }
+ \clist_set_eq:NN \l_@@_this_feat_clist \l_@@_arg_clist
+ \int_compare:nT { \clist_count:N \l_@@_arg_clist = 1 }
+ {
+%<debug>\typeout{FontFace~ parsing:~ one~ clist~ item}
+ \tl_if_in:NnF \l_@@_arg_clist {=}
+ {
+%<debug>\typeout{FontFace~ parsing:~ no~ equals~ =>~ font~ name~ only}
+ \tl_set_eq:NN \l_@@_this_font_tl \l_@@_arg_clist
+ \tl_clear:N \l_@@_this_feat_clist
+ }
+ }
+
+ \@@_add_nfssfont:nnnn
+ {\use_i:nnn #1} {\use_ii:nnn #1} {\l_@@_this_font_tl} {\l_@@_this_feat_clist}
+ }
+% \end{macrocode}
+%
+%
+%
+% \paragraph{Scale}
+% If the input isn't one of the pre-defined string options, then
+% it's gotta be numerical. \cs{fontspec_calc_scale:n} does all the work in
+% the auto-scaling cases.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {Scale}
+ {
+ \str_case:nnF {#1}
+ {
+ {MatchLowercase} { \@@_calc_scale:n {5} }
+ {MatchUppercase} { \@@_calc_scale:n {8} }
+ }
+ { \tl_set:Nx \l_@@_scale_tl {#1} }
+ }
+% \end{macrocode}
+%
+% \paragraph{ScaleAgain}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {ScaleAgain}
+ {
+ \tl_if_empty:NT \l_@@_scale_tl { \tl_set:Nn \l_@@_scale_tl {1} }
+ \tl_set:Nx \l_@@_scale_tl { \fp_eval:n { #1 * \l_@@_scale_tl } }
+ \@@_info:n {set-scale}
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_calc_scale:n}
+% This macro calculates the amount of scaling between the default
+% roman font and the (default shape of) the font being selected such
+% that the font dimension that is input is equal for both. The only
+% font dimensions that justify this are 5 (lowercase height)
+% and 8 (uppercase height in \XeTeX).
+%
+% This script is executed for every extra shape, which seems wasteful,
+% but allows alternate italic shapes from a separate font, say, to
+% be loaded and to be auto-scaled correctly. Even if this would be ugly.
+%
+% To begin, change to \cs{rmfamily} but use internal commands in case cs{rmfamily}
+% has been overwritten.
+% (Note that changing \cs{rmfamily} with fontspec resets \cs{encodingdefault}
+% appropriately.)
+% \begin{macrocode}
+\cs_new:Nn \@@_calc_scale:n
+ {
+ \group_begin:
+
+ \fontencoding { \encodingdefault }
+ \fontfamily { \familydefault }
+ \selectfont
+
+ \@@_set_font_dimen:NnN \l_@@_tmpa_dim {#1} \font
+ \@@_set_font_dimen:NnN \l_@@_tmpb_dim {#1} \l_@@_fontface_cs_tl
+
+ \tl_set:Nx \l_@@_scale_tl
+ {
+ \fp_eval:n { \dim_to_fp:n {\l_@@_tmpa_dim} /
+ \dim_to_fp:n {\l_@@_tmpb_dim} }
+ }
+
+ \@@_info:n {set-scale}
+ \exp_args:NNNx
+ \group_end:
+ \tl_set:Nx \l_@@_scale_tl { \l_@@_scale_tl }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_set_font_dimen:NnN}
+% This function sets the dimension |#1| (for font |#3|) to `fontdimen' |#2|
+% for either font dimension 5 (x-height) or 8 (cap-height). If, for some
+% reason, these return an incorrect `zero' value (as \cs{fontdimen8} might
+% for a \texttt{.tfm} font), then we cheat and measure the height of a glyph.
+% We assume in this case that the font contains either an `X' or an `x'.
+% \begin{macrocode}
+\cs_new:Nn \@@_set_font_dimen:NnN
+ {
+ \dim_set:Nn #1 { \fontdimen #2 #3 }
+ \dim_compare:nNnT #1 = {0pt}
+ {
+ \settoheight #1
+ {
+ \str_if_eq:nnTF {#3} {\font} \rmfamily #3
+ \int_case:nnF #2
+ {
+ {5} {x} % x-height
+ {8} {X} % cap-height
+ } {?} % "else" clause; never reached.
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \paragraph{Inter-word space}
+% These options set the relevant \cmd\fontdimen s for the
+% font being loaded.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {WordSpace}
+ {
+ \bool_if:NF \l_@@_firsttime_bool
+ { \_fontspec_parse_wordspace:w #1,,,\q_stop }
+ }
+\@@_aff_error:n {WordSpace}
+% \end{macrocode}
+%
+% \begin{macro}{\_fontspec_parse_wordspace:w}
+% This macro determines if the input to \feat{WordSpace} is
+% of the form |{X}| or |{X,Y,Z}| and executes the font scaling.
+% If the former input, it executes |{X,X,X}|.
+% \begin{macrocode}
+\cs_set:Npn \_fontspec_parse_wordspace:w #1,#2,#3,#4 \q_stop
+ {
+ \tl_if_empty:nTF {#4}
+ {
+ \tl_set:Nn \l_@@_wordspace_adjust_tl
+ {
+ \fontdimen 2 \font = #1 \fontdimen 2 \font
+ \fontdimen 3 \font = #1 \fontdimen 3 \font
+ \fontdimen 4 \font = #1 \fontdimen 4 \font
+ }
+ }
+ {
+ \tl_set:Nn \l_@@_wordspace_adjust_tl
+ {
+ \fontdimen 2 \font = #1 \fontdimen 2 \font
+ \fontdimen 3 \font = #2 \fontdimen 3 \font
+ \fontdimen 4 \font = #3 \fontdimen 4 \font
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Punctuation space}
+% Scaling factor for the nominal \cmd\fontdimen \#7.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {PunctuationSpace}
+ {
+ \str_case_e:nnF {#1}
+ {
+ {WordSpace}
+ {
+ \tl_set:Nn \l_@@_punctspace_adjust_tl
+ { \fontdimen 7 \font = 0 \fontdimen 2 \font }
+ }
+ {TwiceWordSpace}
+ {
+ \tl_set:Nn \l_@@_punctspace_adjust_tl
+ { \fontdimen 7 \font = 1 \fontdimen 2 \font }
+ }
+ }
+ {
+ \tl_set:Nn \l_@@_punctspace_adjust_tl
+ { \fontdimen 7 \font = #1 \fontdimen 7 \font }
+ }
+ }
+\@@_aff_error:n {PunctuationSpace}
+% \end{macrocode}
+%
+% \paragraph{Secret hook into the font-adjustment code}
+%
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {FontAdjustment}
+ {
+ \tl_put_right:Nx \l_@@_postadjust_tl {#1}
+ }
+% \end{macrocode}
+%
+% \paragraph{Letterspacing}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {LetterSpace}
+ {
+ \@@_update_featstr:n {letterspace=#1}
+ }
+% \end{macrocode}
+%
+% \paragraph{Hyphenation character}
+% This feature takes one of three arguments: `\opt{None}',
+% \meta{glyph}, or \meta{slot}. If the input isn't the first,
+% and it's one character, then it's the second; otherwise, it's
+% the third.
+%
+% LuaTeX decouples hyphenation from font settings, so only \verb|HyphenChar=None| works
+% for that engine.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {HyphenChar}
+ {
+ \str_if_eq:nnTF {#1} {None}
+ {
+ \tl_put_right:Nn \l_@@_postadjust_tl
+ { \@@_primitive_font_set_hyphenchar:Nn \font {-1} }
+ }
+ {
+%<LU> \@@_warning:nx {only-xetex-feature} {HyphenChar}
+
+ \tl_if_single:nTF {#1}
+ { \tl_set:Nn \l_@@_hyphenchar_tl {`#1} }
+ { \tl_set:Nn \l_@@_hyphenchar_tl { #1} }
+
+ \exp_args:No \@@_primitive_font_glyph_if_exist:NnTF \l_@@_fontface_cs_tl {\l_@@_hyphenchar_tl}
+ {
+ \tl_put_right:Nn \l_@@_postadjust_tl
+ { \@@_primitive_font_set_hyphenchar:Nn \font { \l_@@_hyphenchar_tl } }
+ }
+ { \@@_error:nxx {no-glyph}{\l_fontspec_fontname_tl}{#1} }
+
+ }
+ }
+\@@_aff_error:n {HyphenChar}
+% \end{macrocode}
+%
+% \paragraph{Color}
+% Hooks into pkg{xcolor}, which names its colours \texttt{\char`\\color@<name>}.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {Color}
+ {
+ \cs_if_exist:cTF { \token_to_str:N \color@ #1 }
+ {
+ \convertcolorspec{named}{#1}{HTML}\l_@@_hexcol_tl
+ }
+ {
+ \int_compare:nTF { \tl_count:n {#1} == 6 }
+ { \tl_set:Nn \l_@@_hexcol_tl {#1} }
+ {
+ \int_compare:nTF { \tl_count:n {#1} == 8 }
+ { \fontspec_parse_colour:viii #1 }
+ {
+ \bool_if:NF \l_@@_firsttime_bool
+ { \@@_warning:nx {bad-colour} {#1} }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \fontspec_parse_colour:viii #1#2#3#4#5#6#7#8
+ {
+ \tl_set:Nn \l_@@_hexcol_tl {#1#2#3#4#5#6}
+ \tl_if_eq:NNF \l_@@_opacity_tl \c_@@_opacity_tl
+ {
+ \bool_if:NF \l_@@_firsttime_bool
+ { \@@_warning:nx {opa-twice-col} {#7#8} }
+ }
+ \tl_set:Nn \l_@@_opacity_tl {#7#8}
+ }
+\aliasfontfeature{Color}{Colour}
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {Opacity}
+ {
+ \int_set:Nn \l_@@_tmp_int {255}
+ \@@_int_mult_truncate:Nn \l_@@_tmp_int { #1 }
+ \tl_if_eq:NNF \l_@@_opacity_tl \c_@@_opacity_tl
+ {
+ \bool_if:NF \l_@@_firsttime_bool
+ { \@@_warning:nx {opa-twice} {#1} }
+ }
+ \tl_set:Nx \l_@@_opacity_tl
+ {
+ \int_compare:nT { \l_@@_tmp_int <= "F } {0} % zero pad
+ \int_to_hex:n { \l_@@_tmp_int }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \paragraph{Mapping}
+% \begin{macrocode}
+%<*XE>
+\@@_keys_define_code:nnn {fontspec-aat} {Mapping}
+ {
+ \tl_set:Nn \l_@@_mapping_tl { #1 }
+ }
+\@@_keys_define_code:nnn {fontspec-opentype} {Mapping}
+ {
+ \tl_set:Nn \l_@@_mapping_tl { #1 }
+ }
+%</XE>
+%<*LU>
+\@@_keys_define_code:nnn {fontspec-opentype} {Mapping}
+ {
+ \str_if_eq:nnTF {#1} {tex-text}
+ {
+ \@@_warning:n {no-mapping-ligtex}
+ \msg_redirect_name:nnn {fontspec} {no-mapping-ligtex} {none}
+ \keys_set:nn {fontspec-opentype} { Ligatures=TeX }
+ }
+ { \@@_warning:n {no-mapping} }
+ }
+%</LU>
+% \end{macrocode}
+%
+%
+% \subsubsection{Continuous font axes}
+%
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec} {Weight}
+ {
+ \@@_update_featstr:n{weight=#1}
+ }
+\@@_keys_define_code:nnn {fontspec} {Width}
+ {
+ \@@_update_featstr:n{width=#1}
+ }
+\@@_keys_define_code:nnn {fontspec} {OpticalSize}
+%<*XE>
+ {
+ \bool_if:NTF \l_@@_ot_bool
+ {
+ \tl_set:Nn \l_@@_optical_size_tl {/ S = #1}
+ }
+ {
+ \bool_if:NT \l_@@_mm_bool
+ {
+ \@@_update_featstr:n { optical size = #1 }
+ }
+ }
+ \bool_if:nT { !\l_@@_ot_bool && !\l_@@_mm_bool }
+ {
+ \bool_if:NT \l_@@_firsttime_bool
+ { \@@_warning:nx {no-opticals} {\l_fontspec_fontname_tl} }
+ }
+ }
+%</XE>
+%<*LU>
+ {
+ \tl_set:Nn \l_@@_optical_size_tl {/ S = #1}
+ }
+%</LU>
+% \end{macrocode}
+%
+% \subsubsection{Font transformations}
+% These are to be specified to apply directly to a font shape:
+% \begin{macrocode}
+\keys_define:nn {fontspec}
+ {
+ FakeSlant .code:n =
+ {
+ \@@_update_featstr:n {slant=#1}
+ },
+ FakeSlant .default:n = {0.2}
+ }
+\keys_define:nn {fontspec}
+ {
+ FakeStretch .code:n =
+ {
+ \@@_update_featstr:n {extend=#1}
+ },
+ FakeStretch .default:n = {1.2}
+ }
+\keys_define:nn {fontspec}
+ {
+ FakeBold .code:n =
+ {
+ \@@_update_featstr:n {embolden=#1}
+ },
+ FakeBold .default:n = {1.5}
+ }
+% \end{macrocode}
+% These are to be given to a shape that has no real bold/italic
+% to signal that \pkg{fontspec} should automatically create `fake' shapes.
+%
+% The behaviour is currently that only if both \opt{AutoFakeSlant} \emph{and}
+% \opt{AutoFakeBold} are specified, the bold italic is also faked.
+%
+% These features presently \emph{override} real shapes found in the font;
+% in the future I'd like these features to be ignored in this case, instead.
+% (This is just a bit harder to program in the current design of
+% \pkg{fontspec}.)
+% \begin{macrocode}
+\keys_define:nn {fontspec}
+ {
+ AutoFakeSlant .code:n =
+ {
+ \bool_if:NT \l_@@_firsttime_bool
+ {
+ \tl_set:Nn \l_@@_fake_slant_tl {#1}
+ \clist_put_right:Nn \l_@@_fontfeat_it_clist {FakeSlant=#1}
+ \tl_set_eq:NN \l_@@_fontname_it_tl \l_fontspec_fontname_tl
+ \bool_set_false:N \l_@@_noit_bool
+
+ \tl_if_empty:NF \l_@@_fake_embolden_tl
+ {
+ \clist_put_right:Nx \l_@@_fontfeat_bfit_clist
+ {FakeBold=\l_@@_fake_embolden_tl}
+ \clist_put_right:Nx \l_@@_fontfeat_bfit_clist {FakeSlant=#1}
+ \tl_set_eq:NN \l_@@_fontname_bfit_tl \l_fontspec_fontname_tl
+ }
+ }
+ },
+ AutoFakeSlant .default:n = {0.2}
+ }
+% \end{macrocode}
+% Same but reversed:
+% \begin{macrocode}
+\keys_define:nn {fontspec}
+ {
+ AutoFakeBold .code:n =
+ {
+ \bool_if:NT \l_@@_firsttime_bool
+ {
+ \tl_set:Nn \l_@@_fake_embolden_tl {#1}
+ \clist_put_right:Nn \l_@@_fontfeat_bf_clist {FakeBold=#1}
+ \tl_set_eq:NN \l_@@_fontname_bf_tl \l_fontspec_fontname_tl
+ \bool_set_false:N \l_@@_nobf_bool
+
+ \tl_if_empty:NF \l_@@_fake_slant_tl
+ {
+ \clist_put_right:Nx \l_@@_fontfeat_bfit_clist
+ {FakeSlant=\l_@@_fake_slant_tl}
+ \clist_put_right:Nx \l_@@_fontfeat_bfit_clist {FakeBold=#1}
+ \tl_set_eq:NN \l_@@_fontname_bfit_tl \l_fontspec_fontname_tl
+ }
+ }
+ },
+ AutoFakeBold .default:n = {1.5}
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection{Raw feature string}
+% This allows savvy \XeTeX-ers to input font features manually if they have
+% already memorised the OpenType abbreviations and don't mind not having error checking.
+% \begin{macrocode}
+\@@_keys_define_code:nnn {fontspec-opentype} {RawFeature}
+ {
+ \@@_update_featstr:n {#1}
+ }
+\@@_keys_define_code:nnn {fontspec-aat} {RawFeature}
+ {
+ \@@_update_featstr:n {#1}
+ }
+% \end{macrocode}
+%
+%
+%
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-lang.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-lang.dtx
new file mode 100644
index 0000000000..f9ea7f6cd7
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-lang.dtx
@@ -0,0 +1,419 @@
+%%^^A%% fontspec-code-lang.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{Font language definitions}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% \begin{macrocode}
+\newfontlanguage{Abaza}{ABA}
+\newfontlanguage{Abkhazian}{ABK}
+\newfontlanguage{Adyghe}{ADY}
+\newfontlanguage{Afrikaans}{AFK}
+\newfontlanguage{Afar}{AFR}
+\newfontlanguage{Agaw}{AGW}
+\newfontlanguage{Altai}{ALT}
+\newfontlanguage{Amharic}{AMH}
+\newfontlanguage{Arabic}{ARA}
+\newfontlanguage{Aari}{ARI}
+\newfontlanguage{Arakanese}{ARK}
+\newfontlanguage{Assamese}{ASM}
+\newfontlanguage{Athapaskan}{ATH}
+\newfontlanguage{Avar}{AVR}
+\newfontlanguage{Awadhi}{AWA}
+\newfontlanguage{Aymara}{AYM}
+\newfontlanguage{Azeri}{AZE}
+\newfontlanguage{Badaga}{BAD}
+\newfontlanguage{Baghelkhandi}{BAG}
+\newfontlanguage{Balkar}{BAL}
+\newfontlanguage{Baule}{BAU}
+\newfontlanguage{Berber}{BBR}
+\newfontlanguage{Bench}{BCH}
+\newfontlanguage{Bible~Cree}{BCR}
+\newfontlanguage{Belarussian}{BEL}
+\newfontlanguage{Bemba}{BEM}
+\newfontlanguage{Bengali}{BEN}
+\newfontlanguage{Bulgarian}{BGR}
+\newfontlanguage{Bhili}{BHI}
+\newfontlanguage{Bhojpuri}{BHO}
+\newfontlanguage{Bikol}{BIK}
+\newfontlanguage{Bilen}{BIL}
+\newfontlanguage{Blackfoot}{BKF}
+\newfontlanguage{Balochi}{BLI}
+\newfontlanguage{Balante}{BLN}
+\newfontlanguage{Balti}{BLT}
+\newfontlanguage{Bambara}{BMB}
+\newfontlanguage{Bamileke}{BML}
+\newfontlanguage{Breton}{BRE}
+\newfontlanguage{Brahui}{BRH}
+\newfontlanguage{Braj~Bhasha}{BRI}
+\newfontlanguage{Burmese}{BRM}
+\newfontlanguage{Bashkir}{BSH}
+\newfontlanguage{Beti}{BTI}
+\newfontlanguage{Catalan}{CAT}
+\newfontlanguage{Cebuano}{CEB}
+\newfontlanguage{Chechen}{CHE}
+\newfontlanguage{Chaha~Gurage}{CHG}
+\newfontlanguage{Chattisgarhi}{CHH}
+\newfontlanguage{Chichewa}{CHI}
+\newfontlanguage{Chukchi}{CHK}
+\newfontlanguage{Chipewyan}{CHP}
+\newfontlanguage{Cherokee}{CHR}
+\newfontlanguage{Chuvash}{CHU}
+\newfontlanguage{Comorian}{CMR}
+\newfontlanguage{Coptic}{COP}
+\newfontlanguage{Cree}{CRE}
+\newfontlanguage{Carrier}{CRR}
+\newfontlanguage{Crimean~Tatar}{CRT}
+\newfontlanguage{Church~Slavonic}{CSL}
+\newfontlanguage{Czech}{CSY}
+\newfontlanguage{Danish}{DAN}
+\newfontlanguage{Dargwa}{DAR}
+\newfontlanguage{Woods~Cree}{DCR}
+\newfontlanguage{German}{DEU}
+\newfontlanguage{Dogri}{DGR}
+\newfontlanguage{Divehi}{DIV}
+\newfontlanguage{Djerma}{DJR}
+\newfontlanguage{Dangme}{DNG}
+\newfontlanguage{Dinka}{DNK}
+\newfontlanguage{Dungan}{DUN}
+\newfontlanguage{Dzongkha}{DZN}
+\newfontlanguage{Ebira}{EBI}
+\newfontlanguage{Eastern~Cree}{ECR}
+\newfontlanguage{Edo}{EDO}
+\newfontlanguage{Efik}{EFI}
+\newfontlanguage{Greek}{ELL}
+\newfontlanguage{English}{ENG}
+\newfontlanguage{Erzya}{ERZ}
+\newfontlanguage{Spanish}{ESP}
+\newfontlanguage{Estonian}{ETI}
+\newfontlanguage{Basque}{EUQ}
+\newfontlanguage{Evenki}{EVK}
+\newfontlanguage{Even}{EVN}
+\newfontlanguage{Ewe}{EWE}
+\newfontlanguage{French~Antillean}{FAN}
+\newfontlanguage{Farsi}{FAR}
+\newfontlanguage{Parsi}{FAR}
+\newfontlanguage{Persian}{FAR}
+\newfontlanguage{Finnish}{FIN}
+\newfontlanguage{Fijian}{FJI}
+\newfontlanguage{Flemish}{FLE}
+\newfontlanguage{Forest~Nenets}{FNE}
+\newfontlanguage{Fon}{FON}
+\newfontlanguage{Faroese}{FOS}
+\newfontlanguage{French}{FRA}
+\newfontlanguage{Frisian}{FRI}
+\newfontlanguage{Friulian}{FRL}
+\newfontlanguage{Futa}{FTA}
+\newfontlanguage{Fulani}{FUL}
+\newfontlanguage{Ga}{GAD}
+\newfontlanguage{Gaelic}{GAE}
+\newfontlanguage{Gagauz}{GAG}
+\newfontlanguage{Galician}{GAL}
+\newfontlanguage{Garshuni}{GAR}
+\newfontlanguage{Garhwali}{GAW}
+\newfontlanguage{Ge'ez}{GEZ}
+\newfontlanguage{Gilyak}{GIL}
+\newfontlanguage{Gumuz}{GMZ}
+\newfontlanguage{Gondi}{GON}
+\newfontlanguage{Greenlandic}{GRN}
+\newfontlanguage{Garo}{GRO}
+\newfontlanguage{Guarani}{GUA}
+\newfontlanguage{Gujarati}{GUJ}
+\newfontlanguage{Haitian}{HAI}
+\newfontlanguage{Halam}{HAL}
+\newfontlanguage{Harauti}{HAR}
+\newfontlanguage{Hausa}{HAU}
+\newfontlanguage{Hawaiin}{HAW}
+\newfontlanguage{Hammer-Banna}{HBN}
+\newfontlanguage{Hiligaynon}{HIL}
+\newfontlanguage{Hindi}{HIN}
+\newfontlanguage{High~Mari}{HMA}
+\newfontlanguage{Hindko}{HND}
+\newfontlanguage{Ho}{HO}
+\newfontlanguage{Harari}{HRI}
+\newfontlanguage{Croatian}{HRV}
+\newfontlanguage{Hungarian}{HUN}
+\newfontlanguage{Armenian}{HYE}
+\newfontlanguage{Igbo}{IBO}
+\newfontlanguage{Ijo}{IJO}
+\newfontlanguage{Ilokano}{ILO}
+\newfontlanguage{Indonesian}{IND}
+\newfontlanguage{Ingush}{ING}
+\newfontlanguage{Inuktitut}{INU}
+\newfontlanguage{Irish}{IRI}
+\newfontlanguage{Irish~Traditional}{IRT}
+\newfontlanguage{Icelandic}{ISL}
+\newfontlanguage{Inari~Sami}{ISM}
+\newfontlanguage{Italian}{ITA}
+\newfontlanguage{Hebrew}{IWR}
+\newfontlanguage{Javanese}{JAV}
+\newfontlanguage{Yiddish}{JII}
+\newfontlanguage{Japanese}{JAN}
+\newfontlanguage{Judezmo}{JUD}
+\newfontlanguage{Jula}{JUL}
+\newfontlanguage{Kabardian}{KAB}
+\newfontlanguage{Kachchi}{KAC}
+\newfontlanguage{Kalenjin}{KAL}
+\newfontlanguage{Kannada}{KAN}
+\newfontlanguage{Karachay}{KAR}
+\newfontlanguage{Georgian}{KAT}
+\newfontlanguage{Kazakh}{KAZ}
+\newfontlanguage{Kebena}{KEB}
+\newfontlanguage{Khutsuri~Georgian}{KGE}
+\newfontlanguage{Khakass}{KHA}
+\newfontlanguage{Khanty-Kazim}{KHK}
+\newfontlanguage{Khmer}{KHM}
+\newfontlanguage{Khanty-Shurishkar}{KHS}
+\newfontlanguage{Khanty-Vakhi}{KHV}
+\newfontlanguage{Khowar}{KHW}
+\newfontlanguage{Kikuyu}{KIK}
+\newfontlanguage{Kirghiz}{KIR}
+\newfontlanguage{Kisii}{KIS}
+\newfontlanguage{Kokni}{KKN}
+\newfontlanguage{Kalmyk}{KLM}
+\newfontlanguage{Kamba}{KMB}
+\newfontlanguage{Kumaoni}{KMN}
+\newfontlanguage{Komo}{KMO}
+\newfontlanguage{Komso}{KMS}
+\newfontlanguage{Kanuri}{KNR}
+\newfontlanguage{Kodagu}{KOD}
+\newfontlanguage{Korean~Old~Hangul}{KOH}
+\newfontlanguage{Konkani}{KOK}
+\newfontlanguage{Kikongo}{KON}
+\newfontlanguage{Komi-Permyak}{KOP}
+\newfontlanguage{Korean}{KOR}
+\newfontlanguage{Komi-Zyrian}{KOZ}
+\newfontlanguage{Kpelle}{KPL}
+\newfontlanguage{Krio}{KRI}
+\newfontlanguage{Karakalpak}{KRK}
+\newfontlanguage{Karelian}{KRL}
+\newfontlanguage{Karaim}{KRM}
+\newfontlanguage{Karen}{KRN}
+\newfontlanguage{Koorete}{KRT}
+\newfontlanguage{Kashmiri}{KSH}
+\newfontlanguage{Khasi}{KSI}
+\newfontlanguage{Kildin~Sami}{KSM}
+\newfontlanguage{Kui}{KUI}
+\newfontlanguage{Kulvi}{KUL}
+\newfontlanguage{Kumyk}{KUM}
+\newfontlanguage{Kurdish}{KUR}
+\newfontlanguage{Kurukh}{KUU}
+\newfontlanguage{Kuy}{KUY}
+\newfontlanguage{Koryak}{KYK}
+\newfontlanguage{Ladin}{LAD}
+\newfontlanguage{Lahuli}{LAH}
+\newfontlanguage{Lak}{LAK}
+\newfontlanguage{Lambani}{LAM}
+\newfontlanguage{Lao}{LAO}
+\newfontlanguage{Latin}{LAT}
+\newfontlanguage{Laz}{LAZ}
+\newfontlanguage{L-Cree}{LCR}
+\newfontlanguage{Ladakhi}{LDK}
+\newfontlanguage{Lezgi}{LEZ}
+\newfontlanguage{Lingala}{LIN}
+\newfontlanguage{Low~Mari}{LMA}
+\newfontlanguage{Limbu}{LMB}
+\newfontlanguage{Lomwe}{LMW}
+\newfontlanguage{Lower~Sorbian}{LSB}
+\newfontlanguage{Lule~Sami}{LSM}
+\newfontlanguage{Lithuanian}{LTH}
+\newfontlanguage{Luba}{LUB}
+\newfontlanguage{Luganda}{LUG}
+\newfontlanguage{Luhya}{LUH}
+\newfontlanguage{Luo}{LUO}
+\newfontlanguage{Latvian}{LVI}
+\newfontlanguage{Majang}{MAJ}
+\newfontlanguage{Makua}{MAK}
+\newfontlanguage{Malayalam~Traditional}{MAL}
+\newfontlanguage{Mansi}{MAN}
+\newfontlanguage{Marathi}{MAR}
+\newfontlanguage{Marwari}{MAW}
+\newfontlanguage{Mbundu}{MBN}
+\newfontlanguage{Manchu}{MCH}
+\newfontlanguage{Moose~Cree}{MCR}
+\newfontlanguage{Mende}{MDE}
+\newfontlanguage{Me'en}{MEN}
+\newfontlanguage{Mizo}{MIZ}
+\newfontlanguage{Macedonian}{MKD}
+\newfontlanguage{Male}{MLE}
+\newfontlanguage{Malagasy}{MLG}
+\newfontlanguage{Malinke}{MLN}
+\newfontlanguage{Malayalam~Reformed}{MLR}
+\newfontlanguage{Malay}{MLY}
+\newfontlanguage{Mandinka}{MND}
+\newfontlanguage{Mongolian}{MNG}
+\newfontlanguage{Manipuri}{MNI}
+\newfontlanguage{Maninka}{MNK}
+\newfontlanguage{Manx~Gaelic}{MNX}
+\newfontlanguage{Moksha}{MOK}
+\newfontlanguage{Moldavian}{MOL}
+\newfontlanguage{Mon}{MON}
+\newfontlanguage{Moroccan}{MOR}
+\newfontlanguage{Maori}{MRI}
+\newfontlanguage{Maithili}{MTH}
+\newfontlanguage{Maltese}{MTS}
+\newfontlanguage{Mundari}{MUN}
+\newfontlanguage{Naga-Assamese}{NAG}
+\newfontlanguage{Nanai}{NAN}
+\newfontlanguage{Naskapi}{NAS}
+\newfontlanguage{N-Cree}{NCR}
+\newfontlanguage{Ndebele}{NDB}
+\newfontlanguage{Ndonga}{NDG}
+\newfontlanguage{Nepali}{NEP}
+\newfontlanguage{Newari}{NEW}
+\newfontlanguage{Nagari}{NGR}
+\newfontlanguage{Norway~House~Cree}{NHC}
+\newfontlanguage{Nisi}{NIS}
+\newfontlanguage{Niuean}{NIU}
+\newfontlanguage{Nkole}{NKL}
+\newfontlanguage{N'ko}{NKO}
+\newfontlanguage{Dutch}{NLD}
+\newfontlanguage{Nogai}{NOG}
+\newfontlanguage{Norwegian}{NOR}
+\newfontlanguage{Northern~Sami}{NSM}
+\newfontlanguage{Northern~Tai}{NTA}
+\newfontlanguage{Esperanto}{NTO}
+\newfontlanguage{Nynorsk}{NYN}
+\newfontlanguage{Oji-Cree}{OCR}
+\newfontlanguage{Ojibway}{OJB}
+\newfontlanguage{Oriya}{ORI}
+\newfontlanguage{Oromo}{ORO}
+\newfontlanguage{Ossetian}{OSS}
+\newfontlanguage{Palestinian~Aramaic}{PAA}
+\newfontlanguage{Pali}{PAL}
+\newfontlanguage{Punjabi}{PAN}
+\newfontlanguage{Palpa}{PAP}
+\newfontlanguage{Pashto}{PAS}
+\newfontlanguage{Polytonic~Greek}{PGR}
+\newfontlanguage{Pilipino}{PIL}
+\newfontlanguage{Palaung}{PLG}
+\newfontlanguage{Polish}{PLK}
+\newfontlanguage{Provencal}{PRO}
+\newfontlanguage{Portuguese}{PTG}
+\newfontlanguage{Chin}{QIN}
+\newfontlanguage{Rajasthani}{RAJ}
+\newfontlanguage{R-Cree}{RCR}
+\newfontlanguage{Russian~Buriat}{RBU}
+\newfontlanguage{Riang}{RIA}
+\newfontlanguage{Rhaeto-Romanic}{RMS}
+\newfontlanguage{Romanian}{ROM}
+\newfontlanguage{Romany}{ROY}
+\newfontlanguage{Rusyn}{RSY}
+\newfontlanguage{Ruanda}{RUA}
+\newfontlanguage{Russian}{RUS}
+\newfontlanguage{Sadri}{SAD}
+\newfontlanguage{Sanskrit}{SAN}
+\newfontlanguage{Santali}{SAT}
+\newfontlanguage{Sayisi}{SAY}
+\newfontlanguage{Sekota}{SEK}
+\newfontlanguage{Selkup}{SEL}
+\newfontlanguage{Sango}{SGO}
+\newfontlanguage{Shan}{SHN}
+\newfontlanguage{Sibe}{SIB}
+\newfontlanguage{Sidamo}{SID}
+\newfontlanguage{Silte~Gurage}{SIG}
+\newfontlanguage{Skolt~Sami}{SKS}
+\newfontlanguage{Slovak}{SKY}
+\newfontlanguage{Slavey}{SLA}
+\newfontlanguage{Slovenian}{SLV}
+\newfontlanguage{Somali}{SML}
+\newfontlanguage{Samoan}{SMO}
+\newfontlanguage{Sena}{SNA}
+\newfontlanguage{Sindhi}{SND}
+\newfontlanguage{Sinhalese}{SNH}
+\newfontlanguage{Soninke}{SNK}
+\newfontlanguage{Sodo~Gurage}{SOG}
+\newfontlanguage{Sotho}{SOT}
+\newfontlanguage{Albanian}{SQI}
+\newfontlanguage{Serbian}{SRB}
+\newfontlanguage{Saraiki}{SRK}
+\newfontlanguage{Serer}{SRR}
+\newfontlanguage{South~Slavey}{SSL}
+\newfontlanguage{Southern~Sami}{SSM}
+\newfontlanguage{Suri}{SUR}
+\newfontlanguage{Svan}{SVA}
+\newfontlanguage{Swedish}{SVE}
+\newfontlanguage{Swadaya~Aramaic}{SWA}
+\newfontlanguage{Swahili}{SWK}
+\newfontlanguage{Swazi}{SWZ}
+\newfontlanguage{Sutu}{SXT}
+\newfontlanguage{Syriac}{SYR}
+\newfontlanguage{Tabasaran}{TAB}
+\newfontlanguage{Tajiki}{TAJ}
+\newfontlanguage{Tamil}{TAM}
+\newfontlanguage{Tatar}{TAT}
+\newfontlanguage{TH-Cree}{TCR}
+\newfontlanguage{Telugu}{TEL}
+\newfontlanguage{Tongan}{TGN}
+\newfontlanguage{Tigre}{TGR}
+\newfontlanguage{Tigrinya}{TGY}
+\newfontlanguage{Thai}{THA}
+\newfontlanguage{Tahitian}{THT}
+\newfontlanguage{Tibetan}{TIB}
+\newfontlanguage{Turkish}{TRK,TUR}
+\newfontlanguage{Turkmen}{TKM}
+\newfontlanguage{Temne}{TMN}
+\newfontlanguage{Tswana}{TNA}
+\newfontlanguage{Tundra~Nenets}{TNE}
+\newfontlanguage{Tonga}{TNG}
+\newfontlanguage{Todo}{TOD}
+\newfontlanguage{Tsonga}{TSG}
+\newfontlanguage{Turoyo~Aramaic}{TUA}
+\newfontlanguage{Tulu}{TUL}
+\newfontlanguage{Tuvin}{TUV}
+\newfontlanguage{Twi}{TWI}
+\newfontlanguage{Udmurt}{UDM}
+\newfontlanguage{Ukrainian}{UKR}
+\newfontlanguage{Urdu}{URD}
+\newfontlanguage{Upper~Sorbian}{USB}
+\newfontlanguage{Uyghur}{UYG}
+\newfontlanguage{Uzbek}{UZB}
+\newfontlanguage{Venda}{VEN}
+\newfontlanguage{Vietnamese}{VIT}
+\newfontlanguage{Wa}{WA}
+\newfontlanguage{Wagdi}{WAG}
+\newfontlanguage{West-Cree}{WCR}
+\newfontlanguage{Welsh}{WEL}
+\newfontlanguage{Wolof}{WLF}
+\newfontlanguage{Tai~Lue}{XBD}
+\newfontlanguage{Xhosa}{XHS}
+\newfontlanguage{Yakut}{YAK}
+\newfontlanguage{Yoruba}{YBA}
+\newfontlanguage{Y-Cree}{YCR}
+\newfontlanguage{Yi~Classic}{YIC}
+\newfontlanguage{Yi~Modern}{YIM}
+\newfontlanguage{Chinese~Hong~Kong}{ZHH}
+\newfontlanguage{Chinese~Phonetic}{ZHP}
+\newfontlanguage{Chinese~Simplified}{ZHS}
+\newfontlanguage{Chinese~Traditional}{ZHT}
+\newfontlanguage{Zande}{ZND}
+\newfontlanguage{Zulu}{ZUL}
+% \end{macrocode}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-load.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-load.dtx
new file mode 100644
index 0000000000..7d0501b89e
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-load.dtx
@@ -0,0 +1,72 @@
+%%^^A%% fontspec-code-load.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%
+% \section{The \texttt{fontspec.sty} loading file}
+%
+% Before we begin, for the rest of the package we use the \texttt{@@} \textsf{expl3}
+% module syntax with module name `\texttt{fontspec}'.
+% \begin{macrocode}
+%<@@=fontspec>
+% \end{macrocode}
+% The \texttt{fontspec.sty} file is simply set up to load the appropriate
+% \texttt{fontspec-xetex.sty} or \texttt{fontspec-luatex.sty} file.
+% This is performed by the following code.
+%
+% \begin{macrocode}
+%<*load>
+% \end{macrocode}
+%
+% \paragraph{\LuaLaTeX}
+% \begin{macrocode}
+\sys_if_engine_luatex:T
+ {
+ \RequirePackage{luaotfload}
+ \lua_now:e{require("fontspec")}
+ \RequirePackageWithOptions{fontspec-luatex}
+ \endinput
+ }
+% \end{macrocode}
+%
+% \paragraph{\XeLaTeX}
+% \begin{macrocode}
+\sys_if_engine_xetex:T
+ {
+ \RequirePackageWithOptions{fontspec-xetex}
+ \endinput
+ }
+% \end{macrocode}
+%
+% \paragraph{Other}
+% If not one of the above, error and exit.
+% \begin{macrocode}
+\msg_new:nnn {fontspec} {cannot-use-pdftex}
+ {
+ The~ fontspec~ package~ requires~ either~ XeTeX~ or~ LuaTeX.\\\\
+ You~ must~ change~ your~ typesetting~ engine~ to,~ e.g.,~
+ "xelatex"~ or~ "lualatex" instead~ of~ "latex"~ or~ "pdflatex".
+ }
+\msg_fatal:nn {fontspec} {cannot-use-pdftex}
+% \end{macrocode}
+%
+% \paragraph{Closing}
+% That's the end of the \texttt{fontspec.sty} file.
+% \begin{macrocode}
+\endinput
+%</load>
+% \end{macrocode}
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-math.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-math.dtx
new file mode 100644
index 0000000000..bbe70ef437
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-math.dtx
@@ -0,0 +1,260 @@
+%%^^A%% fontspec-code-math.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%
+% \section{Selecting maths fonts}
+% Here, the fonts used in math mode are redefined to correspond to the
+% default roman, sans serif and typewriter fonts. Unfortunately, you
+% can only define maths fonts in the preamble, otherwise I'd run this
+% code whenever \cs{setmainfont} and friends was run.
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% \begin{macro}{\fontspec_setup_maths:}
+% Everything here is performed \cs{AtBeginDocument} in order to
+% overwrite \pkg{euler}'s attempt. This means \pkg{fontspec} must be
+% loaded \emph{after} \pkg{euler}. We set up a conditional to return
+% an error if this rule is violated.
+%
+% Since every maths setup is slightly different, we also take
+% different paths for defining various math glyphs depending which
+% maths font package has been loaded.
+%
+% \begin{macrocode}
+\@ifpackageloaded{euler}
+ { \bool_gset_true:N \g_@@_pkg_euler_loaded_bool }
+ { \bool_gset_false:N \g_@@_pkg_euler_loaded_bool }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \fontspec_setup_maths:
+ {
+ \@ifpackageloaded{euler}
+ {
+ \bool_if:NTF \g_@@_pkg_euler_loaded_bool
+ { \bool_gset_true:N \g_@@_math_euler_bool }
+ { \@@_error:n {euler-too-late} }
+ }
+ {}
+ \@ifpackageloaded{lucbmath}{ \bool_gset_true:N \g_@@_math_lucida_bool }{}
+ \@ifpackageloaded{lucidabr}{ \bool_gset_true:N \g_@@_math_lucida_bool }{}
+ \@ifpackageloaded{lucimatx}{ \bool_gset_true:N \g_@@_math_lucida_bool }{}
+% \end{macrocode}
+% Knuth's CM fonts fonts are all squashed together, combining letters,
+% accents, text symbols and maths symbols all in the one font,
+% \texttt{cmr}, plus other things in other fonts. Because we are
+% changing the roman font in the document, we need to redefine all of
+% the maths glyphs in \LaTeX's \texttt{operators} maths font to still
+% go back to the legacy \texttt{cmr} font for all these random glyphs,
+% unless a separate maths font package has been loaded instead.
+%
+% In every case, the maths accents are always taken from the
+% \texttt{operators} font, which is generally the main text
+% font. (Actually, there is a \cmd\hat\ accent in
+% \texttt{EulerFractur}, but it's \emph{ugly}. So I ignore it. Sorry
+% if this causes inconvenience.)
+% \begin{macrocode}
+ \DeclareSymbolFont{legacymaths}{OT1}{cmr}{m}{n}
+ \SetSymbolFont{legacymaths}{bold}{OT1}{cmr}{bx}{n}
+ \DeclareMathAccent{\acute} {\mathalpha}{legacymaths}{19}
+ \DeclareMathAccent{\grave} {\mathalpha}{legacymaths}{18}
+ \DeclareMathAccent{\ddot} {\mathalpha}{legacymaths}{127}
+ \DeclareMathAccent{\tilde} {\mathalpha}{legacymaths}{126}
+ \DeclareMathAccent{\bar} {\mathalpha}{legacymaths}{22}
+ \DeclareMathAccent{\breve} {\mathalpha}{legacymaths}{21}
+ \DeclareMathAccent{\check} {\mathalpha}{legacymaths}{20}
+ \DeclareMathAccent{\hat} {\mathalpha}{legacymaths}{94} % too bad, euler
+ \DeclareMathAccent{\dot} {\mathalpha}{legacymaths}{95}
+ \DeclareMathAccent{\mathring}{\mathalpha}{legacymaths}{23}
+% \end{macrocode}
+% \paragraph{\cmd\colon: what's going on?} Okay, so \verb":" and \cmd\colon\ in maths mode are defined in a few places, so I need to work out what does what. Respectively, we have:
+% \begin{Verbatim}
+% % fontmath.ltx:
+% \DeclareMathSymbol{\colon}{\mathpunct}{operators}{"3A}
+% \DeclareMathSymbol{:}{\mathrel}{operators}{"3A}
+%
+% % amsmath.sty:
+% \renewcommand{\colon}{\nobreak\mskip2mu\mathpunct{}\nonscript
+% \mkern-\thinmuskip{:}\mskip6muplus1mu\relax}
+%
+% % euler.sty:
+% \DeclareMathSymbol{:}\mathrel {EulerFraktur}{"3A}
+%
+% % lucbmath.sty:
+% \DeclareMathSymbol{\@tempb}{\mathpunct}{operators}{58}
+% \ifx\colon\@tempb
+% \DeclareMathSymbol{\colon}{\mathpunct}{operators}{58}
+% \fi
+% \DeclareMathSymbol{:}{\mathrel}{operators}{58}
+% \end{Verbatim}
+% ($\mathrm{3A_{16}}=\mathrm{58_{10}}$) So I think, based on this summary, that it is fair to tell \pkg{fontspec} to `replace' the operators font with legacymaths for this symbol, except when \pkg{amsmath} is loaded since we want to keep its definition.
+%
+%
+% \begin{macrocode}
+ \group_begin:
+ \mathchardef\@tempa="603A \relax
+ \ifx\colon\@tempa
+ \DeclareMathSymbol{\colon}{\mathpunct}{legacymaths}{58}
+ \fi
+ \group_end:
+% \end{macrocode}
+% The following symbols are only defined specifically in \pkg{euler}, so skip them
+% if that package is loaded.
+% \begin{macrocode}
+ \bool_if:NF \g_@@_math_euler_bool
+ {
+ \DeclareMathSymbol{!}{\mathclose}{legacymaths}{33}
+ \DeclareMathSymbol{:}{\mathrel} {legacymaths}{58}
+ \DeclareMathSymbol{;}{\mathpunct}{legacymaths}{59}
+ \DeclareMathSymbol{?}{\mathclose}{legacymaths}{63}
+% \end{macrocode}
+% And these ones are defined both in \pkg{euler} and \pkg{lucbmath},
+% so we only need to run this code if no extra maths package has been
+% loaded.
+% \begin{macrocode}
+ \bool_if:NF \g_@@_math_lucida_bool
+ {
+ \DeclareMathSymbol{0}{\mathalpha}{legacymaths}{`0}
+ \DeclareMathSymbol{1}{\mathalpha}{legacymaths}{`1}
+ \DeclareMathSymbol{2}{\mathalpha}{legacymaths}{`2}
+ \DeclareMathSymbol{3}{\mathalpha}{legacymaths}{`3}
+ \DeclareMathSymbol{4}{\mathalpha}{legacymaths}{`4}
+ \DeclareMathSymbol{5}{\mathalpha}{legacymaths}{`5}
+ \DeclareMathSymbol{6}{\mathalpha}{legacymaths}{`6}
+ \DeclareMathSymbol{7}{\mathalpha}{legacymaths}{`7}
+ \DeclareMathSymbol{8}{\mathalpha}{legacymaths}{`8}
+ \DeclareMathSymbol{9}{\mathalpha}{legacymaths}{`9}
+ \DeclareMathSymbol{\Gamma}{\mathalpha}{legacymaths}{0}
+ \DeclareMathSymbol{\Delta}{\mathalpha}{legacymaths}{1}
+ \DeclareMathSymbol{\Theta}{\mathalpha}{legacymaths}{2}
+ \DeclareMathSymbol{\Lambda}{\mathalpha}{legacymaths}{3}
+ \DeclareMathSymbol{\Xi}{\mathalpha}{legacymaths}{4}
+ \DeclareMathSymbol{\Pi}{\mathalpha}{legacymaths}{5}
+ \DeclareMathSymbol{\Sigma}{\mathalpha}{legacymaths}{6}
+ \DeclareMathSymbol{\Upsilon}{\mathalpha}{legacymaths}{7}
+ \DeclareMathSymbol{\Phi}{\mathalpha}{legacymaths}{8}
+ \DeclareMathSymbol{\Psi}{\mathalpha}{legacymaths}{9}
+ \DeclareMathSymbol{\Omega}{\mathalpha}{legacymaths}{10}
+ \DeclareMathSymbol{+}{\mathbin}{legacymaths}{43}
+ \DeclareMathSymbol{=}{\mathrel}{legacymaths}{61}
+ \DeclareMathDelimiter{(}{\mathopen} {legacymaths}{40}{largesymbols}{0}
+ \DeclareMathDelimiter{)}{\mathclose}{legacymaths}{41}{largesymbols}{1}
+ \DeclareMathDelimiter{[}{\mathopen} {legacymaths}{91}{largesymbols}{2}
+ \DeclareMathDelimiter{]}{\mathclose}{legacymaths}{93}{largesymbols}{3}
+ \DeclareMathDelimiter{/}{\mathord}{legacymaths}{47}{largesymbols}{14}
+ \DeclareMathSymbol{\mathdollar}{\mathord}{legacymaths}{36}
+ \renewcommand{\hbar}{{\mathchar"AF\mkern-9mu h}}% TODO: test with other fonts
+ }
+ }
+% \end{macrocode}
+% Finally, we change the font definitions for \cmd\mathrm\ and so
+% on. These are defined using the \cmd\g_@@_mathrm_tl\ (\dots) macros,
+% which default to \cmd\rmdefault\ but may be specified with the
+% \cmd\setmathrm\ (\dots) commands in the preamble.
+%
+% Since \LaTeX\ only generally defines one level of boldness, we omit
+% \cmd\mathbf\ in the \textsf{bold} maths series. It can be specified
+% as per usual with \cmd\setboldmathrm, which stores the appropriate
+% family name in \cmd\g_@@_bfmathrm_tl.
+% \begin{macrocode}
+ \DeclareSymbolFont{operators}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\shapedefault
+ \SetSymbolFont{operators}{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\shapedefault
+ \DeclareSymbolFontAlphabet\mathrm{operators}
+ \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\mddefault\itdefault
+ \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\shapedefault
+ \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g_@@_mathsf_tl\mddefault\shapedefault
+ \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g_@@_mathtt_tl\mddefault\shapedefault
+ \SetSymbolFont{operators}{bold}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\shapedefault
+ \tl_if_empty:NTF \g_@@_bfmathrm_tl
+ {
+ \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_@@_mathrm_tl\bfdefault\itdefault
+ }
+ {
+ \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\mddefault\shapedefault
+ \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\bfdefault\shapedefault
+ \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g_@@_bfmathrm_tl\mddefault\itdefault
+ }
+ \SetMathAlphabet\mathsf{bold}\g_fontspec_encoding_tl\g_@@_mathsf_tl\bfdefault\shapedefault
+ \SetMathAlphabet\mathtt{bold}\g_fontspec_encoding_tl\g_@@_mathtt_tl\bfdefault\shapedefault
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\fontspec_maybe_setup_maths:}
+% We're a little less sophisticated about not executing the maths setup if various other maths font packages are loaded. This list is based on the wonderful `\LaTeX Font Catalogue': \url{http://www.tug.dk/FontCatalogue/mathfonts.html}. I'm sure there are more I've missed. Do the \TeX\ Gyre fonts have maths support yet?
+%
+% Untested: would |\unless\ifnum\Gamma=28672\relax\bool_set_false:N \g_@@_math_bool\fi| be a better test?
+% This needs more cooperation with euler and lucida, I think.
+% \begin{macrocode}
+\cs_new:Nn \fontspec_maybe_setup_maths:
+ {
+ \@ifpackageloaded{anttor}
+ {
+ \ifx\define@antt@mathversions a\bool_gset_false:N \g_@@_math_bool\fi
+ }{}
+ \@ifpackageloaded{arevmath} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{eulervm} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{mathdesign} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{concmath} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{cmbright} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{mathesf} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{gfsartemisia} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{gfsneohellenic} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{iwona}
+ {
+ \ifx\define@iwona@mathversions a\bool_set_false:N \g_@@_math_bool\fi
+ }{}
+ \@ifpackageloaded{kpfonts}{\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{kmath} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{kurier}
+ {
+ \ifx\define@kurier@mathversions a\bool_set_false:N \g_@@_math_bool\fi
+ }{}
+ \@ifpackageloaded{fouriernc} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{fourier} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{lmodern} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{mathpazo} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{mathptmx} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{MinionPro} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{unicode-math} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{breqn} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{pxfonts} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{txfonts} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{newpxmath} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{newtxmath} {\bool_gset_false:N \g_@@_math_bool}{}
+ \@ifpackageloaded{mtpro2} {\bool_gset_false:N \g_@@_math_bool}{}
+ \bool_if:NT \g_@@_math_bool
+ {
+ \@@_info:n {setup-math}
+ \fontspec_setup_maths:
+ }
+ }
+\AtBeginDocument{\fontspec_maybe_setup_maths:}
+% \end{macrocode}
+% \end{macro}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-msg.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-msg.dtx
new file mode 100644
index 0000000000..f23ec2d85f
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-msg.dtx
@@ -0,0 +1,280 @@
+%%^^A%% fontspec-code-msg.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%
+% \section{Error/warning/info messages}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% Shorthands for messages:
+% \begin{macrocode}
+\cs_new:Npn \@@_error:n { \msg_error:nn {fontspec} }
+\cs_new:Npn \@@_error:nn { \msg_error:nnn {fontspec} }
+\cs_new:Npn \@@_error:nx { \msg_error:nnx {fontspec} }
+\cs_new:Npn \@@_warning:n { \msg_warning:nn {fontspec} }
+\cs_new:Npn \@@_warning:nx { \msg_warning:nnx {fontspec} }
+\cs_new:Npn \@@_warning:nxx { \msg_warning:nnxx {fontspec} }
+\cs_new:Npn \@@_info:n { \msg_info:nn {fontspec} }
+\cs_new:Npn \@@_info:nx { \msg_info:nnx {fontspec} }
+\cs_new:Npn \@@_info:nxx { \msg_info:nnxx {fontspec} }
+\cs_new:Npn \@@_trace:n { \msg_trace:nn {fontspec} }
+% \end{macrocode}
+%
+% Allow messages to be written with spaces acting as normal:
+% \begin{macrocode}
+\cs_generate_variant:Nn \msg_new:nnn {nnx}
+\cs_generate_variant:Nn \msg_new:nnnn {nnxx}
+\cs_new:Nn \@@_msg_new:nnn
+ { \msg_new:nnx {#1} {#2} { \tl_trim_spaces:n {#3} } }
+\cs_new:Nn \@@_msg_new:nnnn
+ { \msg_new:nnxx {#1} {#2} { \tl_trim_spaces:n {#3} } { \tl_trim_spaces:n {#4} } }
+\char_set_catcode_space:n {32}
+% \end{macrocode}
+%
+% \subsection{Errors}
+%
+% \begin{macrocode}
+\@@_msg_new:nnn {fontspec} {only-inside-encdef}
+ {
+ \exp_not:N#1can only be used in the second argument
+ to \string\DeclareUnicodeEncoding.
+ }
+\@@_msg_new:nnn {fontspec} {no-size-info}
+ {
+ Size information must be supplied.\\
+ For example, SizeFeatures={Size={8-12},...}.
+ }
+\@@_msg_new:nnnn {fontspec} {font-not-found}
+ {
+ The font "#1" cannot be found.
+ }
+ {
+ A font might not be found for many reasons.\\
+ Check the spelling, where the font is installed etc. etc.\\\\
+ When in doubt, ask someone for help!
+ }
+\@@_msg_new:nnnn {fontspec} {rename-feature-not-exist}
+ {
+ The feature #1 doesn't appear to be defined.
+ }
+ {
+ It looks like you're trying to rename a feature that doesn't exist.
+ }
+\@@_msg_new:nnn {fontspec} {no-glyph}
+ {
+ '#1' does not contain glyph #2.
+ }
+\@@_msg_new:nnnn {fontspec} {euler-too-late}
+ {
+ The euler package must be loaded BEFORE fontspec.
+ }
+ {
+ fontspec only overwrites euler's attempt to
+ define the maths text fonts if fontspec is
+ loaded after euler. Type <return> to proceed
+ with incorrect \string\mathit, \string\mathbf, etc.
+ }
+\@@_msg_new:nnnn {fontspec} {no-xcolor}
+ {
+ Cannot load named colours without the xcolor package.
+ }
+ {
+ Sorry, I can't do anything to help. Instead of loading
+ the color package, use xcolor instead.
+ }
+\@@_msg_new:nnnn {fontspec} {unknown-color-model}
+ {
+ Error loading colour `#1'; unknown colour model.
+ }
+ {
+ Sorry, I can't do anything to help. Please report this error
+ to my developer with a minimal example that causes the problem.
+ }
+\@@_msg_new:nnnn {fontspec} {not-in-addfontfeatures}
+ {
+ The "#1" font feature cannot be used in \string\addfontfeatures.
+ }
+ {
+ This is due to how TeX loads fonts; such settings
+ are global so adding them mid-document within a group causes
+ confusion. You'll need to define multiple font families to achieve
+ what you want.
+ }
+% \end{macrocode}
+%
+% \subsection{Warnings}
+%
+% \begin{macrocode}
+\@@_msg_new:nnn {fontspec} {tu-clash}
+ {
+ I have found the tuenc.def encoding definition file but the TU encoding is not
+ defined by the LaTeX2e kernel; attempting to correct but you really should update
+ to the latest version of LaTeX2e.
+ }
+\@@_msg_new:nnn {fontspec} {tu-missing}
+ {
+ The TU encoding seems to be missing; please update to the latest version of LaTeX2e.
+ }
+\@@_msg_new:nnn {fontspec} {addfontfeatures-ignored}
+ {
+ \string\addfontfeature (s) ignored \msg_line_context:;
+ it cannot be used with a font that wasn't selected by a fontspec command.\\
+ \\
+ The current font is "\use:c{font@name}".\\
+ \int_compare:nTF { \clist_count:n {#1} = 1 }
+ { The requested feature is "#1". }
+ { The requested features are "#1". }
+ }
+\@@_msg_new:nnn {fontspec} {feature-option-overwrite}
+ {
+ Option '#2' of font feature '#1' overwritten.
+ }
+\@@_msg_new:nnn {fontspec} {ot-tag-too-long}
+ {
+ OpenType tag '#1' is too long; script, language, and feature tags must be four characters or fewer.
+ }
+\@@_msg_new:nnn {fontspec} {aat-feature-not-exist}
+ {
+ '\l_keys_key_tl=\l_keys_value_tl' feature not supported
+ for AAT font '\l_fontspec_fontname_tl'.
+ }
+\@@_msg_new:nnn {fontspec} {aat-feature-not-exist-in-font}
+ {
+ AAT feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available
+ in font '\l_fontspec_fontname_tl'.
+ }
+\@@_msg_new:nnn {fontspec} {icu-feature-not-exist}
+ {
+ '\l_keys_key_tl=\l_keys_value_tl' feature not supported
+ for OpenType font '\l_fontspec_fontname_tl'
+ }
+\@@_msg_new:nnn {fontspec} {icu-feature-not-exist-in-font}
+ {
+ OpenType feature '\l_keys_key_tl=\l_keys_value_tl' (#1) not available
+ for font '\l_fontspec_fontname_tl'
+ with script '\l_@@_script_name_tl' and language '\l_@@_lang_name_tl'.
+ }
+\@@_msg_new:nnn {fontspec} {no-opticals}
+ {
+ '#1' doesn't appear to have an Optical Size axis.
+ }
+\@@_msg_new:nnn {fontspec} {language-not-exist}
+ {
+ Language '#1' not available
+ for font '\l_fontspec_fontname_tl'
+ with script '\l_@@_script_name_tl'.
+ }
+\@@_msg_new:nnn {fontspec} {only-xetex-feature}
+ {
+ Ignored XeTeX-only feature: '#1'.
+ }
+\@@_msg_new:nnn {fontspec} {only-luatex-feature}
+ {
+ Ignored LuaTeX-only feature: '#1'.
+ }
+\@@_msg_new:nnn {fontspec} {unknown-renderer}
+ {
+ Renderer '#1' unknown. Assuming Harfbuzz with 'shaper=#1'.
+ Please raise a fontspec issue to add this shaper to the interface.
+ }
+\@@_msg_new:nnn {fontspec} {no-mapping}
+ {
+ Input mapping not supported in LuaTeX.
+ }
+\@@_msg_new:nnn {fontspec} {no-mapping-ligtex}
+ {
+ Input mapping not supported in LuaTeX.\\
+ Use "Ligatures=TeX" instead of "Mapping=tex-text".
+ }
+\@@_msg_new:nnn {fontspec} {cm-default-obsolete}
+ {
+ The "cm-default" package option is obsolete.
+ }
+\@@_msg_new:nnn {fontspec} {font-index-needs-ttc}
+ {
+ The "FontIndex" feature is only supported by TTC (TrueType Collection) fonts.\\
+ Feature ignored.
+ }
+\@@_msg_new:nnn {fontspec} {feat-cannot-remove}
+ {
+ The "#1" feature cannot be deactivated. Request ignored.
+ }
+% \end{macrocode}
+%
+% \subsection{Info messages}
+%
+% \begin{macrocode}
+\@@_msg_new:nnn {fontspec} {defining-font}
+ {
+ Font family '\g_@@_nfss_family_tl' created for font '#2'
+ with options [\l_@@_all_features_clist].\\
+ \\
+ This font family consists of the following NFSS series/shapes:\\
+ \g_@@_defined_shapes_tl
+ }
+\@@_msg_new:nnn {fontspec} {no-font-shape}
+ {
+ Could not resolve font "#1" (it probably doesn't exist).
+ }
+\@@_msg_new:nnn {fontspec} {set-scale}
+ {
+ \l_fontspec_fontname_tl\space scale = \l_@@_scale_tl.
+ }
+\@@_msg_new:nnn {fontspec} {setup-math}
+ {
+ Adjusting the maths setup (use [no-math] to avoid this).
+ }
+\@@_msg_new:nnn {fontspec} {no-script}
+ {
+ Font "#1" does not contain requested Script "#2".
+ }
+\@@_msg_new:nnn {fontspec} {opa-twice}
+ {
+ Opacity set twice, in both Colour and Opacity.\\
+ Using specification "Opacity=#1".
+ }
+\@@_msg_new:nnn {fontspec} {opa-twice-col}
+ {
+ Opacity set twice, in both Opacity and Colour.\\
+ Using an opacity specification in hex of "#1/FF".
+ }
+\@@_msg_new:nnn {fontspec} {bad-colour}
+ {
+ Bad colour declaration "#1".
+ Colour must be one of:\\
+ * a named xcolor colour\\
+ * a six-digit hex colour RRGGBB\\
+ * an eight-digit hex colour RRGGBBTT with opacity
+ }
+% \end{macrocode}
+%
+% Reset `space' behaviour:
+% \begin{macrocode}
+\char_set_catcode_ignore:n {32}
+% \end{macrocode}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-opening.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-opening.dtx
new file mode 100644
index 0000000000..b8fb02e9e8
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-opening.dtx
@@ -0,0 +1,213 @@
+%%^^A%% fontspec-code-opening.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%
+% \section{Opening code}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% \subsection{Package options}
+%
+% \begin{macrocode}
+\DeclareOption{cm-default}
+ {
+ \@@_warning:n {cm-default-obsolete}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption {math} { \bool_gset_true:N \g_@@_math_bool }
+\DeclareOption {no-math} { \bool_gset_false:N \g_@@_math_bool }
+\DeclareOption {config} { \bool_gset_true:N \g_@@_cfg_bool }
+\DeclareOption {no-config}{ \bool_gset_false:N \g_@@_cfg_bool }
+\DeclareOption {euenc} { \bool_gset_true:N \g_@@_euenc_bool }
+\DeclareOption {tuenc} { \bool_gset_false:N \g_@@_euenc_bool }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareOption {quiet}
+ {
+ \msg_redirect_module:nnn { fontspec } { warning } { info }
+ \msg_redirect_module:nnn { fontspec } { info } { none }
+ }
+\DeclareOption{silent}
+ {
+ \msg_redirect_module:nnn { fontspec } { warning } { none }
+ \msg_redirect_module:nnn { fontspec } { info } { none }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\ExecuteOptions{config,math,tuenc}
+\ProcessOptions*
+% \end{macrocode}
+%
+%
+%
+%
+% \subsection{Encodings}
+%
+% Soon to be the default, with a just-in-case check:
+% \begin{macrocode}
+\bool_if:NF \g_@@_euenc_bool
+ {
+ \file_if_exist:nTF {tuenc.def}
+ {
+ \cs_if_exist:cF {T@TU}
+ {
+ \@@_warning:n {tu-clash}
+ \DeclareFontEncoding{TU}{}{}
+ \DeclareFontSubstitution{TU}{lmr}{m}{n}
+ }
+ }
+ {
+ \@@_warning:n {tu-missing}
+ \bool_gset_true:N \g_@@_euenc_bool
+ }
+ }
+\bool_if:NTF \g_@@_euenc_bool
+ {
+%<XE> \tl_gset:Nn \g_fontspec_encoding_tl {EU1}
+%<LU> \tl_gset:Nn \g_fontspec_encoding_tl {EU2}
+ }
+ { \tl_gset:Nn \g_fontspec_encoding_tl { TU } }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_set:Nn \rmdefault {lmr}
+\tl_set:Nn \sfdefault {lmss}
+\tl_set:Nn \ttdefault {lmtt}
+\RequirePackage[\g_fontspec_encoding_tl]{fontenc}
+\tl_set_eq:NN \UTFencname \g_fontspec_encoding_tl % for xunicode if needed
+% \end{macrocode}
+% To overcome the encoding changing the current font size, but only if a class has been loaded first:
+% \begin{macrocode}
+\tl_if_in:NnT \@filelist {.cls} { \normalsize }
+% \end{macrocode}
+% Dealing with a couple of the problems introduced by \pkg{babel}:
+% \begin{macrocode}
+\tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl
+\tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl
+\AtBeginDocument
+ {
+ \tl_set_eq:NN \cyrillicencoding \g_fontspec_encoding_tl
+ \tl_set_eq:NN \latinencoding \g_fontspec_encoding_tl
+ }
+% \end{macrocode}
+% That latin encoding definition is repeated to suppress font warnings.
+% Something to do with \cmd\select@language\ ending up in the \texttt{.aux}
+% file which is read at the beginning of the document.
+%
+% \begin{macrocode}
+\bool_if:NT \g_@@_euenc_bool
+ {
+%<LU> \cs_set_eq:NN \fontspec_tmp: \XeTeXpicfile
+%<LU> \cs_set:Npn \XeTeXpicfile {}
+ \RequirePackage{xunicode}
+%<LU> \cs_set_eq:NN \XeTeXpicfile \fontspec_tmp:
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Generic functions}
+%
+% \begin{macro}{\FontspecSetCheckBoolTrue}
+% \begin{macro}{\FontspecSetCheckBoolFalse}
+% These strange set functions are to simplify returning code from LuaTeX:
+% \begin{macrocode}
+\cs_new:Npn \FontspecSetCheckBoolTrue { \bool_set_true:N \l_@@_check_bool }
+\cs_new:Npn \FontspecSetCheckBoolFalse { \bool_set_false:N \l_@@_check_bool }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_keys_set_known:nnN}
+% \begin{macrocode}
+\cs_new:Nn \@@_keys_set_known:nnN
+ {
+%<debug> \typeout{:::: Keys~set:~{#1}~{#2} }
+ \keys_set_known:nnN {#1} {#2} #3
+%<debug> \typeout{:::: Leftover:~{#3} }
+ }
+\cs_generate_variant:Nn \@@_keys_set_known:nnN {nx}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_int_mult_truncate:Nn}
+% Missing in expl3, IMO.
+% \begin{macrocode}
+\cs_new:Nn \@@_int_mult_truncate:Nn
+ {
+ \int_set:Nn #1 { \__dim_eval:w #2 #1 \__dim_eval_end: }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_lua_function:ne}
+% \begin{macro}{\@@_lua_function:nee}
+% \begin{macro}{\@@_lua_function:neee}
+% \begin{macro}{\@@_lua_function:neeee}
+% \begin{macrocode}
+%<*LU>
+\cs_set:Npn \@@_lua_function:ne #1#2 { \lua_now:e { fontspec.#1 ("#2") } }
+\cs_set:Npn \@@_lua_function:nee #1#2#3 { \lua_now:e { fontspec.#1 ("#2","#3") } }
+\cs_set:Npn \@@_lua_function:neee #1#2#3#4 { \lua_now:e { fontspec.#1 ("#2","#3","#4") } }
+\cs_set:Npn \@@_lua_function:neeee #1#2#3#4#5 { \lua_now:e { fontspec.#1 ("#2","#3","#4","#5") } }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \subsection{\pkg{expl3} variants}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \int_set:Nn {Nv}
+\cs_generate_variant:Nn \keys_set:nn {nx}
+\cs_generate_variant:Nn \keys_set_known:nnN {nx}
+\cs_generate_variant:Nn \prop_put:Nnn {Nxx}
+\cs_generate_variant:Nn \prop_put:Nnn {NxV}
+\cs_generate_variant:Nn \prop_gput_if_new:Nnn {NxV}
+\cs_generate_variant:Nn \prop_gput:Nnn {Nxn}
+\cs_generate_variant:Nn \prop_get:NnNT {NxN}
+\cs_generate_variant:Nn \prop_get:NnNTF {NxN}
+\cs_generate_variant:Nn \str_if_eq:nnTF {nv}
+\cs_generate_variant:Nn \tl_if_empty_p:n {e}
+\cs_generate_variant:Nn \tl_if_empty:nTF {x}
+\cs_generate_variant:Nn \tl_if_empty:nF {x}
+\cs_generate_variant:Nn \tl_if_empty:nF {f}
+\cs_generate_variant:Nn \tl_if_eq:nnT {ox}
+\cs_generate_variant:Nn \tl_replace_all:Nnn {Nnx}
+% \end{macrocode}
+%
+%
+%
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-opentype.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-opentype.dtx
new file mode 100644
index 0000000000..be0b8be768
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-opentype.dtx
@@ -0,0 +1,478 @@
+%%^^A%% fontspec-code-opentype.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{OpenType definitions code}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+%
+%
+% \begin{macro}{\@@_define_opentype_feature_group:n}
+% \begin{macrocode}
+\cs_new:Nn \@@_define_opentype_feature_group:n
+ {
+ \keys_define:nn {fontspec-opentype} { #1 .multichoice: , .groups:n = {opentype} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_define_opentype_feature:nnnnn}
+% \darg{Feature key}
+% \darg{Feature option val}
+% \darg{Check feature --- leave empty for no check}
+% \darg{Exact tag string to activate --- leave empty for disable only}
+% \darg{Tags to remove (clist)}
+% \begin{macrocode}
+\cs_new:Nn \@@_feat_prop_add:nn
+ {
+ \tl_if_empty:nF {#1}
+ {
+ \prop_if_in:NnF \g_@@_OT_features_prop {#1}
+ {
+ \prop_gput:Nnn \g_@@_OT_features_prop {#1} {#2}
+ }
+ }
+ }
+\cs_new:Nn \@@_define_opentype_feature:nnnnn
+ {
+ \@@_feat_prop_add:nn {#3} {#1\,=\,#2}
+ \tl_if_empty:nTF {#4}
+ {
+ \keys_define:nn {fontspec-opentype}
+ {
+ #1/#2 .code:n =
+ { \@@_remove_clashing_featstr:n {#5} } ,
+ #1/#2 .groups:n = {opentype}
+ }
+ }
+ {
+ \keys_define:nn {fontspec-opentype}
+ {
+ #1/#2 .code:n =
+ {
+%<debug> \typeout{::::::::fontspec-opentype~#1/#2~=~#3/#4/#5}
+ \@@_make_OT_feature:nnn {#3} {#4} {#5}
+ } ,
+ #1/#2 .groups:n = {opentype}
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_define_opentype_onoffreset:nnnnn}
+% \darg{Feature key}
+% \darg{Feature option val}
+% \darg{Check feature}
+% \darg{Tag prefix to activate: \texttt{+\#4} = on, \texttt{-\#4} = off.}
+% \darg{Tags to remove in the on case (clist)}
+% \begin{macrocode}
+\cs_new:Nn \@@_feat_off:n {#1Off}
+\cs_new:Nn \@@_feat_reset:n {#1Reset}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_define_opentype_onoffreset:nnnnn
+ {
+ \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} {#2} {#3} {+#4} {#5}
+ \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_off:n {#2} } {#3} {-#4} {}
+ \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_reset:n {#2} } {} {} {+#4,-#4}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_define_opentype_onreset:nnnnn}
+% \darg{Feature key}
+% \darg{Feature option val}
+% \darg{Check feature}
+% \darg{Exact tag string to activate}
+% \darg{Tags to remove (clist)}
+% \begin{macrocode}
+\cs_new:Nn \@@_define_opentype_onreset:nnnnn
+ {
+ \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} {#2} {#3} {#4} {#5}
+ \exp_args:Nnx \@@_define_opentype_feature:nnnnn {#1} { \@@_feat_reset:n {#2} } {} {} {#4}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Adding features when loading fonts}
+%
+% When remove clashing features,
+% \begin{enumerate}
+% \item remove the feature being added (to avoid duplicates);
+% \item remove the inverse of the feature (to avoid cancellation);
+% \item finally remove all clashing features.
+% \end{enumerate}
+% \begin{macrocode}
+\cs_new:Nn \@@_make_OT_feature:nnn
+ {
+%<debug> \typeout{:: @@_make_OT_feature:nnn \exp_not:n { {#1}{#2}{#3} } }
+
+ \bool_set_true:N \l_@@_proceed_bool
+
+ \tl_if_empty:nF {#1}
+ {
+ \exp_args:No \@@_check_ot_feat:NnF \l_@@_fontface_cs_tl {#1}
+ {
+ \@@_warning:nx {icu-feature-not-exist-in-font} {#1}
+ \bool_set_false:N \l_@@_proceed_bool
+ }
+ }
+
+ \@@_remove_clashing_featstr:x { #2 , \@@_swap_plus_minus:n {#2} , #3 }
+
+ \bool_if:NT \l_@@_proceed_bool { \@@_update_featstr:n {#2} }
+ }
+\cs_generate_variant:Nn \@@_make_OT_feature:nnn {xxx}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_swap_plus_minus:n { \@@_swap_plus_minus_aux:Nq #1 \q_nil }
+\cs_new:Npn \@@_swap_plus_minus_aux:Nq #1#2 \q_nil
+ { \str_case:nn {#1} { {+} {-#2} {-} {+#2} } }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_check_script:NnTF}
+% This macro takes an OpenType script tag and checks if it exists in the current
+% font. \cmd\l_@@_script_int\ is used to store
+% the number corresponding to the script tag string.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_check_script:Nn {TF,T}
+ {
+%<debug>\typeout{:: _check_script:Nn~#1~/~#2}
+ \bool_if:NTF \l_@@_never_check_bool
+ { \prg_return_true: }
+ {
+ \bool_if:nTF { \tl_if_empty_p:e {#2} }
+ { \prg_return_false: }
+ {
+%<*XE>
+%<debug>\typeout{::::~ checking~ script~ #2}
+ \@@_iv_str_to_num:Nx \l_@@_strnum_int {#2}
+ \int_set:Nn \l_tmpb_int { \XeTeXOTcountscripts #1 }
+ \int_zero:N \l_tmpa_int
+ \bool_set_false:N \l__fontspec_check_bool
+ \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int }
+ {
+ \ifnum \XeTeXOTscripttag #1 \l_tmpa_int = \l_@@_strnum_int
+ \bool_set_true:N \l__fontspec_check_bool
+ \int_set:Nn \l_tmpa_int {\l_tmpb_int}
+ \else
+ \int_incr:N \l_tmpa_int
+ \fi
+ }
+ \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
+%</XE>
+%<*LU>
+ \@@_ot_validate_tag:x {#2}
+ \cs_if_eq:NNTF #1 \font
+ { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} }
+ { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} }
+%<debug>\typeout{::::~ checking:~"\l_@@_tmp_tl",~ "#2"}
+ \lua_now:e { fontspec.check_ot_script("\l_@@_tmp_tl", "#2") }
+ \bool_if:NTF \l__fontspec_check_bool
+ {
+%<debug>\typeout{::::::~ TRUE}
+ \prg_return_true:
+ }
+ {
+%<debug>\typeout{::::::~ FALSE}
+ \prg_return_false:
+ }
+%</LU>
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_check_lang:NnnTF}
+% \begin{macro}{\@@_check_lang:NnTF}
+% This macro takes an OpenType language tag and checks if it exists in the current
+% font/script. \cmd\l_@@_language_int\ is used to store
+% the number corresponding to the language tag string.
+% The script used is whatever's held in \cmd\l_@@_script_int. By default, that's the
+% number corresponding to `|latn|'.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_check_lang:Nn {TF}
+ {
+ \@@_check_lang:NnnTF #1 {#2} {\l_@@_script_tl} {\prg_return_true:} {\prg_return_false:}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_check_lang:Nnn {TF}
+ {
+%<debug>\typeout{:: _check_lang:Nn~#1~/~#2~/~#3~/}
+ \bool_if:NTF \l_@@_never_check_bool
+ { \prg_return_true: }
+ {
+ \bool_if:nTF { \tl_if_empty_p:e {#3} }
+ { \prg_return_false: }
+ {
+%<*XE>
+ \@@_iv_str_to_num:Nx \l_@@_strnum_int {#2}
+ \@@_iv_str_to_num:Nx \l_@@_script_int {#3}
+ \int_set:Nn \l_@@_tmpb_int
+ { \XeTeXOTcountlanguages #1 \l_@@_script_int }
+ \int_zero:N \l_@@_tmpa_int
+ \bool_set_false:N \l__fontspec_check_bool
+ \bool_until_do:nn { \int_compare_p:nNn \l_@@_tmpa_int = \l_@@_tmpb_int }
+ {
+ \int_set:Nn \l_@@_tmpc_int
+ { \XeTeXOTlanguagetag #1 \l_@@_script_int \l_@@_tmpa_int }
+
+ \int_compare:nNnTF \l_@@_tmpc_int = \l_@@_strnum_int
+ {
+ \bool_set_true:N \l__fontspec_check_bool
+ \int_set:Nn \l_@@_tmpa_int {\l_@@_tmpb_int}
+ }
+ {
+ \int_incr:N \l_@@_tmpa_int
+ }
+ }
+ \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
+%</XE>
+%<*LU>
+ \@@_ot_validate_tag:x {#2}
+ \@@_ot_validate_tag:x {#3}
+ \cs_if_eq:NNTF #1 \font
+ { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} }
+ { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} }
+ \@@_lua_function:neee {check_ot_lang} {\l_@@_tmp_tl} {#2} {#3}
+ \bool_if:NTF \l__fontspec_check_bool \prg_return_true: \prg_return_false:
+%</LU>
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_check_ot_feat:NnTF}
+% \begin{macro}{\@@_check_ot_feat:NnnnTF}
+% This macro takes an OpenType feature tag and checks if it exists in the current
+% font/script/language.
+% \cmd\l_@@_strnum_int\ is used to store the number corresponding to the feature tag string.
+% The script used is whatever's held in \cmd\l_@@_script_int. By default, that's the
+% number corresponding to `|latn|'. The language used is \cmd\l_@@_language_int,
+% by default |0|, the `default language'.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_check_ot_feat:Nn {TF,F}
+ {
+ \@@_check_ot_feat:NnnnTF #1 {#2} {\l_@@_lang_tl} {\l_@@_script_tl}
+ {\prg_return_true:} {\prg_return_false:}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_check_ot_feat:Nnnn {TF,F}
+ {
+ \bool_if:NTF \l_@@_never_check_bool
+ { \prg_return_true: }
+ {
+ \bool_if:nTF { \tl_if_empty_p:e {#3} || \tl_if_empty_p:e {#4} }
+ { \prg_return_false: }
+ {
+%<*XE>
+%<debug>\typeout{::~ fontspec_check_ot_feat:nnn~ {#2}{#3}{#4}}
+ \@@_iv_str_to_num:Nx \l_@@_strnum_int {#2}
+
+ \str_if_eq:eeTF {#3} {dflt}
+ { \int_zero:N \l_@@_language_int }
+ { \@@_iv_str_to_num:Nx \l_@@_language_int {#3} }
+ \@@_iv_str_to_num:Nx \l_@@_script_int {#4}
+
+ \int_set:Nn \l_tmpb_int
+ { \XeTeXOTcountfeatures #1 \l_@@_script_int \l_@@_language_int }
+
+ \int_zero:N \l_tmpa_int
+ \bool_set_false:N \l_@@_check_bool
+ \bool_until_do:nn { \int_compare_p:nNn \l_tmpa_int = \l_tmpb_int }
+ {
+ \ifnum\XeTeXOTfeaturetag #1 \l_@@_script_int \l_@@_language_int
+ \l_tmpa_int =\l_@@_strnum_int
+ \bool_set_true:N \l_@@_check_bool
+ \int_set:Nn \l_tmpa_int {\l_tmpb_int}
+ \else
+ \int_incr:N \l_tmpa_int
+ \fi
+ }
+ \bool_if:NTF \l_@@_check_bool \prg_return_true: \prg_return_false:
+%</XE>
+%<*LU>
+%<debug>\typeout{::~ fontspec_check_ot_feat:n~ {#1}}
+ \@@_ot_validate_tag:x {#2}
+ \@@_ot_validate_tag:x {#3}
+ \@@_ot_validate_tag:x {#4}
+ \cs_if_eq:NNTF #1 \font
+ { \tl_set:Nx \l_@@_tmp_tl {\curr@fontshape/\f@size} }
+ { \tl_set:Nx \l_@@_tmp_tl {\cs_to_str:N #1} }
+ \@@_lua_function:neeee {check_ot_feat} {\l_@@_tmp_tl} {#2} {#3} {#4}
+ \bool_if:NTF \l_@@_check_bool \prg_return_true: \prg_return_false:
+%</LU>
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{OpenType feature information}
+%
+% \begin{macrocode}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {aalt}{Access~All~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvf}{Above-base~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvm}{Above-base~Mark~Positioning}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {abvs}{Above-base~Substitutions}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {afrc}{Alternative~Fractions}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {akhn}{Akhands}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blwf}{Below-base~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blwm}{Below-base~Mark~Positioning}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {blws}{Below-base~Substitutions}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {calt}{Contextual~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {case}{Case-Sensitive~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ccmp}{Glyph~Composition~/~Decomposition}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cfar}{Conjunct~Form~After~Ro}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cjct}{Conjunct~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {clig}{Contextual~Ligatures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cpct}{Centered~CJK~Punctuation}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cpsp}{Capital~Spacing}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cswh}{Contextual~Swash}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {curs}{Cursive~Positioning}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {cvNN}{Character~Variant~$N$}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {c2pc}{Petite~Capitals~From~Capitals}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {c2sc}{Small~Capitals~From~Capitals}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dist}{Distances}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dlig}{Discretionary~Ligatures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dnom}{Denominators}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {dtls}{Dotless~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {expt}{Expert~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {falt}{Final~Glyph~on~Line~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fin2}{Terminal~Forms~\#2}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fin3}{Terminal~Forms~\#3}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fina}{Terminal~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {flac}{Flattened~accent~forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {frac}{Fractions}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {fwid}{Full~Widths}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {half}{Half~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {haln}{Halant~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {halt}{Alternate~Half~Widths}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hist}{Historical~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hkna}{Horizontal~Kana~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hlig}{Historical~Ligatures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hngl}{Hangul}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hojo}{Hojo~Kanji~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {hwid}{Half~Widths}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {init}{Initial~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {isol}{Isolated~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ital}{Italics}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jalt}{Justification~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp78}{JIS78~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp83}{JIS83~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp90}{JIS90~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {jp04}{JIS2004~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {kern}{Kerning}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {lfbd}{Left~Bounds}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {liga}{Standard~Ligatures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ljmo}{Leading~Jamo~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {lnum}{Lining~Figures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {locl}{Localized~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ltra}{Left-to-right~alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ltrm}{Left-to-right~mirrored~forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mark}{Mark~Positioning}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {med2}{Medial~Forms~\#2}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {medi}{Medial~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mgrk}{Mathematical~Greek}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mkmk}{Mark~to~Mark~Positioning}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {mset}{Mark~Positioning~via~Substitution}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nalt}{Alternate~Annotation~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nlck}{NLC~Kanji~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {nukt}{Nukta~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {numr}{Numerators}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {onum}{Oldstyle~Figures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {opbd}{Optical~Bounds}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ordn}{Ordinals}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ornm}{Ornaments}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {palt}{Proportional~Alternate~Widths}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pcap}{Petite~Capitals}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pkna}{Proportional~Kana}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pnum}{Proportional~Figures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pref}{Pre-Base~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pres}{Pre-base~Substitutions}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pstf}{Post-base~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {psts}{Post-base~Substitutions}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {pwid}{Proportional~Widths}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {qwid}{Quarter~Widths}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rand}{Randomize}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rclt}{Required~Contextual~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rkrf}{Rakar~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rlig}{Required~Ligatures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rphf}{Reph~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtbd}{Right~Bounds}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtla}{Right-to-left~alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rtlm}{Right-to-left~mirrored~forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ruby}{Ruby~Notation~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {rvrn}{Required~Variation~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {salt}{Stylistic~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {sinf}{Scientific~Inferiors}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {size}{Optical~size}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {smcp}{Small~Capitals}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {smpl}{Simplified~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ssNN}{Stylistic~Set~$N$}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {ssty}{Math~script~style~alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {stch}{Stretching~Glyph~Decomposition}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {subs}{Subscript}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {sups}{Superscript}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {swsh}{Swash}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {titl}{Titling}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tjmo}{Trailing~Jamo~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tnam}{Traditional~Name~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {tnum}{Tabular~Figures}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {trad}{Traditional~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {twid}{Third~Widths}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {unic}{Unicase}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {valt}{Alternate~Vertical~Metrics}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vatu}{Vattu~Variants}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vert}{Vertical~Writing}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vhal}{Alternate~Vertical~Half~Metrics}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vjmo}{Vowel~Jamo~Forms}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vkna}{Vertical~Kana~Alternates}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vkrn}{Vertical~Kerning}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vpal}{Proportional~Alternate~Vertical~Metrics}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vrt2}{Vertical~Alternates~and~Rotation}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {vrtr}{Vertical~Alternates~for~Rotation}
+\prop_gput:Nnn \g_@@_all_opentype_feature_names_prop {zero}{Slashed~Zero}
+% \end{macrocode}
+% TODO: move the above elsewhere!!
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-scripts.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-scripts.dtx
new file mode 100644
index 0000000000..32e861f566
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-scripts.dtx
@@ -0,0 +1,194 @@
+%%^^A%% fontspec-code-scripts.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{Font script definitions}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% \begin{macrocode}
+\newfontscript{Adlam}{adlm}
+\newfontscript{Ahom}{ahom}
+\newfontscript{Anatolian~Hieroglyphs}{hluw}
+\newfontscript{Arabic}{arab}
+\newfontscript{Armenian}{armn}
+\newfontscript{Avestan}{avst}
+\newfontscript{Balinese}{bali}
+\newfontscript{Bamum}{bamu}
+\newfontscript{Bassa~Vah}{bass}
+\newfontscript{Batak}{batk}
+\newfontscript{Bengali}{bng2,beng}
+\newfontscript{Bhaiksuki}{bhks}
+\newfontscript{Bopomofo}{bopo}
+\newfontscript{Brahmi}{brah}
+\newfontscript{Braille}{brai}
+\newfontscript{Buginese}{bugi}
+\newfontscript{Buhid}{buhd}
+\newfontscript{Byzantine~Music}{byzm}
+\newfontscript{Canadian~Syllabics}{cans}
+\newfontscript{Carian}{cari}
+\newfontscript{Caucasian~Albanian}{aghb}
+\newfontscript{Chakma}{cakm}
+\newfontscript{Cham}{cham}
+\newfontscript{Cherokee}{cher}
+\newfontscript{CJK~Ideographic}{hani}
+\newfontscript{Coptic}{copt}
+\newfontscript{Cypriot~Syllabary}{cprt}
+\newfontscript{Cyrillic}{cyrl}
+\newfontscript{Default}{DFLT}
+\newfontscript{CustomDefault}{latn,DFLT}
+\newfontscript{Deseret}{dsrt}
+\newfontscript{Devanagari}{dev2,deva}
+\newfontscript{Dogra}{dogr}
+\newfontscript{Duployan}{dupl}
+\newfontscript{Egyptian~Hieroglyphs}{egyp}
+\newfontscript{Elbasan}{elba}
+\newfontscript{Ethiopic}{ethi}
+\newfontscript{Georgian}{geor}
+\newfontscript{Glagolitic}{glag}
+\newfontscript{Gothic}{goth}
+\newfontscript{Grantha}{gran}
+\newfontscript{Greek}{grek}
+\newfontscript{Gujarati}{gjr2,gujr}
+\newfontscript{Gunjala~Gondi}{gong}
+\newfontscript{Gurmukhi}{gur2,guru}
+\newfontscript{Hangul~Jamo}{jamo}
+\newfontscript{Hangul}{hang}
+\newfontscript{Hanifi~Rohingya}{rohg}
+\newfontscript{Hanunoo}{hano}
+\newfontscript{Hatran}{hatr}
+\newfontscript{Hebrew}{hebr}
+\newfontscript{Hiragana~and~Katakana}{kana}
+\newfontscript{Imperial~Aramaic}{armi}
+\newfontscript{Inscriptional~Pahlavi}{phli}
+\newfontscript{Inscriptional~Parthian}{prti}
+\newfontscript{Javanese}{java}
+\newfontscript{Kaithi}{kthi}
+\newfontscript{Kannada}{knd2,knda}
+\newfontscript{Kayah~Li}{kali}
+\newfontscript{Kharosthi}{khar}
+\newfontscript{Khmer}{khmr}
+\newfontscript{Khojki}{khoj}
+\newfontscript{Khudawadi}{sind}
+\newfontscript{Lao}{lao~}
+\newfontscript{Latin}{latn}
+\newfontscript{Lepcha}{lepc}
+\newfontscript{Limbu}{limb}
+\newfontscript{Linear~A}{lina}
+\newfontscript{Linear~B}{linb}
+\newfontscript{Lisu}{lisu}
+\newfontscript{Lycian}{lyci}
+\newfontscript{Lydian}{lydi}
+\newfontscript{Mahajani}{mahj}
+\newfontscript{Makasar}{maka}
+\newfontscript{Malayalam}{mlm2,mlym}
+\newfontscript{Mandaic}{mand}
+\newfontscript{Manichaean}{mani}
+\newfontscript{Marchen}{marc}
+\newfontscript{Masaram Gondi}{gonm}
+\newfontscript{Math}{math}
+\newfontscript{Medefaidrin}{medf}
+\newfontscript{Meitei~Mayek}{mtei}
+\newfontscript{Mende~Kikakui}{mend}
+\newfontscript{Meroitic~Cursive}{merc}
+\newfontscript{Meroitic~Hieroglyphs}{mero}
+\newfontscript{Miao}{plrd}
+\newfontscript{Modi}{modi}
+\newfontscript{Mongolian}{mong}
+\newfontscript{Mro}{mroo}
+\newfontscript{Multani}{mult}
+\newfontscript{Musical~Symbols}{musc}
+\newfontscript{Myanmar}{mym2,mymr}
+\newfontscript{N'Ko}{nko~}
+\newfontscript{Nabataean}{nbat}
+\newfontscript{Newa}{newa}
+\newfontscript{Nushu}{nshu}
+\newfontscript{Odia}{ory2,orya}
+\newfontscript{Ogham}{ogam}
+\newfontscript{Ol~Chiki}{olck}
+\newfontscript{Old~Italic}{ital}
+\newfontscript{Old~Hungarian}{hung}
+\newfontscript{Old~North~Arabian}{narb}
+\newfontscript{Old~Permic}{perm}
+\newfontscript{Old~Persian~Cuneiform}{xpeo}
+\newfontscript{Old~Sogdian}{sogo}
+\newfontscript{Old~South~Arabian}{sarb}
+\newfontscript{Old~Turkic}{orkh}
+\newfontscript{Osage}{osge}
+\newfontscript{Osmanya}{osma}
+\newfontscript{Pahawh~Hmong}{hmng}
+\newfontscript{Palmyrene}{palm}
+\newfontscript{Pau~Cin~Hau}{pauc}
+\newfontscript{Phags-pa}{phag}
+\newfontscript{Phoenician}{phnx}
+\newfontscript{Psalter~Pahlavi}{phlp}
+\newfontscript{Rejang}{rjng}
+\newfontscript{Runic}{runr}
+\newfontscript{Samaritan}{samr}
+\newfontscript{Saurashtra}{saur}
+\newfontscript{Sharada}{shrd}
+\newfontscript{Shavian}{shaw}
+\newfontscript{Siddham}{sidd}
+\newfontscript{Sign~Writing}{sgnw}
+\newfontscript{Sinhala}{sinh}
+\newfontscript{Sogdian}{sogd}
+\newfontscript{Sora~Sompeng}{sora}
+\newfontscript{Sumero-Akkadian~Cuneiform}{xsux}
+\newfontscript{Sundanese}{sund}
+\newfontscript{Syloti~Nagri}{sylo}
+\newfontscript{Syriac}{syrc}
+\newfontscript{Tagalog}{tglg}
+\newfontscript{Tagbanwa}{tagb}
+\newfontscript{Tai~Le}{tale}
+\newfontscript{Tai~Lu}{talu}
+\newfontscript{Tai~Tham}{lana}
+\newfontscript{Tai~Viet}{tavt}
+\newfontscript{Takri}{takr}
+\newfontscript{Tamil}{tml2,taml}
+\newfontscript{Tangut}{tang}
+\newfontscript{Telugu}{tel2,telu}
+\newfontscript{Thaana}{thaa}
+\newfontscript{Thai}{thai}
+\newfontscript{Tibetan}{tibt}
+\newfontscript{Tifinagh}{tfng}
+\newfontscript{Tirhuta}{tirh}
+\newfontscript{Ugaritic~Cuneiform}{ugar}
+\newfontscript{Vai}{vai~}
+\newfontscript{Warang~Citi}{wara}
+\newfontscript{Yi}{yi~~}
+\newfontscript{Zanabazar~Square}{zanb}
+% \end{macrocode}
+% For convenience or backwards compatibility:
+% \begin{macrocode}
+\newfontscript{CJK}{hani}
+\newfontscript{Kana}{kana}
+\newfontscript{Maths}{math}
+\newfontscript{N'ko}{nko~}
+\newfontscript{Oriya}{ory2,orya}
+% \end{macrocode}
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-user.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-user.dtx
new file mode 100644
index 0000000000..a4a754d598
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-user.dtx
@@ -0,0 +1,552 @@
+%%^^A%% fontspec-code-user.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{User command internals}
+% \label{sec:codeinternal}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+%
+% \subsection{Font selection}
+%
+% \begin{macro}{\@@_main_fontspec:nn}
+% This is the main command of the package that
+% selects fonts with various features. It takes two arguments: the
+% font name and the optional requested features of that
+% font.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_fontspec:nn
+ {
+ \fontspec_set_family:Nnn \f@family {#1} {#2}
+ \fontencoding { \g_@@_nfss_enc_tl }
+ \selectfont
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\rmfamily}
+% \begin{macro}{\sffamily}
+% \begin{macro}{\ttfamily}
+% Add an encoding switch to the three family commands.
+% \begin{macrocode}
+\cs_if_exist:NTF \@rmfamilyhook
+ {
+ \tl_put_right:Nn \@rmfamilyhook {\fontencoding \l_@@_rmfamily_encoding_tl}
+ \tl_put_right:Nn \@sffamilyhook {\fontencoding \l_@@_sffamily_encoding_tl}
+ \tl_put_right:Nn \@ttfamilyhook {\fontencoding \l_@@_ttfamily_encoding_tl}
+ }
+ {
+ \tl_replace_all:cnn { rmfamily~ } { \fontfamily }
+ { \fontencoding \l_@@_rmfamily_encoding_tl \fontfamily }
+ \tl_replace_all:cnn { sffamily~ } { \fontfamily }
+ { \fontencoding \l_@@_sffamily_encoding_tl \fontfamily }
+ \tl_replace_all:cnn { ttfamily~ } { \fontfamily }
+ { \fontencoding \l_@@_ttfamily_encoding_tl \fontfamily }
+ }
+\tl_set:Nn \l_@@_rmfamily_encoding_tl { \encodingdefault }
+\tl_set:Nn \l_@@_sffamily_encoding_tl { \encodingdefault }
+\tl_set:Nn \l_@@_ttfamily_encoding_tl { \encodingdefault }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\setmainfont}
+% The following three macros perform equivalent operations setting
+% the default font for a particular family: `roman', sans serif, or typewriter
+% (monospaced).
+%
+% They end with |\normalfont| so that if they're
+% used in the document, the change registers immediately.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_setmainfont:nn
+ {
+ \ifdefined\DeclareFontSeriesDefault
+ \DeclareFontSeriesDefault[rm]{bf}{\bfdefault}
+ \fi
+ \fontspec_set_family:Nnn \l_@@_rmfamily_family_tl {#1} {#2}
+ \tl_set_eq:NN \rmdefault \l_@@_rmfamily_family_tl
+ \tl_set_eq:NN \l_@@_rmfamily_encoding_tl \g_@@_nfss_enc_tl
+ \str_if_eq:eeT {\familydefault} {\rmdefault}
+ { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl }
+ \@@_setmainfont_hook:nn {#1} {#2} % for unicode-math only
+ \normalfont
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setsansfont}
+% Same as above.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_setsansfont:nn
+ {
+ \ifdefined\DeclareFontSeriesDefault
+ \DeclareFontSeriesDefault[sf]{bf}{\bfdefault}
+ \fi
+ \fontspec_set_family:Nnn \l_@@_sffamily_family_tl {#1} {#2}
+ \tl_set_eq:NN \sfdefault \l_@@_sffamily_family_tl
+ \tl_set_eq:NN \l_@@_sffamily_encoding_tl \g_@@_nfss_enc_tl
+ \str_if_eq:eeT {\familydefault} {\sfdefault}
+ { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl }
+ \@@_setsansfont_hook:nn {#1} {#2} % for unicode-math only
+ \normalfont
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setmonofont}
+% Same as above.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_setmonofont:nn
+ {
+ \ifdefined\DeclareFontSeriesDefault
+ \DeclareFontSeriesDefault[tt]{bf}{\bfdefault}
+ \fi
+ \fontspec_set_family:Nnn \l_@@_ttfamily_family_tl {#1} {#2}
+ \tl_set_eq:NN \ttdefault \l_@@_ttfamily_family_tl
+ \tl_set_eq:NN \l_@@_ttfamily_encoding_tl \g_@@_nfss_enc_tl
+ \str_if_eq:eeT {\familydefault} {\ttdefault}
+ { \tl_set_eq:NN \encodingdefault \g_@@_nfss_enc_tl }
+ \@@_setmonofont_hook:nn {#1} {#2} % for unicode-math only
+ \normalfont
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+%
+% \begin{macro}{\setmathrm}
+% These commands are analogous to \cmd\setmainfont\ and others,
+% but for selecting the font used for \cmd\mathrm, \etc. They
+% can only be used in the preamble of the
+% document. \cmd\setboldmathrm\ is used for specifying which
+% fonts should be used in \cmd\boldmath.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_setmathrm:nn
+ {
+%<XE> \fontspec_gset_family:Nnn \g_@@_mathrm_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g_@@_mathrm_tl {Renderer=Basic,#1} {#2}
+ \@@_setmathrm_hook:nn {#1} {#2} % for unicode-math only
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setboldmathrm}
+% \begin{macrocode}
+\cs_new:Nn \@@_main_setboldmathrm:nn
+ {
+%<XE> \fontspec_gset_family:Nnn \g_@@_bfmathrm_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g_@@_bfmathrm_tl {Renderer=Basic,#1} {#2}
+ \@@_setboldmathrm_hook:nn {#1} {#2} % for unicode-math only
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setmathsf}
+% \begin{macrocode}
+\cs_new:Nn \@@_main_setmathsf:nn
+ {
+%<XE> \fontspec_gset_family:Nnn \g_@@_mathsf_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g_@@_mathsf_tl {Renderer=Basic,#1} {#2}
+ \@@_setmathsf_hook:nn {#1} {#2} % for unicode-math only
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setmathtt}
+% \begin{macrocode}
+\cs_new:Nn \@@_main_setmathtt:nn
+ {
+%<XE> \fontspec_gset_family:Nnn \g_@@_mathtt_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g_@@_mathtt_tl {Renderer=Basic,#1} {#2}
+ \@@_setmathtt_hook:nn {#1} {#2} % for unicode-math only
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Hooks:
+% \begin{macrocode}
+\cs_set_eq:NN \@@_setmainfont_hook:nn \use_none:nn
+\cs_set_eq:NN \@@_setsansfont_hook:nn \use_none:nn
+\cs_set_eq:NN \@@_setmonofont_hook:nn \use_none:nn
+\cs_set_eq:NN \@@_setmathrm_hook:nn \use_none:nn
+\cs_set_eq:NN \@@_setmathsf_hook:nn \use_none:nn
+\cs_set_eq:NN \@@_setmathtt_hook:nn \use_none:nn
+\cs_set_eq:NN \@@_setboldmathrm_hook:nn \use_none:nn
+% \end{macrocode}
+%
+% Hmm, this isn't necessary with \pkg{unicode-math}; oh well:
+% \begin{macrocode}
+\@onlypreamble\setmathrm
+\@onlypreamble\setboldmathrm
+\@onlypreamble\setmathsf
+\@onlypreamble\setmathtt
+% \end{macrocode}
+%
+% If the commands above are not executed, then \cmd\rmdefault\ (\etc)
+% will be used.
+% \begin{macrocode}
+\tl_gset:Nn \g_@@_mathrm_tl {\rmdefault}
+\tl_gset:Nn \g_@@_mathsf_tl {\sfdefault}
+\tl_gset:Nn \g_@@_mathtt_tl {\ttdefault}
+% \end{macrocode}
+%
+% \begin{macro}{\@@_main_newfontfamily:NnnN}
+% The inner fontspec workings define a font family, which is then used in a typical
+% NFSS \cmd\fontfamily\ declaration, saved in the macro name specified.
+% The fourth argument determines which xparse function to set the macro with (new/renew/etc).
+% \begin{macrocode}
+\cs_new:Nn \@@_main_newfontfamily:NnnN
+ {
+ \fontspec_set_family:cnn { l_@@_ \cs_to_str:N #1 _family_tl } {#2} {#3}
+ \use:x
+ {
+ \exp_not:N #4 \exp_not:N #1 {}
+ {
+ \exp_not:N \fontfamily { \use:c { l_@@_ \cs_to_str:N #1 _family_tl } }
+ \exp_not:N \fontencoding { \g_@@_nfss_enc_tl }
+ \exp_not:N \selectfont
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_main_newfontface:NnnN}
+% \cmd\newfontface\ uses the fact that if the argument to \feat{BoldFont}, etc., is empty (\ie, |BoldFont={}|), then no bold font is searched for.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_newfontface:NnnN
+ {
+ \@@_main_newfontfamily:NnnN #1 { BoldFont={},ItalicFont={},SmallCapsFont={},#2 } {#3} #4
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Font feature selection}
+%
+% \begin{macro}{\@@_set_default_features:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_default_features:nn
+ {
+ \IfBooleanTF {#1} \clist_gput_right:Nn \clist_gset:Nn
+ \g_@@_default_fontopts_clist {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_font_default_features:nnn}
+% The optional argument |#2| specifies font identifier(s).
+% Branch for either (a)~single token input such as \verb|\rmdefault|, or (b)~otherwise assume its a fontname.
+% In that case, strip spaces and file extensions and lower-case to ensure consistency.
+% \begin{macrocode}
+\cs_new:Nn \@@_set_font_default_features:nnn
+ {
+%<debug> \typeout{\unexpanded{_set_font_default_features:nnn:{#1}{#2}{#3}}}
+ \clist_map_inline:nn {#2}
+ {
+ \tl_if_single:nTF {##1}
+ { \tl_set:No \l_@@_tmp_tl { \cs:w l_@@_ \cs_to_str:N ##1 _family_tl\cs_end: } }
+ { \@@_sanitise_fontname:Nn \l_@@_tmp_tl {##1} }
+
+ \IfBooleanTF {#1}
+ {
+ \prop_get:NVNF \g_@@_fontopts_prop \l_@@_tmp_tl \l_@@_tmpb_tl
+ { \tl_clear:N \l_@@_tmpb_tl }
+ \tl_put_right:Nn \l_@@_tmpb_tl {#3,}
+ \prop_gput:NVV \g_@@_fontopts_prop \l_@@_tmp_tl \l_@@_tmpb_tl
+ }
+ {
+ \tl_if_empty:nTF {#3}
+ { \prop_gremove:NV \g_@@_fontopts_prop \l_@@_tmp_tl }
+ { \prop_gput:NVn \g_@@_fontopts_prop \l_@@_tmp_tl {#3,} }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\addfontfeatures}
+% In order to be able to extend the feature selection of
+% a given font, two things need to be known: the currently selected
+% features, and the currently selected font. Every time a font
+% family is created, this information is saved inside a control
+% sequence with the name of the font family itself.
+%
+% This macro extracts this information, then appends the requested
+% font features to add to the already existing ones, and calls the
+% font again with the top level \cs{fontspec} command.
+%
+% The default options are \emph{not} applied (which is why
+% \cs{g_fontspec_default_fontopts_tl} is emptied inside the group; this is allowed
+% as \cmd\l_fontspec_family_tl\ is globally defined in \cmd\@@_select_font_family:nn), so this
+% means that the only added features to the font are strictly those
+% specified by this command.
+%
+% \cs{addfontfeature} is defined as an alias, as I found that I
+% often typed this instead when adding only a single font feature.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_addfontfeatures:n
+ {
+%<debug> \typeout{^^J::::::::::::::::::::::::::::::::::^^J: addfontfeatures}
+ \fontspec_if_fontspec_font:TF
+ {
+ \group_begin:
+ \keys_set_known:nnN {fontspec-addfeatures} {#1} \l_@@_tmp_tl
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {options} \l_@@_options_tl
+ \prop_get:cnN {g_@@_fontinfo_ \f@family _prop} {fontname} \l_@@_fontname_tl
+ \bool_set_true:N \l_@@_disable_defaults_bool
+%<debug> \typeout{ \@@_select_font_family:nn { \l_@@_options_tl , #1 } {\l_@@_fontname_tl} }
+ \use:x
+ {
+ \@@_select_font_family:nn
+ { \l_@@_options_tl , #1 } {\l_@@_fontname_tl}
+ }
+ \group_end:
+ \fontfamily \g_@@_nfss_family_tl \selectfont
+ }
+ {
+ \@@_warning:nx {addfontfeatures-ignored} {#1}
+ }
+ \ignorespaces
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Defining new font features}
+%
+% \begin{macro}{\newfontfeature}
+% \cs{newfontfeature} takes two arguments: the name of the feature
+% tag by which to reference it, and the string that is used to
+% select the font feature.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_newfontfeature:nn
+ {
+ \keys_define:nn { fontspec }
+ {
+ #1 .code:n = { \@@_update_featstr:n {#2} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\newAATfeature}
+% This command assigns a new AAT feature by its code (|#2|,|#3|) to a new name (|#1|).
+% Better than \cmd\newfontfeature\ because it checks if the feature exists in the
+% font it's being used for.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_newAATfeature:nnnn
+ {
+ \keys_if_exist:nnF { fontspec } {#1}
+ { \@@_define_aat_feature_group:n {#1} }
+
+ \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
+ { \@@_warning:nxx {feature-option-overwrite} {#1} {#2} }
+
+ \@@_define_aat_feature:nnnn {#1}{#2}{#3}{#4}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\newopentypefeature}
+% This command assigns a new OpenType feature by its abbreviation (|#2|) to a new name (|#1|).
+% Better than \cmd\newfontfeature\ because it checks if the feature exists in the
+% font it's being used for.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_newopentypefeature:nnn
+ {
+ \keys_if_exist:nnF { fontspec / options } {#1}
+ { \@@_define_opentype_feature_group:n {#1} }
+
+ \keys_if_choice_exist:nnnT {fontspec} {#1} {#2}
+ { \@@_warning:nxx {feature-option-overwrite} {#1} {#2} }
+
+ \exp_args:Nnnx \@@_define_opentype_feature:nnnnn
+ {#1} {#2} { \@@_strip_plus_minus:n {#3} } {#3} {}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_strip_plus_minus:n { \@@_strip_plus_minus_aux:Nq #1 \q_nil }
+\cs_new:Npn \@@_strip_plus_minus_aux:Nq #1#2 \q_nil
+ {
+ \str_case:nnF {#1} { {+} {#2} {-} {#2} } {#1#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\aliasfontfeature}
+% User commands for renaming font features and font feature options.
+% \begin{macrocode}
+\cs_new:Nn \@@_main_aliasfontfeature:nn
+ {
+%<debug> \typeout{::::::::::::::::::::^^J:: aliasfontfeature{#1}{#2}}
+ \bool_set_false:N \l_@@_alias_bool
+
+ \clist_map_inline:Nn \g_@@_all_keyval_modules_clist
+ {
+ \keys_if_exist:nnT {##1} {#1}
+ {
+%<debug> \typeout{:::: Key~exists~##1~/~#1}
+ \bool_set_true:N \l_@@_alias_bool
+ \keys_define:nn {##1}
+ { #2 .code:n = { \keys_set:nn {##1} { #1 = {####1} } } }
+ }
+ }
+
+ \bool_if:NF \l_@@_alias_bool
+ { \@@_warning:nx {rename-feature-not-exist} {#1} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\aliasfontfeatureoption}
+% \begin{macrocode}
+\cs_new:Nn \@@_main_aliasfontfeatureoption:nnn
+ {
+ \bool_set_false:N \l_@@_alias_bool
+
+ \clist_map_inline:Nn \g_@@_all_keyval_modules_clist
+ {
+ \keys_if_exist:nnT { ##1 / #1 } {#2}
+ {
+%<debug> \typeout{:::: Keyval~exists~##1~/~#1~=~#2}
+ \bool_set_true:N \l_@@_alias_bool
+ \keys_define:nn { ##1 / #1 }
+ { #3 .code:n = { \keys_set:nn {##1} { #1 = {#2} } } }
+ }
+
+ \keys_if_exist:nnT { ##1 / #1 } {#2Reset}
+ {
+%<debug> \typeout{:::: Keyval~exists~##1~/~#1~=~#2Reset}
+ \keys_define:nn { ##1 / #1 }
+ { #3Reset .code:n = { \keys_set:nn {##1} { #1 = {#2Reset} } } }
+ }
+
+ \keys_if_exist:nnT { ##1 / #1 } {#2Off}
+ {
+%<debug> \typeout{:::: Keyval~exists~##1~/~#1~=~#2Off}
+ \keys_define:nn { ##1 / #1 }
+ { #3Off .code:n = { \keys_set:nn {##1} { #1 = {#2Off} } } }
+ }
+ }
+
+ \bool_if:NF \l_@@_alias_bool
+ { \@@_warning:nx {rename-feature-not-exist} {#1/#2} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_main_DeclareFontExtensions:n}
+% \begin{macrocode}
+\cs_new:Nn \@@_main_DeclareFontExtensions:n
+ {
+ \clist_set:Nn \l_@@_extensions_clist { #1 }
+ }
+% \end{macrocode}
+% Defaults:
+% \begin{macrocode}
+\@@_main_DeclareFontExtensions:n {.otf,.ttf,.OTF,.TTF,.ttc,.TTC,.dfont}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{High level conditionals}
+%
+%
+% \begin{macro}{\IfFontFeatureActiveTF}
+% \begin{macrocode}
+\cs_new:Nn \@@_main_IfFontFeatureActiveTF:nnn
+ {
+%<debug> \typeout{^^J:::::::::::::::::::::::::::::::::::::::::::::::}
+%<debug> \typeout{:IfFontFeatureActiveTF \exp_not:n{{#1}{#2}{#3}}}
+ \@@_if_font_feature:nTF {#1} {#2} {#3}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_if_font_feature:n {TF}
+ {
+ \tl_gclear:N \g_@@_single_feat_tl
+ \group_begin:
+ \@@_font_suppress_not_found_error:
+ \@@_init:
+ \bool_set_true:N \l_@@_ot_bool
+ \bool_set_true:N \l_@@_never_check_bool
+ \bool_set_false:N \l_@@_firsttime_bool
+ \clist_clear:N \l_@@_fontfeat_clist
+ \@@_get_features:n {#1}
+ \group_end:
+
+%<debug> \typeout{:::> \exp_not:N\g_@@_rawfeatures_sclist->~{\g_@@_rawfeatures_sclist}}
+%<debug> \typeout{:::> \exp_not:N\g_@@_single_feat_tl->~{\g_@@_single_feat_tl}}
+
+ \tl_if_empty:NTF \g_@@_single_feat_tl { \prg_return_false: }
+ {
+ \exp_args:NV \fontspec_if_current_feature:nTF \g_@@_single_feat_tl
+ { \prg_return_true: } { \prg_return_false: }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{\cs{oldstylenums} and \cs{liningnums}}
+%
+% \begin{macro}{\oldstylenums}
+% \begin{macro}{\liningnums}
+% This command needs a redefinition.
+% And we may as well provide the reverse command.
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_main_oldstylenums:n
+ {
+ \group_begin:
+ \addfontfeature{Numbers=OldStyle}
+ #1
+ \group_end:
+ }
+\cs_new_protected:Nn \@@_main_liningnums:n
+ {
+ \group_begin:
+ \addfontfeature{Numbers=Lining}
+ #1
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-vars.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-vars.dtx
new file mode 100644
index 0000000000..6350d24cc5
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-vars.dtx
@@ -0,0 +1,336 @@
+%%^^A%% fontspec-code-vars.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%
+% \section{Declaration of variables}
+%
+% \iffalse
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+% \fi
+%
+% This file consists solely of declaration of variables used by \pkg{fontspec}.
+% In some cases these variables are also initialised with default values.
+% In time I would like to move these initialisations
+%
+% \paragraph{Booleans}
+%
+% \begin{macro}{\l_@@_firsttime_bool}
+% As \cs{keys_set:nn} is run multiple times, some of its
+% information storing only occurs once while we decide if the font family
+% has been defined or not. When the later processing is occuring per-shape
+% this no longer needs to happen; this is indicated by the `firsttime'
+% conditional.
+% \begin{macrocode}
+\bool_new:N \l_@@_firsttime_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_nobf_bool
+\bool_new:N \l_@@_noit_bool
+\bool_new:N \l_@@_nosc_bool
+\bool_new:N \l_@@_check_bool
+% \end{macrocode}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_tfm_bool
+\bool_new:N \l_@@_atsui_bool
+\bool_new:N \l_@@_ot_bool
+\bool_new:N \l_@@_mm_bool
+\bool_new:N \l_@@_harfbuzz_bool
+\bool_new:N \l_@@_graphite_bool
+\bool_new:N \l_@@_fontcfg_bool
+\bool_set_true:N \l_@@_fontcfg_bool
+% \end{macrocode}
+% For dealing with legacy maths:
+% \begin{macrocode}
+\bool_new:N \g_@@_math_euler_bool
+\bool_new:N \g_@@_math_lucida_bool
+\bool_new:N \g_@@_pkg_euler_loaded_bool
+% \end{macrocode}
+% For package options:
+% \begin{macrocode}
+\bool_new:N \g_@@_cfg_bool
+\bool_new:N \g_@@_math_bool
+\bool_new:N \g_@@_euenc_bool
+% \end{macrocode}
+%
+% \begin{macrocode}
+\bool_new:N \l_@@_tmpa_bool
+\bool_new:N \l_@@_disable_defaults_bool
+\bool_new:N \l_@@_alias_bool
+\bool_new:N \l_@@_external_bool
+\bool_new:N \l_@@_defining_encoding_bool
+\bool_new:N \l_@@_scriptlang_exist_bool
+\bool_new:N \g_@@_em_normalise_slant_bool
+\bool_new:N \l_@@_proceed_bool
+% \end{macrocode}
+%
+% \begin{macro}{\l_@@_never_check_bool}
+% It is used to disable checking opentype script, language, and tags
+% when running checking code that has a user-defined return path we want to allow the higher-level
+% code to dictate the logic.
+% TODO: tidy this up!
+% \begin{macrocode}
+\bool_new:N \l_@@_never_check_bool
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Counters}
+% \begin{macrocode}
+\int_new:N \l_@@_script_int
+\int_new:N \l_@@_language_int
+\int_new:N \l_@@_strnum_int
+\int_new:N \l_@@_tmp_int
+\int_new:N \l_@@_tmpa_int
+\int_new:N \l_@@_tmpb_int
+\int_new:N \l_@@_tmpc_int
+\int_new:N \l_@@_em_int
+\int_new:N \l_@@_emdef_int
+\int_new:N \l_@@_strong_int
+\int_new:N \l_@@_strongdef_int
+% \end{macrocode}
+%
+% \paragraph{Floats}
+% \begin{macrocode}
+\fp_new:N \l_@@_tmpa_fp
+\fp_new:N \l_@@_tmpb_fp
+% \end{macrocode}
+%
+% \paragraph{Dimensions}
+% \begin{macrocode}
+\dim_new:N \l_@@_tmpa_dim
+\dim_new:N \l_@@_tmpb_dim
+\dim_new:N \l_@@_tmpc_dim
+% \end{macrocode}
+%
+% \paragraph{Sequences}
+% \begin{macrocode}
+\seq_new:N \l_@@_bf_series_seq
+% \end{macrocode}
+%
+% \paragraph{Comma-lists}
+% \begin{macrocode}
+\clist_new:N \g_@@_default_fontopts_clist
+\clist_new:N \g_@@_all_keyval_modules_clist
+\clist_new:N \l_@@_sizefeat_clist
+\clist_set:Nn \l_@@_sizefeat_clist {Size={-}}
+\clist_new:N \l_@@_extensions_clist
+\clist_new:N \l_@@_fontopts_clist
+\clist_new:N \l_@@_family_fontopts_clist
+\clist_new:N \l_@@_all_features_clist
+\clist_new:N \l_@@_leftover_clist
+\clist_new:N \l_@@_keys_leftover_clist
+\clist_new:N \l_@@_sizing_leftover_clist
+\clist_new:N \l_@@_fontfeat_clist
+\clist_new:N \l_@@_fontfeat_curr_clist
+\clist_new:N \l_@@_arg_clist
+\clist_new:N \l_@@_this_feat_clist
+% \end{macrocode}
+%
+% \begin{macrocode}
+\clist_new:N \l_@@_fontfeat_up_clist
+\clist_new:N \l_@@_fontfeat_bf_clist
+\clist_new:N \l_@@_fontfeat_it_clist
+\clist_new:N \l_@@_fontfeat_bfit_clist
+\clist_new:N \l_@@_fontfeat_sl_clist
+\clist_new:N \l_@@_fontfeat_bfsl_clist
+\clist_new:N \l_@@_fontfeat_sc_clist
+% \end{macrocode}
+%
+% \paragraph{Property lists}
+% \begin{macrocode}
+\prop_new:N \g_@@_fontopts_prop
+\prop_new:N \l_@@_nfss_prop
+\prop_new:N \l_@@_nfssfont_prop
+\prop_new:N \g_@@_OT_features_prop
+\prop_new:N \g_@@_all_opentype_feature_names_prop
+\prop_new:N \g_@@_em_prop
+\prop_new:N \g_@@_strong_prop
+\prop_new:N \g_@@_fontid_family_prop
+\prop_new:N \g_@@_family_int_prop
+% \end{macrocode}
+%
+% \paragraph{Token lists}
+%
+% \paragraph{Visible (perhaps?)}
+%
+% \begin{macrocode}
+\tl_new:N \l_fontspec_family_tl
+\tl_new:N \g_fontspec_encoding_tl
+\tl_new:N \l_fontspec_fontname_tl
+% \end{macrocode}
+%
+% \paragraph{2e interactions}
+%
+% \begin{macrocode}
+\tl_clear_new:N \UTFencname
+\tl_clear_new:N \cyrillicencoding
+\tl_clear_new:N \latinencoding
+% \end{macrocode}
+%
+% \paragraph{Renderer/shaper}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_renderer_tl
+\tl_new:N \l_@@_mode_tl
+\tl_new:N \l_@@_shaper_tl
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \g_@@_defined_shapes_tl
+\tl_new:N \g_@@_single_feat_tl
+\tl_new:N \l_@@_basename_tl
+\tl_new:N \g_@@_curr_series_tl
+\tl_new:N \l_@@_curr_fontname_tl
+\tl_new:N \l_@@_curr_bfname_tl
+\tl_new:N \l_@@_ext_filename_tl
+\tl_new:N \l_@@_extension_tl
+\tl_new:N \l_@@_font_path_tl
+\tl_new:N \l_@@_fontid_tl
+\tl_new:N \l_@@_fontname_tl
+\tl_new:N \l_@@_options_tl
+\tl_new:N \l_@@_saved_fontname_tl
+\tl_new:N \l_@@_prev_unicode_name_tl
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \g_@@_nfss_enc_tl
+\tl_new:N \g_@@_nfss_family_tl
+\tl_new:N \l_@@_nfss_sc_tl
+\tl_new:N \l_@@_nfss_tl
+\tl_new:N \l_@@_nfss_fam_tl
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_size_tl
+\tl_new:N \l_@@_sizedfont_tl
+\tl_new:N \l_@@_this_font_tl
+\tl_new:N \l_@@_ttc_index_tl
+\tl_new:N \l_@@_smcp_shape_tl
+% \end{macrocode}
+%
+% \paragraph{EM and STRONG}
+% \begin{macrocode}
+\tl_new:N \l_@@_emshape_query_tl
+\tl_new:N \l_@@_em_switch_tl
+\tl_new:N \l_@@_strong_switch_tl
+% \end{macrocode}
+%
+% \paragraph{Scratch variables}
+% \begin{macrocode}
+\tl_new:N \l_@@_tmp_tl
+\tl_new:N \l_@@_tmpa_tl
+\tl_new:N \l_@@_tmpb_tl
+\tl_new:N \l_@@_em_tmp_tl
+\tl_new:N \l_@@_strong_tmp_tl
+% \end{macrocode}
+%
+% \paragraph{Maths fonts}
+% \begin{macrocode}
+\tl_new:N \g_@@_mathrm_tl
+\tl_new:N \g_@@_bfmathrm_tl
+\tl_new:N \g_@@_mathsf_tl
+\tl_new:N \g_@@_mathtt_tl
+% \end{macrocode}
+%
+% Defaults: (these are set elsewhere; TODO: check if redundant)
+% \begin{macrocode}
+\tl_gset:Nn \g_@@_mathrm_tl {\rmdefault}
+\tl_gset:Nn \g_@@_mathsf_tl {\sfdefault}
+\tl_gset:Nn \g_@@_mathtt_tl {\ttdefault}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_family_label_tl
+\tl_new:N \l_@@_fake_slant_tl
+\tl_new:N \l_@@_fake_embolden_tl
+% \end{macrocode}
+%
+% \paragraph{Internal font names}
+% \begin{macrocode}
+\tl_new:N \l_@@_fontname_up_tl
+\tl_new:N \l_@@_fontname_bf_tl
+\tl_new:N \l_@@_fontname_it_tl
+\tl_new:N \l_@@_fontname_bfit_tl
+\tl_new:N \l_@@_fontname_sl_tl
+\tl_new:N \l_@@_fontname_bfsl_tl
+\tl_new:N \l_@@_fontname_sc_tl
+% \end{macrocode}
+%
+% \paragraph{Script and Language}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_script_tl
+\tl_new:N \l_@@_script_name_tl
+\tl_set:Nn \l_@@_script_name_tl {CustomDefault}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_lang_tl
+\tl_new:N \l_@@_lang_name_tl
+\tl_set:Nn \l_@@_lang_name_tl {Default}
+% \end{macrocode}
+%
+% \paragraph{Generic font features}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_scale_tl
+\tl_new:N \l_@@_hyphenchar_tl
+\tl_new:N \l_@@_hexcol_tl
+\tl_new:N \l_@@_opacity_tl
+\tl_new:N \l_@@_optical_size_tl
+\tl_new:N \l_@@_mapping_tl
+\tl_new:N \l_@@_punctspace_adjust_tl
+\tl_new:N \l_@@_wordspace_adjust_tl
+\tl_new:N \l_@@_postadjust_tl
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_const:Nn \c_@@_hexcol_tl {000000}
+\tl_const:Nn \c_@@_opacity_tl {FF~}
+\tl_const:Nn \c_@@_postadjust_tl { \l_@@_wordspace_adjust_tl \l_@@_punctspace_adjust_tl }
+% \end{macrocode}
+%
+% \paragraph{Semi-colon-lists}
+% Not a real data structure but sensible to name accordingly.
+% \begin{macrocode}
+\tl_new:N \g_@@_rawfeatures_sclist
+\tl_new:N \l_@@_pre_feat_sclist
+% \end{macrocode}
+%
+% \paragraph{Font families}
+% \begin{macrocode}
+\tl_new:N \l_@@_rmfamily_family_tl
+\tl_new:N \l_@@_sffamily_family_tl
+\tl_new:N \l_@@_ttfamily_family_tl
+\tl_new:N \l_@@_rmfamily_encoding_tl
+\tl_new:N \l_@@_sffamily_encoding_tl
+\tl_new:N \l_@@_ttfamily_encoding_tl
+% \end{macrocode}
+%
+%
+%
+% \iffalse
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+% \fi
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code-xfss.dtx b/macros/unicodetex/latex/fontspec/fontspec-code-xfss.dtx
new file mode 100644
index 0000000000..fef300a078
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code-xfss.dtx
@@ -0,0 +1,310 @@
+%%^^A%% fontspec-code-xfss.dtx -- part of FONTSPEC <wspr.io/fontspec>
+
+% \section{Changes to the NFSS}
+%
+% \begin{macrocode}
+%<*fontspec>
+% \end{macrocode}
+%
+%
+% \subsection{Italic small caps and so on} \label{sec:sishape}
+%
+% \begin{macrocode}
+\providecommand*\scitdefault{\scdefault\itdefault}
+\providecommand*\scsldefault{\scdefault\sldefault}
+% \end{macrocode}
+% \LaTeX's `shape' font axis needs to be overloaded to support italic small caps and slanted small caps.
+% These are the combinations to support:
+% \begin{macrocode}
+\cs_new:Nn \@@_shape_merge:nn { c_@@_shape_#1_#2_tl }
+\cs_new:Nn \@@_merge_default_shapes:
+ {
+ \tl_const:cn { \@@_shape_merge:nn \itdefault \scdefault } {\scitdefault}
+ \tl_const:cn { \@@_shape_merge:nn \sldefault \scdefault } {\scsldefault}
+ \tl_const:cn { \@@_shape_merge:nn \scdefault \itdefault } {\scitdefault}
+ \tl_const:cn { \@@_shape_merge:nn \scdefault \sldefault } {\scsldefault}
+ \tl_const:cn { \@@_shape_merge:nn \scsldefault \itdefault } {\scitdefault}
+ \tl_const:cn { \@@_shape_merge:nn \scitdefault \sldefault } {\scsldefault}
+ \tl_const:cn { \@@_shape_merge:nn \scitdefault \shapedefault } {\scdefault}
+ \tl_const:cn { \@@_shape_merge:nn \scsldefault \shapedefault } {\scdefault}
+ }
+\@@_merge_default_shapes:
+% \end{macrocode}
+%
+% The following is rather specific; it only returns true if the merged shape exists,
+% but more importantly also if the merged shape is defined for the current font.
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_if_merge_shape:n {TF}
+ {
+ \bool_lazy_and:nnTF
+ { \tl_if_exist_p:c { \@@_shape_merge:nn {\f@shape} {#1} } }
+ {
+ \cs_if_exist_p:c
+ {
+ \f@encoding/\f@family/\f@series/
+ \tl_use:c { \@@_shape_merge:nn {\f@shape} {#1} }
+ }
+ }
+ \prg_return_true: \prg_return_false:
+ }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+\cs_if_exist:NTF \DeclareFontSeriesChangeRule
+{
+ \cs_set_eq:NN \emfontdeclare \DeclareEmphSequence
+}
+{
+% \end{macrocode}
+%
+% \begin{macro}{\sishape}
+% \begin{macro}{\textsi}
+% These commands for actually selecting italic small caps have been defined for many years; I'm inclined to drop them.
+% They're probably used very infrequently; I personally prefer just writing
+% |\textit{\textsc{...}}| instead.
+%
+% \begin{macrocode}
+\DeclareRobustCommand{\sishape}
+ {
+ \not@math@alphabet\sishape\relax
+ \fontshape{\scitdefault}\selectfont
+ }
+\DeclareTextFontCommand{\textsi}{\sishape}
+% \end{macrocode}
+% \end{macro} \end{macro}
+%
+%
+% \begin{macro}{\@@_merge_shape:n}
+% These macros enable the overload on the |\..shape| commands.
+% First, a shape `new+current' (prefix) or `current+new' (suffix) is tried.
+% If not found, fall back on the `new' shape.
+% \begin{macrocode}
+\cs_new:Nn \@@_merge_shape:n
+ {
+ \@@_if_merge_shape:nTF {#1}
+ { \fontshape { \tl_use:c { \@@_shape_merge:nn {\f@shape} {#1} } } \selectfont }
+ { \fontshape {#1} \selectfont }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\itshape} \begin{macro}{\scshape} \begin{macro}{\upshape} \begin{macro}{\slshape}
+% The original |\..shape| commands are redefined to use the merge shape macro.
+% \begin{macrocode}
+\DeclareRobustCommand \itshape
+ {
+ \not@math@alphabet\itshape\mathit
+ \@@_merge_shape:n\itdefault
+ }
+\DeclareRobustCommand \slshape
+ {
+ \not@math@alphabet\slshape\relax
+ \@@_merge_shape:n\sldefault
+ }
+\DeclareRobustCommand \scshape
+ {
+ \not@math@alphabet\scshape\relax
+ \@@_merge_shape:n\scdefault
+ }
+\DeclareRobustCommand \upshape
+ {
+ \not@math@alphabet\upshape\relax
+ \@@_merge_shape:n\updefault
+ }
+% \end{macrocode}
+% \end{macro} \end{macro} \end{macro} \end{macro}
+%
+%
+%
+% \subsection{Emphasis}
+%
+% \begin{macro}{\emfontdeclare}
+% \begin{macrocode}
+\cs_set_protected:Npn \emfontdeclare #1
+ {
+ \prop_gclear:N \g_@@_em_prop
+ \int_zero:N \l_@@_emdef_int
+ \bool_gset_true:N \g_@@_em_normalise_slant_bool
+
+ \tl_if_in:nnT {#1} {\slshape}
+ {
+ \tl_if_in:nnT {#1} {\itshape}
+ {
+ \bool_gset_false:N \g_@@_em_normalise_slant_bool
+ }
+ }
+
+ \group_begin:
+ \normalfont
+ \clist_map_inline:nn {\emreset,#1}
+ {
+ ##1
+ \prop_gput_if_new:NxV \g_@@_em_prop { \f@shape } { \l_@@_emdef_int }
+ \prop_gput:Nxn \g_@@_em_prop { switch-\int_use:N \l_@@_emdef_int } { ##1 }
+ \int_incr:N \l_@@_emdef_int
+ }
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\em}
+% \begin{macrocode}
+\DeclareRobustCommand \em
+ {
+ \@nomath\em
+ \tl_set:Nx \l_@@_emshape_query_tl { \f@shape }
+
+ \bool_if:NT \g_@@_em_normalise_slant_bool
+ {
+ \tl_replace_all:Nnn \l_@@_emshape_query_tl {/sl} {/it}
+ }
+
+%<debug> \typeout{Emph~ level:~\int_use:N \l_@@_em_int}
+ \prop_get:NxNT \g_@@_em_prop { \l_@@_emshape_query_tl } \l_@@_em_tmp_tl
+ {
+ \int_set:Nn \l_@@_em_int { \l_@@_em_tmp_tl }
+%<debug> \typeout{Shape~ (\l_@@_emshape_query_tl)~ detected;~ new~ level:~\int_use:N \l_@@_em_int}
+ }
+
+ \int_incr:N \l_@@_em_int
+
+ \prop_get:NxNTF \g_@@_em_prop { switch-\int_use:N \l_@@_em_int } \l_@@_em_switch_tl
+ { \l_@@_em_switch_tl }
+ {
+ \int_zero:N \l_@@_em_int
+ \emreset
+ }
+
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\emph}
+% \begin{macro}{\emshape}
+% \begin{macro}{\eminnershape}
+% \begin{macro}{\emreset}
+% \begin{macrocode}
+\DeclareTextFontCommand{\emph}{\em}
+\cs_set:Npn \emreset { \upshape }
+\cs_set:Npn \emshape { \itshape }
+\cs_set:Npn \eminnershape { \upshape }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\emfontdeclare{ \emshape, \eminnershape }
+\cs_new:Nn \fontspec_set_em_level:n { \int_set:Nn \l_@@_em_int {#1} }
+% \end{macrocode}
+%
+% \begin{macrocode}
+}
+% \end{macrocode}
+%
+%
+%
+% \subsection{Strong emphasis}
+%
+% \begin{macro}{\strongfontdeclare}
+% \begin{macrocode}
+\cs_set_protected:Npn \strongfontdeclare #1
+ {
+ \prop_gclear:N \g_@@_strong_prop
+ \int_zero:N \l_@@_strongdef_int
+
+ \group_begin:
+ \normalfont
+ \clist_map_inline:nn {\strongreset,#1}
+ {
+ ##1
+ \prop_gput_if_new:NxV \g_@@_strong_prop { \f@series } { \l_@@_strongdef_int }
+ \prop_gput:Nxn \g_@@_strong_prop { switch-\int_use:N \l_@@_strongdef_int } { ##1 }
+ \int_incr:N \l_@@_strongdef_int
+ }
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\strongenv}
+% \begin{macrocode}
+\DeclareRobustCommand \strongenv
+ {
+ \@nomath\strongenv
+
+%<debug> \typeout{Strong~ level:~\int_use:N \l_@@_strong_int}
+ \prop_get:NxNT \g_@@_strong_prop { \f@series } \l_@@_strong_tmp_tl
+ {
+ \int_set:Nn \l_@@_strong_int { \l_@@_strong_tmp_tl }
+%<debug> \typeout{Series~ (\f@series)~ detected;~ new~ level:~\int_use:N \l_@@_strong_int}
+ }
+
+ \int_incr:N \l_@@_strong_int
+
+ \prop_get:NxNTF \g_@@_strong_prop { switch-\int_use:N \l_@@_strong_int } \l_@@_strong_switch_tl
+ { \l_@@_strong_switch_tl }
+ {
+ \int_zero:N \l_@@_strong_int
+ \strongreset
+ }
+
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\strong}
+% \begin{macro}{\strongreset}
+% \begin{macrocode}
+\DeclareTextFontCommand{\strong}{\strongenv}
+\cs_set:Npn \strongreset {}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\reset@font}
+% Ensure nesting resets when necessary:
+% \begin{macrocode}
+\cs_set:Npn \reset@font
+ {
+ \normalfont
+ \int_zero:N \l_@@_em_int
+ \int_zero:N \l_@@_strong_int
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Programmer's interface for setting nesting levels:
+% \begin{macrocode}
+\cs_new:Nn \fontspec_set_strong_level:n { \int_set:Nn \l_@@_strong_int {#1} }
+% \end{macrocode}
+%
+% Defaults:
+% \begin{macrocode}
+\strongfontdeclare{ \bfseries }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</fontspec>
+% \end{macrocode}
+
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code.ltx b/macros/unicodetex/latex/fontspec/fontspec-code.ltx
new file mode 100644
index 0000000000..1dcdea07cb
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code.ltx
@@ -0,0 +1,42 @@
+%%^^A%% fontspec-code.ltx -- part of FONTSPEC <wspr.io/fontspec>
+
+\ifdefined \XeTeXOTcountscripts \else \makeatletter
+ \@latex@error{^^J*** The fontspec documentation can only be typeset with `xelatex` ***\@gobble}\@ehc
+\fi
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\renewcommand\partname{File}
+\begin{document}
+\maketitle
+\tableofcontents
+\newpage
+
+\def\DTX#1{\clearpage\part{#1}\DocInput{#1}}
+\FONTSPECDTX
+
+\clearpage
+\PrintChanges
+
+\clearpage
+\setcounter{IndexColumns}{2}
+\PrintIndex
+
+\end{document}
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-code.pdf b/macros/unicodetex/latex/fontspec/fontspec-code.pdf
new file mode 100644
index 0000000000..52d9e28cde
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-code.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-api.tex b/macros/unicodetex/latex/fontspec/fontspec-doc-api.tex
new file mode 100644
index 0000000000..3ef857e914
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-api.tex
@@ -0,0 +1,352 @@
+%%^^A%% fontspec-doc-api.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\showexamplesfalse
+\begin{document}
+
+\part{Customisation and programming interface}
+
+This chapter describes the current interfaces and hooks that use
+\pkg{fontspec} for various macro programming purposes.
+
+
+\section{Defining new features} \label{sec:newfeatures}
+This package cannot hope to contain every possible font
+feature. Three commands are provided for selecting font features
+that are not provided for out of the box. If you are using
+them a lot, chances are I've left something out, so please let me
+know.
+
+\DescribeMacro{\newAATfeature}
+New \AAT\ features may be created with this command:\par
+{\centering\cmd\newAATfeature\marg{feature}\marg{option}\marg{feature code}\marg{selector code}\par}\noindent
+Use the \XeTeX\ file \path{AAT-info.tex} to obtain the code numbers.
+See \exref{newAATfeat}.
+
+\begin{Xexample}{newAATfeat}{Assigning new \AAT\ features.}
+ \newAATfeature{Alternate}{HoeflerSwash}{17}{1}
+ \fontspec{Hoefler Text Italic}[Alternate=HoeflerSwash]
+ This is XeTeX by Jonathan Kew.
+\end{Xexample}
+
+
+\DescribeMacro{\newopentypefeature}
+New OpenType features may be created with this command:\par
+{\centering\cmd\newopentypefeature\marg{feature}\marg{option}\marg{feature tag}\par}
+The synonym \cs{newICUfeature} is deprecated.
+
+Here's what it would look like in practise:
+\begin{Verbatim}
+\newopentypefeature{Style}{NoLocalForms}{-locl}
+\end{Verbatim}
+
+\DescribeMacro{\newfontfeature}
+In case the above commands do not accommodate the desired font feature
+(perhaps a new \XeTeX\ feature that \pkg{fontspec} hasn't been updated
+to support), a command is provided to pass arbitrary input into the
+font selection string:\par
+{\centering\cmd{\newfontfeature}\marg{name}\marg{input string}\par}
+
+For example, Zapfino used to
+contain an AAT feature `Avoid d-collisions'. To access it
+with this package, you could do some like the following:
+
+\begin{Verbatim}
+ \newfontfeature{AvoidD} {Special= Avoid d-collisions}
+ \newfontfeature{NoAvoidD}{Special=!Avoid d-collisions}
+ \fontspec{Zapfino}[AvoidD,Variant=1]
+ sockdolager rubdown \\
+ \fontspec{Zapfino}[NoAvoidD,Variant=1]
+ sockdolager rubdown
+\end{Verbatim}
+
+The advantage to using the \cmd\newAATfeature\ and \cmd\newopentypefeature\
+commands instead of \cs{newfontfeature} is that they check if the selected font actually contains the desired font
+feature at load time. By contrast, \cmd\newfontfeature\ will not give a warning
+for improper input.
+
+
+\section{Defining new scripts and languages}
+\label{sec:newscriptlang}
+
+\DescribeMacro{\newfontscript}
+\DescribeMacro{\newfontlanguage}
+While the scripts and languages listed in \ref{tab:ot-scpt} and \ref{tab:ot-lang}
+are intended to be comprehensive, there may be some missing; alternatively,
+you might wish to use different names to access scripts/languages that are
+already listed.
+Adding scripts and languages can be performed with the \cmd\newfontscript\
+and \cmd\newfontlanguage\ commands. For example,
+\begin{Verbatim}
+ \newfontscript{Arabic}{arab}
+ \newfontlanguage{Zulu}{ZUL}
+\end{Verbatim}
+The first argument is the \pkg{fontspec} name, the second the OpenType
+tag. The advantage to using these commands rather than \cmd\newfontfeature\
+(see \vref{sec:newfeatures}) is the error-checking that is performed when
+the script or language is requested.
+
+Both commands accept a comma-separated list of OpenType tags in order of preference.
+This permits, for example, supporting both new and old versions of a language tag with
+a common user interface:
+\begin{Verbatim}
+ \newfontlanguage{Turkish}{TRK,TUR}
+\end{Verbatim}
+Here, a font that is requested with \verb|Script=Turkish| will first be checked for the
+OpenType language tag \verb|TRK|, which will be selected if available. If not available,
+the \verb|TUR| tag will be queried and used if possible as a fallback.
+
+
+\section{Going behind \pkg{fontspec}'s back}
+
+Expert users may wish not to use \pkg{fontspec}'s feature handling at all,
+while still taking advantage of its \LaTeX\ font selection conveniences. The
+\feat{RawFeature} font feature allows font feature selection using a literal feature
+selection string if you happen to have the OpenType feature tag memorised.
+More importantly, this can be used to enable features for which \pkg{fontspec}
+does not yet have a user interface to.
+
+\begin{Xexample}{raw}{Using raw font features directly.}
+ \fontspec{texgyrepagella-regular.otf}[RawFeature=+smcp]
+ Pagella small caps
+\end{Xexample}
+
+Multiple features can either be included in a single declaration:\par
+{\centering|[RawFeature=+smcp;+onum]|\par}
+\noindent or with multiple declarations:\par
+{\centering|[RawFeature=+smcp, RawFeature=+onum]|\par}
+
+Note that there is no error-checking when using |RawFeature|. Where a \pkg{fontspec}
+interface exists to a feature it is generally better to use it. If the font lacks the feature
+or if it would clash with another feature, \pkg{fontspec} will attemmpt to warn and/or resolve the issues.
+
+
+\section{Renaming existing features \& options}
+\label{sec:aliasfontfeature}
+
+\DescribeMacro{\aliasfontfeature}
+If you don't like the name of a particular font feature,
+it may be aliased to another with the
+\cs{aliasfontfeature}\marg{existing name}\marg{new name} command,
+such as shown in \exref{alias}.
+
+\begin{Xexample}{alias}{Renaming font features.}
+ \aliasfontfeature{ItalicFeatures}{IF}
+ \fontspec{Hoefler Text}[IF = {Alternate=1}]
+ Roman Letters \itshape And Swash
+\end{Xexample}
+
+Spaces in feature (and option names, see below) \emph{are} allowed. (You may have
+noticed this already in the lists of OpenType scripts and languages).
+
+\DescribeMacro{\aliasfontfeatureoption}
+If you wish to change the name of a font feature option,
+it can be aliased to another with the command
+\cs{aliasfontfeatureoption}\marg{font feature}\marg{existing name}\marg{new name}, such as shown in \exref{aliasopt}.
+
+\begin{Lexample}{aliasopt}{Renaming font feature options.}
+ \aliasfontfeature{VerticalPosition}{Vert Pos}
+ \aliasfontfeatureoption{VerticalPosition}{ScientificInferior}{Sci Inf}
+ \fontspec{LinLibertine_R.otf}[Vert Pos=Sci Inf]
+ Scientific Inferior: 12345
+\end{Lexample}
+
+This example demonstrates an important point: when aliasing the feature
+options, the \emph{original} feature name must be used when declaring
+to which feature the option belongs.
+
+Only feature options that exist as sets of fixed strings may be altered in
+this way. That is, \opt{Proportional} can be aliased to \opt{Prop} in the
+\feat{Letters} feature, but \opt{550099BB} cannot be substituted for \opt{Purple}
+in a \feat{Color} specification. For this type of thing, the \cmd\newfontfeature\
+command should be used to declare a new, \eg, \feat{PurpleColor} feature:
+\begin{Verbatim}
+ \newfontfeature{PurpleColor}{color=550099BB}
+\end{Verbatim}
+Except that this example was written before support for named colours was
+implemented. But you get the idea.
+
+
+
+
+\section{Programming interface}
+\label{sec:api}
+
+
+\subsection{Variables}
+
+\DescribeMacro{\l_fontspec_family_tl}
+\DescribeMacro{\l_fontspec_font}
+In some cases, it is useful to know what the \LaTeX\ font family
+of a specific \pkg{fontspec} font is. After a \cmd\fontspec-like
+command, this is stored inside the \cmd\l_fontspec_family_tl\ macro.
+Otherwise, \LaTeX's own \cmd\f@family\ macro can be useful here,
+too.
+The raw \TeX\ font that is defined from the `base' font in the family is stored in \cmd{\l_fontspec_font}.
+
+\DescribeMacro{\g_fontspec_encoding_tl}
+Package authors who need to load fonts with legacy \LaTeX\ \NFSS\ commands may also need to know what the default font encoding is.
+Since this has changed from \texttt{EU1}/\texttt{EU2} to \texttt{TU}, it is best to use the variable \cs{g_fontspec_encoding_tl} instead.
+
+\subsection{Functions for loading new fonts and families}
+
+\begin{macro}{\fontspec_gset_family:Nnn}
+\begin{macro}{\fontspec_set_family:Nnn}
+\darg{\LaTeX\ family}
+\darg{fontspec features}
+\darg{font name}
+Defines a new \NFSS\ family from given \meta{features} and \meta{font},
+and stores the family name in the variable \meta{family}.
+This font family can then be selected with standard \LaTeX\ commands
+\cs{fontfamily}\marg{family}\cs{selectfont}.
+See the standard \pkg{fontspec} user commands for applications of this
+function.
+\end{macro}
+\end{macro}
+
+\begin{macro}{\fontspec_gset_fontface:NNnn}
+\begin{macro}{\fontspec_set_fontface:NNnn}
+\darg{primitive font}
+\darg{\LaTeX\ family}
+\darg{fontspec features}
+\darg{font name}
+Variant of the above in which the primitive \TeX\ font command is stored in
+the variable \meta{primitive font}.
+If a family is loaded (with bold and italic shapes) the primitive font
+command will only select the regular face.
+This feature is designed for \LaTeX\ programmers who need to
+perform subsequent font-related tests on the \meta{primitive font}.
+\end{macro}
+\end{macro}
+
+
+\subsection{Conditionals}
+
+The following functions in \pkg{expl3} syntax may be used
+for writing code that interfaces with \pkg{fontspec}-loaded fonts.
+The following conditionals are all provided in |TF|, |T|, and |F| forms.
+
+\subsubsection{Querying font families}
+
+\begin{macro}{\fontspec_font_if_exist:nTF}
+Test whether the `font name' (|#1|) exists or is loadable.
+The syntax of |#1| is a restricted/simplified version of \pkg{fontspec}'s usual font loading syntax; fonts to be loaded by filename are detected by the presence of an appropriate extension (|.otf|, etc.), and paths should be included inline.
+E.g.:
+\begin{Verbatim}
+ \fontspec_font_if_exist:nTF {cmr10}{T}{F}
+ \fontspec_font_if_exist:nTF {Times~ New~ Roman}{T}{F}
+ \fontspec_font_if_exist:nTF {texgyrepagella-regular.otf}{T}{F}
+ \fontspec_font_if_exist:nTF {/Users/will/Library/Fonts/CODE2000.TTF}{T}{F}
+\end{Verbatim}
+\end{macro}
+The synonym \cs{IfFontExistsTF} is provided for `document authors'.
+
+
+\begin{macro}{\fontspec_if_fontspec_font:TF}
+Test whether the currently selected font has been loaded by fontspec.
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_opentype:TF}
+Test whether the currently selected font is an OpenType font.
+Always true for \LuaTeX{} fonts.
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_small_caps:TF}
+Test whether the currently selected font has a `small caps' face to be selected
+with |\scshape| or similar.
+Note that testing whether the font has the |Letters=SmallCaps| font feature is
+sufficient but not necessary for this command to return true, since small caps
+can also be loaded from separate font files.
+The logic of this command is complicated by the fact that \pkg{fontspec} will
+merge shapes together (for italic small caps, etc.).
+\end{macro}
+
+
+\subsubsection{Availability of features}
+
+\begin{macro}{\fontspec_if_aat_feature:nnTF}
+Test whether the currently selected font contains the \AAT\
+feature (|#1|,|#2|).
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_feature:nTF}
+Test whether the currently selected font contains the raw OpenType
+feature |#1|. E.g.: |\fontspec_if_feature:nTF {pnum} {True} {False}|.
+Returns false if the font is not loaded by fontspec or is not an OpenType
+font.
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_feature:nnnTF}
+Test whether the currently selected font with raw OpenType script tag |#1| and raw OpenType language tag |#2| contains the raw OpenType feature tag |#3|. E.g.: |\fontspec_if_feature:nnnTF {latn} {ROM} {pnum} {True} {False}|.
+Returns false if the font is not loaded by fontspec or is not an OpenType
+font.
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_script:nTF}
+Test whether the currently selected font contains the raw OpenType
+script |#1|. E.g.: |\fontspec_if_script:nTF {latn} {True} {False}|.
+Returns false if the font is not loaded by fontspec or is not an OpenType
+font.
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_language:nTF}
+Test whether the currently selected font contains the raw OpenType language
+tag |#1|. E.g.: |\fontspec_if_language:nTF {ROM} {True} {False}|.
+Returns false if the font is not loaded by fontspec or is not an OpenType
+font.
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_language:nnTF}
+Test whether the currently selected font contains the raw OpenType language
+tag |#2| in script |#1|. E.g.: |\fontspec_if_language:nnTF {cyrl} {SRB} {True} {False}|.
+Returns false if the font is not loaded by fontspec or is not an OpenType
+font.
+\end{macro}
+
+
+\subsubsection{Currently selected features}
+
+\begin{macro}{\fontspec_if_current_feature:nTF}
+Test whether the currently loaded font is using the specified raw
+OpenType feature tag |#1|.
+The tag string |#1| should be prefixed with |+| to query an active feature, and with a |-| (hyphen) to query a disabled feature.
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_current_script:nTF}
+Test whether the currently loaded font is using the specified raw
+OpenType script tag |#1|.
+\end{macro}
+
+
+\begin{macro}{\fontspec_if_current_language:nTF}
+Test whether the currently loaded font is using the specified raw
+OpenType language tag |#1|.
+\end{macro}
+
+\end{document}
+
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
+
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-enc.tex b/macros/unicodetex/latex/fontspec/fontspec-doc-enc.tex
new file mode 100644
index 0000000000..2a706a6252
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-enc.tex
@@ -0,0 +1,216 @@
+%%^^A%% fontspec-doc-enc.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\showexamplesfalse
+\begin{document}
+
+\part{Commands for accents and symbols (`encodings')}
+\label{part:enc}
+
+\textbf{The functionality described in this section is experimental.}
+
+In the pre-Unicode era, significant work was required by \LaTeX\ to ensure that
+input characters in the source could be interpreted correctly depending on file encoding,
+and that glyphs in the output were selected correctly depending on the font encoding.
+With Unicode, we have the luxury of a single file and font encoding that is used for both input
+and output.
+
+While this may provide some illusion that we could get away simply with typing
+Unicode text and receive correct output, this is not always the case.
+For a start, hyphenation in particular is language-specific, so tags should be used
+when switch between languages in a document.
+The \pkg{babel} and \pkg{polyglossia} packages both provide features for this.
+
+Multilingual documents will often use different fonts for different languages,
+not just for style, but for the more pragmatic reason that fonts do not all contain
+the same glyphs. (In fact, only test fonts such as Code2000 provide
+anywhere near the full Unicode coverage.)
+Indeed, certain fonts may be perfect for a certain application but miss a handful
+of necessary diacritics or accented letters.
+In these cases, \pkg{fontspec} can leverage the font encoding technology built
+into \LaTeX2\ to provide on a per-font basis either provide fallback options or
+error messages when a desired accent or symbol is not available.
+However, at present
+these features can only be provided for input using \LaTeX\ commands rather
+than Unicode input; for example, typing |\`e| instead of |è| or |\textcopyright|
+instead of |©| in the source file.
+
+The most widely-used encoding in \LaTeXe\ was |T1| with companion `|TS1|' symbols
+provided by the \pkg{textcomp} package.
+These encodings provided glyphs to typeset text in a variety of western European languages.
+As with most legacy \LaTeXe\ input methods, accents and symbols were input using
+encoding-dependent commands such as |\`e| as described above.
+As of 2017, in \LaTeXe\ on \XeTeX\ and \LuaTeX, the default encoding is |TU|,
+which uses Unicode for input and output.
+The |TU| encoding provides appropriate encoding-dependent definitions for input commands
+to match the coverage of the |T1+TS1| encodings.
+Wider coverage is not provided by default since (a)~each font will provide different glyph coverage, and
+(b)~it is expected that most users will be writing with direct Unicode input.
+
+For those users who do need finer-grained control, \pkg{fontspec} provides an
+interface for a more extensible system.
+
+
+\section{A new Unicode-based encoding from scratch}
+
+Let's say you need to provide support for a document originally written with fonts
+in the |OT2| encoding, which contains encoding-dependent commands for Cyrillic letters.
+An example from the |OT2| encoding definition file (|ot2enc.def|) reads:
+\begin{Verbatim}[numbers=left,firstnumber=57]
+\DeclareTextSymbol{\CYRIE}{OT2}{5}
+\DeclareTextSymbol{\CYRDJE}{OT2}{6}
+\DeclareTextSymbol{\CYRTSHE}{OT2}{7}
+\DeclareTextSymbol{\cyrnje}{OT2}{8}
+\DeclareTextSymbol{\cyrlje}{OT2}{9}
+\DeclareTextSymbol{\cyrdzhe}{OT2}{10}
+\end{Verbatim}
+
+To recreate this encoding in a form suitable for \pkg{fontspec}, create a new file
+named, say, |fontrange-cyr.def| and populate it with
+\begin{Verbatim}
+...
+\DeclareTextSymbol{\CYRIE} {\LastDeclaredEncoding}{"0404}
+\DeclareTextSymbol{\CYRDJE} {\LastDeclaredEncoding}{"0402}
+\DeclareTextSymbol{\CYRTSHE}{\LastDeclaredEncoding}{"040B}
+\DeclareTextSymbol{\cyrnje} {\LastDeclaredEncoding}{"045A}
+\DeclareTextSymbol{\cyrlje} {\LastDeclaredEncoding}{"0459}
+\DeclareTextSymbol{\cyrdzhe}{\LastDeclaredEncoding}{"045F}
+...
+\end{Verbatim}
+The numbers |"0404|, |"0402|, \dots, are the Unicode slots (in hexadecimal)
+of each glyph respectively.
+The \pkg{fontspec} package provides a number of shorthands to simplify this style of input; in this case,
+you could also write
+\begin{Verbatim}
+\EncodingSymbol{\CYRIE}{"0404}
+...
+\end{Verbatim}
+
+To use this encoding in a \pkg{fontspec} font, you would first add this to your preamble:
+\begin{Verbatim}
+\DeclareUnicodeEncoding{unicyr}{
+ \input{fontrange-cyr.def}
+}
+\end{Verbatim}
+Then follow it up with a font loading call such as
+\begin{Verbatim}
+\setmainfont{...}[NFSSEncoding=unicyr]
+\end{Verbatim}
+The first argument |unicyr| is the name of the `encoding' to use in the
+font family. (There's nothing special about the name chosen but it must be unique.)
+The second argument to |\DeclareUnicodeEncoding| also allows adjustments to be made
+for per-font changes.
+We'll cover this use case in the next section.
+
+
+\section{Adjusting a pre-existing encoding}
+
+There are three reasons to adjust a pre-existing encoding:
+to add, to remove, and to redefine some symbols, letters, and/or accents.
+
+When adding symbols, etc., simply write
+\begin{Verbatim}
+\DeclareUnicodeEncoding{unicyr}{
+ \input{tuenc.def}
+ \input{fontrange-cyr.def}
+ \EncodingSymbol{\textruble}{"20BD}
+}
+\end{Verbatim}
+Of course if you consistently add a number of symbols to an encoding it would be
+a good idea to create a new |fontrange-XX.def| file to suit your needs.
+
+When removing symbols, use the |\UndeclareSymbol|\marg{cmd} command.
+For example, if you a loading a font that you know is missing, say, the interrobang
+(not that unusual a situation), you might write:
+\begin{Verbatim}
+\DeclareUnicodeEncoding{nobang}{
+ \input{tuenc.def}
+ \UndeclareSymbol\textinterrobang
+}
+\end{Verbatim}
+Provided that you use the command |\textinterrobang| to typeset this symbol,
+it will appear in fonts with the default encoding, while in any font loaded with
+the |nobang| encoding an attempt to access the symbol will either use the default
+fallback definition or return an error, depending on the symbol being undeclared.
+
+
+The third use case is to redefine a symbol or accent. The most common use case
+in this scenario is to adjust a specific accent command to either fine-tune its placement
+or to `fake' it entirely.
+For example, the underdot diacritic is used in typeset Sanskrit,
+but it is not necessarily included as an accent symbol is all fonts.
+By default the underdot is defined in |TU| as:
+\begin{Verbatim}
+\EncodingAccent{\d}{"0323}
+\end{Verbatim}
+For fonts with a missing (or poorly-spaced) |"0323| accent glyph, the `traditional' \TeX\ fake accent
+construction could be used instead:
+\begin{Verbatim}
+\DeclareUnicodeEncoding{fakeacc}{
+ \input{tuenc.def}
+ \EncodingCommand{\d}[1]{%
+ \hmode@bgroup
+ \o@lign{\relax#1\crcr\hidewidth\ltx@sh@ft{-1ex}.\hidewidth}%
+ \egroup
+ }
+}
+\end{Verbatim}
+This would be set up in a document as such:
+\begin{Verbatim}
+\newfontfamily\sanskitfont{CharisSIL}
+\newfontfamily\titlefont{Posterama}[NFSSEncoding=fakeacc]
+\end{Verbatim}
+Then later in the document, no additional work is needed:
+\begin{Verbatim}
+...{\titlefont kalita\d m}... % <- uses fake accent
+...{\sanskitfont kalita\d m}... % <- uses real accent
+\end{Verbatim}
+To reiterate from above, typing this input with Unicode text (`|kalitaṃ|')
+will \emph{bypass} this encoding mechanism and you will receive only what is contained
+literally within the font.
+
+
+\section{Summary of commands}
+
+The \LaTeXe\ kernel provides the following font encoding commands suitable for Unicode encodings:
+\begin{quote}\obeylines
+ \cs{DeclareTextCommand}\marg{command}\marg{encoding}\oarg{num}\oarg{default}\marg{code}
+ \cs{DeclareUnicodeAccent}\marg{command}\marg{encoding}\marg{slot}
+ \cs{DeclareTextSymbol}\marg{command}\marg{encoding}\marg{slot}
+ \cs{DeclareTextComposite}\marg{command}\marg{encoding}\marg{letter}\marg{slot}
+ \cs{DeclareTextCompositeCommand}\marg{command}\marg{encoding}\marg{letter}\marg{code}
+ \cs{UndeclareTextCommand}\marg{command}\marg{encoding}
+\end{quote}
+See |fntguide.pdf| for full documentation of these.
+As shown above, the following shorthands are provided by \pkg{fontspec} to simplify
+the process of defining Unicode font range encodings:
+\begin{quote}\obeylines
+ \cs{EncodingCommand}\marg{command}\oarg{num}\oarg{default}\marg{code}
+ \cs{EncodingAccent}\marg{command}\marg{code}
+ \cs{EncodingSymbol}\marg{command}\marg{code}
+ \cs{EncodingComposite}\marg{command}\marg{letter}\marg{slot}
+ \cs{EncodingCompositeCommand}\marg{command}\marg{letter}\marg{code}
+ \cs{UndeclareSymbol}\marg{command}
+ \cs{UndeclareAccent}\marg{command}
+ \cs{UndeclareCommand}\marg{command}
+ \cs{UndeclareComposite}\marg{command}\marg{letter}
+\end{quote}
+
+\end{document}
+
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-featset.tex b/macros/unicodetex/latex/fontspec/fontspec-doc-featset.tex
new file mode 100644
index 0000000000..90b1019561
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-featset.tex
@@ -0,0 +1,629 @@
+%%^^A%% fontspec-doc-featset.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\showexamplesfalse
+\begin{document}
+
+\part{Selecting font features}
+\label{sec:selectingfeature}
+
+The commands discussed so far such as \cs{fontspec} each take an optional argument for
+accessing the font features of the requested font.
+Commands are provided to set default features to be applied for all fonts, and even to change the features that a font is presently loaded with.
+Different font shapes can be loaded with separate features, and different features can even be selected for different sizes that the font appears in.
+This part discusses these options.
+
+\section{Default settings}
+\label{sec:defaults}
+
+\cmdbox{\cmd\defaultfontfeatures\marg{font features}}
+
+It is sometimes useful to define
+font features that are applied to every subsequent font selection command.
+This may be defined with the
+\cmd{\defaultfontfeatures} command, shown in \exref{dff}.
+New calls of \cs{defaultfontfeatures} overwrite previous ones, and defaults can be reset by calling the command with an empty argument.
+
+\begin{Xexample}{dff}{A demonstration of the \cs{defaultfontfeatures} command.}
+ \fontspec{texgyreadventor-regular.otf}
+ Some default text 0123456789 \\
+ \defaultfontfeatures{
+ Numbers=OldStyle, Color=888888
+ }
+ \fontspec{texgyreadventor-regular.otf}
+ Now grey, with old-style figures:
+ 0123456789
+\end{Xexample}
+
+\cmdbox{\cmd\defaultfontfeatures\oarg{font name}\marg{font features}}
+
+Default font features can be specified on a per-font and per-face basis
+by using the optional argument to \cs{defaultfontfeatures} as shown.
+\begin{Verbatim}
+ \defaultfontfeatures[texgyreadventor-regular.otf]{Color=blue}
+ \setmainfont{texgyreadventor-regular.otf}% will be blue
+\end{Verbatim}
+Multiple fonts may be affected by using a comma separated list of font names.
+
+\cmdbox{\cmd\defaultfontfeatures\oarg{\cs{font-switch}}\marg{font features}}
+
+\textbf{New in v2.4}.
+Defaults can also be applied to symbolic families such as those created with the |\newfontfamily| command and for |\rmfamily|, |\sffamily|, and |\ttfamily|:
+\begin{Verbatim}
+ \defaultfontfeatures[\rmfamily,\sffamily]{Ligatures=TeX}
+ \setmainfont{texgyreadventor-regular.otf}% will use standard TeX ligatures
+\end{Verbatim}
+The line above to set \TeX-like ligatures is now activated by \emph{default} in \texttt{fontspec.cfg}.
+To reset default font features, simply call the command with an empty argument:
+\begin{Verbatim}
+ \defaultfontfeatures[\rmfamily,\sffamily]{}
+ \setmainfont{texgyreadventor-regular.otf}% will no longer use standard TeX ligatures
+\end{Verbatim}
+
+\cmdbox{\cmd\defaultfontfeatures\texttt{+}\marg{font features}\\
+ \cmd\defaultfontfeatures\texttt{+}\oarg{font name}\marg{font features}}
+
+\textbf{New in v2.4}.
+Using the |+| form of the command appends the \meta{font features} to any already-selected defaults.
+
+
+\section{Working with the currently selected features}
+\label{sec:addfontfeatures}
+
+
+\cmdbox{\cmd\IfFontFeatureActiveTF\marg{font feature}\marg{true code}\marg{false code}}
+
+This command queries the currently selected font face and executes the appropriate branch based on whether the \meta{font feature} as specified by \pkg{fontspec} is currently active.
+
+For example, the following will print `True':
+\begin{Verbatim}
+\setmainfont{texgyrepagella-regular.otf}[Numbers=OldStyle]
+\IfFontFeatureActiveTF{Numbers=OldStyle}{True}{False}
+\end{Verbatim}
+
+Note that there is no way for \pkg{fontspec} to know what the default features of a font will be. For example, by default the |texgyrepagella| fonts use lining numbers. But in the following example, querying for lining numbers returns false since they have not been explicitly requested:
+\begin{Verbatim}
+\setmainfont{texgyrepagella-regular.otf}
+\IfFontFeatureActiveTF{Numbers=Lining}{True}{False}
+\end{Verbatim}
+
+Please note: At time of writing this function only supports OpenType fonts; AAT/Graphite fonts under the \XeTeX\ engine are not supported.
+
+
+\cmdbox{\cmd\addfontfeatures\marg{font features}}
+
+This command allows font features in an entire font family to
+be changed without knowing what features are currently selected or even what
+font family is being used. A good example of this could be to add a hook to all
+tabular material to use monospaced numbers, as shown in \exref{aff}.
+If you attempt to \emph{change} an already-selected feature, \pkg{fontspec} will try to de-activate any features that clash with the new ones.
+\Eg, the following two invocations are mutually exclusive:
+\begin{Verbatim}
+\addfontfeature{Numbers=OldStyle}...
+\addfontfeature{Numbers=Lining}...
+123
+\end{Verbatim}
+Since |Numbers=Lining| comes last, it takes precedence and deactivates the call |Numbers=OldStyle|.
+
+If you wish to apply the change to only one of the fonts of a family (say, italics only)
+you can write
+\begin{Verbatim}
+\addfontfeature{ItalicFeatures={Numbers=Lowercase}}
+\end{Verbatim}
+
+
+\begin{Lexample}{aff}{A demonstration of the \cs{addfontfeatures} command.}
+ \fontspec{texgyreadventor-regular.otf}%
+ [Numbers={Proportional,OldStyle}]
+ `In 1842, 999 people sailed 97 miles in
+ 13 boats. In 1923, 111 people sailed 54
+ miles in 56 boats.' \bigskip
+
+ {\addfontfeatures{Numbers={Monospaced,Lining}}
+ \begin{tabular}{@{} cccc @{}}
+ Year & People & Miles & Boats \\
+ \hline 1842 & 999 & 75 & 13 \\
+ 1923 & 111 & 54 & 56
+ \end{tabular}}
+\end{Lexample}
+
+\DescribeMacro{\addfontfeature}
+This command may also be executed under the alias \cmd{\addfontfeature}.
+
+
+\subsection{Priority of feature selection}
+Features defined with \cs{addfontfeatures} override features
+specified by \cs{fontspec}, which in turn override features
+specified by \cs{defaultfontfeatures}. If in doubt, whenever a
+new font is chosen for the first time, an entry is made in the
+transcript (\texttt{.log}) file displaying the font name and the
+features requested.
+
+
+\section{Different features for different font shapes}
+\label{sec:bfit-feat}
+
+\cmdbox{
+ \feat{BoldFeatures}\texttt=\marg{features} \\
+ \feat{ItalicFeatures}\texttt=\marg{features} \\
+ \feat{BoldItalicFeatures}\texttt=\marg{features} \\
+ \feat{SlantedFeatures}\texttt=\marg{features} \\
+ \feat{BoldSlantedFeatures}\texttt=\marg{features} \\
+ \feat{SmallCapsFeatures}\texttt=\marg{features} \\
+ \feat{UprightFeatures}\texttt=\marg{features}
+}
+
+It is entirely possible that separate fonts in a family will require
+separate options; \eg, Hoefler Text Italic contains various swash
+feature options that are completely unavailable in the upright shapes.
+
+The font features defined at the top level of the optional \cmd\fontspec\
+argument are applied to \emph{all} shapes of the family.
+Using \feat{Upright-}, \feat{SmallCaps-}, \feat{Bold-},
+\feat{Italic-}, and \feat{BoldItalicFeatures},
+separate font features may be defined to their respective shapes
+\emph{in addition} to, and with precedence over, the `global' font features.
+See \exref{itfeat}.
+
+\begin{Xexample}{itfeat}{Features for, say, just italics.}
+\fontspec{EBGaramond-Regular.otf}%
+ [ItalicFont=EBGaramond-Italic.otf]
+\itshape Don’t Ask Victoria! \\
+\addfontfeature{ItalicFeatures={Style=Swash}}
+Don’t Ask Victoria! \\
+\end{Xexample}
+
+Note that because most fonts include their small caps glyphs
+within the main font, features specified with \feat{SmallCapsFeatures} are applied \emph{in addition} to
+any other shape-specific features as defined above, and hence \feat{SmallCapsFeatures}
+can be nested within \feat{ItalicFeatures} and friends. Every combination
+of upright, italic, bold and small caps can thus be assigned individual
+features, as shown in the somewhat ludicrous \exref{scfeat}.
+
+\begin{Xexample}{scfeat}{An example of setting the \feat{SmallCapsFeatures}
+separately for each font shape.}
+ \fontspec{texgyretermes}[
+ Extension = {.otf},
+ UprightFont = {*-regular}, ItalicFont = {*-italic},
+ BoldFont = {*-bold}, BoldItalicFont = {*-bolditalic},
+ UprightFeatures={Color = 220022,
+ SmallCapsFeatures = {Color=115511}},
+ ItalicFeatures={Color = 2244FF,
+ SmallCapsFeatures = {Color=112299}},
+ BoldFeatures={Color = FF4422,
+ SmallCapsFeatures = {Color=992211}},
+ BoldItalicFeatures={Color = 888844,
+ SmallCapsFeatures = {Color=444422}},
+ ]
+ Upright {\scshape Small Caps}\\
+ \itshape Italic {\scshape Italic Small Caps}\\
+ \upshape\bfseries Bold {\scshape Bold Small Caps}\\
+ \itshape Bold Italic {\scshape Bold Italic Small Caps}
+\end{Xexample}
+
+
+\section{Selecting fonts from TrueType Collections (TTC files)}
+TrueType Collections are multiple fonts contained within a single file.
+Each font within a collection must be explicitly chosen using the \feat{FontIndex} command.
+Since TrueType Collections are often used to contain the italic/bold shapes in a family, \pkg{fontspec} automatically selects the italic, bold, and bold italic fontfaces from the same file.
+For example, to load the macOS system font Optima:
+\begin{Verbatim}
+\setmainfont{Optima.ttc}[
+ Path = /System/Library/Fonts/ ,
+ UprightFeatures = {FontIndex=0} ,
+ BoldFeatures = {FontIndex=1} ,
+ ItalicFeatures = {FontIndex=2} ,
+ BoldItalicFeatures = {FontIndex=3} ,
+]
+\end{Verbatim}
+Support for TrueType Collections has only been tested in \XeTeX, but should also work with an up-to-date version of \LuaTeX\ and the \pkg{luaotfload} package.
+
+
+\section{Different features for different font sizes}
+\label{sec:sizefeature}
+
+\cmdbox{
+\ttfamily SizeFeatures = \char`\{\\
+\null\quad...\\
+\null\quad\char`\{~Size =
+\rmfamily\meta{size range}\ttfamily
+,
+\rmfamily \meta{font features}\ttfamily
+~\char`\} , \\
+\null\quad\char`\{~Size =
+\rmfamily\meta{size range}\ttfamily
+, Font =
+\rmfamily\meta{font name}\texttt, \meta{font features}\ttfamily
+~\char`\} , \\
+\null\quad... \\
+\char`\}}
+
+The \feat{SizeFeature} feature is a little more complicated
+than the previous features discussed. It allows different fonts
+and different font features to be selected for a given font
+family as the point size varies.
+
+It takes a comma separated list of braced, comma separated lists of features for each size range.
+Each sub-list must contain the \opt{Size} option
+to declare the size range, and optionally \opt{Font} to change the
+font based on size. Other (regular) fontspec features that are added
+are used on top of the font features that would be used anyway.
+A demonstration to clarify these details is shown in \exref{sizefeat}.
+A less trivial example is shown in the context of optical font sizes
+in \vref{sec:opticalsize}.
+
+\begin{Xexample}{sizefeat}{An example of specifying different font features for different sizes of font with \feat{SizeFeatures}.}
+ \fontspec{texgyrechorus-mediumitalic.otf}[
+ SizeFeatures={
+ {Size={-8}, Font=texgyrebonum-italic.otf, Color=AA0000},
+ {Size={8-14}, Color=00AA00},
+ {Size={14-}, Color=0000AA}} ]
+
+ {\scriptsize Small\par} Normal size\par {\Large Large\par}
+\end{Xexample}
+
+To be precise, the \opt{Size} sub-feature accepts arguments in the form shown in \vref{tab:sizing}.
+Braces around the size range are optional. For an exact font size (|Size=X|)
+font sizes chosen near that size will `snap'. For example, for size definitions
+at exactly 11pt and 14pt, if a 12pt font is requested \emph{actually} the
+11pt font will be selected. This is a remnant of the past when fonts were designed
+in metal (at obviously rigid sizes) and later when bitmap fonts were similarly
+designed for fixed sizes.
+
+If additional features are only required for a single size, the other sizes
+must still be specified. As in:
+\begin{Verbatim}
+ SizeFeatures={
+ {Size=-10,Numbers=Uppercase},
+ {Size=10-}}
+\end{Verbatim}
+Otherwise, the font sizes greater than 10 won't be defined at all!
+
+\begin{table}
+\caption{Syntax for specifying the size to apply custom font features.}\label{tab:sizing}
+\centering
+\begin{tabular}{@{}ll@{}}
+\toprule
+Input & Font size, $s$ \\
+\midrule
+ |Size = X-| & $s \geq \texttt{X}$ \\
+ |Size = -Y| & $s < \texttt{Y}$ \\
+ |Size = X-Y| & $\texttt{X} \leq s < \texttt{Y}$ \\
+ |Size = X| & $s = \texttt{X}$ \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+\paragraph{Interaction with other features}
+For \feat{SizeFeatures} to work with \feat{ItalicFeatures}, \feat{BoldFeatures}, etc., and \feat{SmallCapsFeatures}, a strict heirarchy is required:
+\begin{Verbatim}
+ UprightFeatures =
+ {
+ SizeFeatures =
+ {
+ {
+ Size = -10,
+ Font = ..., % if necessary
+ SmallCapsFeatures = {...},
+ ... % other features for this size range
+ },
+ ... % other size ranges
+ }
+ }
+\end{Verbatim}
+Suggestions on simplifying this interface welcome.
+
+
+\section{Font independent options}
+\label{sec:font-ind-features}
+
+Features introduced in this section may be used with any font.
+
+\subsection{Colour}
+
+\feat{Color} (or \feat{Colour}) uses font specifications to set the colour of
+the text.
+You should think of this as the literal glyphs of the font being coloured in a certain way.
+Notably, this mechanism is different to that of the \pkg{color}/\pkg{xcolor}/\pkg{hyperref}/etc.\ packages, and in fact using \pkg{fontspec} commands to set colour will prevent your text from changing colour using those packages at all!
+For example, if you set the colour in a \verb|\setmainfont| command, \verb|\color{...}| and related commands, including hyperlink colouring, will no longer have any effect on text in this font.)
+Therefore, \pkg{fontspec}'s colour commands are best used to set explicit colours in specific situations, and the \pkg{xcolor} package is recommended for more general colour functionality.
+
+The colour is defined as a triplet of two-digit Hex RGB
+values, with optionally another value for the transparency (where
+|00| is completely transparent and |FF| is opaque.)
+\begin{Lexample}{color}{Selecting colour with transparency.}
+ \fontsize{48}{48}
+ \fontspec{texgyrebonum-bold.otf}
+ {\addfontfeature{Color=FF000099}W}\kern-0.4ex
+ {\addfontfeature{Color=0000FF99}S}\kern-0.4ex
+ {\addfontfeature{Color=DDBB2299}P}\kern-0.5ex
+ {\addfontfeature{Color=00BB3399}R}
+\end{Lexample}
+Transparency is supported by \LuaLaTeX; \XeLaTeX\ with the \texttt{xdvipdfmx} driver
+does not support this feature.
+
+If you load the \pkg{xcolor} package, you may use any named colour instead
+of writing the colours in hexadecimal.
+\begin{Verbatim}
+ \usepackage{xcolor}
+ ...
+ \fontspec[Color=red]{Verdana} ...
+ \definecolor{Foo}{rgb}{0.3,0.4,0.5}
+ \fontspec[Color=Foo]{Verdana} ...
+\end{Verbatim}
+The \pkg{color} package is \emph{not} supported; use \pkg{xcolor} instead.
+
+You may specify the transparency with a named colour using the \feat{Opacity}
+feature which takes an decimal from zero to one corresponding to
+transparent to opaque respectively:
+\begin{Verbatim}
+ \fontspec[Color=red,Opacity=0.7]{Verdana} ...
+\end{Verbatim}
+It is still possible to specify a colour in six-char hexadecimal form
+while defining opacity in this way, if you like.
+
+\subsection{Scale}
+
+\cmdbox{
+ \feat{Scale} = \meta{number} \\
+ \feat{Scale} = \opt{MatchLowercase} \\
+ \feat{Scale} = \opt{MatchUppercase}
+}
+
+In its explicit form, \feat{Scale} takes a single
+numeric argument for linearly scaling the font, as demonstrated
+in \exref{fontload}.
+
+As well as a numerical argument, the \feat{Scale} feature
+also accepts options \opt{MatchLowercase}
+and \opt{MatchUppercase}, which will scale the font being selected to match
+the current default roman font to either the height of the lowercase or
+uppercase letters, respectively; these features are shown in \exref{scale}.
+The amount of scaling used in each instance is reported in the \texttt{.log} file.
+
+\begin{Xexample}{scale}{Automatically calculated scale values.}
+ \setmainfont{Georgia}
+ \newfontfamily\lc[Scale=MatchLowercase]{Verdana}
+ The perfect match {\lc is hard to find.}\\
+ \newfontfamily\uc[Scale=MatchUppercase]{Arial}
+ L O G O \uc F O N T
+\end{Xexample}
+
+Additional calls to the \feat{Scale} feature overwrite the settings of the former.
+If you want to accumulate scale factors (useful perhaps to fine-tune the settings of
+\opt{MatchLowercase}), the \feat{ScaleAgain} feature can be used as many times as
+necessary. For example:
+\begin{Verbatim}
+ [ Scale = 1.1 , Scale = 1.2 ] % -> scale of 1.2
+ [ Scale = 1.1 , ScaleAgain = 1.2 ] % -> scale of 1.32
+\end{Verbatim}
+
+Note that when |Scale=MatchLowercase| is used with |\setmainfont|, the new `main'
+font of the document will be scaled to match the old default.
+If you wish to automatically scale all fonts except have the main font use `natural'
+scaling, you may write
+\begin{Verbatim}
+ \defaultfontfeatures{ Scale = MatchLowercase }
+ \defaultfontfeatures[\rmfamily]{ Scale = 1}
+\end{Verbatim}
+One or both of these lines may be placed into a local |fontspec.cfg| file
+(see \vref{sec:config}) for this behaviour to be effected in your own documents
+automatically.
+(Also see \vref{sec:defaults} for more information on setting font defaults.)
+
+
+
+
+\subsection{Interword space}
+
+While the space between words can be varied on an individual
+basis with the \TeX\ primitive \cmd\spaceskip\ command, it is
+more convenient to specify this information when the font is
+first defined.
+
+The space in between words in a paragraph will be chosen automatically,
+and generally will not need to be adjusted. For those
+times when the precise details are important, the \feat{WordSpace}
+feature is
+provided, which takes either a single scaling factor to scale the
+default value, or a triplet of comma-separated
+values to scale the nominal value, the stretch, and the shrink of the
+interword space by, respectively. (|WordSpace={|$x$|}| is the same as
+|WordSpace={|$x$|,|$x$|,|$x$|}|.)
+
+\begingroup
+\let\centering\relax
+\begin{Xexample}{wordspace}{Scaling the default interword space. An exaggerated value has been chosen to emphasise the effects here.}
+ \fontspec{texgyretermes-regular.otf}
+ Some text for our example to take
+ up some space, and to demonstrate
+ the default interword space.
+ \bigskip
+
+ \fontspec{texgyretermes-regular.otf}%
+ [WordSpace = 0.3]
+ Some text for our example to take
+ up some space, and to demonstrate
+ the default interword space.
+\end{Xexample}
+\endgroup
+
+Note that \TeX's optimisations in how it loads fonts means that you cannot
+use this feature in \cs{addfontfeatures}.
+
+\subsection{Post-punctuation space}
+
+If \cmd\frenchspacing\ is \emph{not} in effect, \TeX\ will allow extra
+space after some punctuation in its goal of justifying the lines of text.
+Generally, this is considered old-fashioned, but occasionally in small amounts the
+effect can be justified, pardon the pun.
+
+The \feat{PunctuationSpace} feature takes a scaling factor by which to
+adjust the nominal value chosen for the font; this is demonstrated in
+\exref{punctspace}.
+Note that |PunctuationSpace=0|
+is \emph{not} equivalent to \cmd\frenchspacing, although the difference
+will only be apparent when a line of text is under-full.
+
+\begin{Lexample}{punctspace}{Scaling the default post-punctuation space.}
+ \nonfrenchspacing
+ \fontspec{texgyreschola-regular.otf}
+ Letters, Words. Sentences. \par
+ \fontspec{texgyreschola-regular.otf}[PunctuationSpace=2]
+ Letters, Words. Sentences. \par
+ \fontspec{texgyreschola-regular.otf}[PunctuationSpace=0]
+ Letters, Words. Sentences.
+\end{Lexample}
+
+Note that \TeX's optimisations in how it loads fonts means that you cannot
+use this feature in \cs{addfontfeatures}.
+
+
+
+\subsection{The hyphenation character}
+
+The letter used for hyphenation may be chosen with the \feat{HyphenChar}
+feature.
+With one exception (\feat{HyphenChar} \texttt{=} \opt{None}),
+this is a \XeTeX-only feature since \LuaTeX\ cannot set the hyphenation character on a per-font basis;
+see its \cs{prehyphenchar} primitive for further details.
+
+\feat{HyphenChar} takes three types of input, which are chosen according to some
+simple rules. If the input is the string \opt{None}, then hyphenation is
+suppressed for this font.
+
+As part of \texttt{fontspec.cfg}, the default monospaced family (e.g., \verb|\ttfamily|)
+is set up to automatically set \feat{HyphenChar} \texttt{=} \opt{None}.
+
+If the input is a single character, then this character is used.
+Finally, if the input is longer than a single character
+it must be the UTF-8 slot number of the hyphen character you desire.
+
+\begin{Xexample}{hyphchar}{Explicitly choosing the hyphenation character.}
+ \def\text{\fbox{\parbox{1.55cm}{%
+ EXAMPLE HYPHENATION%
+ }}\qquad\qquad\null\par\bigskip}
+
+ \fontspec{LinLibertine_R.otf}[HyphenChar=None]
+ \text
+ \fontspec{LinLibertine_R.otf}[HyphenChar={+}]
+ \text
+\end{Xexample}
+
+Note that \TeX's optimisations in how it loads fonts means that you cannot
+use this feature in \cs{addfontfeatures}.
+
+\subsection{Optical font sizes} \label{sec:opticalsize}
+
+Optically scaled fonts thicken out as the font size decreases
+in order to make the glyph shapes more robust (less prone to losing
+detail), which improves legibility. Conversely, at large optical
+sizes the serifs and other small details may be more delicately
+rendered.
+
+OpenType fonts with optical scaling can exist in
+several discrete sizes (in separate font files).
+When loading fonts by name, \XeTeX\ and Lua\TeX\ engines will attempt to
+\emph{automatically} load the appropriate font as determined by the current font size.
+An example of this behaviour is shown in \exref{optsize}, in which some larger text is
+mechanically scaled down to compare the difference for equivalent font sizes.
+
+The \feat{OpticalSize} feature may be used to specify a different optical size.
+With \feat{OpticalSize} set (\exref{optsize0})
+to zero, no optical size font substitution is performed.
+
+\begin{Lexample}{optsize}{A demonstration of automatic optical size selection.}
+ \fontspec{Latin Modern Roman}
+ Automatic optical size \\
+ \scalebox{0.4}{\Huge
+ Automatic optical size}
+\end{Lexample}
+
+\begin{Lexample}{optsize0}{Explicit optical size substitution for the Latin Modern Roman family.}
+ \fontspec{Latin Modern Roman}[OpticalSize=5]
+ Latin Modern optical sizes \\
+ \fontspec{Latin Modern Roman}[OpticalSize=8]
+ Latin Modern optical sizes \\
+ \fontspec{Latin Modern Roman}[OpticalSize=12]
+ Latin Modern optical sizes \\
+ \fontspec{Latin Modern Roman}[OpticalSize=17]
+ Latin Modern optical sizes
+\end{Lexample}
+
+The \feat{SizeFeatures} feature (\vref{sec:sizefeature}) can be
+used to specify exactly which optical sizes will be used for ranges
+of font size. For example, something like:
+\begin{Verbatim}
+ \fontspec{Latin Modern Roman}[
+ UprightFeatures = { SizeFeatures = {
+ {Size=-10, OpticalSize=8 },
+ {Size= 10-14, OpticalSize=10},
+ {Size= 14-18, OpticalSize=14},
+ {Size= 18-, OpticalSize=18}}}
+ ]
+\end{Verbatim}
+
+\subsection{Font transformations}
+
+In rare situations users may want to mechanically distort the shapes of the glyphs in the current font such as shown in \exref{fake}. Please don't overuse these features; they are \emph{not} a good alternative to having the real shapes.
+
+\begin{Xexample}{fake}{Articifial font transformations.}
+ \fontspec{Quattrocento.otf} \emph{ABCxyz} \quad
+ \fontspec{Quattrocento.otf}[FakeSlant=0.2] ABCxyz
+
+ \fontspec{Quattrocento.otf} ABCxyz \quad
+ \fontspec{Quattrocento.otf}[FakeStretch=1.2] ABCxyz
+
+ \fontspec{Quattrocento.otf} \textbf{ABCxyz} \quad
+ \fontspec{Quattrocento.otf}[FakeBold=1.5] ABCxyz
+\end{Xexample}
+
+If values are omitted, their defaults are as shown above.
+
+If you want the bold shape to be faked automatically, or the italic shape
+to be slanted automatically, use the \feat{AutoFakeBold} and
+\feat{AutoFakeSlant} features. For example, the following two invocations
+are equivalent:
+\begin{Verbatim}
+ \fontspec[AutoFakeBold=1.5]{Charis SIL}
+ \fontspec[BoldFeatures={FakeBold=1.5}]{Charis SIL}
+\end{Verbatim}
+If both of the \feat{AutoFake...} features are used, then the bold italic
+font will also be faked.
+
+
+\subsection{Letter spacing}
+Letter spacing, or tracking, is the term given to adding (or subtracting) a small amount of horizontal space in between adjacent characters. It is specified with the \feat{LetterSpace}, which takes a numeric argument,
+shown in \exref{tracking}.
+
+The letter spacing parameter is a normalised additive factor (not a scaling factor); it is defined as a percentage of the font size. That is, for a 10\,pt font, a letter spacing parameter of `|1.0|' will add 0.1\,pt between each letter.
+
+\begin{Xexample}{tracking}{The \feat{LetterSpace} feature.}
+ \fontspec{Didot}
+ \addfontfeature{LetterSpace=0.0}
+ USE TRACKING FOR DISPLAY CAPS TEXT \\
+ \addfontfeature{LetterSpace=2.0}
+ USE TRACKING FOR DISPLAY CAPS TEXT
+\end{Xexample}
+
+This functionality is not generally used for lowercase text in modern typesetting but does have historic precedent in a variety of situations.
+In particular, small amounts of letter spacing can be very useful, when setting small caps or all caps titles.
+Also see the OpenType \opt{Uppercase} option of the \feat{Letters} feature (\vref{sec:letters}).
+
+\end{document}
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-fontsel.tex b/macros/unicodetex/latex/fontspec/fontspec-doc-fontsel.tex
new file mode 100644
index 0000000000..85ad1ea75d
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-fontsel.tex
@@ -0,0 +1,629 @@
+%%^^A%% fontspec-doc-fontsel.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\showexamplesfalse
+\begin{document}
+
+\part{General font selection}
+
+\section{Main commands}
+\label{sec:main-cmd}
+
+This section concerns the variety of commands that can be used to select
+fonts.
+
+\bigskip
+\cmdbox{%
+ \CMD{\string\setmainfont}\marg{font}\oarg{font features}\\
+ \CMD{\string\setsansfont}{\color[gray]{0.5}\marg{font}\oarg{font features}}\\
+ \CMD{\string\setmonofont}{\color[gray]{0.5}\marg{font}\oarg{font features}}
+}
+
+These are the main font-selecting commands of this package which select the standard fonts used in a document, as shown in \exref{fontload}.
+Here, the scales of the fonts have been chosen to equalise their
+lowercase letter heights. The \feat{Scale} font feature will be discussed
+further in \vref{sec:font-ind-features}, including methods for automatic
+scaling.
+Note that further options may need to be added to select appropriate bold/italic fonts,
+but this shows the main idea.
+
+Note that while these commands all look and behave largely identically, the default setup for font loading automatically adds the |Ligatures=TeX| feature for the \cs{setmainfont} and \cs{setsansfont} commands.
+These defaults (and further customisations possible) are discussed in \vref{sec:defaults}.
+
+\bigskip
+\cmdbox{%
+ \CMD{\string\newfontfamily}\meta{cmd}\marg{font}\oarg{font features}\\
+ \CMD{\string\setfontfamily}{\color[gray]{0.5}\meta{cmd}\marg{font}\oarg{font features}}\\
+ \CMD{\string\renewfontfamily}{\color[gray]{0.5}\meta{cmd}\marg{font}\oarg{font features}}\\
+ \CMD{\string\providefontfamily}{\color[gray]{0.5}\meta{cmd}\marg{font}\oarg{font features}}
+}
+
+These commands define new font family commands (like \cs{rmfamily}).
+The |new| command checks if \meta{cmd} has been defined, and issues an error if so.
+The |renew| command checks if \meta{cmd} has been defined, and issues an error if not.
+The |provide| command checks if \meta{cmd} has been defined, and silently aborts if so.
+The |set| command never checks; use at your own risk.
+
+
+
+\bigskip
+\cmdbox{%
+ \CMD{\string\fontspec}\marg{font}\oarg{font features}
+}
+
+The plain \cs{fontspec} command is not generally recommended for document use. It is an
+ad hoc command best suited for testing and loading fonts on a one-off basis.
+
+All of the commands listed above accept comma-separated
+\meta{font feature}=\meta{option} lists; these are described later:
+\begin{itemize}
+\item For general font features, see \vref{sec:font-ind-features}
+\item For OpenType fonts, see Part~\vref{sec:opentype-features}
+\item For \XeTeX-only general font features, see Part~\vref{sec:xetex-features}
+\item For \LuaTeX-only general font features, see Part~\vref{sec:luatex-features}
+\item For features for \AAT\ fonts in \XeTeX, see \vref{sec:aat-features}
+\end{itemize}
+
+\begin{Lexample}{fontload}{Loading the default, sans serif, and monospaced fonts.}
+ \setmainfont{texgyrebonum-regular.otf}
+ \setsansfont{lmsans10-regular.otf}[Scale=MatchLowercase]
+ \setmonofont{Inconsolatazi4-Regular.otf}[Scale=MatchLowercase]
+
+ \rmfamily Pack my box with five dozen liquor jugs\par
+ \sffamily Pack my box with five dozen liquor jugs\par
+ \ttfamily Pack my box with five dozen liquor jugs
+\end{Lexample}
+
+\section{Font selection}
+
+In both \LuaTeX\ and \XeTeX, fonts can be selected (using the \meta{font} argument in \ref{sec:main-cmd}) either by `font name' or by `file name', but there are some differences in how each engine finds and selects fonts --- don't be too surprised if a font invocation in one engine needs correction to work in the other.
+
+
+\subsection{By font name}
+
+Fonts known to \LuaTeX\ or \XeTeX\ may be loaded by their standard names as
+you'd speak them out loud, such as \emph{Times New Roman} or
+\emph{Adobe Garamond}.
+`Known to' in this case generally means `exists in a standard fonts location'
+such as |~/Library/Fonts| on \MacOSX, or |C:\Windows\Fonts| on Windows.
+In \LuaTeX, fonts found in the \textsc{texmf} tree can also be loaded by name.
+In \XeTeX, fonts found in the \textsc{texmf} tree can be loaded in Windows and Linux,
+but not on \MacOSX.
+
+The simplest example might be something like
+\begin{Verbatim}
+ \setmainfont{Cambria}[ ... ]
+\end{Verbatim}
+in which the bold and italic fonts will be found automatically
+(if they exist) and are immediately accessible with the usual
+\cs{textit} and \cs{textbf} commands.
+
+The `font name' can be found in various ways, such as by looking in the name listed in a application like \emph{Font Book} on Mac~OS~X.
+Alternatively, \TeX{}Live contains the \texttt{otfinfo} command line program, which can query this information; for example:
+\begin{Verbatim}
+ otfinfo -i `kpsewhich lmroman10-regular.otf`
+\end{Verbatim}
+results in a line that reads:
+\begin{Verbatim}
+ Preferred family: Latin Modern Roman
+\end{Verbatim}
+(The `preferred family' name is usually better than the `family' name.)
+
+\paragraph{\LuaTeX\ users only}
+In order to load fonts by their name rather than by their filename (\eg,
+`Latin Modern Roman' instead of `ec-lmr10'), you may need to run the script
+\texttt{luaotfload-tool}, which is distributed with the \pkg{luaotfload}
+package. Note that if you do not execute this script beforehand, the first
+time you attempt to typeset the process will pause for (up to) several
+minutes. (But only the first time.)
+Please see the \pkg{luaotfload} documentation for more information.
+
+
+\subsection{By file name}
+\label{sec:by-file-name}
+
+\XeTeX\ and \LuaTeX\ also allow fonts to be loaded by file name instead of font name.
+When you have a very large collection of fonts, you will sometimes not
+wish to have them all installed in your system's font directories.
+In this case, it is more convenient to load them from a different location on your disk.
+This technique is also necessary in \XeTeX\ when loading OpenType fonts that are present within your \TeX\ distribution, such as \path{/usr/local/texlive/2013/texmf-dist/fonts/opentype/public}.
+Fonts in such locations are visible to \XeTeX\ but cannot be loaded by font name, only file name; \LuaTeX\ does not have this restriction.
+
+When selecting fonts by file name, any font that can be found in the default
+search paths may be used directly (including in the current directory)
+without having to explicitly define the location of the font file on disk.
+
+Fonts selected by filename must include bold and italic variants explicitly,
+unless a \texttt{.fontspec} file is supplied for the font family (see \ref{sec:fontspecfile}).
+We'll give some first examples specifying everything explicitly:
+\begin{Verbatim}
+ \setmainfont{texgyrepagella-regular.otf}[
+ BoldFont = texgyrepagella-bold.otf ,
+ ItalicFont = texgyrepagella-italic.otf ,
+ BoldItalicFont = texgyrepagella-bolditalic.otf ]
+\end{Verbatim}
+\pkg{fontspec} knows that the font is to be selected by file name by the
+presence of the `|.otf|' extension.
+An alternative is to specify the extension separately, as shown following:
+\begin{Verbatim}
+ \setmainfont{texgyrepagella-regular}[
+ Extension = .otf ,
+ BoldFont = texgyrepagella-bold ,
+ ... ]
+\end{Verbatim}
+If desired, an abbreviation can be applied to the font names based on the
+mandatory `font name' argument:
+\begin{Verbatim}
+ \setmainfont{texgyrepagella}[
+ Extension = .otf ,
+ UprightFont = *-regular ,
+ BoldFont = *-bold ,
+ ... ]
+\end{Verbatim}
+In this case `texgyrepagella' is no longer the name of an actual font,
+but is used to construct the font names for each shape;
+the |*| is replaced by `texgyrepagella'.
+Note in this case that |UprightFont| is required for constructing the font
+name of the normal font to use.
+
+To load a font that is not in one of the default search paths, its location
+in the filesystem must be specified with the |Path| feature:
+\begin{Verbatim}
+ \setmainfont{texgyrepagella}[
+ Path = /Users/will/Fonts/ ,
+ UprightFont = *-regular ,
+ BoldFont = *-bold ,
+ ... ]
+\end{Verbatim}
+Note that \XeTeX\ and \LuaTeX\ are able to load the font without giving an
+extension, but \pkg{fontspec} must know to search for the file; this can be
+indicated by using the |Path| feature without an argument:
+\begin{Verbatim}
+ \setmainfont{texgyrepagella-regular}[
+ Path, BoldFont = texgyrepagella-bold,
+ ... ]
+\end{Verbatim}
+My preference is to always be explicit and include the extension; this also allows \pkg{fontspec} to automatically identify that the font should be loaded by filename.
+
+In previous versions of the package, the |Path| feature was also provided under the alias |ExternalLocation|, but this latter name is now deprecated and should not be used for new documents.
+
+
+\subsection{By custom file name using a \texttt{.fontspec} file}
+\label{sec:fontspecfile}
+
+When \pkg{fontspec} is first asked to load a font, a font settings file is searched
+for with the name `\meta{fontname}\texttt{.fontspec}'.\footnote{Located in the current folder or within a standard \texttt{texmf} location.}
+If you want to \emph{disable} this feature on a per-font basis, use the \feat{IgnoreFontspecFile} font option.
+
+The contents of this file can be used to specify font shapes and font features without having to have this information present within each document.
+Therefore, it can be more flexible than the alternatives listed above.
+
+When searching for this \texttt{.fontspec} file, \meta{fontname} is stripped of spaces and file extensions are omitted.
+For example, given |\setmainfont{TeX Gyre Adventor}|, the \texttt{.fontspec} file would be
+called \texttt{TeXGyreAdventor.fontspec}.
+If you wanted to transparently load options for |\setmainfont{texgyreadventor-regular.otf}|, the configuration
+file would be \texttt{texgyreadventor-regular.fontspec}.
+
+N.B. that while spaces are stripped, the lettercase of the names should match.
+
+This mechanism can be used to define custom names or aliases for your font collections.
+The syntax within this file follows from the \cs{defaultfontfeatures}, defined in more detail later but mirroring the standard \pkg{fontspec} font loading syntax.
+As an example, suppose we're defining a font family to be loaded with \verb|\setmainfont{My Charis}|.
+The corresponding \texttt{MyCharis.fontspec} file would contain, say,
+\begin{Verbatim}
+ \defaultfontfeatures[My Charis]
+ {
+ Extension = .ttf ,
+ UprightFont = CharisSILR,
+ BoldFont = CharisSILB,
+ ItalicFont = CharisSILI,
+ BoldItalicFont = CharisSILBI,
+ % <any other desired options>
+ }
+\end{Verbatim}
+The optional argument to \cs{defaultfontfeatures} must exactly match that requested by the font loading command (\verb|\setmainfont|, etc.) --- in particular note that spaces are significant here, so |\setmainfont{MyCharis}| will not `see' the default font feature setting within the \texttt{.fontspec} file.
+
+Finally, note that options for individual font faces can also be defined in this way.
+To continue the example above, here we colour the different faces:
+\begin{Verbatim}
+ \defaultfontfeatures[CharisSILR]{Color=blue}
+ \defaultfontfeatures[CharisSILB]{Color=red}
+\end{Verbatim}
+Such configuration lines could be stored either inline inside \texttt{My Charis.fontspec}
+or within their own \texttt{.fontspec} files; in this way, \pkg{fontspec} is designed to
+handle `nested' configuration options.
+
+Where \cs{defaultfontfeatures} is being used to specify font faces by a custom name,
+the \feat{Font} feature is used to set the filename of the font face. For example:
+\begin{Verbatim}
+ \defaultfontfeatures[charis]
+ {
+ UprightFont = charis-regular,
+ % <other desired options for all font faces in the family>
+ }
+
+ \defaultfontfeatures[charis-regular]
+ {
+ Font = CharisSILR
+ % <other desired options just for the `upright' font>
+ }
+\end{Verbatim}
+The \pkg{fontspec} interface here is designed to be flexible to accomodate a variety
+of use cases; there is more than one way to achieve the same outcome when font faces are
+collected together into a larger font family.
+
+
+\subsection{Querying whether a font `exists'}
+
+\cmdbox{
+ \CMD{\string\IfFontExistsTF}\marg{font name}\marg{true branch}\marg{false branch}
+}
+
+The conditional \cs{IfFontExistsTF} is provided to test whether the \meta{font name} exists or is loadable.
+If it is, the \meta{true branch} code is executed; otherwise, the \meta{false branch} code is.
+
+This command can be slow since the engine may resort to scanning the filesystem for a missing font.
+Nonetheless, it has been a popular request for users who wish to define `fallback fonts' for their documents for greater portability.
+
+In this command, the syntax for the \meta{font name} is a restricted/simplified version of the font loading syntax used for \cs{fontspec} and so on.
+Fonts to be loaded by filename are detected by the presence of an appropriate extension (|.otf|, etc.), and paths should be included inline.
+E.g.:
+\begin{Verbatim}
+ \IfFontExistsTF{cmr10}{T}{F}
+ \IfFontExistsTF{Times New Roman}{T}{F}
+ \IfFontExistsTF{texgyrepagella-regular.otf}{T}{F}
+ \IfFontExistsTF{/Users/will/Library/Fonts/CODE2000.TTF}{T}{F}
+\end{Verbatim}
+
+The \cs{IfFontExistsTF} command is a synonym for the programming interface function \cs{fontspec_font_if_exist:nTF} (\vref{sec:api}).
+
+
+
+\section{Commands to select font families}
+
+For cases when a specific font with a specific
+feature set is going to be re-used many times in a document, it is inefficient
+to keep calling \cs{fontspec} for every use. While the \cs{fontspec} command does not define
+a new font instance after the first call, the feature options must still be
+parsed and processed.
+
+For this reason, new commands can be created for loading a particular font
+family with the \cmd\newfontfamily\ command and variants,
+outlined in \vref{sec:main-cmd} and demonstrated in \exref{nff}.
+This macro should be used to create commands that would be used in
+the same way as \cmd\rmfamily, for example.
+If you would like to create a command that only changes the font
+inside its argument (i.e., the same behaviour as \cs{emph}) define it using regular \LaTeX\
+commands:
+\begin{Verbatim}
+ \newcommand\textnote[1]{{\notefont #1}}
+ \textnote{This is a note.}
+\end{Verbatim}
+Note that the double braces are intentional; the inner pair is used to
+delimit the scope of the font change.
+
+\begin{Lexample}{nff}{Defining new font families.}
+ \newfontfamily\notefont{Kurier}
+ \notefont This is a \emph{note}.
+\end{Lexample}
+
+\emph{Comment for advanced users:}
+The commands defined by \cs{newfontfamily} (and \cs{newfontface}; see next section) include
+their encoding information, so even if the document is set to use a
+legacy \TeX\ encoding, such commands will still work correctly. For example,
+\begin{Verbatim}
+\documentclass{article}
+\usepackage{fontspec}
+\newfontfamily\unicodefont{Lucida Grande}
+\usepackage{mathpazo}
+\usepackage[T1]{fontenc}
+\begin{document}
+A legacy \TeX\ font. {\unicodefont A unicode font.}
+\end{document}
+\end{Verbatim}
+
+
+\section{Commands to select single font faces}
+
+\cmdbox{%
+ \CMD{\string\newfontface}\meta{cmd}\marg{font}\oarg{font features}\\
+ \CMD{\string\setfontface}{\color[gray]{0.5}\meta{cmd}\marg{font}\oarg{font features}}\\
+ \CMD{\string\renewfontface}{\color[gray]{0.5}\meta{cmd}\marg{font}\oarg{font features}}\\
+ \CMD{\string\providefontface}{\color[gray]{0.5}\meta{cmd}\marg{font}\oarg{font features}}
+}
+
+Sometimes only a specific font face is desired, without accompanying italic or bold variants
+being automatically selected.
+This is common when selecting a fancy italic font, say, that has swash features unavailable
+in the upright forms. \cmd\newfontface\ is used for this purpose, shown
+in \exref{nfface}, which is repeated in \vref{sec:contextuals}.
+
+\begin{Xexample}{nfface}{Defining a single font face.}
+ \newfontface\fancy{Hoefler Text Italic}%
+ [Contextuals={WordInitial,WordFinal}]
+ \fancy where is all the vegemite
+ % \emph, \textbf, etc., all don't work
+\end{Xexample}
+
+
+\subsection{More control over font shape selection}
+\label{sec:bfitfonts}
+
+\cmdbox{
+ \feat{BoldFont} = \meta{font name} \\
+ \feat{ItalicFont} = \meta{font name} \\
+ \feat{~BoldItalicFont} = \meta{font name} \\
+ \feat{SlantedFont} = \meta{font name} \\
+ \feat{BoldSlantedFont} = \meta{font name} \\
+ \feat{SmallCapsFont} = \meta{font name} \\
+ \feat{UprightFont} = \meta{font name}
+}
+
+The automatic bold, italic, and bold italic font selections will not be
+adequate for the needs of every font: while some fonts mayn't even
+have bold or italic shapes, in which case a skilled (or lucky)
+designer may be able to chose well-matching accompanying shapes from
+a different font altogether, others can have a range of bold and
+italic fonts to chose among. The \feat{BoldFont} and
+\feat{ItalicFont} features are provided for these situations. If only
+one of these is used, the bold italic font is requested as the
+default from the \emph{new} font. See \exref{bff}.
+
+\begin{Xexample}{bff}{Explicit selection of the bold font.}
+ \fontspec{Helvetica Neue UltraLight}%
+ [BoldFont={Helvetica Neue}]
+ Helvetica Neue UltraLight \\
+ {\itshape Helvetica Neue UltraLight Italic} \\
+ {\bfseries Helvetica Neue } \\
+ {\bfseries\itshape Helvetica Neue Italic} \\
+\end{Xexample}
+
+If a bold italic shape is not defined, or you want to specify
+\emph{both} custom bold and italic shapes, the \feat{BoldItalicFont}
+feature is provided.
+
+
+
+\subsubsection{Small caps and slanted font shapes}
+
+When a font family has both slanted \emph{and} italic shapes, these may be specified separately using the analogous features \feat{SlantedFont} and \feat{BoldSlantedFont}.
+Without these, however, the \LaTeX\ font switches for slanted (\cs{textsl}, \cs{slshape}) will default to the italic shape.
+
+For modern OpenType fonts, small caps glyphs are included within a fontface and \pkg{fontspec} will automatically detect them
+for use with the \cs{textsc} and \cs{scshape} commands.
+Pre-OpenType, it was common for font families to be distributed with small caps glyphs in separate fonts, due to the limitations on the number of glyphs allowed in the PostScript Type~1 format.
+Such fonts may be used by declaring the \feat{SmallCapsFont} of the family you are specifying:
+\begin{Verbatim}
+ \setmainfont{Minion MM Roman}[
+ SmallCapsFont={Minion MM Small Caps & Oldstyle Figures}
+ ]
+ Roman 123 \\ \textsc{Small caps 456}
+\end{Verbatim}
+In fact, this example is overly simplistic since it does not cover the other shapes in a font family.
+You should specify the small caps font for each individual bold and italic shape as in
+\begin{Verbatim}
+ \setmainfont{ <upright> }[
+ UprightFeatures = { SmallCapsFont={ <sc> } } ,
+ BoldFeatures = { SmallCapsFont={ <bf sc> } } ,
+ ItalicFeatures = { SmallCapsFont={ <it sc> } } ,
+ BoldItalicFeatures = { SmallCapsFont={ <bf it sc> } } ,
+ ]
+ Roman 123 \\ \textsc{Small caps 456}
+\end{Verbatim}
+For most modern fonts that have small caps as a font feature, this level of
+control isn't generally necessary.
+
+All of the bold, italic, and small caps fonts can be loaded with different
+font features from the main font. See \ref{sec:bfit-feat} for details.
+When an OpenType font is selected for |SmallCapsFont|, the small caps
+font feature is \emph{not} automatically enabled. In this case, users
+should write instead, if necessary,
+\begin{Verbatim}
+ \setmainfont{...}[
+ SmallCapsFont={...},
+ SmallCapsFeatures={Letters=SmallCaps},
+ ]
+\end{Verbatim}
+
+\subsection{Specifically choosing the \NFSS\ family}
+
+In \LaTeX's \NFSS, font families are defined with names such as `\texttt{ppl}' (Palatino), `\texttt{lmr}' (Latin Modern Roman), and so on, which are selected with the \cs{fontfamily} command:
+\begin{Verbatim}
+ \fontfamily{ppl}\selectfont
+\end{Verbatim}
+In \pkg{fontspec}, the family names are auto-generated based on the fontname of the font; for example, writing |\fontspec{Times New Roman}| for the first time would generate an internal font family name of `\texttt{TimesNewRoman(1)}'.
+Please note that you should not rely on the name that is generated.
+
+In certain cases it is desirable to be able to choose this internal font family name so it can be re-used elsewhere for interacting with other packages that use the \LaTeX's font selection interface; an example might be
+\begin{Verbatim}
+ \usepackage{fancyvrb}
+ \fvset{fontfamily=myverbatimfont}
+\end{Verbatim}
+To select a font for use in this way in \pkg{fontspec} use the \feat{NFSSFamily} feature:\footnote{Thanks to Luca Fascione for the example and motivation for finally implementing this feature.}
+\begin{Verbatim}
+ \newfontfamily\verbatimfont{Inconsolata}[NFSSFamily=myverbatimfont]
+\end{Verbatim}
+It is then possible to write commands such as:
+\begin{Verbatim}
+ \fontfamily{myverbatimfont}\selectfont
+\end{Verbatim}
+which is essentially the same as writing |\verbatimfont|, or to go back to the orginal example:
+\begin{Verbatim}
+ \fvset{fontfamily=myverbatimfont}
+\end{Verbatim}
+Only use this feature when necessary; the in-built font switching commands that \pkg{fontspec} generates (such as |\verbatimfont| in the example above) are recommended in all other cases.
+
+If you don't wish to explicitly set the \NFSS\ family but you would like to know what it is, an alternative mechanism for package writers is introduced as part of the \pkg{fontspec} programming interface; see the function \cs{fontspec_set_family:Nnn} for details (\vref{sec:api}).
+
+\subsection{Choosing additional \NFSS\ font faces}
+
+\LaTeX's font selection scheme (\NFSS) is more flexible than the \pkg{fontspec} interface discussed up until this point.
+It assigns to each font face a \emph{family} (discussed above), a \emph{series} such as bold or light or condensed, and a \emph{shape} such as italic or slanted or small caps.
+The \pkg{fontspec} features such as \feat{BoldFont} and so on all assign faces for the default series and shapes of the \NFSS, but it's not uncommon to have font families that have multiple weights and shapes and so on.
+
+If you set up a regular font family with the `standard four' (upright, bold, italic, and bold italic) shapes and then want to use, say, a light font for a certain document element, many users will be perfectly happy to use \cs{newfontface}\cs{\meta{switch}} and use the resulting font \cs{\meta{switch}}.
+In other cases, however, it is more convenient or even necessary to load additional fonts using additional \NFSS\ specifiers.
+
+\cmdbox{
+ \texttt{FontFace = }\marg{series}\marg{shape}
+ \texttt{\char`\{} \texttt{Font = }\meta{font name} \texttt, \meta{features} \texttt{\char`\}} \\
+ \texttt{FontFace = }\marg{series}\marg{shape}\marg{font name}
+}
+
+The font thus specified will inherit the font features of the main font, with optional additional \meta{features} as requested.
+(Note that the optional \marg{features} argument is still surrounded with curly braces.)
+Multiple \feat{FontFace} commands may be used in a single declaration to specify multiple fonts.
+As an example:
+\begin{Verbatim}
+ \setmainfont{font1.otf}[
+ FontFace = {c}{\shapedefault}{ font2.otf } ,
+ FontFace = {c}{m}{ Font = font3.otf , Color = red }
+ ]
+\end{Verbatim}
+Writing |\fontseries{c}\selectfont| will result in |font2| being selected, which then followed by |\fontshape{m}\selectfont| will result in |font3| being selected (in red).
+A font face that is defined in terms of a different series but an upright shape (|\shapedefault|, as shown above) will attempt to find a matching small caps feature and define that face as well.
+Conversely, a font face defined in terms of a non-standard font shape will not.
+
+There are some standards for choosing shape and series codes; the \LaTeXe\ font selection guide\footnote{\texttt{texdoc fntguide}} has a comprehensive listing.
+
+The \feat{FontFace} command also interacts properly with the \feat{SizeFeatures} command as follows: (nonsense set of font selection choices)
+\begin{Verbatim}
+ FontFace = {c}{n}{
+ Font = Times ,
+ SizeFeatures = {
+ { Size = -10 , Font = Georgia } ,
+ { Size = 10-15} , % default "Font = Times"
+ { Size = 15- , Font = Cochin } ,
+ },
+ },
+\end{Verbatim}
+Note that if the first \feat{Font} feature is omitted then each size needs its own inner \feat{Font} declaration.
+
+\subsubsection{An example for \cs{strong}}
+\label{sec:strong-example}
+
+If you wanted to set up a font family to allow nesting of the \cs{strong}
+to easily access increasing font weights, you might use a declaration along the following lines:
+\begin{Verbatim}
+\setmonofont{SourceCodePro}[
+ Extension = .otf ,
+ UprightFont = *-Light ,
+ BoldFont = *-Regular ,
+ FontFace = {k}{n}{*-Black} ,
+]
+\strongfontdeclare{\bfseries,\fontseries{k}\selectfont}
+\end{Verbatim}
+
+Further `syntactic sugar' is planned to make this process somewhat easier.
+
+
+\subsection{Math(s) fonts}
+
+When \cmd\setmainfont, \cmd\setsansfont\ and \cmd\setmonofont\ are used in the
+preamble, they also define the fonts to be used in maths mode inside the
+\cmd\mathrm-type commands. This only occurs in the preamble because \LaTeX\
+freezes the maths fonts after this stage of the processing. The \pkg{fontspec}
+package must also be loaded after any maths font packages (\eg, \pkg{euler})
+to be successful. (Actually, it is \emph{only} \pkg{euler} that is the
+problem.\note{Speaking of \pkg{euler}, if you want to use its
+\texttt{[mathbf]} option, it won't work, and you'll need to put this after
+\pkg{fontspec} is loaded instead:
+\ttfamily\cmd\AtBeginDocument\char`\{\cmd\DeclareMathAlphabet\cmd\mathbf\char`\{U\char`\}\char`\{eur\char`\}\char`\{b\char`\}\char`\{n\char`\}\char`\}})
+
+Note that \pkg{fontspec} will not change the font for general mathematics;
+only the upright and bold shapes will be affected.
+To change the font used for the mathematical symbols, see either the
+\pkg{mathspec} package or the \pkg{unicode-math} package.
+
+Note that you may find that loading some maths packages won't be as smooth as
+you expect since \pkg{fontspec} (and \XeTeX\ in general) breaks many of the
+assumptions of \TeX\ as to where maths characters and accents can be found.
+Contact me if you have troubles, but I can't guarantee to be able to fix any
+incompatibilities. The Lucida and Euler maths fonts should be fine; for all
+others keep an eye out for problems.
+
+\cmdbox{
+ \cmd{\setmathrm}\marg{font name}\oarg{font features} \\
+ \cmd{\setmathsf}\marg{font name}\oarg{font features} \\
+ \cmd{\setmathtt}\marg{font name}\oarg{font features} \\
+ \cmd{\setboldmathrm}\marg{font name}\oarg{font features}
+}
+
+However, the default text fonts may not necessarily be the ones you
+wish to use when typesetting maths (especially with the use of fancy
+ligatures and so on). For this reason, you may optionally use the
+commands above (in the same way as our other
+\cmd\fontspec-like commands) to explicitly state which fonts to use
+inside such commands as \cmd\mathrm. Additionally, the
+\cmd\setboldmathrm\ command allows you define the font used for
+\cmd\mathrm\ when in bold maths mode (which is activated with, among
+others, \cmd\boldmath).
+
+For example, if you were using Optima with the Euler maths font, you
+might have this in your preamble:
+\begin{Verbatim}
+ \usepackage{mathpazo}
+ \usepackage{fontspec}
+ \setmainfont{Optima}
+ \setmathrm{Optima}
+ \setboldmathrm[BoldFont={Optima ExtraBlack}]{Optima Bold}
+\end{Verbatim}
+These commands are compatible with the \pkg{unicode-math} package.
+Having said that, \pkg{unicode-math} also defines a more general way of defining fonts to use in maths mode, so you can ignore this subsection if you're already using that package.
+
+
+\section{Miscellaneous font selecting details}
+
+\paragraph{The optional argument --- from v2.4}
+For the first decade of \pkg{fontspec}'s life, optional font features were selected with a bracketed argument before the font name, as in:
+\begin{Verbatim}
+ \setmainfont[
+ lots and lots ,
+ and more and more ,
+ an excessive number really ,
+ of font features could go here
+ ]{myfont.otf}
+\end{Verbatim}
+This always looked like ugly syntax to me, because the most important detail --- the name of the font --- was tucked away at the end.
+The order of these arguments has now been reversed:
+\begin{Verbatim}
+ \setmainfont{myfont.otf}[
+ lots and lots ,
+ and more and more ,
+ an excessive number really ,
+ of font features could go here
+ ]
+\end{Verbatim}
+I hope this doesn't cause any problems.
+\begin{enumerate}
+ \item Backwards compatibility has been preserved, so either input method works.
+ \item In fact, you can write
+ \begin{Verbatim}
+ \fontspec[Ligatures=Rare]{myfont.otf}[Color=red]
+ \end{Verbatim}
+ if you really felt like it and both sets of features would be applied.
+
+\end{enumerate}
+
+\paragraph{Spaces}
+\cmd\fontspec\ and \cmd\addfontfeatures\ ignore trailing spaces as
+if it were a `naked' control sequence; \eg, `|M. \fontspec{...} N|' and
+`|M. \fontspec{...}N|' are the same.
+
+\end{document}
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-intro.tex b/macros/unicodetex/latex/fontspec/fontspec-doc-intro.tex
new file mode 100644
index 0000000000..7f32adb009
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-intro.tex
@@ -0,0 +1,196 @@
+%%^^A%% fontspec-doc-intro.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\showexamplesfalse
+\begin{document}
+
+\part{Getting started}
+
+\section{History}
+
+This package began life as a \LaTeX\ interface to select system-installed
+\MacOSX\ fonts in \name{Jonathan Kew}'s \XeTeX, the first widely-used
+Unicode extension to \TeX. Over time, \XeTeX\ was extended to support OpenType
+fonts and then was ported into a cross-platform program to run also on Windows
+and Linux.
+
+More recently, \LuaTeX\ is fast becoming the \TeX\ engine of the day; it
+supports Unicode encodings and OpenType fonts and opens up the internals of
+\TeX\ via the Lua programming language. Hans Hagen's Con\TeX t Mk.\,IV is a
+re-write of his powerful typesetting system, taking full advantage of
+\LuaTeX's features including font support; a kernel of his work in this area
+has been extracted to be useful for other \TeX\ macro systems as well, and
+this has enabled \pkg{fontspec} to be adapted for \LaTeX\ when run with the
+\LuaTeX\ engine.
+
+
+
+\section{Introduction}
+
+The \pkg{fontspec} package allows users of either \XeTeX\ or \LuaTeX\ to
+load OpenType fonts in a \LaTeX\ document. No font installation is necessary,
+and font features can be selected and used as desired throughout the document.
+
+Without \pkg{fontspec}, it is necessary to write cumbersome font definition
+files for \LaTeX, since \LaTeX's font selection scheme (known as the
+`\textsc{nfss}') has a lot going on behind the scenes to allow easy
+commands like \cmd\emph\ or \cmd\bfseries. With an uncountable number of
+fonts now available for use, however, it becomes less desirable to have to
+write these font definition (|.fd|) files for every font one wishes to use.
+
+Because \pkg{fontspec} is designed to work in a variety of modes, this
+user documentation is split into separate sections that are designed to be
+relatively independent. Nonetheless, the basic functionality all behaves in
+the same way, so previous users of \pkg{fontspec} under \XeTeX\ should have
+little or no difficulty switching over to \LuaTeX.
+
+This manual can get rather in-depth, as there are a lot of details
+to cover. See the documents \path{fontspec-example.tex} for a complete minimal example
+to get started quickly.
+
+
+\subsection{Acknowledgements}
+
+This package could not have been possible without the early and continued support
+the author of \XeTeX, Jonathan Kew. When I started this package, he steered
+me many times in the right direction.
+
+I've had great
+feedback over the years on feature requests, documentation queries, bug reports, font suggestions, and so on from lots of people all around the world.
+Many thanks to you all.
+
+Thanks to David Perry and Markus B\"ohning for numerous documentation
+improvements and David Perry again for contributing the text for one of the
+sections of this manual.
+
+Special thanks to Khaled Hosny, who was the driving force behind the support for \LuaLaTeX, ultimately leading to version 2.0 of the package.
+
+
+
+\section{Package loading and options}
+
+For basic use, no package options are required:
+\begin{Verbatim}
+ \usepackage{fontspec}
+\end{Verbatim}
+Package options will be introduced below; some preliminary details are discussed first.
+
+
+\subsection{Font encodings}
+
+The (default) \texttt{tuenc} package option switches the \textsc{nfss} font encoding to \texttt{TU}.
+\texttt{TU} is a new Unicode font encoding, intended for both \XeTeX\ and \LuaTeX\ engines, and automatically contains support for symbols covered by \LaTeX's traditional \texttt{T1} and \texttt{TS1} font encodings (for example, |\%|, |\textbullet|, |\"u|, and so on).
+Some additional features are provided by \pkg{fontspec} to customise some encoding details; see Part~\vref{part:enc} for further details.
+
+Pre-2017 behaviour can be achieved with the \texttt{euenc} package option.
+This selects the \texttt{EU1} or \texttt{EU2} encoding (\XeTeX/\LuaTeX, resp.) and loads the \pkg{xunicode} package for symbol support.
+Package authors and users who have referred explicitly to the encoding names \texttt{EU1} or \texttt{EU2} should update their code or documents.
+(See internal variable names described in \vref{sec:api} for how to do this properly.)
+
+
+\subsection{Maths fonts adjustments}
+By default, \pkg{fontspec} adjusts \LaTeX's default maths setup in order to maintain the correct Computer Modern symbols when the roman font changes.
+However, it will attempt to avoid doing this if another maths font package is loaded (such as \pkg{mathpazo} or the \pkg{unicode-math} package).
+
+If you find that \pkg{fontspec} is incorrectly changing the maths font when it shouldn't be, apply the |no-math| package option to manually suppress its behaviour here.
+
+
+\subsection{Configuration}
+\label{sec:config}
+
+If you wish to customise any part of the
+\pkg{fontspec} interface, this should be done by creating your own
+\texttt{fontspec.cfg} file,
+which will be automatically loaded if it is found by \XeTeX\ or \LuaTeX.
+A |fontspec.cfg| file is distributed with \pkg{fontspec} with a small number of defaults set up within it.
+
+To customise \pkg{fontspec} to your liking, use the standard |.cfg| file as a starting point or write your own from scratch, then either place it in the same folder as the main document for isolated cases, or in a location
+that \XeTeX\ or \LuaTeX\ searches by default; \eg\ in Mac\TeX: \path{~/Library/texmf/tex/latex/}.
+
+The package option |no-config| will suppress the loading of the |fontspec.cfg| file under all circumstances.
+
+
+\subsection{Warnings}
+\label{sec:quiet-warnings}
+
+This package can give some warnings that can be harmless if you know what
+you're doing. Use the |quiet| package option to write these warnings to the
+transcript (\texttt{.log}) file instead.
+
+Use the |silent| package option to completely suppress these warnings if you
+don't even want the |.log| file cluttered up.
+
+
+
+\section{Interaction with \LaTeXe\ and other packages}
+
+This section documents some areas of adjustment that \pkg{fontspec} makes
+to improve default behaviour with \LaTeXe\ and third-party packages.
+
+
+
+\subsection{Commands for old-style and lining numbers}
+
+\DescribeMacro{\oldstylenums}
+\DescribeMacro{\liningnums}
+\LaTeX's definition of \cs{oldstylenums} relies on strange font encodings.
+We provide a \pkg{fontspec}-compatible alternative and while we're at it
+also throw in the reverse option as well. Use \cs{oldstylenums}\marg{text}
+to explicitly use old-style (or lowercase) numbers in \meta{text}, and
+the reverse for \cs{liningnums}\marg{text}.
+
+
+\subsection{Italic small caps}
+
+Support now provided by \LaTeXe\ in 2020.
+
+
+\subsection{Emphasis and nested emphasis}
+
+Support now provided by \LaTeXe\ in 2020.
+
+
+\subsection{Strong emphasis}
+
+\DescribeMacro{\strong}
+\DescribeMacro{\strongenv}
+The \cs{strong} macro is used analogously to \cs{emph} but produces variations in weight.
+If you need it in environment form, use |\begin{strongenv}...\end{strongenv}|.
+
+As with emphasis, this font-switching command is intended to move through a range
+of font weights. For example, if the fonts are set up correctly it allows usage such as
+|\strong{...\strong{...}}| in which each nested \cs{strong} macro increases the
+weight of the font.
+
+\DescribeMacro{\strongfontdeclare}
+Currently this feature set is somewhat experimental and there is no syntactic sugar
+to easily define a range of font weights using \pkg{fontspec} commands.
+Use, say, the following to define first bold and then black (|k|) font faces for \cs{strong}:
+\begin{Verbatim}
+ \strongfontdeclare{\bfseries,\fontseries{k}\selectfont}
+\end{Verbatim}
+
+\DescribeMacro{\strongreset}
+If too many levels of \cs{strong} are reached, \cs{strongreset} is inserted.
+By default this is a no-op and the font will simply remain the same.
+Use \cs{renewcommand}\cs{strongreset}|{\mdseries}| to start again from the beginning if desired.
+
+An example for setting up a font family for use with \cs{strong} is discussed in \vref{sec:strong-example}.
+
+\end{document}
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-luatex.tex b/macros/unicodetex/latex/fontspec/fontspec-doc-luatex.tex
new file mode 100644
index 0000000000..7365160b49
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-luatex.tex
@@ -0,0 +1,94 @@
+%%^^A%% fontspec-doc-luatex.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\showexamplesfalse
+\begin{document}
+
+\part{\LuaTeX-only font features}
+\label{sec:luatex-features}
+
+\section{Different font technologies and shapers}
+\label{sec:renderer-luatex}
+
+\LuaTeX\ does not directly support any font rendering technologies out of the box, it
+requires additional functionality to be added to properly support and control technologies such as OpenType.
+
+Using the \feat{Renderer} feature, there are a number of options that \pkg{fontspec} can pass to the engine to control which font technology is being used.
+Pre-2019, there were two options provided by \pkg{luaotfload} that generally did not require user intervention.
+
+\begin{itemize}
+\item \feat{Renderer} = \opt{Node} : the default `mode' for typesetting OpenType fonts.
+\item \feat{Renderer} = \opt{Base} : a simplified mode useful only in a limited number of situations such as mathematics typesetting.
+\end{itemize}
+
+From 2019 the possibility of using the Harfbuzz text shaping engine within \LuaTeX\ has
+been developed by Khaled Hosny. When running a suitable \LuaTeX\ engine with Harfbuzz support, \pkg{fontspec} provides the following options:
+
+\begin{itemize}
+\item \feat{Renderer} = \opt{Harfbuzz} : use the Harfbuzz engine without an explicit `shaper'.
+\item \feat{Renderer} = \opt{OpenType} : use the Harfbuzz engine with the OpenType shaper.
+\item \feat{Renderer} = \opt{AAT} : use the Harfbuzz engine with the AAT shaper.
+\item \feat{Renderer} = \opt{Graphite} : use the Harfbuzz engine with the Graphite shaper.
+\item \feat{Renderer} = \meta{foo} : use the Harfbuzz engine with the \meta{foo} shaper.
+\end{itemize}
+
+Support for the Harfbuzz renderer is preliminary and may be improved over time.
+Please treat the interface for Harfbuzz fonts as subject to change.
+
+
+\section{Custom font features}
+
+\LuaTeX, via the \pkg{luaotfload} package, allows the definition and re-definition of custom OpenType features for a selected font. This facility is particularly useful to implement custom substitutions or to disable unwanted but not all ligatures.
+
+Figure~\ref{fig:featurefile} shows an minimal example of this type of functionality.
+This example creates a new OpenType feature, \texttt{oneb}, which substitutes the glyph
+when typesetting `\texttt{1}' for the named glyph \texttt{one.ss01}. The glyph names
+are font specific and can be interrogated with third-party software such as \emph{FontForge}.
+
+A third-party collection of additional examples are maintained in the repository `\texttt{fonts-in-luatex}'\footnote{\url{https://github.com/mewtant/fonts-in-luatex}}.
+These examples are intended to correct or adjust font features in a range of commercial fonts and provide a good introduction to some of the possibilities that \LuaTeX\ affords.
+
+Please refer to the \LuaTeX/\pkg{luaotfload} documentation for more details.
+
+\begin{figure}
+\caption{An example of custom font features.}
+\label{fig:featurefile}
+\hrule
+\begin{Verbatim}
+\documentclass{article}
+\usepackage{fontspec}
+\directlua{
+ fonts.handlers.otf.addfeature {
+ name = "oneb",
+ type = "substitution",
+ data = {
+ ["1"] = "one.ss01",
+ }
+ }
+}
+\setmainfont{Vollkorn-Regular.otf}[RawFeature=+oneb]
+\begin{document}
+1234567890
+\end{document}
+\end{Verbatim}
+\hrule
+\end{figure}
+
+\end{document}
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
+
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-opentype.tex b/macros/unicodetex/latex/fontspec/fontspec-doc-opentype.tex
new file mode 100644
index 0000000000..fb08645abb
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-opentype.tex
@@ -0,0 +1,1478 @@
+%%^^A%% fontspec-doc-opentype.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\showexamplesfalse
+\begin{document}
+
+\part{OpenType}
+\label{sec:opentype-features}
+
+\section{Introduction}
+\label{sec:opentype-features-intro}
+
+OpenType fonts (and other `smart' font technologies such as AAT and Graphite) can change the appearance of text in many different ways.
+These changes are referred to as font features.
+When the user applies a feature~--- for example, small capitals~--- to a run of text, the code inside the font makes appropriate substitutions and small capitals appear in place of lowercase letters.
+However, the use of such features does not affect the underlying text.
+In our small caps example, the lowercase letters are still stored in the document; only the appearance has been changed by the OpenType feature.
+This makes it possible to search and copy text without difficulty.
+If the user selected a different font that does not support small caps, the `plain' lowercase letters would appear instead.
+
+Some OpenType features are required to support particular scripts, and these features are often applied automatically.
+The Indic scripts, for example, often require that characters be reshaped and reordered after they are typed by the user, in order to display them in the traditional ways that readers expect.
+Other features can be applied to support a particular language.
+The Junicode font for medievalists uses by default the Old English shape of the letter thorn, while in modern Icelandic thorn has a more rounded shape.
+If a user tags some text as being in Icelandic, Junicode will automatically change to the Icelandic shape through an OpenType feature that localises the shapes of letters.
+
+There are a large group of OpenType features, designed to support high quality typography a multitude of languages and writing scripts.
+Examples of some font features have already been shown in previous sections; the complete set of OpenType font features supported by \pkg{fontspec} is described below in \ref{sec:ot-feat}.
+
+The OpenType specification provides four-letter codes (e.g., \texttt{smcp} for small capitals) for each feature. The four-letter codes are given below along with the \pkg{fontspec} names for various features, for the benefit of people who are already familiar with OpenType. You can ignore the codes if they don't mean anything to you.
+
+
+\subsection{How to select font features}
+
+Font features are selected by a series of \meta{feature}=\meta{option}
+selections. Features are (usually) grouped logically; for example, all
+font features relating to ligatures are accessed by writing \verb|Ligatures={...}| with the appropriate argument(s), which could be \texttt{TeX}, \texttt{Rare}, etc., as shown below in \ref{sec:ot-feat-liga}.
+
+Multiple options may be given to
+any feature that accepts non-numerical input, although doing so will
+not always work. Some options will override others in generally
+obvious ways; \Verb|Numbers={OldStyle,Lining}| doesn't make much
+sense because the two options are mutually exclusive, and \XeTeX\
+will simply use the last option that is specified (in this case
+using \opt{Lining} over \opt{OldStyle}).
+
+If a feature or an option is requested that the font does not have,
+a warning is given in the console output. As mentioned in \vref{sec:quiet-warnings}
+these warnings can be suppressed by selecting the \texttt{[quiet]} package option.
+
+\subsection{How do I know what font features are supported by my fonts?}
+
+Although I've long desired to have a feature within \pkg{fontspec} to display the OpenType features within a font, it's never been high on my priority list.
+One reason for that is the existence of the document |opentype-info.tex|, which is available on \textsc{ctan} or typing |kpsewhich opentype-info.tex| in a Terminal window.
+Make a copy of this file and place it somewhere convenient.
+Then open it in your regular \TeX\ editor and change the font name to the font you'd like to query; after running through plain \XeTeX, the output \textsc{pdf} will look something like this:
+
+\begin{framed}
+
+%%% From OpenType-info.tex %%%
+\DeleteShortVerb\"
+\def\myfontname{[Asana-Math.otf]}
+\font\testfont="\myfontname/OT" at 10pt\relax
+
+\rightskip=0pt plus 1fil
+
+\font\titlefont=ec-lmssbx10 at 12pt
+\font\tenrm=ec-lmss10 at 9pt \tenrm
+\font\tentt=ec-lmtt10 at 9pt
+
+\def\fourcharcode#1{\begingroup
+ \count0=#1\count1=\count0
+ \ifnum\count0=0
+ $\langle$default$\rangle$%
+ \else
+ \tentt
+ '%
+ \divide\count0 by "1000000
+ \char\count0
+ \multiply\count0 by "1000000
+ \advance\count1 by -\count0
+ \count0=\count1
+ \divide\count0 by "10000
+ \char\count0
+ \multiply\count0 by "10000
+ \advance\count1 by -\count0
+ \count0=\count1
+ \divide\count0 by "100
+ \char\count0
+ \multiply\count0 by "100
+ \advance\count1 by -\count0
+ \ifnum\count1=32 \ \else \char\count1 \fi
+ '%
+ \fi
+ \endgroup
+}
+
+\newcount\scriptcount
+\newcount\scriptindex
+\newcount\scripttag
+\newcount\langcount
+\newcount\langindex
+\newcount\langtag
+\newcount\featurecount
+\newcount\featureindex
+\newcount\featuretag
+
+\leftline{\titlefont OpenType Layout features found in `\myfontname'}
+\nobreak
+
+\scriptcount=\XeTeXOTcountscripts\testfont
+\ifnum\scriptcount=0 \noindent None\par\fi
+
+\loop
+ \ifnum\scriptindex<\scriptcount
+ \smallskip
+ \scripttag=\XeTeXOTscripttag\testfont\scriptindex
+ \noindent script = \fourcharcode{\scripttag}\endgraf\nobreak
+ \langcount=\XeTeXOTcountlanguages\testfont\scripttag
+ \advance\langcount by 1 % one extra to get the default language system
+ {\loop
+ \langtag=\XeTeXOTlanguagetag\testfont\scripttag\langindex
+ \indent language = \fourcharcode{\langtag}\endgraf\nobreak
+ \featurecount=\XeTeXOTcountfeatures\testfont\scripttag\langtag
+ {\indent\indent \hangindent=3\parindent \hangafter=1 features = \loop
+ \featuretag=\XeTeXOTfeaturetag\testfont\scripttag\langtag\featureindex
+ \fourcharcode{\featuretag}
+ \advance\featureindex by 1
+ \ifnum\featureindex<\featurecount \repeat\endgraf}
+ \advance\langindex by 1
+ \ifnum\langindex<\langcount \medskip \repeat}
+ \advance\scriptindex by 1
+\repeat
+\end{framed}
+
+\noindent I intentionally picked a font above that by design contains few font features; `regular' text fonts such as Latin Modern Roman contain many more, and I didn't want to clutter up the document too much.
+After finding the scripts, languages, and features contained within the font, you'll then need to cross-check the OpenType tags with the `logical' names used by \pkg{fontspec}.
+
+\paragraph{otfinfo}
+Alternatively, and more simply, you can use the command line tool |otfinfo|, which is distributed with \TeX{}Live.
+Simply type in a Terminal window, say:
+\begin{Verbatim}
+ otfinfo -f `kpsewhich lmromandunh10-oblique.otf`
+\end{Verbatim}
+which results in:
+\begin{Verbatim}[frame=single]
+aalt Access All Alternates
+cpsp Capital Spacing
+dlig Discretionary Ligatures
+frac Fractions
+kern Kerning
+liga Standard Ligatures
+lnum Lining Figures
+onum Oldstyle Figures
+pnum Proportional Figures
+size Optical Size
+tnum Tabular Figures
+zero Slashed Zero
+\end{Verbatim}
+
+
+\section{OpenType scripts and languages}\label{sec:ot}
+
+Fonts that include glyphs for various scripts and languages may contain different font features for the different character sets and languages they support, and different font features may behave differently depending on the script or language chosen.
+When multilingual fonts are used, it is important to select which language
+they are being used for, and more importantly what script is being used.
+
+The `script' refers to the alphabet in use; for example, both English
+and French use the Latin script. Similarly, the Arabic script can be used
+to write in both the Arabic and Persian languages.
+
+The
+\feat{Script} and \feat{Language} features are used to designate this information. The possible options are
+tabulated in \vref{tab:ot-scpt} and \vref{tab:ot-lang},
+respectively. When a script or language is requested that is not
+supported by the current font, a warning is printed in the console output.
+See \vref{sec:newscriptlang} for methods to create new \feat{Script} or \feat{Language}
+options if required.
+
+Because these font features can
+change which features are able to be selected for the font, the \feat{Script} and \feat{Language}
+settings are automatically selected
+by \pkg{fontspec} before all others, and, if \XeTeX\ is being used, will
+specifically select the \opt{OpenType}
+renderer for this font, as described in \vref{sec:renderer-xetex}.
+
+OpenType fonts can make available different font features depending on the Script and
+Language chosen.
+In addition, these settings can also set up their own font behaviour
+and glyph selection (one example is differences in style between some of the letters in the
+alphabet used for Bulgarian, Serbian, and Russian).
+The \pkg{fontspec} feature \feat{LocalForms} \texttt{=} \opt{Off} will disable some of
+these substitutions if desired for some reason.
+It is important to note that \feat{LocalForms} \texttt{=} \opt{On} is a default not of \pkg{fontspec}
+but of the underlying font shaping engines in both \XeTeX\ and \LuaTeX/\pkg{otfload}.
+
+
+\subsection{\feat{Script} and \feat{Language} examples}
+
+In the examples shown in \exref{script-lang},
+the Code2000 font\note{\url{http://www.code2000.net/}}
+is used to typeset various input texts with and without the OpenType Script
+applied for various alphabets.
+The text is only rendered correctly in the second case;
+many examples of incorrect diacritic spacing as
+well as a lack of contextual ligatures and rearrangement can be
+seen.
+Thanks to \name{Jonathan Kew}, \name{Yves Codet} and
+\name{Gildas Hamel} for their contributions towards these examples.
+
+\begin{Xexample}[firstline=14,lastline=23]{script-lang}{An example of various Scripts and Languages.}
+\def\testfeature#1#2{%^^A
+ \fontspec{\examplefont}#2 & \fontspec[#1]{\examplefont}#2\\[1ex]}
+\def \examplefont{CODE2000.TTF}
+\def \arabictext{العربي}
+\def \devanagaritext{हिन्दी}
+\def \bengalitext{লেখ}
+\def \gujaratitext{મર્યાદા-સૂચક નિવેદન}
+\def \malayalamtext{നമ്മുടെ പാരബര്യ}
+\def \gurmukhitext{ਆਦਿ ਸਚੁ ਜੁਗਾਦਿ ਸਚੁ}
+\def \tamiltext{தமிழ் தேடி}
+\def \hebrewtext{רִדְתָּֽהּ}
+\def \vietnamesetext{cấp số mỗi}
+\begin{tabular}{r@{\quad}l}
+ \testfeature{Script=Arabic}{\arabictext}
+ \testfeature{Script=Devanagari}{\devanagaritext}
+ \testfeature{Script=Bengali}{\bengalitext}
+ \testfeature{Script=Gujarati}{\gujaratitext}
+ \testfeature{Script=Malayalam}{\malayalamtext}
+ \testfeature{Script=Gurmukhi}{\gurmukhitext}
+ \testfeature{Script=Tamil}{\tamiltext}
+ \testfeature{Script=Hebrew}{\hebrewtext}
+ \def\examplefont{DoulosSILR.ttf}
+ \testfeature{Language=Vietnamese}{\vietnamesetext}
+\end{tabular}
+\end{Xexample}
+
+
+
+\begin{table}[!hbp]
+ \caption{Defined \opt{Script}s for OpenType fonts. Aliased names are shown in adjacent positions marked with red pilcrows ({\sffamily\textcolor{red}{\P}}).}
+ \label{tab:ot-scpt}
+\def\dup{\makebox[0pt][r]{\textcolor{red}{\P}}}
+\setlength\columnseprule{0pt}
+ \hrule
+ \begin{multicols}{4}\setlength\parindent{0pt}
+ \sffamily\scriptsize
+ Adlam \par
+ Ahom \par
+ Anatolian Hieroglyphs \par
+ Arabic \par
+ Armenian \par
+ Avestan \par
+ Balinese \par
+ Bamum \par
+ Bassa Vah \par
+ Batak \par
+ Bengali \par
+ Bhaiksuki \par
+ Bopomofo \par
+ Brahmi \par
+ Braille \par
+ Buginese \par
+ Buhid \par
+ Byzantine Music \par
+ Canadian Syllabics \par
+ Carian \par
+ Caucasian Albanian \par
+ Chakma \par
+ Cham \par
+ Cherokee \par
+ \dup CJK \par
+ \dup CJK Ideographic \par
+ Coptic \par
+ Cypriot Syllabary \par
+ Cyrillic \par
+ Default \par
+ Deseret \par
+ Devanagari \par
+ Duployan \par
+ Egyptian Hieroglyphs \par
+ Elbasan \par
+ Ethiopic \par
+ Georgian \par
+ Glagolitic \par
+ Gothic \par
+ Grantha \par
+ Greek \par
+ Gujarati \par
+ Gurmukhi \par
+ Hangul Jamo \par
+ Hangul \par
+ Hanunoo \par
+ Hatran \par
+ Hebrew \par
+ \dup Hiragana and Katakana \par
+ \dup Kana \par
+ Imperial Aramaic \par
+ Inscriptional Pahlavi \par
+ Inscriptional Parthian \par
+ Javanese \par
+ Kaithi \par
+ Kannada \par
+ Kayah Li \par
+ Kharosthi \par
+ Khmer \par
+ Khojki \par
+ Khudawadi \par
+ Lao \par
+ Latin \par
+ Lepcha \par
+ Limbu \par
+ Linear A \par
+ Linear B \par
+ Lisu \par
+ Lycian \par
+ Lydian \par
+ Mahajani \par
+ Malayalam \par
+ Mandaic \par
+ Manichaean \par
+ Marchen \par
+ \dup Math \par
+ \dup Maths \par
+ Meitei Mayek \par
+ Mende Kikakui \par
+ Meroitic Cursive \par
+ Meroitic Hieroglyphs \par
+ Miao \par
+ Modi \par
+ Mongolian \par
+ Mro \par
+ Multani \par
+ Musical Symbols \par
+ Myanmar \par
+ \dup N'Ko \par
+ \dup N'ko \par
+ Nabataean \par
+ Newa \par
+ Ogham \par
+ Ol Chiki \par
+ Old Italic \par
+ Old Hungarian \par
+ Old North Arabian \par
+ Old Permic \par
+ Old Persian Cuneiform \par
+ Old South Arabian \par
+ Old Turkic \par
+ \dup Oriya \par
+ \dup Odia \par
+ Osage \par
+ Osmanya \par
+ Pahawh Hmong \par
+ Palmyrene \par
+ Pau Cin Hau \par
+ Phags-pa \par
+ Phoenician \par
+ Psalter Pahlavi \par
+ Rejang \par
+ Runic \par
+ Samaritan \par
+ Saurashtra \par
+ Sharada \par
+ Shavian \par
+ Siddham \par
+ Sign Writing \par
+ Sinhala \par
+ Sora Sompeng \par
+ Sumero-Akkadian Cuneiform \par
+ Sundanese \par
+ Syloti Nagri \par
+ Syriac \par
+ Tagalog \par
+ Tagbanwa \par
+ Tai Le \par
+ Tai Lu \par
+ Tai Tham \par
+ Tai Viet \par
+ Takri \par
+ Tamil \par
+ Tangut \par
+ Telugu \par
+ Thaana \par
+ Thai \par
+ Tibetan \par
+ Tifinagh \par
+ Tirhuta \par
+ Ugaritic Cuneiform \par
+ Vai \par
+ Warang Citi \par
+ Yi
+ \end{multicols}
+ \hrule
+\end{table}
+
+\begin{table}[p]
+ \vspace*{-3cm}
+ \hspace{-3cm}
+ \def\dup{\makebox[0pt][r]{\textcolor{red}{\P}}}
+ \begin{minipage}{\linewidth+4cm}
+ \caption{Defined \opt{Language}s for OpenType fonts. Aliased names are shown in adjacent positions marked with red pilcrows ({\sffamily\textcolor{red}{\P}}).}
+ \label{tab:ot-lang}
+ \setlength\columnseprule{0pt}
+ \hrule
+ \begin{multicols}{6}
+ \everypar{\setlength\parindent{0pt}\setlength\hangindent{2em}}
+ \sffamily\footnotesize\raggedright
+ Abaza \par
+ Abkhazian \par
+ Adyghe \par
+ Afrikaans \par
+ Afar \par
+ Agaw \par
+ Altai \par
+ Amharic \par
+ Arabic \par
+ Aari \par
+ Arakanese \par
+ Assamese \par
+ Athapaskan \par
+ Avar \par
+ Awadhi \par
+ Aymara \par
+ Azeri \par
+ Badaga \par
+ Baghelkhandi \par
+ Balkar \par
+ Baule \par
+ Berber \par
+ Bench \par
+ Bible Cree \par
+ Belarussian \par
+ Bemba \par
+ Bengali \par
+ Bulgarian \par
+ Bhili \par
+ Bhojpuri \par
+ Bikol \par
+ Bilen \par
+ Blackfoot \par
+ Balochi \par
+ Balante \par
+ Balti \par
+ Bambara \par
+ Bamileke \par
+ Breton \par
+ Brahui \par
+ Braj Bhasha \par
+ Burmese \par
+ Bashkir \par
+ Beti \par
+ Catalan \par
+ Cebuano \par
+ Chechen \par
+ Chaha Gurage \par
+ Chattisgarhi \par
+ Chichewa \par
+ Chukchi \par
+ Chipewyan \par
+ Cherokee \par
+ Chuvash \par
+ Comorian \par
+ Coptic \par
+ Cree \par
+ Carrier \par
+ Crimean Tatar \par
+ Church Slavonic \par
+ Czech \par
+ Danish \par
+ Dargwa \par
+ Woods Cree \par
+ German \par
+ Default \par
+ Dogri \par
+ Divehi \par
+ Djerma \par
+ Dangme \par
+ Dinka \par
+ Dungan \par
+ Dzongkha \par
+ Ebira \par
+ Eastern Cree \par
+ Edo \par
+ Efik \par
+ Greek \par
+ English \par
+ Erzya \par
+ Spanish \par
+ Estonian \par
+ Basque \par
+ Evenki \par
+ Even \par
+ Ewe \par
+ French Antillean \par
+ \dup Farsi \par
+ \dup Parsi \par
+ \dup Persian \par
+ Finnish \par
+ Fijian \par
+ Flemish \par
+ Forest Nenets \par
+ Fon \par
+ Faroese \par
+ French \par
+ Frisian \par
+ Friulian \par
+ Futa \par
+ Fulani \par
+ Ga \par
+ Gaelic \par
+ Gagauz \par
+ Galician \par
+ Garshuni \par
+ Garhwali \par
+ Ge'ez \par
+ Gilyak \par
+ Gumuz \par
+ Gondi \par
+ Greenlandic \par
+ Garo \par
+ Guarani \par
+ Gujarati \par
+ Haitian \par
+ Halam \par
+ Harauti \par
+ Hausa \par
+ Hawaiin \par
+ Hammer-Banna \par
+ Hiligaynon \par
+ Hindi \par
+ High Mari \par
+ Hindko \par
+ Ho \par
+ Harari \par
+ Croatian \par
+ Hungarian \par
+ Armenian \par
+ Igbo \par
+ Ijo \par
+ Ilokano \par
+ Indonesian \par
+ Ingush \par
+ Inuktitut \par
+ Irish \par
+ Irish Traditional \par
+ Icelandic \par
+ Inari Sami \par
+ Italian \par
+ Hebrew \par
+ Javanese \par
+ Yiddish \par
+ Japanese \par
+ Judezmo \par
+ Jula \par
+ Kabardian \par
+ Kachchi \par
+ Kalenjin \par
+ Kannada \par
+ Karachay \par
+ Georgian \par
+ Kazakh \par
+ Kebena \par
+ Khutsuri Georgian \par
+ Khakass \par
+ Khanty-Kazim \par
+ Khmer \par
+ Khanty-Shurishkar \par
+ Khanty-Vakhi \par
+ Khowar \par
+ Kikuyu \par
+ Kirghiz \par
+ Kisii \par
+ Kokni \par
+ Kalmyk \par
+ Kamba \par
+ Kumaoni \par
+ Komo \par
+ Komso \par
+ Kanuri \par
+ Kodagu \par
+ Korean Old Hangul \par
+ Konkani \par
+ Kikongo \par
+ Komi-Permyak \par
+ Korean \par
+ Komi-Zyrian \par
+ Kpelle \par
+ Krio \par
+ Karakalpak \par
+ Karelian \par
+ Karaim \par
+ Karen \par
+ Koorete \par
+ Kashmiri \par
+ Khasi \par
+ Kildin Sami \par
+ Kui \par
+ Kulvi \par
+ Kumyk \par
+ Kurdish \par
+ Kurukh \par
+ Kuy \par
+ Koryak \par
+ Ladin \par
+ Lahuli \par
+ Lak \par
+ Lambani \par
+ Lao \par
+ Latin \par
+ Laz \par
+ L-Cree \par
+ Ladakhi \par
+ Lezgi \par
+ Lingala \par
+ Low Mari \par
+ Limbu \par
+ Lomwe \par
+ Lower Sorbian \par
+ Lule Sami \par
+ Lithuanian \par
+ Luba \par
+ Luganda \par
+ Luhya \par
+ Luo \par
+ Latvian \par
+ Majang \par
+ Makua \par
+ Malayalam Traditional \par
+ Mansi \par
+ Marathi \par
+ Marwari \par
+ Mbundu \par
+ Manchu \par
+ Moose Cree \par
+ Mende \par
+ Me'en \par
+ Mizo \par
+ Macedonian \par
+ Male \par
+ Malagasy \par
+ Malinke \par
+ Malayalam Reformed \par
+ Malay \par
+ Mandinka \par
+ Mongolian \par
+ Manipuri \par
+ Maninka \par
+ Manx Gaelic \par
+ Moksha \par
+ Moldavian \par
+ Mon \par
+ Moroccan \par
+ Maori \par
+ Maithili \par
+ Maltese \par
+ Mundari \par
+ Naga-Assamese \par
+ Nanai \par
+ Naskapi \par
+ N-Cree \par
+ Ndebele \par
+ Ndonga \par
+ Nepali \par
+ Newari \par
+ Nagari \par
+ Norway House Cree \par
+ Nisi \par
+ Niuean \par
+ Nkole \par
+ N'ko \par
+ Dutch \par
+ Nogai \par
+ Norwegian \par
+ Northern Sami \par
+ Northern Tai \par
+ Esperanto \par
+ Nynorsk \par
+ Oji-Cree \par
+ Ojibway \par
+ Oriya \par
+ Oromo \par
+ Ossetian \par
+ Palestinian Aramaic \par
+ Pali \par
+ Punjabi \par
+ Palpa \par
+ Pashto \par
+ Polytonic Greek \par
+ Pilipino \par
+ Palaung \par
+ Polish \par
+ Provencal \par
+ Portuguese \par
+ Chin \par
+ Rajasthani \par
+ R-Cree \par
+ Russian Buriat \par
+ Riang \par
+ Rhaeto-Romanic \par
+ Romanian \par
+ Romany \par
+ Rusyn \par
+ Ruanda \par
+ Russian \par
+ Sadri \par
+ Sanskrit \par
+ Santali \par
+ Sayisi \par
+ Sekota \par
+ Selkup \par
+ Sango \par
+ Shan \par
+ Sibe \par
+ Sidamo \par
+ Silte Gurage \par
+ Skolt Sami \par
+ Slovak \par
+ Slavey \par
+ Slovenian \par
+ Somali \par
+ Samoan \par
+ Sena \par
+ Sindhi \par
+ Sinhalese \par
+ Soninke \par
+ Sodo Gurage \par
+ Sotho \par
+ Albanian \par
+ Serbian \par
+ Saraiki \par
+ Serer \par
+ South Slavey \par
+ Southern Sami \par
+ Suri \par
+ Svan \par
+ Swedish \par
+ Swadaya Aramaic \par
+ Swahili \par
+ Swazi \par
+ Sutu \par
+ Syriac \par
+ Tabasaran \par
+ Tajiki \par
+ Tamil \par
+ Tatar \par
+ TH-Cree \par
+ Telugu \par
+ Tongan \par
+ Tigre \par
+ Tigrinya \par
+ Thai \par
+ Tahitian \par
+ Tibetan \par
+ Turkmen \par
+ Temne \par
+ Tswana \par
+ Tundra Nenets \par
+ Tonga \par
+ Todo \par
+ Turkish \par
+ Tsonga \par
+ Turoyo Aramaic \par
+ Tulu \par
+ Tuvin \par
+ Twi \par
+ Udmurt \par
+ Ukrainian \par
+ Urdu \par
+ Upper Sorbian \par
+ Uyghur \par
+ Uzbek \par
+ Venda \par
+ Vietnamese \par
+ Wa \par
+ Wagdi \par
+ West-Cree \par
+ Welsh \par
+ Wolof \par
+ Tai Lue \par
+ Xhosa \par
+ Yakut \par
+ Yoruba \par
+ Y-Cree \par
+ Yi Classic \par
+ Yi Modern \par
+ Chinese Hong Kong \par
+ Chinese Phonetic \par
+ Chinese Simplified \par
+ Chinese Traditional \par
+ Zande \par
+ Zulu
+ \end{multicols}
+ \hspace{4pt}
+ \hrule
+ \end{minipage}
+\end{table}
+
+
+\section{OpenType font features}
+\label{sec:ot-feat}
+
+There are a finite set of OpenType font features, and \pkg{fontspec} provides an
+interface to around half of them.
+Full documentation will be presented in the following sections, including how to
+enable and disable individual features, and how they interact.
+
+A brief reference is provided (\vref{tab:all-ot}) but note that this is an incomplete
+listing --- only the `enable' keys are shown, and where alternative interfaces are
+provided for convenience only the first is shown.
+(E.g., |Numbers=OldStyle| is the same as |Numbers=Lowercase|.)
+
+For completeness, the complete list of OpenType features \emph{not} provided with
+a \pkg{fontspec} interface is shown in \vref{tab:none-ot}.
+Features omitted are partially by design and partially by oversight;
+for example, the |aalt| feature is largely useless in \TeX\ since it is designed
+for providing a \textsc{gui} interface for selecting `all alternates' of a glyph.
+Others, such as optical bounds for example, simply haven't yet been considered
+due to a lack of fonts available for testing.
+Suggestions welcome for how/where to add these missing features to the package.
+
+\ExplSyntaxOn
+\def\allOTfeat{
+ \prop_map_inline:Nn \g__fontspec_all_opentype_feature_names_prop
+ { \opentypefeature{##1}{##2} }
+}
+\newcommand\opentypefeature[2]{
+ \prop_get:NnNT \g__fontspec_OT_features_prop {#1} \tmpa
+ {
+ \raggedright
+ \hangindent=5.2cm
+ \makebox[1cm][l]{\textsc{#1}}
+ \makebox[4.2cm][l]{
+ \int_compare:nT { \tl_count:N \tmpa > 25 } {\ttcondensed} {\ttfamily}
+ \tmpa
+ }
+ \textit{#2}
+ \par
+ \vspace{2pt}
+ }
+}
+\ExplSyntaxOff
+
+\begin{table}
+\caption{Summary of OpenType features in \textsf{fontspec}, alphabetic by feature tag.}
+\label{tab:all-ot}
+\centerline{%
+\begin{minipage}{18cm}
+\small
+\hrule\smallskip
+\begin{multicols}{2}
+\parindent =0pt
+\allOTfeat
+\end{multicols}
+\vspace*{-\smallskipamount}
+\hrule
+\end{minipage}}
+\end{table}
+
+\ExplSyntaxOn
+\renewcommand\opentypefeature[2]{
+ \prop_get:NnNF \g__fontspec_OT_features_prop {#1} \tmpa
+ {
+ \raggedright
+ \hangindent=0.9cm
+ \makebox[0.9cm][l]{\textsc{#1}}%
+ \textit{#2}
+ \par
+ }
+}
+\ExplSyntaxOff
+
+\begin{table}
+\caption{List of \emph{unsupported} OpenType features.}
+\label{tab:none-ot}
+\bigskip
+\centerline{%
+\begin{minipage}{15cm}
+\hrule\smallskip
+\begin{multicols}{3}
+\parindent =0pt
+\allOTfeat
+\end{multicols}
+\vspace*{-\smallskipamount}
+\hrule
+\end{minipage}}
+\end{table}
+
+\subsection{Tag-based features}
+
+
+\subsubsection{Alternates --- \texttt{salt}}
+
+The \feat{Alternate} feature, alias \feat{StylisticAlternates}, is used to access alternate font glyphs when variations exist in the font, such as in \exref{salt}.
+It uses a numerical selection, starting from zero, that will be different for each font.
+Note that the \texttt{Style=Alternate} option is equivalent
+to \texttt{Alternate=0} to access the default case.
+
+\begin{Xexample}[firstline=2]{salt}{The \feat{Alternate} feature.}
+ \huge
+ \fontspec{LinLibertine_R.otf}
+ \textsc{a} \& h \\
+ \addfontfeature{Alternate=0}
+ \textsc{a} \& h
+\end{Xexample}
+
+Note that the indexing starts from zero.
+With the \LuaTeX\ engine, |Alternate=Random| selects a random alternate.
+
+See \vref{sec:newfeatures} for a way to assign names to alternates if desired.
+
+
+\subsubsection{Character Variants --- \texttt{cvNN}}
+
+`Character Variations' are selected
+numerically to adjust the output of (usually) a single character for the
+particular font. These correspond to the OpenType features |cv01| to |cv99|.
+
+For each character that can be varied, it is possible to select among
+possible options for that particular glyph.
+For example, in the hypothetical example below, variants are chosen for glyphs `4' and `5',
+and the trailing |:|\meta{n} corresponds to which variety to choose.
+\begin{Verbatim}
+ \fontspec{CV Font}[CharacterVariant={4,5:2}] \& violet
+\end{Verbatim}
+The numbering is entirely font-specific. Glyph `5' might be the character `v', for example.
+Character variants are specifically designed not to conflict with each
+other, so you can enable them individually per character.
+(Unlike stylistic alternates, say.)
+Note that the indexing starts from zero.
+
+
+\subsubsection{Contextuals}
+This feature refers to substitutions of glyphs that vary `contextually' by their relative position in a word or string of characters;
+features such as contextual swashes are accessed via the options shown in \ref{feat:Contextuals}.
+
+\begin{features}{Contextuals}
+\otf*{Swash}{cswh}
+\otf*{Alternate}{calt}
+\otf*{WordInitial}{init}
+\otf*{WordFinal}{fina}
+\otf*{LineFinal}{falt}
+\otf*{Inner}{medi}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+Historic forms are accessed in OpenType
+fonts via the feature \feat{Style=Historic}; this is generally \emph{not}
+contextual in OpenType, which is why it is not included in this feature.
+
+
+\subsubsection{Diacritics}
+
+Specifies how combining diacritics should be placed.
+These will usually be controlled automatically
+according to the Script setting.
+
+\begin{features}{Diacritics}
+\otf*{MarkToBase}{mark}
+\otf*{MarkToMark}{mkmk}
+\otf*{AboveBase}{abvm}
+\otf*{BelowBase}{blwm}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+
+\subsubsection{Fractions --- \texttt{frac}}
+
+\begin{features}{Fractions}
+\otf{On}{+frac}
+\otf{Off}{-frac}
+\otf{Reset}{}
+\cmidrule{2-4}
+\otf*{Alternate}{afrc}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+Activates the construction of `vulgar' fractions using precomposed glyphs and/or
+subscript and superscript characters from within the font.
+Coverage will vary by font; see \exref{ot-frac}.
+Some (Asian fonts predominantly) also provide for the \opt{Alternate} option.
+
+\begin{Lexample}{ot-frac}{The \feat{Fractions} feature.}
+\setsansfont{Lato}[Fractions=On]
+\setmonofont{IBM Plex Mono}[Fractions=On]
+
+\sffamily 1/2 47/11 1/1000 \par
+\ttfamily 1/2 47/11
+\end{Lexample}
+
+
+
+\subsubsection{Kerning --- \texttt{kern}}
+\label{sec:kerning}
+
+Specifies how inter-glyph spacing should behave.
+Well-made fonts include information for how differing
+amounts of space should be inserted between separate character pairs.
+This kerning space is inserted automatically but in rare
+circumstances you may wish to turn it off.
+
+\begin{features}{Kerning}
+\otf{On}{+kern}
+\otf{Off}{-kern}
+\otf{Reset}{}
+\cmidrule{2-4}
+\otf*{Uppercase}{cpsp}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+As briefly mentioned previously at the end of \vref{sec:letters},
+the \opt{Uppercase} option will add a small amount of tracking between
+uppercase letters, seen in \exref{kernup}, which uses the Romande
+fonts\note{\url{http://arkandis.tuxfamily.org/adffonts.html}}
+(thanks to Clea F. Rees for the suggestion).
+The \opt{Uppercase} option acts separately to the regular kerning
+controlled by the \opt{On}/\opt{Off} options.
+
+\begin{Xexample}[firstline=2]{kernup}{Adding extra kerning for uppercase letters. (The difference is usually very small.)}
+ \large
+ \fontspec{RomandeADFStd-DemiBold.otf}
+ UPPERCASE EXAMPLE \\
+ \addfontfeature{Kerning=Uppercase}
+ UPPERCASE EXAMPLE
+\end{Xexample}
+
+
+\subsubsection{Letters} \label{sec:letters}
+The \opt{Letters} feature specifies how the letters in the current font
+will look. OpenType fonts may contain the following options:
+\opt{SmallCaps}, \opt{PetiteCaps},
+\opt{UppercaseSmallCaps}, \opt{UppercasePetiteCaps}, and
+\opt{Unicase}.
+
+\begin{features}{Letters}
+\otf*{SmallCaps}{smcp}
+\otf*{PetiteCaps}{pcap}
+\otf*{UppercaseSmallCaps}{c2sc}
+\otf*{UppercasePetiteCaps}{c2pc}
+\otf*{Unicase}{unic}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+Petite caps are smaller than small caps.
+\opt{SmallCaps} and \opt{PetiteCaps}
+turn lowercase letters into the smaller caps letters,
+whereas the \opt{Uppercase...} options turn the \emph{capital} letters into
+the smaller
+caps (good, \eg, for applying to already uppercase acronyms like
+`NASA').
+This difference is shown in \exref{caps}.
+`Unicase' is a weird hybrid of upper and lower case letters.
+
+\begin{Lexample}{caps}{Small caps from lowercase or uppercase letters.}
+ \fontspec{texgyreadventor-regular.otf}[Letters=SmallCaps]
+ THIS SENTENCE no verb \\
+ \fontspec{texgyreadventor-regular.otf}[Letters=UppercaseSmallCaps]
+ THIS SENTENCE no verb
+\end{Lexample}
+
+
+
+\subsubsection{Ligatures}
+\label{sec:ot-feat-liga}
+
+\feat{Ligatures} refer to the replacement of two separate characters
+with a specially drawn glyph for functional or \ae sthetic reasons.
+The list of options, of which multiple may be selected at one time,
+is shown in \ref{feat:Ligatures}.
+A demonstration with the Linux Libertine fonts\note{\url{http://www.linuxlibertine.org/}} is shown in \exref{lig}.
+
+Note the additional features accessed with \verb|Ligatures=TeX|. These are
+not actually real OpenType features, but additions provided by \pkg{luaotfload} (i.e., \LuaTeX\ only) to emulate \TeX's behaviour for \textsc{ascii} input of curly quotes and punctuation. In \XeTeX\ this is achieved with the \feat{Mapping} feature (see \vref{sec:mapping}) but for consistency \verb|Ligatures=TeX| will perform the same function as \verb|Mapping=tex-text|.
+
+\begin{features}{Ligatures}
+\otf*{Required}{rlig}
+\otf*{Common}{liga}
+\otf*{Contextual}{clig}
+\otf*{Rare/Discretionary}{dlig}
+\otf*{Historic}{hlig}
+\otf*{TeX}{tlig}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+\begin{Lexample}[firstline=2]{lig}{An example of the \feat{Ligatures} feature.}
+ \Huge\centering
+ \def\test#1#2{%
+ #2 $\to$ {\addfontfeature{#1} #2}\\}
+ \fontspec{LinLibertine_R.otf}
+ \test{Ligatures=Historic}{strict}
+ \test{Ligatures=Rare}{wurtzite}
+ \test{Ligatures=CommonOff}{firefly}
+\end{Lexample}
+
+
+\subsubsection{Localised Forms --- \texttt{locl}}
+
+\begin{features}{LocalForms}
+\otf{On}{+locl}
+\otf{Off}{-locl}
+\otf{Reset}{}
+\end{features}
+
+This feature enables and disables glyph substitutions, etc., that are specific to the
+\feat{Language} selected in the font.
+This feature is automatically activated by default when present,
+so it should not be generally necessary to use \feat{LocalForms} \texttt{=} \opt{On}.
+In certain scenarios it may be important to turn it \opt{Off} (although nothing specifically springs to mind).
+
+
+\subsubsection{Numbers}
+
+The \feat{Numbers} feature defines how numbers will look in the
+selected font, accepting options shown in \ref{feat:Numbers}.
+
+\begin{features}{Numbers}
+\otf*{Uppercase}{lnum}
+\otf*{Lowercase}{onum}
+\otf*{Lining}{lnum}
+\otf*{OldStyle}{onum}
+\otf*{Proportional}{pnum}
+\otf*{Monospaced}{tnum}
+\otf*{SlashedZero}{zero}
+\otf*{Arabic}{anum}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+The synonyms
+\opt{Uppercase} and \opt{Lowercase} are equivalent to \opt{Lining} and
+\opt{OldStyle}, respectively.
+The differences have been shown previously
+in \vref{sec:addfontfeatures}.
+The \opt{Monospaced} option is useful for tabular material when digits need
+to be vertically aligned.
+
+The \opt{SlashedZero} option
+replaces the default zero with a slashed version to prevent
+confusion with an uppercase `O', shown in \exref{slashzero}.
+
+\begin{Lexample}{slashzero}{The effect of the \opt{SlashedZero} option.}
+ \fontspec[Numbers=Lining]{texgyrebonum-regular.otf}
+ 0123456789
+ \fontspec[Numbers=SlashedZero]{texgyrebonum-regular.otf}
+ 0123456789
+\end{Lexample}
+
+The \opt{Arabic} option (with tag \verb|anum|) maps regular numerals to their Arabic script or Persian equivalents
+based on the current \opt{Language} setting (see \vref{sec:ot}).
+This option is based on a \LuaTeX\ feature of the \pkg{luaotfload} package,
+not an OpenType feature. (Thus, this feature is unavailable in \XeTeX.)
+This feature should be considered deprecated; while there are no plans to remove it from this package,
+if its support is dropped from the font loader it could disappear from \pkg{fontspec} with little notice.
+
+
+\subsubsection{Ornament --- \texttt{ornm}}
+
+Ornaments are selected with the \feat{Ornament} feature (OpenType feature |ornm|),
+selected numerically such as for the \feat{Annotation} feature.
+
+
+\subsubsection{Style}
+\label{sec:ot-feat-style}
+
+\begin{features}{Style}
+\otf*{Alternate}{salt}
+\otf*{Italic}{ital}
+\otf*{Ruby}{ruby}
+\otf*{Swash}{swsh}
+\otf*{Cursive}{curs}
+\otf*{Historic}{hist}
+\otf*{Titling}{titl}
+\otf*{HorizontalKana}{hkna}
+\otf*{VerticalKana}{vkna}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+`Ruby' refers to a small optical size, used in
+Japanese typography for annotations.
+For fonts with multiple |salt| OpenType features,
+use the fontspec \feat{Alternate} feature instead.
+
+\Exref{style-alt} shows an example of a font feature that involves glyph substitution
+for particular letters within an alphabet.
+Other options in these categories operate in similar ways, with the choice of how
+particular substitutions are organised with which feature largely up to the font designer.
+
+ \begin{Xexample}[firstline=2]{style-alt}{Example of the \opt{Alternate} option of the \feat{Style} feature.}
+ \Large
+ \fontspec{Quattrocento.otf}
+ M Q W \\
+ \addfontfeature{Style=Alternate}
+ M Q W
+\end{Xexample}
+
+The \opt{Uppercase} option is designed to select various
+uppercase forms for glyphs such as accents and dashes, such as shown
+in \exref{style-uppercase}; note the raised position of the hyphen
+to better match the surrounding letters.
+It will (probably) not actually map letters to uppercase.
+ \note{If you want automatic uppercase letters, look to \LaTeX's
+ \cmd\MakeUppercase\ command.}
+This option used to be selected under the \feat{Letters} feature, but moved here
+as it generally does not actually affect the letters themselves.
+The \feat{Kerning} feature also contains an \opt{Uppercase} option,
+which adds a small amount of spacing in between letters (see \vref{sec:kerning}).
+
+\begin{Lexample}{style-uppercase}{An example of the \opt{Uppercase} option of the \feat{Style} feature.}
+ \fontspec{LinLibertine_R.otf}
+ UPPER-CASE example \\
+ \addfontfeature{Style=Uppercase}
+ UPPER-CASE example
+\end{Lexample}
+
+
+In other features, larger breadths of changes can be seen, covering
+the style of an entire alphabet.
+See \exref{style-itrub}; here, the \opt{Italic} option affects the Latin text
+and the \opt{Ruby} option the Japanese.
+
+\begin{Xexample}[firstline=2]{style-itrub}{Example of the \opt{Italic} and \opt{Ruby} options of the \feat{Style} feature.}
+ \Large \def\kana{ようこそ ワカヨタレソ}
+ \fontspec{Hiragino Mincho Pro}
+ Latin \kana \\
+ \addfontfeature{Style={Italic, Ruby}}
+ Latin \kana
+\end{Xexample}
+
+Note the difference here between the default and the horizontal style kana
+in \exref{style-hvkana}: the horizontal style is slightly wider.
+
+\begin{Xexample}[firstline=2]{style-hvkana}{Example of the \opt{HorizontalKana} and \opt{VerticalKana} options of the \feat{Style} feature.}
+ \Large \def\kana{ようこそ ワカヨタレソ}
+ \fontspec{Hiragino Mincho Pro}
+ \kana \\
+ {\addfontfeature{Style=HorizontalKana}
+ \kana } \\
+ {\addfontfeature{Style=VerticalKana}
+ \kana }
+\end{Xexample}
+
+
+\subsubsection{Stylistic Set variations --- \texttt{ssNN}}
+\label{sec:ot-ss}
+
+This feature selects a `Stylistic Set' variation,
+which usually corresponds to an alternate glyph style for a range of
+characters (usually an alphabet or subset thereof).
+This feature is specified numerically. These correspond to OpenType
+features |ss01|, |ss02|, etc.
+
+Two demonstrations from the Junicode
+font\note{\url{http://junicode.sf.net}}
+are shown in \exref{ss} and \exref{ss2}; thanks to Adam
+Buchbinder for the suggestion.
+
+\begin{Lexample}{ss}{Insular letterforms, as used in medieval Northern Europe, for the Junicode font accessed with the \feat{StylisticSet} feature.}
+ \fontspec{Junicode}
+ Insular forms. \\
+ \addfontfeature{StylisticSet=2}
+ Insular forms. \\
+\end{Lexample}
+
+\begin{Lexample}{ss2}{Enlarged minuscules (capital letters remain unchanged) for the Junicode font, accessed with the \feat{StylisticSet} feature.}
+ \fontspec{Junicode}
+ ENLARGED Minuscules. \\
+ \addfontfeature{StylisticSet=6}
+ ENLARGED Minuscules. \\
+\end{Lexample}
+
+Multiple stylistic sets may be selected simultaneously by writing, e.g.,
+|StylisticSet={1,2,3}|.
+
+The |StylisticSet| feature is a synonym of the \feat{Variant} feature for \AAT\ fonts.
+See \vref{sec:newfeatures} for a way to assign names to stylistic sets, which should be done on a per-font basis.
+
+
+\subsubsection{Vertical Position}
+
+\begin{features}{VerticalPosition}
+\otf*{Superior}{sups}
+\otf*{Inferior}{subs}
+\otf*{Numerator}{numr}
+\otf*{Denominator}{dnom}
+\otf*{ScientificInferior}{sinf}
+\otf*{Ordinal}{ordn}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+The \feat{VerticalPosition} feature is used to access things like
+subscript (\opt{Inferior}) and superscript (\opt{Superior}) numbers and
+letters (and a small amount of punctuation, sometimes).
+The \opt{Ordinal} option will only raise characters that are used
+in some languages directly after a number.
+The \opt{ScientificInferior} feature will move glyphs
+further below the baseline than the \opt{Inferior} feature.
+These are shown in \exref{vertpos}
+
+\opt{Numerator} and \opt{Denominator} should only be used for creating
+arbitrary fractions (see next section).
+
+\begin{Lexample}{vertpos}{The \feat{VerticalPosition} feature.}
+ \fontspec{LibreCaslonText-Regular.otf}[VerticalPosition=Superior]
+ Superior: 1234567890 \\
+ \fontspec{LibreCaslonText-Regular.otf}[VerticalPosition=Numerator]
+ Numerator: 12345 \\
+ \fontspec{LibreCaslonText-Regular.otf}[VerticalPosition=Denominator]
+ Denominator: 12345 \\
+ \fontspec{LibreCaslonText-Regular.otf}[VerticalPosition=ScientificInferior]
+ Scientific Inferior: 12345
+\end{Lexample}
+
+The \pkg{realscripts} package
+(which is also loaded by \pkg{xltxtra} for \XeTeX)
+redefines the \cmd\textsubscript\ and
+\cmd\textsuperscript\ commands to use the above font features automatically,
+including for use in footnote labels.
+If this is the only feature of \pkg{xltxtra} you wish to use, consider
+loading \pkg{realscripts} on its own instead.
+
+
+
+\subsection{CJK features}
+
+This section summarises the features which are largely intending for Chinese, Korean,
+and Japanese typesetting.
+
+
+\subsubsection{Annotation --- \texttt{nalt} }
+
+Some fonts are equipped with an extensive range of
+numbers and numerals in different forms. These are accessed with the
+\feat{Annotation} feature (OpenType feature |nalt|), selected numerically as shown in
+\exref{ot-annot}. Note that the indexing starts from zero.
+
+\begin{Xexample}{ot-annot}{Annotation forms for OpenType fonts.}
+ \fontspec{Hiragino Maru Gothic Pro}
+ 1 2 3 4 5 6 7 8 9
+ \def\x#1{\\{\addfontfeature{Annotation=#1}
+ 1 2 3 4 5 6 7 8 9 }}
+ \x0\x1\x2\x3\x4\x5\x6\x7\x7\x8\x9
+\end{Xexample}
+
+
+\subsubsection{Character width}\label{sec:CharacterWidth}
+
+Many Asian fonts are equipped with variously spaced characters for
+shoe-horning into their generally monospaced text.
+These are
+accessed through the \feat{CharacterWidth} feature.
+
+\begin{features}{CharacterWidth}
+\otf*{Proportional}{pwid}
+\otf*{Full} {fwid}
+\otf*{Half} {hwid}
+\otf*{Third} {twid}
+\otf*{Quarter} {qwid}
+\otf*{AlternateProportional}{palt}
+\otf*{AlternateHalf}{halt}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+Japanese alphabetic glyphs (in Hiragana or Katakana) may be typeset
+proportionally, to better fit horizontal measures, or monospaced, to
+fit into the rigid grid imposed by ideographic typesetting. In this
+latter case, there are also half-width forms for squeezing more kana
+glyphs (which are less complex than the kanji they are amongst) into
+a given block of space. The same features are given to roman letters
+in Japanese fonts, for typesetting foreign words in the same style
+as the surrounding text.
+
+\begin{Xexample}[firstline=2]{charwdprop}{Proportional or fixed width forms.}
+ \def\texta{ようこそ}\def\textb{ワカヨタレソ}
+ \def\test{\makebox[2cm][l]{\texta}%
+ \makebox[2.5cm][l]{\textb}%
+ \makebox[2.5cm][l]{abcdef}}
+ \fontspec{Hiragino Mincho Pro}
+ {\addfontfeature{CharacterWidth=Proportional}\test}\\
+ {\addfontfeature{CharacterWidth=Full}\test}\\
+ {\addfontfeature{CharacterWidth=Half}\test}
+\end{Xexample}
+
+The same situation occurs with numbers, which are provided in
+increasingly illegible compressed forms seen in \exref{charwd}.
+
+\begin{Xexample}[firstline=2]{charwd}{Numbers can be compressed significantly.}
+ \centering
+ \fontspec[Renderer=AAT]{Hiragino Mincho Pro}
+ {\addfontfeature{CharacterWidth=Full}
+ ---12321---}\\
+ {\addfontfeature{CharacterWidth=Half}
+ ---1234554321---}\\
+ {\addfontfeature{CharacterWidth=Third}
+ ---123456787654321---}\\
+ {\addfontfeature{CharacterWidth=Quarter}
+ ---12345678900987654321---}
+\end{Xexample}
+
+
+\subsubsection{CJK shape}
+
+\begin{features}{CJKShape}
+\otf{Traditional}{trad}
+\otf{Simplified} {smpl}
+\otf{JIS1978} {jp78}
+\otf{JIS1983} {jp83}
+\otf{JIS1990} {jp90}
+\otf{Expert} {expt}
+\otf{NLC} {nlck}
+\end{features}
+
+There have been many standards for how CJK ideographic
+glyphs are `supposed' to look. Some fonts will contain many alternate
+glyphs available in order to be able to display these gylphs
+correctly in whichever form is appropriate. Both \AAT\ and OpenType
+fonts support the following \feat{CJKShape} options:
+\opt{Traditional}, \opt{Simplified}, \opt{JIS1978}, \opt{JIS1983},
+\opt{JIS1990}, and \opt{Expert}. OpenType also supports the \opt{NLC} option.
+
+\begin{Xexample}[firstline=2]{ot-cjk-shape}{Different standards for CJK ideograph presentation.}
+ \LARGE\def\text{ 唖噛躯 妍并訝}
+ \fontspec{Hiragino Mincho Pro}
+ {\addfontfeature{CJKShape=Traditional}
+ \text } \\
+ {\addfontfeature{CJKShape=NLC}
+ \text } \\
+ {\addfontfeature{CJKShape=Expert}
+ \text }
+\end{Xexample}
+
+
+\subsubsection{Vertical typesetting}
+
+\begin{features}{Vertical}
+\otf*{RotatedGlyphs} {vrt2}
+\otf*{AlternatesForRotation} {vrtr}
+\otf*{Alternates} {vert}
+\otf*{KanaAlternates} {vkna}
+\otf*{Kerning} {vkrn}
+\otf*{AlternateMetrics} {valt}
+\otf*{HalfMetrics} {vhal}
+\otf*{ProportionalMetrics} {vpal}
+\cmidrule{2-4}
+\otf{ResetAll}{}
+\end{features}
+
+OpenType provides a plethora of features for accommodating the varieties of possibilities
+needed for vertical typesetting (CJK and others).
+No capabilities for achieving such vertical typesetting are provided by \pkg{fontspec},
+however; please get in touch if there are improvements that could be made.
+
+
+\end{document}
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-style.sty b/macros/unicodetex/latex/fontspec/fontspec-doc-style.sty
new file mode 100644
index 0000000000..751e7a150d
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-style.sty
@@ -0,0 +1,292 @@
+
+
+\ProvidesPackage{fontspec-doc-style}
+
+\input{fontspec.dtx}
+\ExplSyntaxOff
+
+\usepackage{fontspec,booktabs,caption,xcolor,flafter,fancyvrb,hologo,graphicx,
+ url,varioref,varwidth,microtype,tocloft,framed,xparse,docmute}
+
+\let\FancyVerbSpace\verbvisiblespace
+
+%% Various labelling commands:
+\newcommand*\name[1]{{#1}}
+\newcommand*\opt[1]{\texttt{#1}}
+\newcommand*\feat[1]{\texttt{#1}}
+
+\let\latin\textit
+\def\eg{\latin{e.g.}}
+\def\ie{\latin{i.e.}}
+\def\Eg{\latin{E.g.}}
+\def\Ie{\latin{I.e.}}
+\def\etc{\@ifnextchar.{\latin{etc}}{\latin{etc.}\@}}
+
+\newcommand\note[1]{\unskip\footnote{#1}}
+
+\def\MacOSX{macOS}
+\def\AAT{\textsc{aat}}
+\def\ATSUI{\textsc{atsui}}
+
+\newcommand\NFSS{\textsc{nfss}}
+\newcommand\XeLaTeX{\hologo{XeLaTeX}}
+\newcommand\LuaLaTeX{\hologo{LuaLaTeX}}
+
+% ToC formatting:
+\setlength\cftsubsecnumwidth{1.4\cftsubsecnumwidth}
+%\def\@cfttocstart{\small\begin{multicols}{2}}
+%\def\@cfttocfinish{\end{multicols}}
+
+\fvset{gobble=0}
+
+\captionsetup[table]{position=above}
+\captionsetup[figure]{position=above}
+
+
+%% Fonts
+
+\defaultfontfeatures{Numbers=OldStyle}
+\IfFontExistsTF{AldusNovaPro-Book.otf}
+ {
+ \setmainfont{aldus-nova}
+ \setsansfont{palatino-sans-light}
+ }
+ {
+\setmainfont{texgyrepagella}[
+ Extension = .otf,
+ UprightFont = *-regular ,
+ ItalicFont = *-italic ,
+ BoldFont = *-bold ,
+ BoldItalicFont = *-bolditalic ,
+]
+\setsansfont{texgyreheros}[
+ Extension = .otf,
+ UprightFont = *-regular ,
+ ItalicFont = *-italic ,
+ BoldFont = *-bold ,
+ BoldItalicFont = *-bolditalic ,
+]
+ }
+\setmonofont{lmmono10-regular.otf}[
+ Numbers={Lining,SlashedZero},
+ ItalicFont=lmmonoslant10-regular.otf,
+ BoldFont=lmmonolt10-bold.otf,
+ BoldItalicFont=lmmonolt10-boldoblique.otf,
+]
+\newfontfamily\ttcondensed{lmmonoltcond10-regular.otf}
+
+%% (La)TeX font-related declarations:
+\linespread{1.05} % Pagella needs more space between lines
+\frenchspacing % Remove ugly extra space after punctuation
+
+%% ToC
+\def\@dotsep{1000}
+\setcounter{tocdepth}{2}
+\setlength\columnseprule{0.4pt}
+\renewcommand\tableofcontents{\relax
+ \begin{multicols}{2}[\section*{\contentsname}]\relax
+ \@starttoc{toc}\relax
+ \end{multicols}}
+
+
+%% Index
+\setcounter{IndexColumns}{2}
+\renewenvironment{theglossary}
+ {\small\list{}{}
+ \item\relax
+ \glossary@prologue\GlossaryParms
+ \let\item\@idxitem \ignorespaces
+ \def\pfill{\hspace*{\fill}}}
+ {\endlist}
+
+
+
+%% varioref definitions:
+\labelformat{table}{Table~#1}
+\labelformat{section}{Section~#1}
+\labelformat{subsection}{Section~#1}
+
+\definecolor{niceblue}{rgb}{0.1,0.2,0.8}
+
+
+
+
+%% EXAMPLES
+
+\newif\ifshowexamples
+\showexamplestrue
+
+\newsavebox\X
+\newsavebox\Y
+
+\newcounter{example}
+
+\newcommand\exref[1]{Example~\ref{ex:#1}}
+\newcommand\Exref[1]{Example~\ref{ex:#1}}
+
+\newenvironment{Xexample}[3][]
+ {\VerbatimEnvironment\begin{Fexample}[#1]{#2}{#3}{X}}
+ {\end{Fexample}}
+
+\newenvironment{Lexample}[3][]
+ {\VerbatimEnvironment\begin{Fexample}[#1]{#2}{#3}{L}}
+ {\end{Fexample}}
+
+\newenvironment{Fexample}[4][]
+ {%
+ \def\options{#1}%
+ \def\filename{#2}%
+ \def\captiontext{#3}%
+ \def\prefix{#4}
+ \refstepcounter{example}%
+ \label{ex:\filename}%
+ \ifshowexamples
+ \IfFileExists{zzz-\theexample-\prefix-\filename.tex}{}{%
+ \immediate\write18{rm -f zzz-\theexample-* ;}%
+ }%
+ \fi
+ \VerbatimEnvironment
+ \begin{VerbatimOut}{zzz-\theexample-\prefix-\filename.tex}}
+% text in the environment
+ {\end{VerbatimOut}
+ \begin{figure}
+ \setlength\parindent{0pt}%
+ \edef\@tempa{[gobble=0,fontsize=\noexpand\small,\options]}%
+ \savebox\X{%
+ \expandafter\BVerbatimInput
+ \@tempa{zzz-\theexample-\prefix-\filename.tex}%
+ }%
+ \IfFileExists{zzz-\theexample-\prefix-\filename.pdf}{}
+ {%
+ \edef\XXcmd{%
+ \unexpanded{%
+ \RequirePackage{luatex85}
+ \documentclass[margin=0.2mm]{standalone}
+ \usepackage{booktabs,ifthen,graphicx,xcolor,varwidth}
+ \usepackage{fontspec}
+ \defaultfontfeatures{Ligatures=TeX}
+ \begin{document}
+ \begin{varwidth}{0.7\linewidth}
+ \input} zzz-\theexample-\prefix-\filename.tex
+ \unexpanded{
+ \end{varwidth}
+ \end{document}
+ }%
+ }%
+ \edef\1{%
+ \csname prog@\prefix\endcsname "\unexpanded\expandafter{\XXcmd}";
+ printf '\@percentchar s' '\unexpanded\expandafter{\XXcmd}' > zzz-\theexample-\prefix-\filename-test.tex;
+ }%
+ \ifshowexamples
+ \immediate\write18{\unexpanded\expandafter{\1}}%
+ \fi
+ }%
+ \savebox\Y{%
+ \IfFileExists{zzz-\theexample-\prefix-\filename.pdf}
+ {\includegraphics{zzz-\theexample-\prefix-\filename.pdf}}
+ {\color{red}\itshape ---Example graphic not generated---}%
+ }
+ % TYPESETTING
+ \rule[0.5\baselineskip]{\columnwidth}{1pt}%
+ \vspace{-1.2ex}%
+ \def\@tempa{\small\textsf{Example~\theexample:~}}%
+ \settowidth\@tempdima{\@tempa\captiontext}%
+ \par
+ \ifdim\@tempdima>\linewidth
+ \settowidth\@tempdima{\@tempa}%
+ \@tempa\parbox[t]{\linewidth-\@tempdima}{\small\captiontext}%
+ \vspace{0.4\baselineskip}%
+ \else
+ \parbox{\linewidth}{\centering\@tempa~\captiontext}%
+ \fi
+ \par\rule[0.4\baselineskip]{\columnwidth}{0.4pt}\par
+ \ifdim\dimexpr\wd\X+\wd\Y>\linewidth\relax
+ \null\hfill\makebox[0pt][r]{\usebox\Y}\usebox\X
+ \else
+ \hfill\usebox\Y\hfill\usebox\X
+ \fi
+ \par\rule[0.5\baselineskip]{\columnwidth}{1pt}
+ \end{figure}
+}
+
+\def\prog@X{xelatex
+ -jobname=zzz-\theexample-X-\filename\space}
+
+\def\prog@L{lualatex
+ -jobname=zzz-\theexample-L-\filename\space}
+
+%%%%%%%%%%%%%%%%%%%%%%
+
+\newcommand*\setexsize[1]{\let\examplesize#1}
+\newcommand*\setverbwidth[1]{\def\auxwidth{#1}}
+
+
+
+\newcounter{argument}
+\g@addto@macro\endmacro{\setcounter{argument}{0}}
+\newcommand*\darg[1]{%
+ \stepcounter{argument}%
+ \noindent{\ttfamily\char`\#\theargument~:~}#1\par}
+\newcommand*\doarg[1]{%
+ \stepcounter{argument}%
+ \noindent{\ttfamily\makebox[0pt][r]{[}\char`\#\theargument]:~}#1\par}
+
+\newcommand\unichar[2]{\textsc{\MakeLowercase{u+#1: #2}}}
+
+\newcommand\cmdbox[1]{%
+ \smallskip\par\noindent
+ \fbox{\begin{varwidth}{\linewidth}
+ #1%
+ \end{varwidth}}%
+ \smallskip
+}
+\def\CMD#1{\texttt{\null#1\unskip}}
+
+
+\NewDocumentCommand \otf {somm} {%
+ \featname & #3 & \texttt{#4}
+ \IfBooleanT #1 { & \textdagger }
+ \\
+}
+\newenvironment{features}[1]{%
+ \def\NOTE{}
+ \def\thisfeatname{#1}%
+ \def\featname{\thisfeatname~~\texttt=~~\null\gdef\featname{}}%
+ \begin{table}
+ \caption{Options for the OpenType font feature `\thisfeatname'.}
+ \edef\@tempa{\noexpand\label{feat:\thisfeatname}}\@tempa
+ \centering
+ \begin{tabular}{@{}l@{}l@{\hspace{0.5\tabcolsep}}l@{\hspace{0.5\tabcolsep}}l@{}}
+ \toprule
+ Feature & Option & Tag & \\
+ \midrule
+}{
+ \bottomrule
+ \end{tabular}
+ \par\smallskip
+ \footnotesize
+ \textdagger\ These feature options can be disabled with \texttt{..Off} variants, and reset \\ to default state (neither explicitly on nor off) with \texttt{..Reset}.
+ \NOTE
+ \end{table}
+}
+
+
+%%%%%%%%%%%
+
+\def \MakePrivateLetters {%
+ \catcode `\@ = 11
+ \catcode `\_ = 11
+ \catcode `\: = 11
+}
+
+%% for LaTeX3 csnames
+\catcode `\_= 11
+
+\renewcommand\partname{Part}
+
+
+% /©
+%
+% (COPYRIGHT GOES HERE)
+%
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-doc-xetex.tex b/macros/unicodetex/latex/fontspec/fontspec-doc-xetex.tex
new file mode 100644
index 0000000000..5c1e3e3e7d
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-doc-xetex.tex
@@ -0,0 +1,294 @@
+%%^^A%% fontspec-doc-xetex.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\showexamplesfalse
+\begin{document}
+
+\part{Fonts and features with \XeTeX}
+\label{sec:xetex-features}
+
+\section{\XeTeX-only font features}
+
+The features described here are available for any font
+selected by \pkg{fontspec}.
+
+\subsection{Mapping}
+\label{sec:mapping}
+
+The \feat{Mapping} feature enables a \XeTeX\ text-mapping scheme, with an example shown in \exref{mapping}.
+
+\begin{Xexample}{mapping}{\XeTeX's \feat{Mapping} feature.}
+ \fontspec{texgyrepagella-regular.otf}[Mapping=tex-text]
+ ``!`A small amount of---text!''
+\end{Xexample}
+
+Only one mapping can be active at a time and a second call to \feat{Mapping}
+will override the first.
+Using the |tex-text| mapping is also equivalent to writing |Ligatures=TeX|.
+The use of the latter syntax is recommended for better compatibility with
+\LuaTeX\ documents.
+
+
+\subsection{Different font technologies: \AAT, OpenType, and Graphite}\label{sec:renderer-xetex}
+
+\textbf{Note that from 2020 it appears that \XeTeX\ can no longer support \AAT\ fonts in \MacOSX.}
+
+\XeTeX\ supports three rendering technologies for typesetting, selected with
+the \feat{Renderer} font feature. The first, \opt{AAT}, is
+that provided only by \MacOSX.
+The second, \opt{OpenType}, is an open source OpenType interpreter.
+It provides greater support for OpenType features, notably contextual arrangement, over \opt{AAT}.
+The third is \opt{Graphite}, which is an alternative to OpenType with particular features for less-common languages and the capability for more powerful font options.
+Features for \opt{OpenType} have already been discussed in \vref{sec:opentype-features};
+\opt{Graphite} and \opt{AAT} features are discussed later in \vref{sec:graphite-features} and \vref{sec:aat-features}.
+
+Unless you have a particular need, the \feat{Renderer} feature is rarely explicitly required: for OpenType
+fonts, the \opt{OpenType} renderer is used automatically, and for \AAT\ fonts,
+\opt{AAT} is chosen by default. Some fonts, however, will contain font tables
+for multiple rendering technologies, such as the Hiragino Japanese fonts
+distributed with \MacOSX, and in these cases one over the other may be preferred.
+
+Among some other font features only available through a specific renderer,
+\opt{OpenType} provides for the \feat{Script} and \feat{Language} features, which allow
+different font behaviour for different alphabets and languages; see \vref{sec:ot}
+for the description of these features. {\em Because these font features can
+change which features are able to be selected for the font instance, they are selected
+by \pkg{fontspec} before all others and will automatically and without warning
+select the \opt{OpenType} renderer.}
+
+
+\subsection{Optical font sizes} \label{sec:aat-opticalsize}
+
+Multiple Master fonts are parameterised over
+orthogonal font axes, allowing continuous selection along such
+features as weight, width, and optical size.
+Whereas an OpenType font will have only a few separate
+optical sizes, a Multiple Master font's optical size can be
+specified over a continuous range. Unfortunately, this flexibility makes
+it harder to create an automatic interface through \LaTeX, and the
+optical size for a Multiple Master font must always be specified
+explicitly.
+\begin{Verbatim}
+ \fontspec{Minion MM Roman}[OpticalSize=11]
+ MM optical size test \\
+ \fontspec{Minion MM Roman}[OpticalSize=47]
+ MM optical size test \\
+ \fontspec{Minion MM Roman}[OpticalSize=71]
+ MM optical size test \\
+\end{Verbatim}
+
+
+\subsection{Vertical typesetting}
+
+\XeTeX\ provides for vertical typesetting simply with the ability to rotate
+the individual glyphs as a font is used for typesetting, as shown in
+\exref{vert}.
+
+\begin{Xexample}[firstline=2]{vert}{Vertical typesetting.}
+ \def\verttext{共産主義者は}
+ \fontspec{Hiragino Mincho Pro}
+ \verttext
+
+ \fontspec{Hiragino Mincho Pro}[Renderer=AAT,Vertical=RotatedGlyphs]
+ \rotatebox{-90}{\verttext}% requires the graphicx package
+\end{Xexample}
+
+No actual provision is made for typesetting top-to-bottom
+languages; for an example of how to do this, see the vertical Chinese
+example provided in the \XeTeX\ documentation.
+
+
+\section{The Graphite renderer}
+\label{sec:graphite-features}
+
+Since the Graphite renderer is designed for less common scripts and languages, usually with
+specific or unique requirements, Graphite features are not standard across fonts.
+
+Currently \pkg{fontspec} does not support a convenient interface to select Graphite font
+features and all selection must be done via `raw' font feature selection.
+
+Here's an example:
+\begin{Verbatim}
+ \fontspec{Charis SIL}[
+ Renderer=Graphite,
+ RawFeature={Uppercase Eng alternates=Large eng on baseline}]
+ Ŋ
+\end{Verbatim}
+
+Here's another:
+\begin{Verbatim}
+\fontspec{AwamiNastaliq-Regular.ttf}[Renderer=Graphite] ^^^^06b5
+\addfontfeature{RawFeature={Lam with V=V over bowl}} ^^^^06b5
+\end{Verbatim}
+
+
+
+\section{\MacOSX's \AAT\ fonts}
+\label{sec:aat-features}
+
+\begin{quote}\itshape
+\textbf{Warning!}
+\XeTeX's implementation on \MacOSX\ is currently in a state of flux and the information contained below may well be wrong from 2013 onwards.
+There is a good chance that the features described in this section will not be available any more as \XeTeX's completes its transition to a cross-platform--only application.
+All examples in this section have now been removed.
+\end{quote}
+
+\MacOSX's font technology began life before the ubiquitous-OpenType era
+and revolved around the Apple-invented `\AAT' font format. This format
+had some advantages (and other disadvantages) but it never became widely
+popular in the font world.
+
+Nonetheless, this is the font format that was first supported by \XeTeX\
+(due to its pedigree on \MacOSX\ in the first place) and was the first
+font format supported by \pkg{fontspec}. A number of fonts distributed with
+\MacOSX\ are still in the \AAT\ format, such as `Skia'.
+
+\subsection{Ligatures}
+
+\feat{Ligatures} refer to the replacement of two separate characters
+with a specially drawn glyph for functional or \ae sthetic reasons.
+For \AAT\ fonts, you may choose from any combination of \opt{Required},
+\opt{Common}, \opt{Rare} (or \opt{Discretionary}), \opt{Logos}, \opt{Rebus},
+\opt{Diphthong}, \opt{Squared}, \opt{AbbrevSquared}, and \opt{Icelandic}.
+
+Some other Apple \AAT\ fonts have those `Rare' ligatures contained in
+the \opt{Icelandic} feature. Notice also that the old \TeX\ trick of
+splitting up a ligature with an empty brace pair does not work in
+\XeTeX; you must use a 0\,pt kern or \cs{hbox} (\eg, \cs{null}) to
+split the characters up if you do not want a ligature to be performed (the usual examples for when this might be desired are words like `shelf\null full').
+
+\subsection{Letters} \label{sec:aat-letters}
+The \opt{Letters} feature specifies how the letters in the current font
+will look. For \AAT\ fonts, you may choose from \opt{Normal},
+\opt{Uppercase}, \opt{Lowercase}, \opt{SmallCaps}, and
+\opt{InitialCaps}.
+
+
+\subsection{Numbers}
+The \feat{Numbers} feature defines how numbers will look in the
+selected font. For \AAT\ fonts, they may be a
+combination of \opt{Lining} or \opt{OldStyle} and \opt{Proportional} or
+\opt{Monospaced} (the latter is good for tabular material). The synonyms
+\opt{Uppercase} and \opt{Lowercase} are equivalent to \opt{Lining} and
+\opt{OldStyle}, respectively. The differences have been shown previously
+in \vref{sec:addfontfeatures}.
+
+\subsection{Contextuals} \label{sec:contextuals}
+This feature refers to glyph substitution that vary by their position;
+things like contextual swashes are implemented here.
+The options for \AAT\ fonts are
+\opt{WordInitial}, \opt{WordFinal} (\exref{wordcx}), \opt{LineInitial},
+\opt{LineFinal}, and \opt{Inner} (\exref{longsaat}, also called `non-final' sometimes). As
+non-exclusive selectors, like the ligatures, you can turn them off
+by prefixing their name with \opt{No}.
+
+\subsection{Vertical position}
+The \feat{VerticalPosition} feature is used to access things like
+subscript (\opt{Inferior}) and superscript (\opt{Superior}) numbers and
+letters (and a small amount of punctuation, sometimes).
+The \opt{Ordinal} option is (supposed to be)
+contextually sensitive to only raise characters that appear directly
+after a number.
+
+The \pkg{realscripts} package redefines the \cmd\textsubscript\ and
+\cmd\textsuperscript\ commands to use the above font features,
+including for use in footnote labels.
+
+\subsection{Fractions}
+Many fonts come with the capability to typeset various forms of
+fractional material. This is accessed in \pkg{fontspec} with the
+\feat{Fractions} feature, which may be turned \opt{On} or \opt{Off}
+in both \AAT\ and OpenType fonts.
+
+In \AAT\ fonts, the `fraction slash' or solidus character, is
+to be used to create fractions. When \feat{Fractions} are turned
+\opt{On}, then only pre-drawn fractions will be used.
+
+Using the \opt{Diagonal} option (\AAT\ only), the font will attempt
+to create the fraction from superscript and subscript
+characters.
+
+Some (Asian fonts predominantly) also provide for the
+\opt{Alternate} feature.
+
+\subsection{Variants}
+The \feat{Variant} feature takes a single numerical input for
+choosing different alphabetic shapes.
+See \vref{sec:newfeatures} for a way to assign names to variants,
+which should be done on a per-font basis.
+
+\subsection{Alternates}
+Selection of \feat{Alternate}s again must be done numerically.
+See \vref{sec:newfeatures} for a way to assign names to alternates,
+which should be done on a per-font basis.
+
+
+\subsection{Style}
+The options of the \feat{Style} feature
+are defined in \AAT\ as one of the following: \opt{Display},
+\opt{Engraved}, \opt{IlluminatedCaps}, \opt{Italic},
+\opt{Ruby},\footnotemark\ \opt{TallCaps}, or \opt{Titling}.
+\footnotetext{`Ruby' refers to a small optical size, used in
+Japanese typography for annotations.}
+
+Typical examples for these features are shown in \ref{sec:ot-feat-style}.
+
+\subsection{CJK shape}
+There have been many standards for how CJK ideographic
+glyphs are `supposed' to look. Some fonts will contain many alternate
+glyphs in order to be able to display these gylphs
+correctly in whichever form is appropriate. Both \AAT\ and OpenType
+fonts support the following \feat{CJKShape} options:
+\opt{Traditional}, \opt{Simplified}, \opt{JIS1978}, \opt{JIS1983},
+\opt{JIS1990}, and \opt{Expert}. OpenType also supports the \opt{NLC} option.
+
+\subsection{Character width}
+See \vref{sec:CharacterWidth} for relevant examples; the features are
+the same between OpenType and \AAT\ fonts.
+\AAT\ also allows \feat{CharacterWidth}|=|\opt{Default} to return to
+the original font settings.
+
+\subsection{Diacritics}
+Diacritics are marks, such as the acute accent or the tilde, applied to letters; they usually indicate a change in pronunciation.
+In Arabic scripts, diacritics are used to indicate vowels.
+You may either choose
+to \opt{Show}, \opt{Hide} or \opt{Decompose} them in \AAT\ fonts.
+The \opt{Hide} option is for scripts such as Arabic which may be
+displayed either with or without vowel markings. E.g.,
+\verb|\fontspec[Diacritics=Hide]{...}|
+
+Some older fonts distributed with \MacOSX\ included `|O/|' \etc\ as shorthand for writing `\O' under the label of the \feat{Diacritics} feature. If you come across such fonts, you'll
+want to turn this feature off (imagine typing |hello/goodbye| and
+getting `hell\o goodbye' instead!) by decomposing the two characters
+in the diacritic into the ones you actually
+want. I recommend using
+the proper \LaTeX\ input conventions for obtaining such characters
+instead.
+
+
+\subsection{Annotation}
+Various Asian fonts are equipped with a more extensive range of
+numbers and numerals in different forms. These are accessed through
+the \feat{Annotation} feature with the following
+options: \opt{Off},
+\opt{Box}, \opt{RoundedBox}, \opt{Circle}, \opt{BlackCircle},
+\opt{Parenthesis}, \opt{Period}, \opt{RomanNumerals}, \opt{Diamond},
+\opt{BlackSquare}, \opt{BlackRoundSquare}, and \opt{DoubleCircle}.
+
+\end{document}
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec-example.tex b/macros/unicodetex/latex/fontspec/fontspec-example.tex
new file mode 100644
index 0000000000..bf2831b134
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-example.tex
@@ -0,0 +1,48 @@
+%%^^A%% fontspec-example.tex -- part of FONTSPEC <wspr.io/fontspec>
+
+\documentclass{article}
+
+\usepackage{fontspec}
+
+\setmainfont{TeX Gyre Pagella}
+\setsansfont{TeX Gyre Heros}[Scale=MatchLowercase]
+\setmonofont{Inconsolata}[Scale=MatchLowercase]
+
+\begin{document}
+\pagestyle{empty}
+
+\section*{The basics of the \textsf{fontspec} package}
+
+The \textsf{fontspec} package enables automatic font selection
+for \LaTeX{} documents typeset with Xe\TeX{} or Lua\TeX.
+The basic command is
+
+{\centering \verb|\fontspec{font display name}[font features]|.\par}
+
+The default, sans serif, and typewriter fonts may be set with the
+commands \verb|\setmainfont|, \verb|\setsansfont| and \verb|\setmonofont|,
+respectively, as shown in the preamble. They take the
+same syntax as the \verb|\fontspec| package. All expected font
+shapes are available:
+
+\begin{center}
+ {\itshape Italics and \scshape small caps\dots}\\
+ {\sffamily\bfseries Bold sans serif and \itshape bold italic sans serif\dots}
+\end{center}
+
+Text fonts in maths mode are also changed (e.g., notice the cosine function in
+`$\cos(n\pi)=\pm 1$') but only if the roman and sans serif fonts are set in
+the preamble; \verb|\setmainfont| will not affect these maths mode fonts when
+called mid-document.
+Maths symbols themselves are not affected.
+
+Notice the font features used to load the default fonts in the preamble.
+\verb|Ligatures=TeX| is automatically enabled for the roman and sans font,
+allowing regular \TeX{} ligatures like \verb|``---''| for ``---''.
+\verb|Scale=MatchLowercase| automatically scales the fonts to
+the same x-height.
+
+Please see the complete \textsf{fontspec} documentation for further
+information.
+
+\end{document}
diff --git a/macros/unicodetex/latex/fontspec/fontspec-lua.dtx b/macros/unicodetex/latex/fontspec/fontspec-lua.dtx
new file mode 100644
index 0000000000..fdbe11e9d1
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec-lua.dtx
@@ -0,0 +1,101 @@
+%%^^A%% fontspec-lua.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%
+% \section{Lua module}
+%
+% \begin{macrocode}
+%<*lua>
+% \end{macrocode}
+% \begin{macrocode}
+local err, warn, info, log = luatexbase.provides_module(fontspec.module)
+% \end{macrocode}
+% Some utility functions
+% \begin{macrocode}
+fontspec.log = log or (function (s) luatexbase.module_info("fontspec", s) end)
+fontspec.warning = warn or (function (s) luatexbase.module_warning("fontspec", s) end)
+fontspec.error = err or (function (s) luatexbase.module_error("fontspec", s) end)
+% \end{macrocode}
+%
+% We need a catcode table for tex.sprint(). See issue \#230.
+% TODO: probably time to get rid of the backwards compatibility here:
+% \begin{macrocode}
+local latex
+if luatexbase.registernumber then
+ latex = luatexbase.registernumber("catcodetable@latex")
+else
+ latex = luatexbase.catcodetables.CatcodeTableLaTeX
+end
+% \end{macrocode}
+%
+% The following are the function that get called from \TeX\ end.
+% \begin{macrocode}
+local function tempswatrue() tex.sprint(latex,[[\FontspecSetCheckBoolTrue ]]) end
+local function tempswafalse() tex.sprint(latex,[[\FontspecSetCheckBoolFalse]]) end
+% \end{macrocode}
+%
+% \begin{macrocode}
+function fontspec.check_ot_script(fnt, script)
+ if luaotfload.aux.provides_script(font.id(fnt), script) then
+ tempswatrue()
+ else
+ tempswafalse()
+ end
+end
+% \end{macrocode}
+%
+% \begin{macrocode}
+function fontspec.check_ot_lang(fnt, lang, script)
+ if luaotfload.aux.provides_language(font.id(fnt), script, lang) then
+ tempswatrue()
+ else
+ tempswafalse()
+ end
+end
+% \end{macrocode}
+%
+% \begin{macrocode}
+function fontspec.check_ot_feat(fnt, feat, lang, script)
+ for _, f in ipairs { "+trep", "+tlig", "+anum" } do
+ if feat == f then
+ tempswatrue()
+ return
+ end
+ end
+ if luaotfload.aux.provides_feature(font.id(fnt), script, lang, feat) then
+ tempswatrue()
+ else
+ tempswafalse()
+ end
+end
+% \end{macrocode}
+%
+% \begin{macrocode}
+function fontspec.mathfontdimen(fnt, str)
+ local mathdimens = luaotfload.aux.get_math_dimension(fnt, str)
+ if mathdimens then
+ tex.sprint(-2,mathdimens)
+ tex.sprint(-2,"sp")
+ else
+ tex.sprint(-2,"0pt")
+ end
+end
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</lua>
+% \end{macrocode}
+
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec.cfg b/macros/unicodetex/latex/fontspec/fontspec.cfg
new file mode 100644
index 0000000000..f7dbe9fc68
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec.cfg
@@ -0,0 +1,22 @@
+
+
+%%% FONTSPEC.CFG %%%
+%
+% This configuration file sets up TeX Ligatures by default for all fonts loaded
+% with `\setmainfont` and `\setsansfont`.
+%
+% In addition, `\setmonofont` has default features to enforce "monospace"
+% settings with regard to space stretchability and shrinkability.
+%
+% Make a copy of this file in your own home TEXMF directory to set up your own
+% defaults.
+
+\defaultfontfeatures
+ [\rmfamily,\sffamily]
+ {Ligatures=TeX}
+
+\defaultfontfeatures
+ [\ttfamily]
+ {WordSpace={1,0,0},
+ HyphenChar=None,
+ PunctuationSpace=WordSpace}
diff --git a/macros/unicodetex/latex/fontspec/fontspec.dtx b/macros/unicodetex/latex/fontspec/fontspec.dtx
new file mode 100644
index 0000000000..5d07989465
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec.dtx
@@ -0,0 +1,116 @@
+%%^^A%% fontspec.dtx -- part of FONTSPEC <wspr.io/fontspec>
+%%^^A%% Metadata for the package, including files and versioning
+
+% \section{Package declaration}
+%
+% List all \texttt{dtx} files for running the \texttt{ins} file
+% and typesetting the code.
+% \begin{macrocode}
+%<*dtx>
+\gdef\FONTSPECDTX{
+ \DTX{fontspec.dtx}
+ \DTX{fontspec-code-load.dtx}
+ \DTX{fontspec-code-vars.dtx}
+ \DTX{fontspec-code-msg.dtx}
+ \DTX{fontspec-code-opening.dtx}
+ \DTX{fontspec-code-fontload.dtx}
+ \DTX{fontspec-code-interfaces.dtx}
+ \DTX{fontspec-code-user.dtx}
+ \DTX{fontspec-code-api.dtx}
+ \DTX{fontspec-code-internal.dtx}
+ \DTX{fontspec-code-opentype.dtx}
+ \DTX{fontspec-code-graphite.dtx}
+ \DTX{fontspec-code-keyval.dtx}
+ \DTX{fontspec-code-feat-opentype.dtx}
+ \DTX{fontspec-code-scripts.dtx}
+ \DTX{fontspec-code-lang.dtx}
+ \DTX{fontspec-code-feat-aat.dtx}
+ \DTX{fontspec-code-enc.dtx}
+ \DTX{fontspec-code-math.dtx}
+ \DTX{fontspec-code-closing.dtx}
+ \DTX{fontspec-code-xfss.dtx}
+}
+%</dtx>
+% \end{macrocode}
+%
+% Now exit if we're using plain \TeX; this would usually be the case when
+% loading this file with \texttt{fontspec.ins}.
+% \begin{macrocode}
+%<*dtx>
+\def\tmpa{plain}
+\ifx\tmpa\fmtname\expandafter\endinput\fi
+%</dtx>
+% \end{macrocode}
+%
+% Metadata for documentation; the official title and authors of the package.
+% \begin{macrocode}
+%<*dtx>
+\title{
+ The \textsf{fontspec} package\\
+ Font selection for \XeLaTeX\ and \LuaLaTeX
+}
+\author{
+ \textsc{Will Robertson}\\
+ With contributions by Khaled Hosny,\\
+ Philipp Gesang, Joseph Wright, and others.\\
+ \url{http://wspr.io/fontspec/}
+}
+%</dtx>
+% \end{macrocode}
+%
+% Declare the package version and date for each of the \texttt{.sty} files generated.
+% In addition, declare the version and date for this \texttt{.dtx} file.
+% \begin{macrocode}
+%<fontspec>\RequirePackage{xparse}
+%<fontspec&load>\ProvidesExplPackage{fontspec}%
+%<fontspec&XE>\ProvidesExplPackage{fontspec-xetex}%
+%<fontspec&LU>\ProvidesExplPackage{fontspec-luatex}%
+%<*dtx>
+\RequirePackage{xparse}
+\ProvidesExplFile{fontspec.dtx}
+%</dtx>
+%<*fontspec>
+ {2020/02/21}{2.7i}{Font selection for XeLaTeX and LuaLaTeX}
+%</fontspec>
+% \end{macrocode}
+%
+% Here the version and date are setup for typesetting the documentation.
+% \begin{macrocode}
+%<*dtx>
+\GetFileInfo{fontspec.dtx}
+\date{\filedate \qquad \fileversion}
+%</dtx>
+% \end{macrocode}
+%
+% \subsection{\textsf{Lua} header}
+%
+% \begin{macrocode}
+%<lua>fontspec = fontspec or {}
+%<lua>local fontspec = fontspec
+%<lua>fontspec.module = {
+%<lua> name = "fontspec",
+%<lua> version = "2.7i",
+%<lua> date = "2020/02/21",
+%<lua> description = "Font selection for XeLaTeX and LuaLaTeX",
+%<lua> author = "Khaled Hosny, Philipp Gesang, Will Robertson",
+%<lua> copyright = "Khaled Hosny, Philipp Gesang, Will Robertson",
+%<lua> license = "LPPL v1.3c"
+%<lua>}
+% \end{macrocode}
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec.ins b/macros/unicodetex/latex/fontspec/fontspec.ins
new file mode 100644
index 0000000000..adace502d2
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec.ins
@@ -0,0 +1,60 @@
+%%^^A%% fontspec.ins -- part of FONTSPEC <wspr.io/fontspec>
+
+\input fontspec.dtx\relax
+\input l3docstrip.tex\relax
+
+\keepsilent
+\usedir{tex/latex/fontspec}
+\let\MetaPrefix\relax
+\preamble
+------------------------------------------------
+The FONTSPEC package <wspr.io/fontspec>
+------------------------------------------------
+Copyright 2004-2017 Will Robertson, LPPL "maintainer"
+Copyright 2009-2013 Khaled Hosny
+------------------------------------------------
+This package is free software and may be redistributed and/or modified under
+the conditions of the LaTeX Project Public License, version 1.3c or higher
+(your choice): <http://www.latex-project.org/lppl/>.
+------------------------------------------------
+\endpreamble
+\nopostamble
+\askforoverwritefalse
+
+\def\MetaPrefix{-- }
+\generate{\file{fontspec.lua}{
+ \from{fontspec.dtx}{lua}
+ \from{fontspec-lua.dtx}{lua}
+}}
+
+\let\MetaPrefix\DoubleperCent
+\ifx\FontspecDebug\undefined\def\FSDEBUG{}\else\def\FSDEBUG{,debug}\fi
+
+\generate{\file{fontspec.sty}{
+ \from{fontspec.dtx}{fontspec,load\FSDEBUG}
+ \from{fontspec-code-load.dtx}{fontspec,load\FSDEBUG}
+}}
+
+\def\DTX#1{\from{#1}{fontspec,XE\FSDEBUG}}
+\generate{\file{fontspec-xetex.sty}{\FONTSPECDTX}}
+
+\def\DTX#1{\from{#1}{fontspec,LU\FSDEBUG}}
+\generate{\file{fontspec-luatex.sty}{\FONTSPECDTX}}
+
+\endbatchfile
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec.ltx b/macros/unicodetex/latex/fontspec/fontspec.ltx
new file mode 100644
index 0000000000..b497948696
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec.ltx
@@ -0,0 +1,40 @@
+%%^^A%% fontspec.ltx -- part of FONTSPEC <wspr.io/fontspec>
+
+\ifdefined \XeTeXOTcountscripts \else \makeatletter
+ \@latex@error{^^J*** The fontspec documentation can only be typeset with `xelatex` ***\@gobble}\@ehc
+\fi
+
+\documentclass[a4paper]{l3doc}
+\usepackage{fontspec-doc-style}
+\begin{document}
+\maketitle
+\tableofcontents
+\newpage
+
+\include{fontspec-doc-intro}
+\include{fontspec-doc-fontsel}
+\include{fontspec-doc-featset}
+\include{fontspec-doc-opentype}
+\include{fontspec-doc-enc}
+\include{fontspec-doc-luatex}
+\include{fontspec-doc-xetex}
+\include{fontspec-doc-api}
+
+\end{document}
+
+\endinput
+
+% /©
+% ------------------------------------------------
+% The FONTSPEC package <wspr.io/fontspec>
+% ------------------------------------------------
+% Copyright 2004-2020 Will Robertson, LPPL "maintainer"
+% Copyright 2009-2015 Khaled Hosny
+% Copyright 2013 Philipp Gesang
+% Copyright 2013-2016 Joseph Wright
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% ©/
diff --git a/macros/unicodetex/latex/fontspec/fontspec.pdf b/macros/unicodetex/latex/fontspec/fontspec.pdf
new file mode 100644
index 0000000000..97e8a293a0
--- /dev/null
+++ b/macros/unicodetex/latex/fontspec/fontspec.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/CHANGES.md b/macros/unicodetex/latex/lilyglyphs/CHANGES.md
new file mode 100644
index 0000000000..f99c28209e
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/CHANGES.md
@@ -0,0 +1,142 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+*lilyglyphs* - Release Notes
+============================
+This document lists all changes in the development of *lilyglyphs*.
+All changes should be present in the manual, but only the finished versions printed bold are available as pdf downloads. (Latest changes are only found in the master branch of the git repository. They should be documentd in the lilyglyphs.tex file there too.)
+So the lines above the topmost bold version line represent the changes not available in the downloadable pdf documentation.
+
+0.2.3
+---
+(2014-03-13)
+Some enhancements and additions, new version of the font files
+
+- Update Emmentaler fonts to 2.18.0
+- Provide consistent BE and AE versions of singlenote commands
+- Add set of articulation symbols
+- Add a set of \threeBeamedQuavers commands
+- Add \demisemiquaver commands (up/down, dotted)
+- Fix trailing space of \quaver and \semiquaver
+ (may affect spacing of existing documents)
+
+0.2.2
+-----
+(2013-09-27)
+Mainly resolving some issues that have become visible *due to* the intial release
+
+- Fix upright quotes in code examples
+- Fix path bug with Python scripts in OS X
+- Fix bug with library lookup in Python scripts,
+ revert some settings unnecessarily made for TeXLive distribution
+- Add German version of example document
+- Add predefined commands:
+ `\wholeNote`, `\wholeNoteDotted`
+ Accordion notation (available Emmentaler glyphs)
+- Rename `\fancyExample` to `\lilyFancyExample` to avoid confusion
+- lilyglyphs is now available through CTAN and TeXLive
+
+0.2.1
+-----
+(2013-09-15)
+
+- lilyglyphs now also works with LuaLaTeX!
+ (Thanks to Dave Bellows)
+- considerable revision of the manual
+- Provide 'private' directory to add personal commands
+- pdf files for image based commands are now tracked in the Git repository
+- some modifications to the use of the Python scripts
+- Drop support/necessity for starred commands
+ All commands by default now don't print a space after them.
+ To achieve that effect one has to write a pair of curly braces.
+ This is in line with default behaviour of e.g \LaTeX{} and similar commands
+- The command generation scripts accept scale= and raise= entries
+ that set default values for subsequent commands
+- Fix \lilyTimeSignature
+ Now scales correctly and doesn't have a fraction line anymore.
+ 'raise' still doesn't work.
+
+0.2.0
+-----
+(2012-11-10)
+
+- Add some commands with images, mainly single notes.
+- graphical \lilyglyphs command with corresponding .pdf and .png files
+- Python script rebuild-pdfs.py
+ Re-creates pdf files for use in image driven commands that are missing
+ because they are not tracked in Git
+ Python script deploy.py
+ Gathers the relevant files and puts them in an archive
+- Python script genGlyphCommands.py
+ Very easy way to create new commands with arbitrary sources.
+- Python script buildglyphimages.py
+ Very easy way to create new image glyphs and their respective commands
+ at the same time. You can edit the objects in LilyPond, then
+ let the script do the rest: write LilyPond source files, compile the image files,
+ create LaTeX commands, a documentation table and test code for fine-tuning the commands.
+- New generic commands \lilyPrintImage and \lilyImage
+ (loading 'glyphs' from PDF images created with LilyPond)
+
+0.1.0
+-----
+(2012-10-19)
+
+- Add dotted symbols and the logic behind it
+- Add some rest glyphs
+- Add fermata
+- Add all 'sharp' accidentals
+
+0.0.5
+-----
+(2012-09-25)
+
+- Exchange meaning of starred and unstarred command versions:
+ Unstarred now means: with trailing space (continuous text),
+ starred means: without trailing space
+- Implement numerical time signatures
+ (scaling and vertical placement don't work properly yet)
+- Plus: Major rewrite of the manual
+
+0.0.2
+-----
+(2012-09-23)
+
+- New syntax accepting key=value options for generic and predefined commands.
+- Options can be set at global, design time and command invocation level.
+- Optical sizes of the Emmentaler font can be selected
+
+0.0.1
+-----
+(2012-09-06)
+
+- All glyphs from Emmentaler can be printed using generic access commands
+- Some predefined commands are already available.
diff --git a/macros/unicodetex/latex/lilyglyphs/INSTALL b/macros/unicodetex/latex/lilyglyphs/INSTALL
new file mode 100644
index 0000000000..fcc757b722
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/INSTALL
@@ -0,0 +1,44 @@
+INSTALL for 'lilyglyphs'
+
+'lilyglyphs' is a package to make musical symbols and
+notational elements of the LilyPond engraving software
+(http://www.lilypond.org) available to LaTeX documents.
+
+There are several ways to obtain the package, with different
+installation procedures.
+
+If you have obtained the package through a TeX distribution
+you should be able to use the package without further action.
+For advanced options and usage please refer to the manual.
+
+If you have downloaded lilyglyphs.zip from CTAN please extract the
+archive to a location in your TEXMFHOME tree,
+e.g. ~/texmf/tex/latex/lilyglyphs on Linux.
+
+If you want to use the Github repository you should clone it
+(or your fork) to a directory in your local texmf tree, e.g.
+~/texmf/tex/latex/lilyglyphs on Linux.
+It is advisable to first create a fork and additionally add
+the official repository as an 'upstream' remote.
+
+With both options you should make sure the package directory is
+actually called 'lilyglyphs'.
+
+With both downloaded options you have to make the enclosed 'Emmentaler'
+OpenType font visible to LaTeX.
+For this you can copy the fonts/ directory to your TEXMFHOME/fonts/opentype
+directory and rename it to lilyglyphs or emmentaler. Even better, create a
+link there to the original folder in the package. This way you won't be
+affected by updates of the font files in the package.
+It is important to note that you should not have the Emmentaler fonts
+installed as system fonts in parallel because this might irritate
+XeLaTeX.
+
+Please note that the Github repository doesn't contain a precompiled
+manual. If you want to compile the manual with LuaLaTeX or XeLaTeX
+
+you need the (free) fonts 'Linux Libertine O', 'Linux Biolinum O' and
+'DejaVu Sans Mono'. If you don't want or can't install them you can modify
+'documentation/lilyglyphsManualFonts.sty' to use different fonts
+or remove the reference to it from 'documentation/lilyglyphs.tex'
+to use default fonts.
diff --git a/macros/unicodetex/latex/lilyglyphs/README b/macros/unicodetex/latex/lilyglyphs/README
new file mode 100644
index 0000000000..ce1bc35768
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/README
@@ -0,0 +1,44 @@
+README for 'lilyglyphs'
+
+'lilyglyphs' is a package to make musical symbols and
+notational elements of the LilyPond engraving software
+(http://www.lilypond.org) available to LaTeX documents.
+
+(C) Urs Liska and others 2012-2013
+
+Symbols can be inserted like characters in the continuous text,
+either through a growing number of predefined commands or through
+generic access commands that can insert and print virtually anything
+that can be achieved with LilyPond.
+Different from any other solution I have found so far 'lilyglyphs'
+items scale perfectly with any text font size and provide
+detailed control over their placement and scaling.
+
+'lilyglyphs' uses 'fontspec' to access LilyPond's 'Emmentaler'
+OpenType fonts, so it can only be used with LuaLaTeX and XeLaTeX,
+which are both supported.
+The manual uses the (free) fonts 'Linux Libertine O', 'Linux
+Biolinum O' and 'DejaVu Sans Mono', so in order to compile the manual
+you need these fonts installed or have to manually modify/replace
+the file 'documentation/lilyglyphsManualFonts.sty'.
+
+Symbols that aren't covered by the 'Emmentaler' fonts are provided
+with the help of small pdf image files that have been generated with
+LilyPond itself. If you want to extend the package with your own
+commands based on images you have to use LilyPond, i.e. you need a
+working installation. This isn't necessary to _use_ 'lilyglyphs', however.
+The package contains helper scripts that streamline the creation
+of new commands. If you want to make use of them you will also
+need a working installation of Python 2. Of course this too isn't
+a requirement for using the package.
+
+'lilyglyphs' is distributed under the LaTeX Project Public License
+Version 1.3c (license/COPYING.LPPL),
+the included Emmentaler OpenType fonts are distributed under the
+SIL Open Font License, Version 1.1 (otf/LICENSE.OFL)
+
+The project homepage is http://www.openlilylib.org/lilyglyphs
+The development platform is at https://github.com/openlilylib/lilyglyphs
+There you can report and discuss bugs, problems, suggestions etc.
+You may also check out the openlilylib-user mailing list at
+https://lists.sourceforge.net/lists/listinfo/openlilylib-user
diff --git a/macros/unicodetex/latex/lilyglyphs/VERSION b/macros/unicodetex/latex/lilyglyphs/VERSION
new file mode 100644
index 0000000000..c202238f1b
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/VERSION
@@ -0,0 +1,2 @@
+This is lilyglyphs 0.2.3
+Generated on 2014-03-12
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-400.png b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-400.png
new file mode 100644
index 0000000000..6c0228629d
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-400.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-600.png b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-600.png
new file mode 100644
index 0000000000..d524ca3b0f
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-600.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-de.pdf b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-de.pdf
new file mode 100644
index 0000000000..a50d91876f
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-de.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-de.tex b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-de.tex
new file mode 100644
index 0000000000..07f63a33bf
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example-de.tex
@@ -0,0 +1,91 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[oneside,11pt]{article}
+\usepackage{lilyglyphsStyle}
+\usepackage{lilyglyphsManualFonts}
+
+\usepackage{polyglossia}
+\setmainlanguage{german}
+
+\pagestyle{empty}
+
+
+% make the glyphs lighter
+\lilyOpticalSize{26}
+
+\begin{document}
+\begin{center}
+{ \Huge \lilyglyphs }
+
+\bigskip
+{ \Large Urs Liska }
+
+\emph{September 2013}
+
+\end{center}
+
+\bigskip
+
+Sie schreiben Texte über Musik, vielleicht als Musikwissenschaftler, Lehrer oder Komponist?
+Sie bereiten solche Dokumente zum Druck vor und haben schon immer die Möglichkeit vermisst, Dinge wie das Folgende zu setzen?
+
+\begin{quote}
+„In T.\,24 gilt das \decrescHairpin{} von der 2.\,\halfNote{} bis zum \lilyDynamics{sf} auf dem 11.\,\semiquaverDown[raise=-.5].“
+\end{quote}
+
+Das neue Paket \lilyglyphs{}%
+\footnote{\url{http://www.openlilylib.org/lilyglyphs} -- \href{mailto:info@openlilylib.org}{info@openlilylib.org}}
+erlaubt es auf komfortable Weise, Notationselemente aus LilyPond%
+\footnote{\url{http://www.lilypond.org}}
+in Textdokumenten zu verwenden.
+Vorzeichen wie \flat{} oder \sharp, aber auch Zeichen wie \hspace{.5ex}\fermata{} und Taktangaben wie \lilyTimeCHalf{} oder \lilyTimeSignature{5\,+\,7}{8} sind unmittelbar zugänglich.
+Aber Sie können auch beliebige Notationskonstrukte wie \lilyFancyExample{} dieses sinnfreie Beispiel in den Fließtext einfügen oder gar eingescannte Bilddateien als „Zeichen“ verfügbar machen.
+Dieses Paket kann Ihre typographischen Optionen für das Schreiben oder Setzen von kritischen Berichten, analytischen Texten oder Unterrichtsmaterial erheblich erweitern.
+
+Ein Aspekt, der \lilyglyphs{} von allen mir bekannten Lösungen unterscheidet, ist, dass es nicht auf einen Satz vorgefertigter Symbole beschränkt ist, sondern \emph{jegliche} Notation setzen kann, die mit LilyPond realisierbar ist.
+
+\footnotesize
+Die andere Besonderheit ist die \halfNoteRest{} automatische Größenanpassung an die umgebende Schriftgröße,
+\large was es leicht macht, die \halfNoteRest{} Zeichen im Fließtext zu verwenden.
+\normalsize
+Sie passen sich grundsätzlich von selbst an, können aber auch \clefF[scale=.4] manuell skaliert werden, einzeln oder pauschal \clefG[scale=1.3,raise=-2.9].
+
+\medskip
+Zu schön um wahr zu sein?
+Zugegeben, die Sache hat einen Haken: \lilyglyphs{} ist ein \LaTeX{}%
+\footnote{\url{http://www.latex-project.org}}-Paket und erfordert daher möglicherweise ein Umdenken.
+Sollten die obigen Beispiele aber Ihr Interesse geweckt haben oder Ihren professionellen Bedürfnissen entgegenkommen, dann machen Sie doch einfach einmal einen Versuch -- es ist ohnehin alles Freie Software.
+(Vielleicht ist auch mein Aufsatz über textbasiertes Arbeiten eine hilfreiche Lektüre%
+\footnote{\url{http://lilypondblog.org/2013/07/plain-text-files-in-music/}}).
+
+\end{document} \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.pdf b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.pdf
new file mode 100644
index 0000000000..6a36397d37
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.png b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.png
new file mode 100644
index 0000000000..bf668e9a8d
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.tex b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.tex
new file mode 100644
index 0000000000..4761593809
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs-example.tex
@@ -0,0 +1,89 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[oneside,11pt]{article}
+\usepackage{lilyglyphsStyle}
+\usepackage{lilyglyphsManualFonts}
+
+\pagestyle{empty}
+
+\newcommand{\superscript}[1]{{\addfontfeatures{VerticalPosition=Superior}#1}}
+\linespread{1.1}
+
+% make the glyphs lighter
+\lilyOpticalSize{26}
+
+\begin{document}
+\begin{center}
+{ \Huge \lilyglyphs }
+
+\bigskip
+{ \Large Urs Liska }
+
+\emph{September 2013}
+
+\end{center}
+
+\bigskip
+
+You are authoring text documents about music, maybe you're a musicologist, teacher, or composer?
+You are preparing such documents for publication and have always missed the ability to print sentences like this one?
+
+\begin{quote}
+In m.\,24 the \decrescHairpin{} lasts from the 2\superscript{nd} \halfNote{} to the \lilyDynamics{sf} on the 11\superscript{th} \semiquaverDown[raise=-.5].
+\end{quote}
+
+With the new package \lilyglyphs{} you can easily insert the notational elements of the LilyPond%
+\footnote{\url{http://www.lilypond.org}}
+engraving software in your text documents.
+Accidentals like \flat{} or \sharp, but also articulation scripts (\hspace{.65ex}\fermata{}) and time signatures such as \lilyTimeCHalf{} or \lilyTimeSignature{5\,+\,7}{8} are readily available.
+But you can also insert arbitrary notational constructs like this mockup example \lilyFancyExample{} into your text or even make scanned images available as “characters”.
+This package may greatly extend your typographical options when authoring or typesetting critical reports, analytical texts or teaching/exam material.
+
+One thing that sets \lilyglyphs{} apart from other solutions I had investigated is that one isn't restricted to a set of predefined symbols but is able to print \emph{any notation} that can be realized with LilyPond.
+
+\footnotesize
+The other nice thing is that the glyphs \halfNoteRest{} scale well with the surrounding font size,
+\large making it easy \halfNoteRest{} to incorporate them into continuous text.
+\normalsize By default the glyphs scale automatically but they can also be scaled \clefF[scale=.4] manually, either individually or document-wise \clefG[scale=1.5,raise=-3.1].
+
+\medskip
+Sounds too good to be true? Well, there’s one catch to it: \lilyglyphs{} is a \LaTeX{}%
+\footnote{\url{http://www.latex-project.org}}
+package, so you may have to consider a change in mind-set.
+But if the above examples whet your appetite and match your professional needs you should really consider giving it a serious try -- it's all Free Software anyway.
+You may find reading my essay on the advantages of plain text toolchains helpful too%
+\footnote{\url{http://lilypondblog.org/2013/07/plain-text-files-in-music/}}.
+
+For more information you may visit \lilyglyphs' project homepage \url{http://openlilylib.org/lilyglyphs} or contact us through \href{mailto:info@openlilylib.org}{info@openlilylib.org}.
+
+\end{document} \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs.pdf b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs.pdf
new file mode 100644
index 0000000000..c73d2be2e3
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs.tex b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs.tex
new file mode 100644
index 0000000000..078aae2a88
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs.tex
@@ -0,0 +1,1429 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[oneside]{scrreprt}
+\usepackage{lilyglyphsStyle}
+\usepackage{lilyglyphsManualFonts}
+\usepackage{paralist}
+\begin{document}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Title page
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\title{\lilyglyphs[scale=1.5]\\~\\
+ \normalsize Version 0.2.3}
+\author{Urs Liska}
+
+\maketitle
+
+\pagebreak
+
+\section*{Quick Start}
+\lilyglyphs{} enables \LaTeX{} to include arbitrary notational elements from the LilyPond%
+\footnote{\url{http://www.lilypond.org}}
+notation software like characters in continuous text.
+As it uses \package{fontspec} to access glyphs from an OpenType font \lilyglyphs{} works with \hologo{XeLaTeX} or \hologo{LuaLaTeX} exclusively.
+
+If you have obtained the package as part of a \TeX{} distribution the following Minimal Working Example should get you going in a minute and show if everything works correctly.
+If you have downloaded the package please refer to \fref{sec:installation} for a few more preliminary installation steps.
+
+\medskip
+
+\begin{lstlisting}[language={[LaTeX]TeX}]
+\documentclass{article} % Should work with any documentclass
+\usepackage{fontspec} % Is necessary to access OpenType fonts
+\usepackage{lilyglyphs} % Currently there are no package options available
+\begin{document}
+\flatflat{} or \clefGInline. % Predefined commands,
+ % Use {} to allow trailing whitespace
+\lilyGlyph[scale=1.2, raise=.5]{timesig.neomensural64}
+ % Access "Emmentaler" glyphs by their name
+ % Generic commands have one mandatory
+ % and one optional (placement) argument.
+\twoBeamedQuavers % Commands that include images instead of font glyphs.
+\end{document}
+\end{lstlisting}
+
+\medskip
+In the text you can use predefined commands like \flatflat{} or \clefGInline.
+Commands without the pair of curly braces swallow any trailing whitespace -- use these before punctuations or to combine symbols.
+For the available predefined commands consult the reference in \fref{chap:list_predefined_commands}.
+
+Glyphs that are part of LilyPond's \emmentaler{} font but not covered by a predefined command yet can be accessed through the generic command \cmd{lilyGlyph\{GLYPHNAME\}}, the glyph names being listed in \url{http://www.lilypond.org/doc/v2.16/Documentation/notation/the-feta-font.html}
+or in the file \dir{the-feta-font-2-16-2.html} located in the the \dir{documentation} directory of the package.
+As an example take this neomensural time signature \lilyGlyph[scale=1.2, raise=.5]{timesig.neomensural64}.
+Other symbols can be included as image files \twoBeamedQuavers[scale=.95], but from the author's perspective this doesn't make a difference.
+
+All commands accept an optional argument containing \texttt{key=value} pairs.
+Currently two keys are supported:
+\texttt{scale} multiplies the size of the glyph by the given factor while \texttt{raise} shifts it vertically by the given amount interpreted as \emph{ex}.
+Glyphs accessed individually generally need these options, see the neomensural time signature in the example.
+
+Apart from the Emmentaler glyphs \lilyglyphs{} can include any notational construct that LilyPond can produce.
+Please refer to \fref{sec:generic_access_commands} to learn about the \emph{generic access commands} and to \fref{sec:generating_commands_image} for detailed instructions how to create custom commands.
+
+\lilyglyphs{} elements \tiny automatically \halfNoteRest{} \normalsize or manually \huge \halfNoteRest{} \normalsize scale with the \halfNoteRest{} text size commands.
+
+\tableofcontents
+\vfill
+
+\pagebreak
+
+\vfill
+%\input{copyright-notice.inp}
+
+\chapter{Introduction}
+\label{chap:introduction}
+
+\lilyglyphs{} came into existence when I looked for a way to include arbitrary notational elements in the continuous text of \LaTeX{} documents.
+Unfortunately all packages I could find were quite restricted in the number of available symbols and/or their flexibility in scaling with the text size.
+Moreover no solution came near the beauty of the engraving of LilyPond%
+\footnote{\url{http://www.lilypond.org}}.
+Therefore I decided to “roll my own” package and make the notation font and notational elements of LilyPond available to \LaTeX{} documents.
+
+LilyPond is a promising competitor in producing the most beautiful musical engraving on the market, and one of the foundations of this beauty is its \emmentaler{} font.
+\lilyglyphs{} accesses the Emmentaler font through the \package{fontspec} package and inserts its glyphs in the continuous text applying sophisticated control over scaling and spacing.
+Therefore it relies on a \LaTeX{} engine supporting \package{fontspec}.
+It was written using \hologo{XeLaTeX}, but thanks to the contribution of Dave Bellows%
+\footnote{\url{http://www.davebellows.com}}
+it now also works with \hologo{LuaLaTeX}%
+\footnote{Principally it is possible to extend the functionality so it would also work with plain \LaTeX{} by accessing non-OpenType variants of the font, but as the package maintainer has neither experience nor active interest in this area this will only be implemented if there are volunteers who join us.}.
+
+The Emmentaler font only provides a subset of LilyPond's notational capabilities, as LilyPond draws many symbols itself.
+After some experiments with drawing such elements in \LaTeX{} it became clear that this approach isn't really maintainable -- and especially wouldn't provide a sufficient output quality.
+Therefore this kind of elements is included through small \textsc{pdf} image files that have explicitely been created with LilyPond.
+
+Great care has been taken to make the notational elements scale well with the surrounding text font size.
+Each single element can be scaled and vertically shifted, but the settings can also be done per document to accomodate for unusual body fonts that might not match too well with \lilyglyphs.
+
+\medskip
+The coverage of glyphs is far from being comprehensive, but the package is already very usable for real-world documents.
+Any Emmentaler glyph that isn't covered yet by a predefined command can be accessed by its name.
+Other -- image based -- commands (for example arbitrarily complex musical expressions) can be added through a process that has been made as simple as possible (although it involves using external software such as LilyPond and possibly Python).
+Details about extending \lilyglyphs{} with additional commands can be found in \fref{chap:python_scripts}.
+
+
+As the number of possible commands seems endless we would be extremely happy about any contribution of new material.
+But there are also technical details with regard to \LaTeX{} programming where additional competence would be highly welcome.
+You may have a look at the issue tracker%
+\footnote{\url{https://github.com/openlilylib/lilyglyphs/issues}}
+to get an idea where you could help.
+
+\bigskip
+
+Originally \lilyglyphs{} was a project on its own but by now it is part of a rather large family of projects around engraving musical scores with LilyPond and typesetting texts with \LaTeX: openLilyLib%
+\footnote{\url{http://www.openlilylib.org}}.
+If you have come here mainly as a \LaTeX{} document author you should also have a look at the \package{musicexamples} package%
+\footnote{\url{http://www.openlilylib.org/musicexamples}}.
+If you are also interested in LilyPond itself you might find the tutorials section, \package{lilylib} and \package{lilypond-doc} interesting too.
+A few more projects are still in the planning phase, and you can always see the current state of affairs at our Github starting page%
+\footnote{\url{https://github.com/openlilylib}}.
+\lilyglyphs{} is developed in the \dir{lilyglyphs} directory of this project site, there you can inspect the source, clone or fork the repository, and submit issue reports.
+If you are interested in participating in the development of \lilyglyphs, don't hesitate to contact us directly\footnote{\url{mailto:ul@openlilylib.org}}.
+
+\section{Installation}
+\label{sec:installation}
+
+\paragraph{Installation Options}
+There are several ways to get \lilyglyphs{} up and running: As part of a \TeX{} distribution, as a download from CTAN%
+\footnote{http://www.ctan.org/pkg/lilyglyphs}
+or through its development repository on GitHub%
+\footnote{\url{https://github.com/openlilylib/lilyglyphs}},
+which is the recommended way if you're familiar with Git.
+If it's contained in your distribution you should be able to simply \emph{use} the package and start typing, e.\,g. with the example given in the “Quick Start” at the beginning of this manual.
+Otherwise there are a few steps of manual installation.
+
+\lilyglyphs{} is known to need fairly recent versions of \package{fontspec} and \hologo{LuaLaTeX}.
+So if you haven't got \lilyglyphs{} through your \LaTeX{} distribution you may have to take care that you use a sufficiently current distribution.
+
+\textbf{\textsf{Note:}} If you have installed the package through a distribution you can still use one of the following installation methods because both will actually \emph{hide} the distribution installation.
+One advantage of this approach is that you can access this manual conveniently using \texttt{texdoc lilylgyphs}.
+But if you want to use the included Python scripts you should be careful to run the correct versions of them.
+
+\paragraph{CTAN Download}
+If you've downloaded the package from CTAN you should extract the archive to a location in the \dir{tex/latex/} directory of your \textsc{texmfhome} (e.\.g. \dir{\textasciitilde/texmf/} on Linux or \dir{\textasciitilde/Library/texmf/} on Mac OS X).
+
+\paragraph{GitHub Download}
+If you're familiar with Git the recommended way to use \lilyglyphs{} is to create a fork of the GitHub repository (assuming you already have a Github account).
+Inside the same \dir{tex/latex/} dir run \texttt{git clone git@github.com:YOURUSERNAME/lilyglyphs.git} -- please don't provide an alternative destination name because the package should actually reside in a directory called \dir{lilyglyphs/}.
+Then \texttt{cd} into that directory and add the original repository with \texttt{git remote add upstream git@github.com:openlilylib/lilyglyphs.git}.
+From now on you will refer to your fork as \texttt{origin} and to the official repository as \texttt{upstream}.
+
+The most immediate advantage of using \lilyglyphs{} through the Git repository is that it is the easiest way to keep the package up to date.
+Each time someone adds new commands to the package they will be instantly available through the repository while regular releases will happen much less frequently.
+And if updates should somehow break syntax in existing documents you can easily (and temporarily) check out the earlier version of the package you had used when originally writing your documents.
+Another advantage of the repository version is that you have “direct access” to extending the package with predefined commands in a way that makes it easy for us to incorporate your contribution in the official package.
+
+\paragraph{Font Considerations}
+If you install \lilyglyphs{} manually you will have to make the included \emmentaler{} OpenType font available for \LaTeX.
+Copy the complete \dir{fonts/} folder from the package directory to \dir{TEXMFHOME/fonts/opentype} (creating these subdirectories if they aren't already present on your system) and rename it to a more explicit name such as ‘emmentaler’ or ‘lilyglyphs’.
+An even better way would be not to copy the files but rather create a symlink to it with \texttt{cd TEXMFHOME/fonts/opentype} and \texttt{ln -s /path/to/lilyglyphs/fonts emmentaler} \todo{check on Windows}.
+That way no manual adjustments have to be made when \lilyglyphs{} is updated and might bring new versions of the font files with it.\\
+\textbf{\textsf{Note:}} the package probably won't work with \hologo{XeLaTeX} if you also have installed \emmentaler{} as a system font.\\
+\textbf{\textsf{Note:}} If you create a link instead of a copy you have to make sure that there is at least one regular file or subdirectory in the directory beside the link.
+Otherwise \hologo{LuaLaTeX} won't find the font, which is a limitation in the \texttt{kpathsea} library.
+The easiest way is to simply add an empty \dir{dummy/} subdir.
+
+\medskip
+If you experience any issues with this or other topics during installation please give us feedback so we can improve documentation .
+
+\section{License}
+\label{sec:license}
+
+\lilyglyphs{} is distributed under the \LaTeX{} Project Public License version 1.3 or (at your option) any later version of this license.
+You may find the latest version of this license at \url{http://www.latex-project.org/lppl.txt}, and version 1.3 or later is part of all distributions of LaTeX version 2005/12/01 or later.
+A full copy of the license is enclosed in the file \dir{/license/COPYING.LPPL} of the package.
+The file \dir{/license/MANIFEST} contains a list of all files affected by this licensing.
+
+The package is currently maintained by its original author Urs Liska, but its \textsc{lppl} status is simply ‘maintained’.
+
+\medskip
+\lilyglyphs{} contains the \emmentaler{} OpenType font developed provided by the LilyPond project (\url{http://www.lilypond.org}).
+It is redistributed unmodified under the SIL Open Font License, Version 1.1.
+For details see \dir{/otf/LICENSE.OFL} and \dir{/otf/FONTLOG}.
+
+\chapter{Usage}
+\label{chap:usage}
+
+As mentioned in the Quick Start at the beginning of this document you have to activate \lilyglyphs{} with \cmd{usepackage\{fontspec\}} \cmd{usepackage\{lilyglyphs\}}.
+This will give you access to the predefined commands and some generic access commands.
+
+\section{Usage of Predefined Commands}
+\label{sec:usage_predefined_commands}
+A number of predefined commands is available for immediate use.
+To use them you just have to enter the command to print the corresponding musical element, e.\,g. \cmd{lilyTimeC} for a \lilyTimeC.
+A complete reference of these commands is available in \fref{chap:list_predefined_commands}, along with any specific comments that might be necessary.
+
+As you will see later there are some commands that take arguments and many that don't.
+Commands without mandatory arguments behave like e.\,g. the well-known \cmd{LaTeX} command in that they swallow any whitespace entered after them.
+So in order to allow a space to be printed afterwards you have to supply a pair of curly braces, like \cmd{flat\{\} and more} to print “\,\flat{}\ and more”.
+Commands with arguments don't need this special treatment, so you can simply write a space character after them or not like \cmd{lilyDynamics\{mf\} or \textbackslash lilyDynamics\{pp\}.} to achieve \lilyDynamics{mf} or \lilyDynamics{pp}.
+
+\section{Generic Access Commands}
+\label{sec:generic_access_commands}
+
+There is a wealth of conceivable musical symbols and only a limited number of predefined commands.
+Even when this package will become more and more comprehensive there will always be cases that haven't been covered yet.
+For these cases \lilyglyphs{} provides four generic access commands:
+\begin{itemize*}
+\item \cmd{lilyGlyph}
+\item \cmd{lilyGlyphByNumber}
+\item \cmd{lilyText}
+\item \cmd{lilyImage}.
+\end{itemize*}
+
+They all accept one mandatory and one optional argument, the mandatory one being the content to be printed.
+This content has to be given in a form specific to the respective command.
+
+\paragraph*{\cmd{lilyGlyph}} expects the OpenType glyph name.
+You can look up the glyph names in the Appendix of LilyPond's \emph{Notation Reference}\footnote{\url{http://www.lilypond.org/doc/v2.16/Documentation/notation/the-feta-font}} or in the somewhat reduced html page provided in the \dir{/documentation} directory of the package download.\\
+Please note that many Emmentaler glyphs, especially articulations, are aligned to their center because that's what they are used like in a score.
+So don't be surprise if you need considerable extra space before such glyphs.
+This isn't a bug but rather a characteristic of using the glyphs in a different context than they were designed for.
+
+\paragraph*{\cmd{lilyGlyphByNumber}} expects the Unicode code number of the glyph.
+You will generally not want to use this as the code positions aren't guaranteed to stay the same with new versions of the fonts.
+There may be some uses for numerical access however, e.\,g. if you want to iterate over a range of glyphs.
+
+\paragraph*{\cmd{lilyText}} expects ordinary text as its argument.
+In fact it just switches the font to Emmentaler and then writes the string given as the argument.
+This only works for Dynamics letters, numbers and the glyphs \lilyText[scale=2]{+ - , .} -- as these glyphs are located at their ordinary \textsc{ascii} character position in the font.
+But you can also enter any spacing commands (like \cmd{hspace} or plain spaces) to control the spacing between glyphs.
+But keep in mind that this may result in line breaking inside your expression.
+If you need to prevent this you can surround your expression by an \cmd{mbox}.\\
+(There is a special command provided -- \cmd{lilyDynamics} -- which is essentially a wrapper around \cmd{lilyText} and presets the character size to a suitable default.)
+
+\paragraph*{\cmd{lilyImage}} expects the basename of an image file your \TeX{} system can process.
+It then includes this file using the same optional argument mechanism as the other commands.
+What sets this command apart from simply including an image is that it automatically scales the image relative to the current text font size, with being printed at its original size at \cmd{normalsize}.
+You have to take care yourself that \LaTeX{} finds and can handle the image file.
+While this command has originally been created to print images generated by LilyPond you can actually print \emph{any} image, e.\,g. scanned images from autographs, taking advantage of \lilyglyphs' infrastructure, for example the optional arguments described in the following section.
+
+\section{The Optional Argument: Layout Adjustment}
+\label{sec:optional_argument}
+The generic access commands as well as the predefined commands allow an optional argument to be passed.
+This can contain a list of comma-separated options in \texttt{<key=value>} form that influence the appearance of the glyphs. Currently there are the \texttt{scale} and \texttt{raise} options.
+
+\paragraph*{\texttt{scale}}
+changes the size of the glyph.
+As the Emmentaler glyphs are designed for a totally different purpose they often don't fit very well in the context of continuous text.
+\texttt{scale} is given as a factor by which the default size is multiplied.
+With Emmentaler glyphs this has to be a positive number, otherwise you will get an error.
+But glyphs printed by \cmd{lilyImage} (or predefined commands based on it) can also be scaled negatively.
+This results in an image that is rotated around the center of the bottom line of the original.
+You will therefore have to add an appropriate \texttt{raise} value (try e.\,g. 2 as a starting point).
+You will have to take some care about the horizontal spacing, as such a flipped image seems to use it with inverted direction.
+But you can safely put extra horizontal space after the image, and it is a valid and practical way to create two symbols from one image file.
+
+\paragraph*{\texttt{raise}}
+changes the vertical placement of the glyph.
+The majority of glyphs is placed too low by default, so they need a positive \texttt{raise} value.
+\texttt{raise} is given as a decimal value without units, which is interpreted as \emph{ex}, or x-height.
+As there is no \emph{x} in a musical font, this is somewhat arbitrary, but it is a natural unit to scale with the surrounding font size.
+Usually you may start trying \texttt{raise} values between 0 and 0.5.
+
+\bigskip
+These layout adjustments can be made at three different stages: at design time (of predefined commands), globally (per document), and at command invocation.
+
+\paragraph*{At design time}
+a designer of a predefined command has already selected the optimal default values so the command will work out-of-the-box in most cases.
+
+\paragraph*{Globally}
+the layout adjustments default to values that leave the glyphs unaltered (i.\,e. \texttt{scale=1} and \texttt{raise=0}).
+A document author can override these defaults at any time with \cmd{lilyGlobalOptions\{<options>\}}.
+This may for example be necessary if you use a text font which doesn't harmonize well with \lilyglyphs' default settings, for example because of its unusual x-height.
+You can use this command at the beginning of the document to modify the appearance for the whole document, or you can change its settings multiple times throughout the document.
+This is what you generally have to do when using \cmd{lilyGlyph} for printing individual glyphs from Emmentaler.
+
+\paragraph*{At command invocation}
+you can pass the layout adjustment options for the specific instance of the glyph.
+
+\bigskip
+The values that finally affect the layout of any given glyphs take all three stages into account.
+By passing an option at command invocation you don't set absolute values, but modify the values already present.
+The effective \texttt{scale} value is \mbox{\texttt{designtime * global * invocation}}, the effective \texttt{raise} is \mbox{\texttt{designtime + global + invocation}}.
+So passing a \texttt{scale=1.1} will always slightly increase the glyph's size, no matter what settings are already in effect.
+
+\textit{Technically speaking \lilyglyphs{} applies a fourth layer of scaling with image files.
+It calculates a last scaling factor by multiplying the result of the above considerations with the ratio of the current font size versus the size of the \cmd{normalsize} font.}
+
+
+\section{Example: Define a Custom Command}
+\label{sec:example}
+Now it's time for an example that actually uses the generic access commands to print symbols provided by the Emmentaler font.
+It will walk you through the process up to defining a ‘local’ predefined command.
+
+We want to print the \emph{fermata} sign which isn't implemented yet as a predefined command.
+In the documentation we have looked up the name of the glyph: \texttt{scripts.ufermata}, so you can print it with \cmd{lilyGlyph\{scripts.ufermata\}}: \lilyGlyph{scripts.ufermata}.
+While this gives us the right glyph its appearance isn't really what we're after yet and we want to adjust its size and placement.
+This is done with the optional argument described in the previous subsection.
+
+First we increase the size of the glyph with the \texttt{scale} argument. We find that a scaling factor of 1.4 seems suitable:
+\cmd{lilyGlyph[scale=1.4]\{scripts.ufermata\}} -- \lilyGlyph[scale=1.4]{scripts.ufermata}
+
+As you can see the glyph is -- as most Emmentaler glyphs are -- placed too low, so you have to add the \texttt{raise} argument. A value of 0.3 seems fine -- remember, the raise argument is interpreted as \emph{ex}, but you don't write down the unit.\\
+ \cmd{lilyGlyph[scale=1.4,raise=0.3]\{scripts.ufermta\}} -- \lilyGlyph[scale=1.4,raise=0.6]{scripts.ufermata}
+
+You can now further see that the glyph is placed too far to the left -- which is a good example of the behaviour described earlier with the \cmd{lilyGlyph} command.
+In fact it seems the point in the middle of the fermata is placed where we would expect the glyph to start.
+So you have to add some leading space, which might be practical to be entered in \emph{ex}:\\
+\cmd{hspace\{1ex\}}\cmd{lilyGlyph[scale=1.4,raise=0.3]\{scripts.ufermta\}} -- \hspace{1ex}\lilyGlyph[scale=1.4,raise=0.3]{scripts.ufermata}
+
+\medskip
+If you want you can now simply enclose this definition in a \cmd{newcommand} to be able to reuse it.
+\cmd{newcommand\{\textbackslash fermata\}\{hspace\{1ex\}}\cmd{lilyGlyph[scale=1.4,raise=0.3]\{scripts.ufermta\}}.
+After this you can enter your tweaked symbol by simply writing \cmd{fermata}.
+However you are encouraged to create such a command the way we define predefined commands in \lilyglyphs{} itself.
+This way it will gain the flexibility of the predefined commands, and it will be easier to be incorporated in the package itself.
+See our instructions on how to create predefined commands the \lilyglyphs{} way in \fref{sec:howto_predefined_commands}.
+If you manage to write a command that you find useful for others also please submit it to us -- or even better: if you figured out how to create commands in general, please join us.
+As mentioned earlier the number of possible commands is huge, and the value of the package will increase with each step towards a comprehensive coverage.
+
+\section{Dotted symbols}
+\label{sec:dotted_symbols}
+There are commands that are accompanied by \cmd{...Dotted} versions.
+While they can be used like any other commands there are some caveats because they are technically different from normal commands, actually appending a dot to normal commands.
+
+If you use significant scaling factors for the commands you have to check carefully whether the gap and the position of the dot scale and move well.
+Unfortunately one can't influence the parameters of the dot independently.
+We have worked hard to enable the designer of a command to create rules how to scale the gap, but you still may run into problems here.
+In such a case you will have to either change the predefined command in the library or just create the dotted symbol from scratch.
+
+Immediately after having used a dotted symbol you can arbitrarily add more dots with the \cmd{lilyPrintMoreDots} command.
+This command uses the existing dot settings (scale and raise) and prints another dot.
+By default it has a gap of 0.25\,ex, but you can override this by passing a number as an optional argument, which is interpreted as \emph{ex}.
+
+For example if you take the command \cmd{halfNoteRestDotted}, which prints a dotted half note rest: \halfNoteRestDotted{} you can easily add more dots through \cmd{halfNoteRestDotted\textbackslash lilyPrintMoreDots}: \halfNoteRestDotted\lilyPrintMoreDots.
+
+Please note that you should only call \cmd{lilyPrintMoreDots} immediately after calling a \cmd{...Dotted} command. Otherwise you may get surprising results or even errors because the underlying key-value variables are inititialized wrongly or not at all.
+
+\section{Optical size}
+\label{sec:optical_size}
+The \emmentaler{} fonts come in a set of eight “optical sizes”.
+These are variations of the font originally designed to be used at different point sizes.
+Generally you can assume that fonts for larger sizes offer more detail and give a somewhat lighter appearance, while fonts for smaller point sizes give more weight on the paper but less detail to be readable at small sizes.
+
+\lilyglyphs{} gives you the option to access the available font versions, but it may make more sense to appreciate them as “weights” -- although this is technically speaking or even conceptionally incorrect.
+The eight optical sizes of the Emmentaler font are: 11, 13, 14, 16, 18, 20, 23, 26.
+If you conceive these as weights you would somehow order them from black (11) to light (26).
+You can switch the used optical size at any time in a document using the command \cmd{lilyOpticalSize}, giving the number as an option.
+You could for example use this feature to adapt the LilyPond glyphs to a darker or lighter default text font.
+Be sure to supply a number corresponding to a font actually available on your system.
+Maybe this will someday also be available as an option to select for a single glyph, but for now you have to switch twice: before and after the glyph.
+
+The optical size used by \lilyglyphs{} defaults to 16.
+
+\paragraph*{Known issues and warnings:}
+Optical sizes don't work with glyphs printed as images.
+If you \emph{have} to use these glyphs in different weights, you will have to take care for it yourself.
+The general plan would be to create different versions of the glyph by creating different glyphs in LilyPond (presumably by using different staff sizes).
+
+\chapter{Reference of Predefined Commands}
+\label{chap:list_predefined_commands}
+The following sections document the predefined commands that already have been implemented.
+They generally contain explanations on the specific use of the commands (if necessary) and a table listing the implemented commands.
+Remember that any glyph of the Emmentaler font which is not covered by a predefined command yet can be accessed by its name through the \cmd{lilyGlyph} command.
+A full list of available glyphs is available in the documentation folder of the \lilyglyphs{} package or in LilyPond's original documentation at \url{http://www.lilypond.org/doc/v2.16/Documentation/notation/the-feta-font.html}.
+
+The documentation explicitely mentions if the commands are based on image files.
+
+\section{Single Notes}
+\label{sec:singlenotes}
+Single notes may well be the most frequently used glyphs.
+Unfortunately they aren't present in \emmentaler{} because LilyPond draws them by itself, so \lilyglyphs{} realizes them using included pdf image files.
+The commands are available identically in British and American form.
+See \fref{tab:singlenotes} for the available predefined commands.
+
+\begin{reftable}{Single Notes}{singlenotes}
+\wholeNote & \cmd{semibreve} -- \cmd{wholeNote}\\
+\wholeNoteDotted & \cmd{semibreveDotted} -- \cmd{wholeNoteDotted}\\
+\halfNote & \cmd{minim} -- \cmd{halfNote}\\
+\halfNoteDown & \cmd{minimDown} -- \cmd{halfNoteDown}\\
+\halfNoteDotted & \cmd{minimDotted} -- \cmd{halfNoteDotted}\\
+\halfNoteDottedDown & \cmd{minimDottedDown} -- \cmd{halfNoteDottedDown}\\
+\halfNoteDottedDouble & \cmd{minimDottedDouble} -- \cmd{halfNoteDottedDouble}\\
+\halfNoteDottedDoubleDown & \cmd{minimDottedDoubleDown} -- \cmd{halfNoteDottedDoubleDown}\\
+\crotchet & \cmd{crotchet} -- \cmd{quarterNote}\\
+\crotchetDown & \cmd{crotchetDown} -- \cmd{quarterNoteDown}\\
+\crotchetDotted & \cmd{crotchetDotted} -- \cmd{quarterNoteDotted}\\
+\crotchetDottedDown & \cmd{crotchetDottedDown} -- \cmd{quarterNoteDottedDown}\\
+\crotchetDottedDouble & \cmd{crotchetDottedDouble} -- \cmd{quarterNoteDottedDouble}\\
+\crotchetDottedDoubleDown & \cmd{crotchetDottedDoubleDown} -- \cmd{quarterNoteDottedDoubleDown}\\
+\quaver & \cmd{quaver} -- \cmd{eighthNote}\\
+\quaverDown & \cmd{quaverDown} -- \cmd{eighthNoteDown}\\
+\quaverDotted & \cmd{quaverDotted} -- \cmd{eighthNoteDotted}\\
+\quaverDottedDown & \cmd{quaverDottedDown} -- \cmd{eighthNoteDottedDown}\\
+\quaverDottedDouble & \cmd{quaverDottedDouble} -- \cmd{eighthNoteDottedDouble}\\
+\quaverDottedDoubleDown & \cmd{quaverDottedDoubleDown} -- \cmd{eighthNoteDottedDoubleDown}\\
+\semiquaver & \cmd{semiquaver} -- \cmd{sixteenthNote}\\
+\semiquaverDown & \cmd{semiquaverDown} -- \cmd{sixteenthNoteDown}\\
+\semiquaverDotted & \cmd{semiquaverDotted} -- \cmd{sixteenthNoteDotted}\\
+\semiquaverDottedDown & \cmd{semiquaverDottedDown} -- \cmd{sixteenthNoteDottedDown}\\
+\semiquaverDottedDouble & \cmd{semiquaverDottedDouble} -- \cmd{sixteenthNoteDottedDouble}\\
+\semiquaverDottedDoubleDown & \cmd{semiquaverDottedDoubleDown} -- \cmd{sixteenthNoteDottedDoubleDown}\\
+\demisemiquaver & \cmd{demisemiquaver} -- \cmd{thirtysecondNote}\\
+\demisemiquaverDown & \cmd{demisemiquaverDown} -- \cmd{thirtysecondNoteDown}\\
+\demisemiquaverDotted & \cmd{demisemiquaverDotted} -- \cmd{thirtysecondNoteDotted}\\
+\demisemiquaverDottedDown & \cmd{demisemiquaverDottedDown} -- \cmd{thirtysecondNoteDottedDown}\\
+\demisemiquaverDottedDouble & \cmd{demisemiquaverDottedDouble} -- \cmd{thirtysecondNoteDottedDouble}\\
+\demisemiquaverDottedDoubleDown & \cmd{demisemiquaverDottedDoubleDown} -- \cmd{thirtysecondNoteDottedDoubleDown}\\
+\end{reftable}
+
+
+\section{Beamed notes}
+\label{sec:beamed_notes}
+
+We will only provide a few complex symbols like beamed notes for default use.
+Of course one could have the wish for indefinite variations like notes with variable beam slope.
+But as long as it isn't possible to make this parametrical%
+\footnote{See \ghIssue{64}}
+it is probably a good idea to stick with a few basic commands.
+For now see \fref{tab:beamedNotes} for the implemented commands.
+
+Beamed notes are implemented using \textsc{pdf} files.
+
+\begin{reftable}{Two Beamed Notes}{beamedNotes}
+\twoBeamedQuavers & \cmd{twoBeamedQuavers}\\
+\end{reftable}
+
+\begin{reftable}{Three Beamed Notes}{threeBeamedNotes}
+\threeBeamedQuavers & \cmd{threeBeamedQuavers} & Three beamed quavers\\
+\threeBeamedQuaversI & \cmd{threeBeamedQuaversI} & Second dotted\\
+\threeBeamedQuaversII & \cmd{threeBeamedQuaversII} & First dotted\\
+\threeBeamedQuaversIII & \cmd{threeBeamedQuaversIII} & Second dotted, first short\\
+\end{reftable}
+
+
+\section{Clefs}
+\label{sec:clefs}
+Some of the clef glyphs are among the few that are too large by default.
+You couldn't use a G clef at default size within continuous text without severely \clefG{} damaging line spacing.
+But if you scale them to a size that doesn't disturb line spacing, they look quite disproportionate, especially when combined with other elements: \mbox{ \clefCInline{} \natural.}
+To ease the handling of that issue we provide the clefs in two forms, at ordinary size which can be problematic in continuous text, and as an -Inline version which looks somewhat funny but can be used within the line.
+
+See \fref{tab:clefs} for the available predefined commands.
+
+\begin{reftable}{Clefs}{clefs}
+\clefGInline & \cmd{clefG}, \cmd{clefGInline} & clefs.G\\
+\clefFInline & \cmd{clefF}, \cmd{clefFInline} & clefs.F\\
+\clefCInline & \cmd{clefC}, \cmd{clefCInline} & clefs.C\\
+\end{reftable}
+
+\section{Time Signatures}
+\label{sec:timesignatures}
+
+The Emmentaler font provides two “real” glyphs for time signatures, the \lilyTimeC{} and the \lilyTimeCHalf.
+
+The numerical (single and compound) time signatures can be printed using \cmd{lilyTimeSignature\{numerator\}\{denominator\}}: \lilyTimeSignature{4}{4}.
+\texttt{numerator} and \texttt{denominator} are treated as \cmd{lilyText}, so you can enter anything this command can use (see \fref{sec:generic_access_commands}).
+This way you can easily write compound time signatures like \cmd{lilyTimeSignature\{4 + 7\}\{8\}}: \lilyTimeSignature{4 + 7}{8}.
+But be aware that the command does \emph{not} have a notion of columns, so you have to take care about the horizontal alignment yourself if there are more than one item in both rows, for example by adding explicit space.
+
+\cmd{lilyTimeSignature} respects any whitespace after the closing bracket so you don't have to supply the pair of curly braces.
+
+\begin{reftable}{Time Signatures}{timesignatures}
+\lilyTimeC & \cmd{lilyTimeC} & timesig.C44\\
+\lilyTimeCHalf & \cmd{lilyTimeCHalf} & timesig.C22\\
+\lilyTimeSignature{7}{8} & \cmd{lilyTimeSignature\{7\}\{8\}}\\
+\lilyTimeSignature{3 + 4}{4 + 8} & \cmd{lilyTimeSignature\{3 + 4\}\{4 + 8\}}\\
+\end{reftable}
+
+\paragraph*{Known issues and warnings:} \cmd{lilyTimeSignature} also expects the optional argument as the other commands, but it doesn't understand the \texttt{raise} option correctly.
+The box with the time signature is vertically centered so it should generally be OK, but if you for some reason have to change its vertical position you should manually surround the whole command by a \cmd{raisebox}.
+
+\section{Numbers}
+\label{sec:numbers}
+Numbers can be entered with the already known \cmd{lilyText} command.
+Access through the glyph names is possible but not necessary.
+Therefore we don't provide predefined commands for them.
+With the default scaling of 1.0 they generally fit as lowercase letters like \lilyText{0 1 2 3 4 5 6 7 8 9} \cmd{lilyText\{0 1 2 3 4 5 6 7 8 9\}}.
+For Uppercase letters you can start trying a scaling of 1.3. A future version of the package may provide convenience commands with default scalings for upper/lowercase letters, fingerings, figured bass numbers, time signature numbers etc.
+
+A special case are four glyphs that are related to numbers: \lilyText[scale=1.5]{+~-~.~,} (plus, hyphen, fullstop and comma).
+These are also accessible through \cmd{lilyText} and their respective characters, the example in the previous sentence being written as \cmd{lilyText[scale=1.5]\{+~-~.~,\}}.
+
+\section{Accidentals}
+\label{sec:accidentals}
+
+The \cmd{natural} \natural, the \cmd{flat} \flat{} and the \cmd{sharp} \sharp{} replace the respective commands from standard \LaTeX.
+Please note that all the accidentals are designed at the same scaling in order to allow a uniform appearance. You will however have to check if they don't affect an even line spacing.
+
+See \fref{tab:accidentals} for the list of implemented commands.
+
+\begin{reftable}{Accidentals}{accidentals}
+\natural & \cmd{natural} & accidentals.natural\\
+\midrule
+\sharp & \cmd{sharp} & accidentals.sharp\\
+\sharpArrowup & \cmd{sharpArrowup} & accidentals.sharp.arrowup\\
+\sharpArrowdown & \cmd{sharpArrowdown} & accidentals.sharp.arrowdown\\
+\sharpArrowboth & \cmd{sharpArrowboth} & accidentals.sharp.arrowboth\\
+\sharpSlashslashStem & \cmd{sharpSlashslashStem} & accidentals.sharp.slashslash.stem\\
+\sharpSlashslashslashStemstem & \cmd{sharpSlashslashslashStemstem} & accidentals.sharp.slashslashslash.stemstem\\
+\sharpSlashslashslashStem & \cmd{sharpSlashslashslashStem} & accidentals.sharp.slashslashslash.stem\\
+\sharpSlashslashStemstemstem & \cmd{sharpSlashslashStemstemstem} & accidentals.sharp.slashslash.stemstemstem\\
+\doublesharp & \cmd{doublesharp} & accidentals.doublesharp\\
+\midrule
+\flat & \cmd{flat} & accidentals.flat\\
+\flatflat & \cmd{flatflat} & accidentals.flatflat\\
+\end{reftable}
+
+\section{Rests}
+\label{sec:rests}
+
+See \fref{tab:rests} for the implemented rest commands.
+
+For more information on how to use \cmd{lilyPrintMoreDots} to produce multiply dotted rests please see \fref{sec:dotted_symbols}.
+
+\begin{reftable}{Rests}{rests}
+\wholeNoteRest & \cmd{wholeNoteRest} & Whole Note Rest\\
+\wholeNoteRestDotted & \cmd{wholeNoteRestDotted} & DottedWhole Note Rest\\
+\midrule
+\halfNoteRest & \cmd{halfNoteRest} & Half Note Rest\\
+\halfNoteRestDotted & \cmd{halfNoteRestDotted} & Dotted Half Note Rest\\
+ \halfNoteRestDotted\lilyPrintMoreDots &
+ \cmd{halfNoteRestDotted}\cmd{lilyPrintMoreDots} &
+ Example of Double Dotted Rest\\
+\midrule
+\crotchetRest & \cmd{crotchetRest} & Crotchet Rest\\
+\crotchetRestDotted & \cmd{crotchetRestDotted} & Dotted Crotchet Rest\\
+\midrule
+\quaverRest & \cmd{quaverRest} & Quaver Rest\\
+\quaverRestDotted & \cmd{quaverRestDotted} & Dotted Quaver Rest\\
+\midrule
+\semiquaverRest & \cmd{semiquaverRest} & Semiquaver Rest\\
+\semiquaverRestDotted & \cmd{semiquaverRestDotted} & Dotted Semiquaver Rest\\
+\end{reftable}
+
+\section{Dynamic Text}
+\label{sec:dynamic_text}
+As explained earlier the Dynamic Letters can be accessed through \cmd{lilyText} without providing glyph names or numbers as argument.
+For the available letters see \ref{tab:singleDynLetters}.
+As a convenience there is a predefined command \cmd{lilyDynamics}, which is just a wrapper around \cmd{lilyText} that sets the \texttt{Scale} argument to a default value of 1.5.
+
+\begin{reftable}{Single Dynamics Letters}{singleDynLetters}
+\lilyDynamics{f} & \cmd{lilyDynamics\{f\}} & forte\\
+\lilyDynamics{p} & \cmd{lilyDynamics\{p\}} & piano\\
+\lilyDynamics{m} & \cmd{lilyDynamics\{m\}} & mezzo-\\
+\lilyDynamics{r} & \cmd{lilyDynamics\{r\}} & rin-\\
+\lilyDynamics{s} & \cmd{lilyDynamics\{s\}} & s-\\
+\lilyDynamics{z} & \cmd{lilyDynamics\{z\}} & -z\\
+\end{reftable}
+
+These Letters can be combined to make complex Dynamics.
+\lilyglyphs{} doesn't provide predefined commands as they can easily be entered as single strings to \cmd{lilyDynamics}, like \cmd{lilyDynamics\{sffzrmp\}}, resulting in \lilyDynamics{sffzrmp}.
+In this specific situation you could enter a small horizontal space between the \lilyDynamics{z} and the \lilyDynamics{r} -- but as this combination wouldn't occur in real life we don't need to demonstrate it here.
+There are a few predefined commands (see \fref{tab:combinedDynLetters}) handling the “kerning” of some special combination of letters.
+Internally these commands internally use \cmd{lilyDynamics} with its default scaling.
+
+\begin{reftable}{Combined Dynamics Expressions}{combinedDynLetters}
+\lilyRF & \cmd{lilyRF} & rinforzando\\
+\lilyRFZ & \cmd{lilyRFZ} & rinforzando (alternative)\\
+
+\end{reftable}
+
+
+\section{Graphical Dynamic Symbols}
+\label{sec:graphical_dynamic_symbols}
+
+Graphical dynamic symbols like hairpins are realized by including image files.
+See \fref{tab:dynamicSigns} for the implemented commands.
+
+\begin{reftable}{Dynamics Signs}{dynamicSigns}
+\crescHairpin & \cmd{crescHairpin}\\
+\decrescHairpin & \cmd{decrescHairpin}\\
+\end{reftable}
+
+\section{Articulations}
+\label{sec:articulations}
+
+\begin{reftable}{Articulations}{articulations}
+\lilyAccent & \cmd{lilyAccent}\\
+\lilyEspressivo & \cmd{lilyEspressivo}\\
+\lilyStaccato & \cmd{lilyStaccato}\\
+\lilyThumb & \cmd{lilyThumb} & Thumb pizzicato\\
+\marcato & \cmd{marcato}\\
+\marcatoDown & \cmd{marcatoDown}\\
+\portato & \cmd{portato}\\
+\portatoDown & \cmd{portatoDown}\\
+\staccatissimo & \cmd{staccatissimo}\\
+\tenuto & \cmd{tenuto}\\
+\end{reftable}
+
+\section{Scripts}
+\label{sec:scripts}
+
+Script implementation has just begun. For the implemented glyphs see \fref{tab:scripts}.
+
+If you manually enter scripts through \cmd{lilyGlyph} you will notice that they usually seem to print too far to the left, clashing with the preceding text.
+This is due to the fact that in musical engraving scripts are centered relative to the note they belong to.
+Therefore you often have to add extra space before the glyph if you access them directly.
+The predefined commands should of course have this already built in.
+
+\begin{reftable}{Scripts}{scripts}
+\fermata & \cmd{fermata} & Fermata\\
+\end{reftable}
+
+\section{Accordion Notation}
+\label{sec:accordion-notation}
+
+\begin{reftable}{Accordion notation}{accordion-notation}
+\accordionBayanBass & \cmd{accordionBayanBass} & Bayan bass register\\
+\accordionDiscant & \cmd{accordionDiscant} & Discant register\\
+\accordionFreeBass & \cmd{accordionFreeBass} & Free bass register\\
+\accordionOldEE & \cmd{accordionOldEE} & Unknown accordion notation\\
+\accordionPull & \cmd{accordionPull} & Directon of bellows\\
+\accordionPush & \cmd{accordionPush} & Directon of bellows\\
+\accordionStdBass & \cmd{accordionStdBass} & Standard bass register\\
+\end{reftable}
+
+These are the symbols present in the Emmentaler font.
+More symbols that are created through combination of the discant symbol with one or more accordion dot(s) have yet to be created.
+
+\section{Fancy (Example) Commands}
+\label{sec:fancy-examples}
+This is just an example of a fancy notation generated with the assistance of our scripts (see \fref{sec:generating_commands_image}).
+
+\begin{reftable}{Fancy (Example) Commands}{fancyexamples}
+\lilyFancyExample & \cmd{lilyFancyExample} & a fancy command using a LilyPond file\\
+\end{reftable}
+
+
+\chapter{Internals}
+\label{chap:internals}
+
+\section{Documentation of the generic access commands}
+\label{sec:internals_generic_access}
+This section is essential for readers who want to understand how this package works internally, for example if they want to actively participate in its development.
+It is structured from the perspective of the package's behaviour instead of from a user's POV.
+If you simply want to add your own predefined commands “the \lilyglyphs{} way” it is a good idea to read this section too, but you may also skip it and directly go to \ref{sec:directory_structure}.
+
+\medskip
+In order to make the package's \texttt{.sty} file easier to understand, its content is split into multiple input files which are located in the \dir{/commands} and \dir{/core} subfolders.
+The most fundamental definitions are in the \dir{core/keyval.inp} and \dir{core/genericAccess.inp} files.
+
+\subsection{Accessing \emmentaler{} Glyphs}
+\label{subsec:accessing_emmentaler_glyphs}
+The command that actually prints glyphs from the Emmentaler font is \cmd{lilyPrint}, defined in \texttt{core/genericAccess.inp}.
+It isn't intended to be called directly within a document, but only from the predefined commands.
+It takes two arguments, the first -- optional -- being the comma-separated list of \texttt{<key=value>} pairs, the second the actual content to be printed.
+
+\begin{lstlisting}[language={[LaTeX]TeX}]
+\newcommand*{\lilyPrint}[2][]{%
+ \interpretLilyOptions{#1}%
+ \raisebox{{\lilyEffectiveRaise}ex}{%
+ {\fontspec[Scale=\lilyEffectiveScale]
+ {emmentaler-\lilyOpticalSuffix.otf}#2}%
+ }%
+}
+\end{lstlisting}
+
+At first the command \cmd{interpretLilyOptions} is called, where the options of the different levels are evaluated and calculated to their effective values.
+Then the content of \#2 is printed, within a \cmd{raisebox} and with the currently selected opticals version of the \emmentaler{} font.
+
+\begin{lstlisting}[language={[LaTeX]TeX}]
+\newcommand*{\interpretLilyOptions}[1]{%
+ \setkeys{lilyCmdOptions}{scale=1,raise=0}%
+ \setkeys{lilyCmdOptions}{#1}%
+ \pgfmathsetmacro{\lilyEffectiveScale}{%
+ \lilyGlobalOptions@scale *
+ \lilyCmdOptions@scale * \lilyDesignOptions@scale}%
+ \pgfmathsetmacro{\lilyEffectiveRaise}{%
+ \lilyGlobalOptions@raise +
+ \lilyCmdOptions@raise + \lilyDesignOptions@raise}%
+}
+\end{lstlisting}
+\cmd{interpretLilyOptions} is defined in \dir{core/keyval.inp}.\\
+The \texttt{<key=value>} mechanism is achieved using the \texttt{keyval} package as the most basic solution available.
+{\color{red} If this can be implemented in a more elegant, extensible and/or powerful way using other packages, e.\,g.\ \package{pgfkeys}, we'd appreciate any input.}
+It uses three families of keys, corresponding to the three levels of options:
+\texttt{lilyGlobalOptions}, \texttt{lilyDesignOptions} and \texttt{lilyCmdOptions}.
+
+In a first step the keys for the actual command options are initialized to a neutral state.
+This is necessary because otherwise options not present in the command invocation would be in an uninitialized or unknown state.
+After this the options provided by the command invocation (i.\,e. the ones in the end user's document) are applied.
+Finally the effective values of the options are calculated from the global, the design and the command invocation options.
+The scaling values are multiplied, the raise values added.
+While the command options have just been determined, the global options are valid globally (and can be changed globally) and the design options have been set by the command that actually called \cmd{lilyPrint}.
+This is the reason why \cmd{lilyPrint} should never be invoked directly -- the design options would be in the unknown state of the previous invocation of\cmd{lilyPrint}.
+
+\medskip
+At the next higher level there are the three generic access functions \cmd{lilyGlyph}, \cmd{lilyGlyphByNumber} and \cmd{lilyText}, defined in \dir{core/genericAccess.inp}.
+They are very similar and differ only in the way they determine the actual content to be printed.
+As stated in the end user part of this documentation they expect two arguments, the optional \texttt{<key=value>} pair list and the contents.
+As a first step the commands initialize the design options to a neutral state, because the “design” of the generic glyphs has to be neutral by design.
+In the second step they invoke \cmd{lilyPrint}, passing the optional argument along and determine the printed content individually:
+\cmd{lilyGlyph} calls the helper function \cmd{lilyGetGlyph}, \cmd{lilyGlyphByNumber} calls \cmd{lilyGetGlyphByNumber}, while \cmd{lilyText} just passes its contents argument unchanged to \cmd{lilyPrint}.
+
+These helper functions are important because most predefined commands call one of them to select glyphs from the Emmentaler fonts.\\
+\cmd{lilyGetGlyph} takes the glyph name as found in the LilyPond documentation.\\
+\cmd{lilyGetGlyphByNumber} takes the Unicode character index of the intended glyph.
+But be aware that the Unicode index may change at any time with new versions of the Emmentaler font, so it usually isn't a good idea to access glyphs through their index.
+There may be some uses for numerical access, however, e.\,g.\ to iterate over a range of glyphs.
+
+\subsection{Printing image files}
+\label{subsec:printing_image_files}
+\cmd{lilyPrintImage}, defined in \dir{core/genericAccess.inp}, is the command that prints glyphs from a supplied image file.
+It actually is quite similar to \cmd{lilyPrint}, with only the extra consideration of scaling the image to the text font size.
+
+\begin{lstlisting}[language={[LaTeX]TeX}]
+\newcommand*{\lilyPrintImage}[2][]{%
+ % interpret optional argument
+ \interpretLilyOptions{#1}%
+ % determine scaling factor to accomodate the current font size
+ % (as images don't scale automatically with the font)
+ \lilyScaleImage%
+ % Print the image in a raisebox
+ \raisebox{{\lilyEffectiveRaise}ex}{%
+ \includegraphics[scale=\lilyImageEffectiveScale]{#2}%
+ }%
+}
+\end{lstlisting}
+First the command calls \cmd{interpretLilyOptions}, which is the same as with \cmd{lilyPrint}.
+But as an additional step \cmd{lilyScaleImage} is called, and finally it uses \cmd{lilyImageEffectiveScale} as the scaling factor instead of \cmd{lilyEffectiveScale}.
+I won't explain this in detail, but in effect it multiplies the \cmd{lilyEffectiveScale} calculated before with the ratio of the current font size to the \cmd{normalsize} size.
+
+What is finally given as the content to be printed is the basename of an image file.
+This can be any file format understood by the used \TeX engine but we highly recommend using \textsc{pdf} files for sake of printing quality.
+
+As with printing Emmentaler glyphs there is no handling of design time options here, and for that reason you should never call this command directly from a document.
+Please use \cmd{lilyImage} instead which does the same as \cmd{lilyPrintImage} but additionally defaults the design time options to neutral values.
+
+\section{The Package's Directory Structure}
+\label{sec:directory_structure}
+This section describes the directory structure as found in the development repository on GitHub%
+\footnote{\url{https://github.com/openlilylib/lilyglyphs}}.
+If you have obtained \lilyglyphs{} from there and want to write new commands on a regular basis, especially if you want to contribute your results back to the package, you will need to have a fair understanding of it.
+The same is true if you want to use the Python scripts as described in \fref{chap:python_scripts}.
+If you intend to contribute or just start doing so it is highly recommended to go that way.
+
+If you have downloaded \lilyglyphs{} from \textsc{ctan} there will be significant differences in the directory structure which are mentioned below, so you should read the section anyway.
+
+If you are using \lilyglyphs{} from a \TeX{} distribution you can't really consider the contents of this section because the files will be scattered over a number of system and distribution specific places which are out of our control.
+There is a way around this problem which is described in \fref{chap:python_scripts}, but we still recommend using the GitHub version for serious extending work.
+Getting an idea about the package content is a good idea nevertheless.
+
+\paragraph*{The root directory}
+contains the usual number of files such as \textsc{readme}, installation hints and licensing information as well as the main package file \texttt{lilyglyphs.sty}.
+
+\paragraph*{\dir{/core}
+\footnote{For this section a leading “/” in directory names refer to the package root directory.}}
+consists of include files for \texttt{lilyglyphs.sty} that contain the fundamental program logic of the package.
+
+\paragraph*{The \dir{/commands} directory}
+contains files defining the predefined commands available to the end user of \lilyglyphs.
+If you are going to write new commands you will include them in these files or add new files here.
+
+\paragraph*{\dir{/documentation}}
+contains this manual and an example document, boxth as \texttt{.tex} and \textsc{pdf} files as well as an \textsc{html} document listing all glyphs of the \emmentaler{} font.
+
+The subdirectory \dir{resources} contains included files for the \textsc{html} document as well as helper packages for the \LaTeX{} documents.
+The subdirectory \dir{lilyglyphs\_logo} contains the logo of the package in \textsc{pdf} and \textsc{png} format along with its \texttt{.tex} source.
+
+\paragraph*{\dir{/fonts}}
+contains the \emmentaler{} font files, copied from LilyPond 2.16.2 as the latest stable version.
+This is the directory you will have copied or linked to during a manual installation of the package.
+
+\paragraph*{\dir{/glyphimages}}
+contains all material for the image based commands: original input files, generated LilyPond source files and the resulting \textsc{pdf} images.
+If you are going to create new commands using LilyPond generated images you will work in this directory.
+This is explained in more detail in \fref{sec:generating_commands_image}.
+
+\paragraph*{\dir{/license}}
+contains the full \textsc{lppl} license for the package and the \textsc{ofl} license for the included Emmentaler fonts.
+
+\paragraph*{\dir{/scripts}}
+contains Python scripts that simplify the generation and management of new commands.
+In the \textsc{ctan} archive the contents of this directory is distributed over two directories, \dir{/bin} and \dir{/lib}.
+
+\paragraph*{\dir{source}}
+contains the \textsc{metafont} sources for the Emmentaler fonts.
+They are checked out from the LilyPond development repository at exactly the same state as the binary font files used.
+
+\subsection{“Private” Directory Structure}
+\label{subsec:private_directory_structure}
+If you have obtained \lilyglyphs{} any other way than through its Git repository you probably can't or don't want to modify the package files directly.
+Instead we recommend you set up a private “shadow” search path where you can safely place your own additions.
+Apart from potential issues with write access to files in the \TeX{} installation this procedure will avoid your changes being overwritten by package updates.
+
+We have provided a skeleton directory structure in the file \dir{lilyglyphs\_private.zip} which is located in the \dir{documentation/} directory of the package%
+\footnote{Please consult the documentation of your \TeX{} distribution where to find these.
+A good chance would be to run \texttt{kpsewhich lilyglyphs.sty} which should find the location of the main package file}.
+Extract this archive somehwere in your \LaTeX{} search path, e.\,g. to \dir{TEXMFHOME/tex/latex/lilyglyphs\_private}.
+
+In the first level of this directory you'll find two nearly empty stubs: \texttt{lilyglyphsPrivate.sty} and \texttt{lilyglyphsPrivate.tex}.
+The first file is a \LaTeX{} package where you can store and organize your own predefined commands%
+\footnote{Of course you will have to “use” this package to make the commands available to other documents},
+the second a file where you can (and are strongly advised to) document your additions.
+If you make use of these files in a structured way (following the hints in the comments in these files) it will be very easy for us to incorporate any additions you send to us by email (if you don't want to go the Git way).
+
+The rest is a copy of the directory structure below \dir{/glyphimages}.
+There you can store sources and results of commands generated with LilyPond.
+Please adhere to the model of the directories in the package for this.
+And please also see the chapter \fref{chap:contributing} on contributing.
+
+\section{How to write predefined commands}
+\label{sec:howto_predefined_commands}
+Writing your own predefined commands is actually quite straightforward -- and identical if you want to write a command for your document or for inclusion in the package.
+So if you find yourself creating predefined commands that you think are useful for general use, don't hesitate to submit them to us.
+
+\subsubsection{Commands that print single glyphs}
+\label{subsubsec:commands_single-glyphs}
+Let's review an example of a predefined command, the \cmd{doublesharp}.
+
+\begin{lstlisting}[language={[LaTeX]TeX}]
+% "accidentals.doublesharp"
+\newcommand*{\doublesharp}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.35}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.doublesharp}}%
+}
+\end{lstlisting}
+
+We use the starred version of \cmd{newcommand}, because a glyph command naturally doesn't span paragraphs.
+We declare to accept one optional argument, which defaults to empty.
+This argument can take the list of \texttt{<key=value>} options.
+When writing the commands, please take care not to omit the \texttt{\%} characters at the line endings, as they prevent unwanted whitespace to be introduced in the output.
+
+In the second line we define the design options for the command.
+In the example the designer has decided that a doublesharp glyph should be scaled to 1.5 and raised 0.35\,ex compared to its default appearance.
+
+The third line calls the internal \cmd{lilyPrint} command.
+It passes the optional argument, with which the end user can override (i.\,e.\ modify) the designed values.
+As the \doublesharp{} is a glyph that has to be selected by its glyph name, we call \cmd{lilyGetGlyph}, supplying the glyph name found in the documentation.
+The result of this command is passed as the \texttt{\#2} to \cmd{lilyPrint}.
+
+To summarize: Writing a predefined command for printing an Emmentaler glyph involves just two steps, setting the design time options and calling \cmd{lilyPrint} with the appropriate \#2 argument.
+
+\medskip
+If you know the Unicode number of the desired glyph you can call \cmd{lilyGetGlyphByNumber} instead of \cmd{lilyGetGlyph}, but you can't be sure this number will stay the same forever.
+
+\medskip
+Creating commands using image files is practically the same and even simpler.
+If you look at the definition of a \cmd{crotchet},
+\begin{lstlisting}[language={[LaTeX]TeX}]
+\newcommand*{\crotchet}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.9,raise=-0.2}%
+ \lilyPrintImage[#1]{crotchet}%
+}
+\end{lstlisting}
+you will notice that the only differences are that the actual printing is done with \cmd{lilyPrintImage} instead of \cmd{lilyPrint} and that therefore the basename of the image file can be passed directly.
+In \fref{sec:generating_commands_image} you will see a tool that allows to create numerous image commands quite easily.
+
+\bigskip
+As a last example we will look at the definition of \cmd{lilyRFZ} \lilyRFZ.
+
+\begin{lstlisting}[language={[LaTeX]TeX}]
+\newcommand{\lilyRFZ}[1][]{%
+ \mbox{%
+ \lilyDynamics[#1]{r\hspace{0.035ex}fz}%
+ }%
+}
+\end{lstlisting}
+You may notice that we use \cmd{lilyDynamics} here, one of the Generic Access Commands (see \fref{sec:generic_access_commands}) instead of the low-level printing command.
+We can do this and also use the other ones: \cmd{lilyText}, \cmd{lilyGlyph}, \cmd{lilyGlyphByNumber} or \cmd{lilyImage}.
+This is actually simpler because we don't have to set the design time options -- but that's also the main disadvantage: this way we \emph{can't} set them and have to use the given default parameters.
+As mentioned in \fref{sec:dynamic_text}, \cmd{lilyDynamics} is just a wrapper around \cmd{lilyText}, setting the \texttt{scale} factor to 1.5.
+While the other generic commands only print single glyphs, \cmd{lilyText} can print ‘plain text’, so usually there is no need to write predefined commands only to combine letters to a single command.
+In some cases this may however be necessary.
+In the given example of \cmd{lilyRFZ} we need to apply a little bit of extra space between the \lilyDynamics{r} and the \lilyDynamics{f}.
+We see that we can insert a \cmd{hspace} command between the letters without any problems.
+But as it turns out \LaTeX{} may now decide to insert a line break at its discretion, so we have to additionally enclose this call to \cmd{lilyDynamics} in a \cmd{mbox}.
+The command just passes the optional argument to \cmd{lilyDynamics}, so you can use these arguments in your document as usual.
+
+This example is meant to encourage you to experiment with the definition of new commands.
+All you have to deal with is setting the design time options and the optional argument, and chosing the appropriate input method for the second argument.
+Apart from this you can design commands as you aanre used to.
+
+\bigskip
+Once you have defined your new command you of course have to make it av ailable to \LaTeX.
+If it is a “local” command that you just use for a specific document you can simply put it in the document's preamble or a dedicated helper \texttt{.sty} file.
+If it is an image driven command you will have created the image file before and will have to place this in a location where \LaTeX{} can find it.
+But the best place you can permanently store your new commands is the \package{lilyglyphsPrivate} package described in \fref{subsec:private_directory_structure}.
+Please don't forget to document your command in \texttt{lilyglyphsPrivate.tex}.
+For more information on how to contribute your new commands to the package see \fref{chap:contributing}.
+
+\subsubsection{Create Dotted Symbols}
+\label{subsubsec:dotted_symbols}
+
+It is not exactly trivial to create dotted symbols as predefined commands.
+Of course you can always use \cmd{lilyDot} to print LilyPond's dot glyph, but if you want to create commands that combine a glyph and one ore more dots you encounter two difficulties:
+You can't apply the optional arguments independently on the two items, and there may be issues with the scaling and the gap between the two glyphs.
+
+There is some infrastructure in \lilyglyphs{} (defined in the file dotted.inp) to faciliate dealing with dotted symbols, but this implementation isn't completely satisfactory so far.
+Great care has been taken to hide as much complexity as possible in the mentioned file, in order to make the definition of actual commands as clean and concise as possible.
+
+Let's analyze the implementation of a dotted half note rest:
+\begin{lstlisting}[language={[LaTeX]TeX}]
+% Dotted half note rest
+\newcommand*{\halfNoteRestDotted}[1][]{%
+ % define the optional arguments for the dot
+ \setkeys{lilyDesignOptions}{scale=0.8,raise=0.2}%
+ % Calculate effective scale/raise and the hspace for the dot
+ \lilySetDotOptions[#1]{0.05}{0.5}{0}%
+ % Print the rest and then the dot
+ \halfNoteRest[#1]\lilyDotSpace\lilyPrintDot
+}
+\end{lstlisting}
+
+The command takes the usual optional argument that can contain \texttt{<key=value>} pairs.
+This applies to the dotted symbol as a whole.
+Please note that in the last line the predefined command \cmd{halfNoteRest[\#1]} is called and passed the optional argument.
+You can only use this technique of creating dotted symbols on top of correctly implemented predefined commands.
+
+The first thing you have to do is to define the DesignTimeOptions for the dot. They are relative to the original design of \cmd{lilyDot}, and you have to adjust them so the dot suits the main glyph in its size and vertical position (you can ignore the horizontal spacing for now):
+\begin{lstlisting}[language={[LaTeX]TeX}]
+ % define the optional arguments for the dot
+ \setkeys{lilyDesignOptions}{scale=0.8,raise=0.2}%
+\end{lstlisting}
+You should always set these options because otherwise you might get strange results or error messages.
+
+The next step is to call a quite complex command \cmd{lilySetDotOptions} that sets several options for the dot:
+\begin{lstlisting}[language={[LaTeX]TeX}]
+ % Calculate effective scale/raise and the hspace for the dot
+ \lilySetDotOptions[#1]{0}{0.5}{0.4}%
+\end{lstlisting}
+This command takes one optional and three mandatory arguments.
+The optional argument is just the one that is written in the \LaTeX{} document and that is passed into the function. The remaining three arguments control the horizontal spacing between the main glyph and the dot.
+As we now have two individual elements we have to control the gap between them explicitely as it doesn't scale relative to the \texttt{scale} argument by itself.
+The relation between the \texttt{scale} factor and the horizontal gap can be understood as a curve (mathematically spoken: a 2nd order function).
+
+The first (mandatory) argument sets the intensity of the curve.
+A value of 0 will result in a linear relation (no curve at all), that is when doubling \texttt{scale} the gap will be exactly twice as wide.
+Positive values will result in larger gaps for larger \textbf{scale}s.
+As this is a quadratic function you will want to start with very small values or 0.
+
+The second argument sets the general (linear) steepness of the curve.
+A value of 1 means that by increasing \texttt{scale} by 1 the gap will be wider by 1\emph{ex}.
+0.5 seems a good starting point for this argument.
+
+The last argument is an offset in \emph{ex} for the whole curve which is independent from the scaling.
+You can use it to accomodate specifically wide or narrow glyphs.
+
+\cmd{lilySetDotOptions} takes all these informations, calculates some settings for the dot and stores them in internal variables that can be used by subsequent commands.
+Please understand that they may be partially or totally overwritten by the next use of \emph{any} predefined command.
+So you have to call this command immediately before actually printing the dot, otherwise it may or may not provide satisfying results.
+
+The final line actually calls three commands:\\
+\cmd{halfNoteRest[\#1]} prints the already defined main glyph.
+\cmd{lilyDotSpace} prints a horizontal space that is determined by the previous call to \cmd{lilySetDotOptions}, and \cmd{lilyPrintDot} finally prints the dot with the settings just defined.
+
+\begin{lstlisting}[language={[LaTeX]TeX}]
+ % Print the rest and then the dot
+ \halfNoteRest*[#1]\lilyDotSpace\lilyPrintDot
+\end{lstlisting}
+
+This was an explanation from the perspective of designing new predefined commands.
+If you want to know how this is implemented internally, please look at the generously commented file \texttt{core/dotted.inp}.
+
+\paragraph*{Known issues and warning:}
+One issue that hasn't been addressed yet is the vertical placement of the dot when scaled.
+The dot is positioned relatively to the baseline of the text, and the main glyph may have a different center point.
+So when scaling the main glyph may seem to behave differently from the dot.\\~\\
+If you want to create a dotted version of a glyph that is printed from an image file it will generally be easier and more reliable to create a command using a new image file.
+
+
+\subsubsection{Create Multiply Dotted Symbols}
+\label{subsubsec:multiply_dotted_symbols}
+
+There is no need to define additional versions of glyphs with more than one dot.
+For this purpose we have implemented the command \cmd{lilyPrintMoreDots}.
+This prints a dot with the same characteristics as the preceding one from a dotted command (but remember that there shouldn't be any calls to other predefined commands in betwen).
+The horizontal gap between the dots scales linearly with a default of 0.25\emph{ex} per unit of \texttt{scale}.
+But if you pass an number as an optional argument this is interpreted as a different gap in \emph{ex}.
+
+\chapter{Generating Commands with Python}
+\label{chap:python_scripts}
+As we just have seen in \fref{subsubsec:commands_single-glyphs} it is quite easy to create predefined commands.
+At least with regard to the Emmentaler glyphs it is really straightforward to simply create a command based on existing models and the documentation.
+Nothing prevents you from simply adding new commands to your document or helper package.
+Image driven commands are slightly more complex.
+The \LaTeX{} part is equally straightforward, but you also have to provide the \textsc{pdf} image by creating a score with LilyPond and produce the right output file, which involves a few steps.
+
+Therefore we have developed a set of tools and templates to streamline the process of creating new commands even further.
+These tools are Python 2 scripts, so in order to use them you will need a working Python installation.
+They are located in the \dir{/scripts} (GitHub version) or \dir{/bin} (\textsc{ctan} version) directory of the package.
+If you want to create image driven commands you will of course have to have LilyPond installed too.
+In both cases the process basically consists of writing a definitions file (something like a template), calling a script and then putting the results to a useful place.
+
+To summarize your options for extending the symbols coverage:
+\begin{itemize*}
+\item If you only have the plain \lilyglyphs{} package you can create new commands using Emmentaler glyphs.\\
+You can also create image driven commands using any preexisting images (e.\,g. scans or output from any software).
+\item If you also have LilyPond installed you can additionally create image driven commands that match the ones already present in the package.
+\item If you have Python working you can make use of our tools to generate Emmentaler and LilyPond commands (LilyPond presence provided).
+\end{itemize*}
+
+The Python scripts expect to work inside either the package directory itself or in the private “shadow” directory described in \fref{subsec:private_directory_structure}.
+They perform the check based on the “lilygpyhs” part of the directory name, so for the scripts to work correctly it is crucial that you didn't change their names during a manual installation.
+
+\medskip
+All Python scripts handle \texttt{-h/--help} and \texttt{-v/--version} arguments, printing a short usage help or the current \lilyglyphs{} version.
+
+\paragraph{Licensing Note}
+All files generated by the Python scripts contain the \lilyglyphs{} license preamble stating them to be licensed with the GPL.
+But this is only relevant if you contribute them back to the package itself.
+Initially these generated files are the result of \emph{your} work and you can do with them whatever you want.
+So if you use the Python scripts to create commands for your own needs you can simply remove the license preamble from them.
+
+\section{Generating Commands for \emmentaler{} Glyphs}
+\label{sec:generating_commands_emmentaler}
+
+Generating commands that print Emmentaler glyphs with our tools is a straightforward process.
+The steps involved are few:
+\begin{inparaenum}[1)]
+\item create an input definitions file,
+\item run a Python script on it,
+\item fine-tune the commands in the generated \LaTeX{} file, and
+\item move the resulting code to an appropriate place.
+\end{inparaenum}
+We'll go through these steps in the following subsections.
+Be assured that although these instructions span several pages the actual process of creating new commands is very fast once you have got used to it.
+
+In addition to the following documentation you can also refer to a more casual post on the \emph{Scores of Beauty} blog%
+\footnote{\url{http://lilypondblog.org/2013/09/extending-lilyglyphs-part-1/}}
+which shows an example of creating a complete group of glyphs.
+
+\subsection{Preparing the Input File}
+\label{subsec:GGC_preparing_input_file}
+
+The first step is to create a text file with entries for any number of new commands to be created.
+You can save it to any convenient location, and it is up to you to keep this file for reference or drop it after use.
+
+The input file consists of one ore more command definitions.
+Each command definition is composed of a set of lines with \texttt{key=value} pairs (please note that you shouldn't use whitespace around the equals sign).
+The end of the definition is indicated by an empty line, therefore it is important that your file ends with an empty line, otherwise the last entry will be discarded.
+Lines beginning with Python and \LaTeX{} style comments (\% and \#) are ignored, so you can use them to document your file if you want.
+
+
+\medskip
+A command entry consists of several mandatory or optional lines.
+The order doesn't matter, but it is considered good practice to stick to one style.
+The following items are possible/necessary:
+\begin{itemize}
+ \item \textsf{\textbf{cmd} (mandatory)}: Specifies the command name.
+ You have to make sure that it is a valid \LaTeX{} name and that it isn't in use already.
+ \lilyglyphs{} prefixes commands that seem prone to ambiguity with “lily” followed by an uppercase letter: instead of \cmd{dynamics} we used \cmd{lilyDynamics}.
+ You are encouraged to adhere to that convention.
+ \item \textsf{\textbf{comment} (optional)}: You can pass a single line comment that will be used before the command definition.
+ (If you want to have a multiline comment instead you can insert line breaks with \cmd{n}.)
+ \item \textsf{\textbf{element} (mandatory)}: The actual element to be passed to the internal printing functions.
+ The possible type of its value depends on the \texttt{type} of the command, as described below.
+ \item \textsf{\textbf{type} (mandatory, but defaulted)}: The type determines the internal printing command to be used with the command.
+ Please refer to \fref{sec:generic_access_commands} for more information.
+ The option is mandatory but defaults to “glyphname”, so you can skip it for the most common case that the glyph is called by name.
+
+ \begin{itemize}
+ \item \textbf{\texttt{glyphname:}} The glyph is selected by its glyphname, which is what you have to specify as “element” (e.\,g. “accidentals.sharp“ (without the quotes)).
+ You can look up the glyph names in LilyPond's documentation or in the glyph list contained in the package.
+
+ \item \textbf{\texttt{number:}} The Unicode number is used to determine the glyph.
+
+ \item \textbf{\texttt{text:}} The content is passed as plain text (works only for Dynamic letters, numbers and \texttt{+ - , .})
+
+ \item \textbf{\texttt{dynamics:}} The content is also passed as plain text, but the \cmd{lilyDynamics} function is used to print it (applying the suitable default scaling).
+
+ \item \textbf{\texttt{image:}} The command prints an image file.\\
+ If you already have an image file created with LilyPond or obtained from any other source than LilyPond (e.\,g. a scanned image from a printed edition or an autograph) this is the recommended way to create image driven commands.
+ []You can even use this to create non-musical commands that print images and profit from \lilyglyphs' infrastructure (like the automatic scaling with text size).]
+ For this purpose you can use .pdf files (preferred) or any image files your \LaTeX{} installation can process.
+
+ The “element” for an image driven command is the plain file name without extension or path.
+ The file has to be stored in a location that is visible to \LaTeX, and you are responsible for avoiding name clashes.
+ If you have set up a private directory structure as recommended in \fref{subsec:private_directory_structure}, its \dir{custom\_images} subdirectory is a good choice.
+ \end{itemize}
+ \item \textsf{\textbf{scale / raise} (optional):}
+ If a line contains one of the keys \verb|scale=| or \verb|raise=| the value after the equals sign is used for the design time options of the new command.
+ These values are also kept for subsequent command entries until the file is finished or the script finds a new entry -- which would replace its value.
+ The idea behind this option is to simplify the (likely) process of defining a set of related commands within an input file with its high probability of sharing default values.
+\end{itemize}
+
+\noindent Here you can see two examples of command entries:
+\begin{lstlisting}
+cmd=fermataDown
+element=scripts.dfermata
+comment=downward fermata
+# type glyphname is implicitely used
+
+cmd=rinforzando
+type=dynamics
+element=rfz
+comment=Rinforzando (kerned)
+\end{lstlisting}
+
+In the following subsection you can see what these commands are processed to.
+
+\subsection{Generating the \LaTeX{} code}
+\label{subsec:GGC_processing}
+
+The Python script that processes your input file is \texttt{lily-glyph-commands.py}.
+It expects the (absolute or relative) filename of the input file as its first and single parameter (apart from the mentioned standard arguments).
+The program parses the input file and creates a new file with the same basename but a \texttt{.tex} extension, in the same folder where the input file is.
+Please note that the script in its current implementation will silently overwrite any earlier file with that name.
+So if you need to keep such a generated file for reference you'll have to copy/move it to a safe location.
+
+The resulting file is a working \LaTeX{} document that uses the \lilyglyphs{} package.
+It contains \LaTeX{} \cmd{newcommand} definitions for each command definition in the input file.
+The visible part of the document contains a reference table (as used throughout this manual) with all generated commands and additionally example text for each generated command.
+
+The examples above would be processed to the following two \LaTeX{} commands:
+\begin{lstlisting}[language={[LaTeX]TeX}]
+% downward fermata
+\newcommand*{\fermataDown}[1][0]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=0}%
+ \lilyPrint[#1]{\lilyGetGlyphs{scripts.dfermata}}%
+}
+
+% Rinforzando (kerned)
+\newcommand*{\rinforzando}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=0}%
+ \lilyDynamics{rfz}}%
+}
+\end{lstlisting}
+
+\subsection{Fine-tuning the \LaTeX{} Commands}
+\label{subsec:GGC_fine-tuning}
+So what are we going to do with the contents of this file?
+Well, it depends on how/where you want to eventually use it, but the first step will be to fine-tune the commands.
+
+The first thing the generated example text does is showing that the command actually works.
+But its more important purpose is to print the new glyph in different contexts: in continuous text, before punctuations, at the beginning of a line etc.
+You should use these blocks of example text to adjust the arguments in the \verb|\setkeys{lilyDesignOptions}| clause.
+The script generates default values for the design time values of the optional argument, and it would of course be purely random if they would be perfect right away.
+Even if you supplied \texttt{scale} and/or \texttt{raise} values in the input file you're likely to have to tune the results.
+You should specifically keep an eye on spacing issues: Does the glyph affect line spacing, is the “kerning” of the glyph correct?
+On the other hand you should probably try to keep corresponding glyphs at an equal scaling.
+Besides tweaking the optional argument values you can add space before or after the glyph -- keep in mind that you may as well use negative \cmd{hspace}.
+And of course you can adjust the commands any way you like, but if you are going to make experimental commands you will probably rather write them manually as described in \fref{sec:howto_predefined_commands}.
+
+\subsection{Finishing Off (and Contributing)}
+\label{subsec:GGC_finishing_off}
+If you are satisfied with the new command(s) you will have to move them to a useful place.
+If you are just creating the commands for your personal or one-time use you can either copy the command definitions to the preamble of your current \LaTeX{} document or to any style file you might maintain.
+A good choice would be the \package{lilyglyphsPrivate.sty} as described in \fref{subsec:private_directory_structure}.
+In this case it is recommended to supply documentation in the \texttt{lilyglyphsPrivate.tex} file on the same directory for your own reference.
+
+But of course we would be happy if you decided to contribute your commands as additions to the package -- we consider increasing coverage of glyphs through user contribution a natural way of evolution for \lilyglyphs.
+Be prepared for compilation errors when your contribution returns to you as package updates.
+Once this happens your own command definitions will try to re-define the commands, and \LaTeX{} will throw out error messages.
+In that case you will have to remove your definitions from your private packages (wherever you have put them) -- they are obsolete now anyway.
+
+Probably the simplest way to contribute is sending the processed \texttt{.tex} file as an email to the package maintainer (currently \href{mailto:ul@openlilylib.org}{\nolinkurl{ul@openlilylib.org}}).
+He would then incorporate them into the package.
+\emph{Please} keep the generated reference table in the file as we will need it to update the command reference in the manual.
+And please also add some information about your additions in the file: where it belongs, where it should be documented etc.
+If your commands need any special considerations (e.\,g. specific arguments) please also add some material suitable for the manual.
+
+If you are working on a fork of the GitHub repository (as is recommended for potential contributors) you can incoporate the new commands directly and send us a pull request (preferably as soon as possible to minimize risk of conflicts with others' changes).
+This works by completing the following steps:
+\begin{itemize}
+\item Create a new branch with a suitable name.
+\item Move/copy the command definitions (with all comments) to appropriate .inp files in the package's \dir{/commands} subdirectory.
+If you find you should create a new .inp file because your commands belong to a new category please take the existing files as a model and add an appropriate \cmd{input} statement to \texttt{lilyglyphs.sty}.
+For any newly created files copy\,\&\,paste the usual copyright comment at the beginning from another file.
+\item \emph{Please} add documentation for your commands in the manual (\texttt{/documentation/lilyglyphs.tex}).
+Find the appropriate subsection in the “Predefined commands” section (or create a new one) and add information to it.
+At least we need the entries in the reference table, but if there is anything special to note about the commands please explain this too.
+If you add to an existing subsection you may copy the rows from the table in the file generated by the script, otherwise you should copy the whole table (but update the caption and label fields appropriately).
+\item If you are happy with the result you can push to your fork of the repository and send a pull request through the GitHub web site.
+\end{itemize}
+
+If you have any questions on these procedures it is certainly a good idea to get in contact with us \emph{before} starting any substantial work.
+
+
+\section{Generating Commands with Glyph Images}
+\label{sec:generating_commands_image}
+Creating commands with images generated by LilyPond is a significantly more complex task than simply inserting Emmentaler glyphs, and therefore the Python script \texttt{lily-image-commands.py} is a more complex one.
+But from the end user's perspective the process is surprisingly similar:
+\begin{inparaenum}[1)]
+\item create an input definitions file,
+\item run a Python script on it,
+\item fine-tune the commands in the generated \LaTeX{} file, and
+\item move the resulting code to an appropriate place.
+\end{inparaenum}
+The main differences to consider are the different structure of the input files and some considerations about file locations.
+
+But let us start with looking at the form of the input files.
+
+
+\subsection{Preparing the Input Files}
+\label{subsec:BGI_preparing_input}
+\texttt{lily-image-commands.py} doesn't expect regular LilyPond source files as its input, but rather a file with one or multiple ‘snippets’ in it, similar to those for \texttt{lily-glyph-commands.py}.
+We will later see that it is possible and makes sense to provide compilable Lilypond files, though.
+
+Depending on the type of your \lilyglyphs{} installation you may work either in the \dir{/glyphimages} directory of the package or in the \dir{lilyglyphs\_private} directory you set up according to \fref{subsec:private_directory_structure}.
+So in the context of the following instructions \dir{/} or \texttt{ROOT} refer to the appropriate one of these two directories.
+
+Input definition files are to be stored in the \dir{/definitions} subdirectory .
+Other than the files used for the generation of Emmentaler commands these files are considered persistent and should remain in place to be able to recreate the images at a later time.
+Therefore it is recommended to define related commands in one file and give it an appropriate name.
+A filename extension isn't mandatory but you may use \texttt{.ly} as you will see later.
+The file name will also be reflected in the resulting file with the generated \LaTeX{} commands.
+
+As with the Emmentaler commands the definitions file can contain any number of command entries, although they are structured differently.
+
+A command entry starts with the special key \verb|%%lilyglyphs| on a single line.
+
+After this there may be any number of lines starting with a single \% as a LilyPond comment.
+These comment lines are used for commenting the command in the resulting \LaTeX{} file.
+
+If a line consists of the special key \verb|%%protected| the script skips the entire command.
+You should use this key whenever you consider a command finished because it will prevent LilyPond from recompiling that command%
+\footnote{This is especially important when working inside a Git repository.
+With any new or different LilyPond installation the generated \texttt{pdf} files are likely to be different and would therefore be considered as ‘modified’ by Git}
+and the script from re-generating the \LaTeX{} command.
+
+If a line contains one of the keys \verb|scale=| or \verb|raise=| the value after the equals sign is used for the design time options of the new command.
+These values are also kept for subsequent command entries until the file is finished or the script finds a new entry -- which would replace its value.
+The idea behind this option is to simplify the (likely) process of defining a set of related commands within an input file with its high probability of sharing default values.
+The setting of option defaults also works if a command is marked as “protected”.
+Generally this is an advantage since you don't have to take care to correctly update the file when you mark something as protected.
+But there may be cases where you will want to remove the defaults setting from a \texttt{\%\%protected} clause.
+
+Afterwards you provide the actual LilyPond command in the form of a variable holding a musical expression.
+The first line should contain exactly the name, the '=' and the opening curly brace.
+The name of the variable is very important because it will also be used as the file name of the image file and the \LaTeX{} command name.
+The following lines are interpreted as LilyPond code until the parser finds a line starting with the closing curly brace.
+This will also end the command entry, but for readability's sake it is a good idea to enter at least one empty line after the entry.
+
+One important thing to know is that by default the generated image will \emph{not} print staff lines, a time signature and the clef.
+
+This is a minimal working example of a \lilyglyphs{} entry section:
+
+\begin{lstlisting}
+%%lilyglyphs
+% crotchet with upward stem
+crotchet = {
+ g'4
+}
+\end{lstlisting}
+
+\paragraph*{Warnings:}
+So far the parser isn't very smart.
+It just \emph{assumes} that the input file it parses is correct.
+If you provide code with deviations from this explanation, the script will probably produce erroneous results or just stop working.
+Probably it won't do any harm, but we can't make any promises on that.
+Please consider the script as being in a \textbf{very experimental} state.
+
+In the current implementation you can't create commands that \emph{do} print staff lines, time signatures or clefs.
+To achieve this you'd have to write the LilyPond input file(s) on your own.
+This issue is on the \textsc{todo} list for one of the next releases of \lilyglyphs.
+
+\bigskip
+You can define as many entries in one file as you like -- they will all be processed at once.
+Of course it is recommended to combine a coherent set of commands.
+
+Everything that is outside of the lilyglyph entries is ignored by the script, so you can make use of these places to make a usable LilyPond file out of it.
+You can start off with the file \texttt{/definitions/\_template.ly} to see how it works.
+
+Basically you have to copy your definition to a new variable named \texttt{symbol} and then include a special include file \texttt{score.ily} (which is provided in that \dir{/definitions} directory).
+This will print your command definition as the only element in a new score block that is prepared not to print staff, time signature and clef.
+You can repeat this several times, inserting top-level \cmd{markup}s and have LilyPond produce a sheet with all defined symbols.
+This way you can finish your design in “pure LilyPond” before actually going on to the \LaTeX{} part -- and at the same time prepare a reference sheet of your work.
+
+\begin{lstlisting}
+\version "2.16.2"
+
+%%lilyglyphs
+% crotchet with upward stem
+crotchet = {
+ g'4
+}
+\markup "Crotchet with upward stem"
+symbol = \crotchet
+\include "score.ily"
+
+% %lilyglyphs
+% crotchet with downward stem
+crotchetDown = {
+ \stemDown
+ c'4
+}
+\markup "Crotchet with downward stem"
+symbol = \crotchetDown
+\include "score.ily"
+
+% and so on ...
+\end{lstlisting}
+
+\subsection{Running the Script}
+\label{subsec:BGI_running}
+
+If you have prepared your input file you can run the \texttt{lily-image-commands.py} script, passing it the complete file name (as a relative or absolute path) of your definitions file.
+The script tries to check if the input file is in the correct location -- which is considered true if it is in a \dir{defintions} folder and has a \dir{lilyglyphs*} directory in its path.
+This is valid both within the package directory and the private directory structure.
+
+Now the script will do several things:
+
+\paragraph*{Generate LilyPond source files:}
+In a first step the program parses the input file and extracts information about the command definitions that haven't been marked as protected.
+For each command definition it generates one compilable LilyPond source file in the \dir{/generated\_src} directory, named with the command name.
+If there is such a file already (i.\,e. the command had already been processed before) you will be asked if you want to overwrite this file.
+If you are currently working on a command you will probably want the file to be overwritten, but if you \emph{accidentally} used a name that already exists you should of course keep the existing files and rename your new command.
+
+\paragraph*{Compile images with LilyPond:}
+Now these generated source files are compiled using LilyPond with the command line option \verb|-dpreview|.
+The directory is then cleaned up, and the resulting small PDF files are moved to the \dir{/pdfs} directory.
+
+\paragraph*{Generate \LaTeX{} commands:}
+Finally the script generates a \LaTeX{} file that is comparable to the one generated by the Emmentaler command generation script.
+It will be stored in the \dir{/generated\_cmd} directory as a \texttt{.tex} file with the same basename as your original input file.
+Please note that these generated files aren't considered persistent and will be overwritten if you repeatedly process the same input file.
+
+\subsection{Utilizing the results}
+\label{subsec:BGI_utilizing_results}
+
+If you have successfully run the script you have the following results:
+\begin{itemize}
+\item LilyPond source files in the \dir{/generated\_src} folder (one for each command),
+\item corresponding PDF files in the \dir{/pdfs} folder and
+\item the file \dir{/generated\_cmd/INPUTFILENAME.tex}.
+\end{itemize}
+
+You shouldn't touch the first two items but go on and open the \texttt{.tex} file.
+This file is structured identically as the files generated by \texttt{lily-glyph-commands.py}, and also the way to finish off and possibly contribute your commands is essentially the same as described in \fref{subsec:GGC_fine-tuning} and \fref{subsec:GGC_finishing_off}.
+
+There are a few differences however:
+
+\begin{itemize}
+\item You should always keep the original definitions file so you can later re-generate the image from it.
+This can happen when you need to modify it -- or when you want to upgrade the package to a new version of \emmentaler{} or LilyPond.
+\item Don't forget to mark finished command definitions as ‘protected’.
+\item Keep in mind that the generated \texttt{.tex} file will be overwritten next time the same input file is processed by the script, so if you need to make any changes to the \LaTeX{} command definitions you should immediately copy them to a safe place.
+\item Sometimes you will find that a rather tall glyph is difficult to accomodate because the necessary scaling will make it look unnaturally small.
+In such a case you might consider going back to the LilyPond side to review the design of your glyph (for example the glyphs for the single note commands have shortened stems).
+Please make sure that you understand the implications of the following section about partial processing.
+\item If you want to submit new commands by email we need
+\begin{inparaenum}[1)]
+\item the original definition,
+\item the generated LilyPond source, and
+\item the final \LaTeX{} command.
+\end{inparaenum}
+\end{itemize}
+
+\subsection{Partial processing of the input file}
+\label{subsec:BGI_partial_processing}
+
+You are encouraged to put a coherent set of multiple command definitions in one definitions file and keep this file, as it is the source from that everything can be rebuilt at any time.
+But there will be occasions when you don't want the Python script to do all the work over and over again.
+If you add a new command to the input file (and you \emph{should} add it to an existing file if it belongs to the same category) you only want the new command to be processed.
+Or if you are working on the fine-tuning of the commands (as described in the previous section) and decide that you have to change the LilyPond definition of a single glyph you also only want to reprocess this one.
+For this purpose you can mark entries in the input definitions file as “protected”, in order to prevent them to be newly processed by the script.
+To do this you enter a line containing \verb|%%protected| in your entry definition (note the double percent sign and the absence of a \texttt{space} after them).
+You can see an example for this in the \texttt{\_template.ly} file -- because the example entry shouldn't be processed at all.
+From now on the marked command won't be processed anymore.
+This means that the LilyPond source file won't be generated again, LilyPond isn't run again for the script (which would be the most annoying thing), and the \LaTeX{} commands won't be generated again.
+The output file will of course be overwritten (you have renamed it before re-running the script, didn't you?) but it won't be cluttered with commands that you have already dealt with earlier.
+
+
+\subsection{Recreating Image Files}
+\label{subsec:BGI_recreating_images}
+
+There also are occasions when you might have to (re)create the \textsc{pdf} files that serve as the glyph images without having to regenerate the \LaTeX{} commands or the LilyPond source files.
+One example would be the upgrade to a new an \emmentaler{} version.
+In that case you can run the script \texttt{rebuild-pdfs.py}.
+In order to work the script expects the current working directory to be either the \dir{glyphimages} subdirectory of the package or the root of the \dir{lilyglyphs\_private} directory.
+This script essentially compares the directories with the generated LilyPond sources and with the created pdf files, and if it finds a source without a corresponding pdf it will call LilyPond to recreate it.
+If you don't want to regenerate \emph{missing} \textsc{pdf}s but rather replace \emph{existing} files you first have to delete the \emph{pdf} files on disk so the script can detect them as missing.
+Of course this script will only work with a working LilyPond installation.
+
+\medskip
+Maybe in the future there will be functionality to detect changes in the glyphs' definitions, or remove \textsc{pdf} files that don't have a corresponding source file anymore.
+
+\chapter{Contributing to \lilyglyphs}
+\label{chap:contributing}
+
+The original motivation to create \lilyglyphs{} was the need to include musical symbols in a critical report of a scholarly edition.
+Looking around on the internet and \textsc{ctan} I didn't find a solution that was even near the flexibility and output quality I wanted for this edition (and my work in general), so I came up with the idea of accessing the glyphs of LilyPond's \emmentaler{} font.
+Fortunately I realized very early that I should make all this more generic and create a public \LaTeX{} package.
+When I found the solution to incorporate non-Emmentaler glyphs through LilyPond-generated \textsc{pdf} images I saw that it worked out quite well.
+By now I have a solution that completely works for my personal needs and presumably is a useful package for any \LaTeX{} authors interested in incorporating musical symbols in their documents.
+
+But \lilyglyphs{} definitely is a package that lives on community contribution.
+Why? Because one of the main goals for continuing development is a growing coverage of glyphs.
+This task is very “scalable“ and prone to “crowd-development” because any number of contributors can add commands from the fields they are working on and need glyphs from.
+I personally will probably only add new commands as I need them for my work, maybe sometimes getting the hang and complete a group.
+So anybody who uses the package to a more than casual degree is highly encouraged to share his additions with me and the community.
+
+There are also existing issues with the \LaTeX{} implementation that can be seen in the project's issue tracker on GitHub (\url{https://github.com/openlilylib/lilyglyphs}).
+Furthermore I'm sure there are quite a few things that could be implemented more elegantly, more efficiently, or with less package dependencies -- this package is actually my first serious work with \LaTeX{} \dots
+
+And finally I have some ideas how \lilyglyphs' functionality could be enhanced, and others could come up with more ideas.
+For example I would be interested in having parametrized commands that can print a number of related glyphs, there could be more layout options, I would like to be able to use global layout options for specific glyph groups (e.g. raise all accidentals by a certain amount) etc.
+And one day I would like to make the package compliant to the currently emerging SMuFL standard%
+\footnote{\url{http://www.smufl.org}}
+in order to allow using glyphs from different music fonts.
+
+So if you think this package is interesting, please contact me so it can evolve over time!
+If you're just using it, please submit any additions you make for your own use (or start submitting arbitrary commands to enhance the package's coverage).
+And if you're a \LaTeX{} expert please don't hesitate to go right to the core and help me with the evolution of its code base \dots
+
+\end{document}
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.pdf b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.pdf
new file mode 100644
index 0000000000..00f399ac2e
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.png b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.png
new file mode 100644
index 0000000000..84fb0770be
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.tex b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.tex
new file mode 100644
index 0000000000..8186f7c9d3
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/lilyglyphs_logo/lilyglyphs_logo.tex
@@ -0,0 +1,57 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass{scrartcl}
+\usepackage{fontspec}
+\usepackage{lilyglyphs}
+\usepackage[%
+ top=0cm,
+ bottom=0cm,
+ left=0cm,
+ paperheight=5.2mm,
+ paperwidth=14.2mm]{geometry}
+
+\begin{document}
+
+\pagestyle{empty}
+\setmainfont{Gentium}
+\noindent
+\textit{lily}%
+ \hspace*{0.05ex}\clefGInline[scale=0.8,raise=0.2]%
+ \lilyOpticalSize{26}%
+ ly\lilyDynamics{p}%
+ \lilyOpticalSize{13}%
+ \hspace*{0.2ex}\flat[scale=0.9,raise=0.2]%
+ \lilyOpticalSize{11}%
+ \lilyDynamics{s}
+
+\end{document} \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-088c978c.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-088c978c.png
new file mode 100644
index 0000000000..6e4a5e68e4
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-088c978c.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-1981c3c7.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-1981c3c7.png
new file mode 100644
index 0000000000..6ff4d13129
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-1981c3c7.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-20e8632d.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-20e8632d.png
new file mode 100644
index 0000000000..9d8a0acab1
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-20e8632d.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-2abb8a04.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-2abb8a04.png
new file mode 100644
index 0000000000..3ce8d17b35
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-2abb8a04.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-2be182be.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-2be182be.png
new file mode 100644
index 0000000000..ef5b6e07c7
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-2be182be.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-3b47d3fe.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-3b47d3fe.png
new file mode 100644
index 0000000000..130d1b161b
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-3b47d3fe.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-3f4afecc.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-3f4afecc.png
new file mode 100644
index 0000000000..be58e46305
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-3f4afecc.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-40869867.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-40869867.png
new file mode 100644
index 0000000000..2f149b1d89
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-40869867.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-5b13ce04.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-5b13ce04.png
new file mode 100644
index 0000000000..7feeee464a
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-5b13ce04.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-5c91a201.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-5c91a201.png
new file mode 100644
index 0000000000..bd3d3b8664
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-5c91a201.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-707477b7.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-707477b7.png
new file mode 100644
index 0000000000..b55caf19d7
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-707477b7.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-76dbcd67.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-76dbcd67.png
new file mode 100644
index 0000000000..3c90e65b86
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-76dbcd67.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-7fd84ff8.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-7fd84ff8.png
new file mode 100644
index 0000000000..dff2d3596e
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-7fd84ff8.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8155deab.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8155deab.png
new file mode 100644
index 0000000000..b8d8775d60
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8155deab.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8b332c94.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8b332c94.png
new file mode 100644
index 0000000000..969abdd8f3
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8b332c94.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8d82df0c.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8d82df0c.png
new file mode 100644
index 0000000000..67a96d63ad
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8d82df0c.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8d8bb8a3.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8d8bb8a3.png
new file mode 100644
index 0000000000..2fbbaab19b
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-8d8bb8a3.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-907bc72d.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-907bc72d.png
new file mode 100644
index 0000000000..8b75a51946
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-907bc72d.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-a2bf82dd.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-a2bf82dd.png
new file mode 100644
index 0000000000..b26e80a272
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-a2bf82dd.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-ae3fd948.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-ae3fd948.png
new file mode 100644
index 0000000000..3f802d4363
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-ae3fd948.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-b3dc0958.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-b3dc0958.png
new file mode 100644
index 0000000000..d21b581033
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-b3dc0958.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-b69af986.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-b69af986.png
new file mode 100644
index 0000000000..631f9de6f2
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-b69af986.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-d9988a2c.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-d9988a2c.png
new file mode 100644
index 0000000000..03e03c0acc
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-d9988a2c.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-dffaecd2.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-dffaecd2.png
new file mode 100644
index 0000000000..4d70851eb0
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-dffaecd2.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-f4d0afc9.png b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-f4d0afc9.png
new file mode 100644
index 0000000000..8ba90ae872
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lily-f4d0afc9.png
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilyglyphsManualFonts.sty b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilyglyphsManualFonts.sty
new file mode 100644
index 0000000000..f91ca70a0d
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilyglyphsManualFonts.sty
@@ -0,0 +1,51 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lilyglyphsManualFonts}
+
+\RequirePackage{fontspec}
+
+% Of course we need lilyglyphs itself :-)
+\RequirePackage{lilyglyphs}
+
+% fontspec base settings
+\setmainfont[%
+ Ligatures=TeX,
+ Numbers=OldStyle]{Linux Libertine O}
+\setsansfont[Scale=MatchLowercase,
+ ItalicFont=LinBiolinumOI,
+ BoldFont=LinBiolinumOB,
+ Ligatures=TeX]{LinBiolinumO}
+\setmonofont[Scale=MatchLowercase]{DejaVu Sans Mono}
+
+\linespread{1.05}
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilyglyphsStyle.sty b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilyglyphsStyle.sty
new file mode 100644
index 0000000000..bff6ad1c84
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilyglyphsStyle.sty
@@ -0,0 +1,186 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lilyglyphsStyle}
+
+\RequirePackage{fontspec}
+
+% Of course we need lilyglyphs itself :-)
+\RequirePackage{lilyglyphs}
+
+% Improve typography and paragraph layout
+\RequirePackage{microtype}
+
+% Suppress superfluous ligature
+\RequirePackage[english]{selnolig}
+
+% Typeset XeLaTeX and LuaTeX logos regardless of engine used
+\RequirePackage{hologo}
+
+\frenchspacing
+
+% Enhanced table commands
+\RequirePackage{booktabs}
+\RequirePackage{longtable}
+
+% Tightly spaced lists
+\RequirePackage{mdwlist}
+
+% Typeset listings
+% (Special styles defined in OLLstyles.sty)
+\RequirePackage{listings}
+% Format listings with typewriter font by default
+\lstset{
+ frame=single,
+ basicstyle=\fontspec{Liberation Mono}\footnotesize}
+
+% Common table format for reference tables
+\newenvironment{reftable}[2]
+ {%
+ \begin{center}
+ \begin{longtable}[H]{lll}
+ \caption{#1}\\
+ \label{tab:#2}\\
+ \toprule
+ &\\
+ }
+ {%
+ &\\
+ \bottomrule
+ \end{longtable}
+ \end{center}
+ }
+
+% Insert a picture with a glyph list from LilyPond's glyph list
+% #1 is the caption of the figure
+% #2 the label name
+% #5 the file name of the image
+\newcommand{\glyphlist}[3]{%
+ \begin{figure}[htbp]
+ \centering
+ \includegraphics[width=.75\textwidth]{glyphlist/resources/#3}
+ \caption{#1}
+ \label{fig:#2}
+ \end{figure}
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Character styles
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Format LaTeX or LilyPond commands like \env with a prepended backslash
+\newcommand*{\cmd}[1]{\env{\textbackslash #1}}
+
+% Format directory names
+\newcommand*{\dir}[1]{\texttt{#1}}
+
+% Format environment names
+\newcommand*{\env}[1]{\texttt{#1}}
+
+% Format package names
+\newcommand*{\package}[1]{\texttt{#1}}
+
+% Add a TODO item that is easily spotted
+\newcommand{\todo}[1]{{\color{red}{\textbf{\textsf{[TODO: #1]}}}}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Other commands
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Reference an Issue on openLilyLib's Github account
+\newcommand*{\ghIssue}[1]{\href{https://github.com/openlilylib/lilyglyphs/issues/#1}{(GitHub-Issue \##1)}}
+
+% print "LilyPond" (may be formatted later)
+\newcommand*{\lilypond}{\texttt{LilyPond}}
+
+\newcommand*{\emmentaler}{\textsc{Emmentaler}}
+
+% print "openLilyLib" (may be formatted later)
+\newcommand*{\openlilylib}{\texttt{openLilyLib}}
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Add fancyref for smart cross-references
+\RequirePackage{fancyref}
+
+% categories for subsection and subsubsection:
+
+% subsection - subsec:
+
+\newcommand*{\fancyrefsubseclabelprefix}{subsec}
+
+\fancyrefaddcaptions{english}{%
+ \providecommand*{\frefsubsecname}{subsection}%
+ \providecommand*{\Frefsubsecname}{Subsection}%
+}
+
+\frefformat{plain}{\fancyrefsubseclabelprefix}{\frefsubsecname\fancyrefdefaultspacing#1}
+\Frefformat{plain}{\fancyrefsubseclabelprefix}{\Frefsubsecname\fancyrefdefaultspacing#1}
+
+\frefformat{vario}{\fancyrefsubseclabelprefix}{%
+ \frefsubsecname\fancyrefdefaultspacing#1#3%
+}
+\Frefformat{vario}{\fancyrefsubseclabelprefix}{%
+ \Frefsubsecname\fancyrefdefaultspacing#1#3%
+}
+
+% subsubsection - subsubsec:
+
+\newcommand*{\fancyrefsubsubseclabelprefix}{subsubsec}
+
+\fancyrefaddcaptions{english}{%
+ \providecommand*{\frefsubsubsecname}{subsection}% the same as for subsection
+ \providecommand*{\Frefsubsubsecname}{Subsection}%
+}
+
+\frefformat{plain}{\fancyrefsubsubseclabelprefix}{\frefsubsubsecname\fancyrefdefaultspacing#1}
+\Frefformat{plain}{\fancyrefsubsubseclabelprefix}{\Frefsubsubsecname\fancyrefdefaultspacing#1}
+
+\frefformat{vario}{\fancyrefsubsubseclabelprefix}{%
+ \frefsubsubsecname\fancyrefdefaultspacing#1#3%
+}
+\Frefformat{vario}{\fancyrefsubsubseclabelprefix}{%
+ \Frefsubsubsecname\fancyrefdefaultspacing#1#3%
+}
+
+% End fancyref
+%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Options for use of hyperlinks
+% (make sure this is included last)
+\RequirePackage[%
+ colorlinks,
+ urlcolor=blue,
+ bookmarks=true,
+ bookmarksnumbered=true]{hyperref}
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilypond-manuals.css b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilypond-manuals.css
new file mode 100644
index 0000000000..0da009ed24
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/resources/lilypond-manuals.css
@@ -0,0 +1,469 @@
+/**********************************************************/
+/* PAGE-WIDE SETTINGS */
+/**********************************************************/
+
+html {
+ height: 100%;
+}
+
+body {
+ margin: 0 auto;
+ padding: 0;
+ height: 100%;
+ font-size: 100%;
+ line-height: 1.125;
+ color: #000;
+ background-color: #fff;
+}
+
+/***********************************************************/
+/* HEADERS */
+/***********************************************************/
+
+.chapter, .section, .subsection, .subsubsection,
+.appendix, .appendixsec, .appendixsubsec,
+.unnumbered, .unnumberedsec, .unnumberedsubsec, .unnumberedsubsubsec,
+.subheading, .subsubheading {
+ color: #204a87;
+ border-bottom: 1px dashed black;
+ padding-bottom: 0.15em;
+ margin-top: 0.6em;
+ margin-bottom: 1em;
+}
+
+.settitle {
+ background: #b1d281;
+ font-size: 2em;
+ text-align: center;
+ padding: 0.4em 0.5em;
+ border: solid #7b925a;
+ border-width: 1px 0;
+ margin: 0;
+}
+
+.chapter, .appendix, .unnumbered {
+ font-size: 1.8em;
+}
+
+.section, .appendixsec, .unnumberedsec {
+ font-size: 1.6em;
+}
+
+.subsection, .appendixsubsec, .unnumberedsubsec {
+ font-size: 1.4em;
+}
+
+.subheading, .subsubsection, .unnumberedsubsubsec {
+ font-size: 1.25em;
+}
+
+.subsubheading {
+ font-size: 1em;
+ font-weight: bold;
+}
+
+.chapheading {
+ position: absolute;
+ height: 0;
+ overflow: hidden;
+ text-indent: -999em;
+}
+
+/***********************************************************/
+/* LINKS */
+/***********************************************************/
+
+a:link {
+ color: #0c51ab;
+}
+
+a:visited {
+ color: #804f01;
+}
+
+a:active {
+ color: #278800;
+}
+
+a:hover {
+ color: #0105ad;
+}
+
+/***********************************************************/
+/* BLOCK FORMATTING */
+/***********************************************************/
+
+blockquote, .smallexample {
+ width: 96%;
+ padding: 0;
+ border: solid #b1d281;
+ border-width: 1px 1px 1px 5px;
+ margin: 1em auto;
+}
+
+blockquote p, pre.smallexample {
+ padding: 1em;
+ margin: 0;
+}
+
+blockquote blockquote {
+ border: none;
+}
+
+.verbatim, .example, .lisp {
+ font-size: 1em;
+ padding: 1em;
+ margin: 0;
+}
+
+#main hr {
+ height: 0;
+ padding: 0;
+ border: 0;
+ margin: 0;
+ text-indent: -999em;
+}
+
+table.cartouche {
+ background: #f5f5dc;
+ width: 85%;
+ border-collapse: collapse;
+ padding: 0 0.5em;
+ border: 2px solid #8f5902;
+ margin: 0 auto 1em;
+}
+
+table.cartouche p {
+ padding: 1em;
+ margin: 0;
+}
+
+table.cartouche td {
+ border: none;
+}
+
+/***********************************************************/
+/* MAIN CONTENT */
+/***********************************************************/
+
+div#main {
+ position: absolute;
+ top: 0;
+ right: 0;
+ bottom: 0;
+ left: 0;
+ padding: 0;
+ margin: 0;
+ overflow: auto;
+}
+
+div#main li {
+ padding: 0 1em 0.5em 0;
+}
+
+div#main ul {
+ margin: 0;
+ padding-left: 3em;
+}
+
+h1, h2, h3, h4, p, table, address, dt {
+ padding-left: 1em;
+ padding-right: 1em;
+}
+
+p {
+ margin: 1em 0;
+}
+
+#languages {
+ padding: 0.5em 1em;
+ margin: 0;
+}
+
+pre.menu-comment {
+ font-size: 1em;
+ padding-top: 1em;
+ padding-bottom: 0;
+ margin: 0;
+}
+
+#main .contents li {
+ padding-bottom: 0;
+}
+
+#main .contents > ul {
+ margin-bottom: 1em;
+}
+
+/***********************************************************/
+/* TOC SIDEBAR */
+/***********************************************************/
+
+div#tocframe {
+ display: none;
+ position: absolute;
+ top: 0;
+ right: 73%;
+ bottom: 0;
+ left: 0;
+ padding: 0;
+ margin: 0;
+ overflow: auto;
+ background: #f5f5dc;
+ z-index: 100;
+ list-style-type: none;
+ font-size: 0.83em;
+ line-height: 1.3;
+}
+
+@media screen {
+ body > div#tocframe {
+ position: fixed
+ }
+}
+
+div#tocframe a:link, div#tocframe a:visited {
+ color: #454532;
+ text-decoration: none;
+}
+
+div#tocframe a:hover {
+ color: #232b16;
+ text-decoration: underline;
+}
+
+div#tocframe p.toc_uplink {
+ font-size: 1em;
+ line-height: 1.125;
+ background: #c9ccc4;
+ padding: 0.25em 1em 0.25em 0.5em;
+ border-bottom: 1px solid #a0a087;
+ margin: 0;
+}
+
+div#tocframe p.toc_uplink a:link,
+div#tocframe p.toc_uplink a:visited {
+ color: #1c1c1b;
+}
+
+div#tocframe p.toc_uplink a:hover {
+ color: #000;
+}
+
+div#tocframe h4 {
+ font-size: 1em;
+ line-height: 1.125;
+ font-weight: bold;
+ font-style: italic;
+ padding: 0.75em 0.5em 0 0.5em;
+ margin: 0;
+}
+
+#tocframe .contents {
+ background-color: transparent;
+ list-style-type: none;
+ padding: 0;
+ border: 0;
+ margin: 0;
+}
+
+#tocframe ul.toc {
+ padding: 0.25em 0.5em 1em 0.5em;
+ list-style-type: none;
+ margin: 0;
+}
+
+#tocframe ul.toc ul.toc {
+ padding: 0;
+ margin: 0;
+}
+
+#tocframe ul.toc li {
+ padding: 0;
+ margin: 0;
+}
+
+#tocframe ul.toc > li {
+ font-size: 1em;
+}
+
+#tocframe ul.toc li li {
+ padding-left: 1em;
+}
+
+li.toc_current {
+ font-weight: bold;
+ font-style: italic;
+}
+
+li.toc_current ul {
+ font-weight: normal;
+ font-style: normal;
+ background: transparent;
+}
+
+/***********************************************************/
+/* NAVIGATION */
+/***********************************************************/
+
+.nav_table {
+ width: 100%;
+ background: #c9ccc4;
+ font-size: 0.83em;
+ border-collapse: collapse;
+ padding: 0;
+ border: none;
+ margin: 0;
+}
+
+.nav_table a:link, .nav_table a:visited {
+ color: #1c1c1b;
+ text-decoration: none;
+}
+
+.nav_table a:hover {
+ color: #000;
+ text-decoration: underline;
+}
+
+.nav_table tr, .nav_table a {
+ padding: 0;
+ margin: 0;
+}
+
+.nav_table td {
+ padding: 0.25em;
+ margin: 0;
+}
+
+div.header {
+ background: #b1d281;
+ text-align: center;
+ padding: 0.5em;
+ border-bottom: 1px solid #7b925a;
+ margin: 0;
+ height: auto;
+}
+
+div.header h1 {
+ font-size: 2em;
+ padding: 0.25em;
+ margin: 0;
+}
+
+div.subheader {
+ background: #ddd;
+ padding: 0;
+ margin: 0;
+ text-align: center;
+}
+
+div.subheader p {
+ padding: 0.5em;
+ margin: 0;
+}
+
+table#navigation {
+ line-height: 1.5;
+ padding: 0;
+ margin: 1em auto;
+}
+
+table#navigation td {
+ padding: 0.5em 0.75em;
+}
+
+table#navigation ul {
+ padding-left: 0.5em;
+ margin: 0;
+}
+
+table .title {
+ font-weight: bold;
+}
+
+.footer {
+ background: #e5f5ce;
+ font-size: 0.8em;
+ padding: 0.2em 0;
+ border: solid #b1d281;
+ border-width: 0 0 5px 0;
+ margin: 0;
+}
+
+.footer a:link {
+ color: #0308fc;
+}
+
+.footer p {
+ padding: 0 1.25em;
+ margin: 0.4em 0;
+}
+
+table.menu {
+ margin: 0 0 1em;
+}
+
+/***********************************************************/
+/* OVERRIDES FOR PRINTING */
+/***********************************************************/
+
+@media print {
+ /* Hide the sidebar and make the main contents take up the full width */
+ div#main { position: static; overflow: visible; left: 0; }
+ div#tocframe { display: none; }
+ /* Also don't show the navigation toolbars between all sections */
+ .nav_table { display: none; }
+}
+
+/***********************************************************/
+/* FORMATTING of AJAX SEARCH BOX */
+/***********************************************************/
+
+div#search {
+ border: none;
+ border-bottom: 1pt solid #C5972C;
+ background: #E8E3AC;
+ padding-left: 3px;
+ padding-top: 2px;
+ padding-bottom: 1px;
+}
+div#search p, div#search form {
+ padding: 0;
+ margin: 0;
+}
+#search_results {
+ font-size: 0.75em;
+ padding: 0;
+ margin: 0;
+ display: none;
+}
+#search_results table {
+ width: 100%;
+}
+
+/***********************************************************/
+/* OTHER */
+/***********************************************************/
+
+.warning {
+ background: #eef;
+ text-align: left;
+ padding: 0;
+ border: 1px solid green;
+ /* Experimental rounded corners */
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ margin: 1em;
+}
+
+.advanced {
+ background: #eeffcc;
+ text-align: left;
+ padding: 0;
+ border: 1px solid green;
+ /* Experimental rounded corners */
+ -moz-border-radius: 10px;
+ -webkit-border-radius: 10px;
+ margin: 0.5em 0.5em 2em 3em;
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/documentation/the-feta-font-2-18-0.html b/macros/unicodetex/latex/lilyglyphs/documentation/the-feta-font-2-18-0.html
new file mode 100644
index 0000000000..4d3fbe2f4b
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/documentation/the-feta-font-2-18-0.html
@@ -0,0 +1,571 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
+<!-- saved from url=(0075)http://www.lilypond.org/doc/v2.18/Documentation/notation/the-feta-font.html -->
+<html><!-- Copyright C 1999-2012 by the authors.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1
+or any later version published by the Free Software Foundation;
+with no Invariant Sections.
+A copy of the license is included in the section entitled "GNU
+Free Documentation License".
+
+ --><!-- Created on December 29, 2013 by texi2html 1.82
+texi2html was written by:
+ Lionel Cons <Lionel.Cons@cern.ch> (original author)
+ Karl Berry <karl@freefriends.org>
+ Olaf Bachmann <obachman@mathematik.uni-kl.de>
+ and many others.
+Maintained by: Many creative people.
+Send bugs and suggestions to <texi2html-bug@nongnu.org>
+--><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
+<title>LilyPond Notation Reference: A.8 The Feta font</title>
+
+<meta name="description" content="LilyPond Notation Reference: A.8 The Feta font">
+<meta name="keywords" content="LilyPond Notation Reference: A.8 The Feta font">
+<meta name="resource-type" content="document">
+<meta name="distribution" content="global">
+<meta name="generator" content="Bluefish 2.2.3" >
+
+<link href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index#index" rel="start" title="LilyPond — Notation Reference">
+<link href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index#lilypond-command-index" rel="index" title="D. LilyPond command index">
+<link href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" rel="contents" title="Table of Contents">
+<link href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" rel="help" title="About This Document">
+<link href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables#notation-manual-tables" rel="up" title="A. Notation manual tables">
+<link href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-index#lilypond-index" rel="next" title="E. LilyPond index">
+<link href="http://www.lilypond.org/doc/v2.18/Documentation/notation/list-of-colors#list-of-colors" rel="previous" title="A.7 List of colors">
+<link rel="stylesheet" type="text/css" title="Default style" href="./resources/lilypond-manuals.css">
+<!--[if lte IE 7]>
+<link href="../../Documentation/css/lilypond-ie-fixes.css" rel="stylesheet" type="text/css">
+<![endif]-->
+
+
+<link type="text/css" rel="stylesheet" href="chrome-extension://cpngackimfmofbokmjmljamhdncknpmg/style.css"><script type="text/javascript" charset="utf-8" src="chrome-extension://cpngackimfmofbokmjmljamhdncknpmg/js/page_context.js"></script><style type="text/css"></style></head>
+
+<body lang="en" bgcolor="#FFFFFF" text="#000000" link="#0000FF" vlink="#800080" alink="#FF0000" screen_capture_injected="true">
+
+
+<div id="main">
+<a name="The-Feta-font"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/list-of-colors" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; List of colors&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;Notation manual tables&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#clef-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Clef glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="the-feta-font"></a>
+<h2 class="appendixsec">A.8 The Feta font</h2>
+
+<a name="index-Feta-font"></a>
+<a name="index-Font_002c-Feta"></a>
+
+<p>The following symbols are available in the Emmentaler font and may be
+accessed directly using text markup with the name of the glyph
+as shown in the tables below,
+such as <code>g^\markup {\musicglyph #"scripts.segno" }</code> or
+<code>\markup {\musicglyph #"five"}</code>. For more information,
+see <a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/formatting-text">Formatting text</a>.
+</p>
+
+<table class="menu" border="0" cellspacing="0">
+<tbody><tr><td align="left" valign="top"><a href="#clef-glyphs" accesskey="1">Clef glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#time-signature-glyphs" accesskey="2">Time Signature glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#number-glyphs" accesskey="3">Number glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#accidental-glyphs" accesskey="4">Accidental glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#default-notehead-glyphs" accesskey="5">Default Notehead glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#special-notehead-glyphs" accesskey="6">Special Notehead glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#shape_002dnote-notehead-glyphs" accesskey="7">Shape-note Notehead glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#rest-glyphs" accesskey="8">Rest glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#flag-glyphs" accesskey="9">Flag glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#dot-glyphs">Dot glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#dynamic-glyphs">Dynamic glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#script-glyphs">Script glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#arrowhead-glyphs">Arrowhead glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#bracket_002dtip-glyphs">Bracket-tip glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#pedal-glyphs">Pedal glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#accordion-glyphs">Accordion glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#tie-glyphs">Tie glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#vaticana-glyphs">Vaticana glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#medicaea-glyphs">Medicaea glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#hufnagel-glyphs">Hufnagel glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#mensural-glyphs">Mensural glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#neomensural-glyphs">Neomensural glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#petrucci-glyphs">Petrucci glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#solesmes-glyphs">Solesmes glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+<tr><td align="left" valign="top"><a href="#kievan-notation-glyphs">Kievan Notation glyphs</a></td><td>&nbsp;&nbsp;</td><td align="left" valign="top">
+</td></tr>
+</tbody></table>
+
+
+<hr size="6">
+<a name="Clef-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#the-feta-font" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; The Feta font&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#time-signature-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Time Signature glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="clef-glyphs"></a>
+<h3 class="unnumberedsubsec">Clef glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/0b/lily-76dbcd67.ly">
+ <img align="middle" border="0" src="./resources/lily-76dbcd67.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Time-Signature-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#clef-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Clef glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#number-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Number glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="time-signature-glyphs"></a>
+<h3 class="unnumberedsubsec">Time Signature glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/c6/lily-8b332c94.ly">
+ <img align="middle" border="0" src="./resources/lily-8b332c94.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Number-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#time-signature-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Time Signature glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#accidental-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Accidental glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="number-glyphs"></a>
+<h3 class="unnumberedsubsec">Number glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/80/lily-8d8bb8a3.ly">
+ <img align="middle" border="0" src="./resources/lily-8d8bb8a3.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Accidental-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#number-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Number glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#default-notehead-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Default Notehead glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="accidental-glyphs"></a>
+<h3 class="unnumberedsubsec">Accidental glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/1b/lily-5b13ce04.ly">
+ <img align="middle" border="0" src="./resources/lily-5b13ce04.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Default-Notehead-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#accidental-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Accidental glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#special-notehead-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Special Notehead glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="default-notehead-glyphs"></a>
+<h3 class="unnumberedsubsec">Default Notehead glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/38/lily-f4d0afc9.ly">
+ <img align="middle" border="0" src="./resources/lily-f4d0afc9.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Special-Notehead-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#default-notehead-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Default Notehead glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#shape_002dnote-notehead-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Shape-note Notehead glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="special-notehead-glyphs"></a>
+<h3 class="unnumberedsubsec">Special Notehead glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/9d/lily-088c978c.ly">
+ <img align="middle" border="0" src="./resources/lily-088c978c.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Shape_002dnote-Notehead-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#special-notehead-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Special Notehead glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#rest-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Rest glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="shape_002dnote-notehead-glyphs"></a>
+<h3 class="unnumberedsubsec">Shape-note Notehead glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/71/lily-5c91a201.ly">
+ <img align="middle" border="0" src="./resources/lily-5c91a201.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Rest-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#shape_002dnote-notehead-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Shape-note Notehead glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#flag-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Flag glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="rest-glyphs"></a>
+<h3 class="unnumberedsubsec">Rest glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/fa/lily-40869867.ly">
+ <img align="middle" border="0" src="./resources/lily-40869867.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Flag-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#rest-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Rest glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#dot-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Dot glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="flag-glyphs"></a>
+<h3 class="unnumberedsubsec">Flag glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/09/lily-2be182be.ly">
+ <img align="middle" border="0" src="./resources/lily-2be182be.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Dot-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#flag-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Flag glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#dynamic-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Dynamic glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="dot-glyphs"></a>
+<h3 class="unnumberedsubsec">Dot glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/81/lily-8155deab.ly">
+ <img align="middle" border="0" src="./resources/lily-8155deab.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Dynamic-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#dot-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Dot glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#script-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Script glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="dynamic-glyphs"></a>
+<h3 class="unnumberedsubsec">Dynamic glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/fb/lily-ae3fd948.ly">
+ <img align="middle" border="0" src="./resources/lily-ae3fd948.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Script-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#dynamic-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Dynamic glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#arrowhead-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Arrowhead glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="script-glyphs"></a>
+<h3 class="unnumberedsubsec">Script glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/e5/lily-20e8632d.ly">
+ <img align="middle" border="0" src="./resources/lily-20e8632d.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Arrowhead-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#script-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Script glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#bracket_002dtip-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Bracket-tip glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="arrowhead-glyphs"></a>
+<h3 class="unnumberedsubsec">Arrowhead glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/92/lily-8d82df0c.ly">
+ <img align="middle" border="0" src="./resources/lily-8d82df0c.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Bracket_002dtip-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#arrowhead-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Arrowhead glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#pedal-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Pedal glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="bracket_002dtip-glyphs"></a>
+<h3 class="unnumberedsubsec">Bracket-tip glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/a4/lily-7fd84ff8.ly">
+ <img align="middle" border="0" src="./resources/lily-7fd84ff8.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Pedal-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#bracket_002dtip-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Bracket-tip glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#accordion-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Accordion glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="pedal-glyphs"></a>
+<h3 class="unnumberedsubsec">Pedal glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/62/lily-a2bf82dd.ly">
+ <img align="middle" border="0" src="./resources/lily-a2bf82dd.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Accordion-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#pedal-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Pedal glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#tie-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Tie glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="accordion-glyphs"></a>
+<h3 class="unnumberedsubsec">Accordion glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/63/lily-3b47d3fe.ly">
+ <img align="middle" border="0" src="./resources/lily-3b47d3fe.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Tie-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#accordion-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Accordion glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#vaticana-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Vaticana glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="tie-glyphs"></a>
+<h3 class="unnumberedsubsec">Tie glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/f5/lily-dffaecd2.ly">
+ <img align="middle" border="0" src="./resources/lily-dffaecd2.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Vaticana-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#tie-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Tie glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#medicaea-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Medicaea glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="vaticana-glyphs"></a>
+<h3 class="unnumberedsubsec">Vaticana glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/08/lily-b69af986.ly">
+ <img align="middle" border="0" src="./resources/lily-b69af986.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Medicaea-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#vaticana-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Vaticana glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#hufnagel-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Hufnagel glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="medicaea-glyphs"></a>
+<h3 class="unnumberedsubsec">Medicaea glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/fd/lily-1981c3c7.ly">
+ <img align="middle" border="0" src="./resources/lily-1981c3c7.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Hufnagel-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#medicaea-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Medicaea glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#mensural-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Mensural glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="hufnagel-glyphs"></a>
+<h3 class="unnumberedsubsec">Hufnagel glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/4a/lily-d9988a2c.ly">
+ <img align="middle" border="0" src="./resources/lily-d9988a2c.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Mensural-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#hufnagel-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Hufnagel glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#neomensural-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Neomensural glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="mensural-glyphs"></a>
+<h3 class="unnumberedsubsec">Mensural glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/f4/lily-907bc72d.ly">
+ <img align="middle" border="0" src="./resources/lily-907bc72d.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Neomensural-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#mensural-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Mensural glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#petrucci-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Petrucci glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="neomensural-glyphs"></a>
+<h3 class="unnumberedsubsec">Neomensural glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/2d/lily-707477b7.ly">
+ <img align="middle" border="0" src="./resources/lily-707477b7.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Petrucci-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#neomensural-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Neomensural glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#solesmes-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Solesmes glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="petrucci-glyphs"></a>
+<h3 class="unnumberedsubsec">Petrucci glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/07/lily-3f4afecc.ly">
+ <img align="middle" border="0" src="./resources/lily-3f4afecc.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+
+<hr size="6">
+<a name="Solesmes-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#petrucci-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Petrucci glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="#kievan-notation-glyphs" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Kievan Notation glyphs &gt; </a>]</td></tr></tbody></table>
+<a name="solesmes-glyphs"></a>
+<h3 class="unnumberedsubsec">Solesmes glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/5a/lily-b3dc0958.ly">
+ <img align="middle" border="0" src="./resources/lily-b3dc0958.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+<hr size="6">
+<a name="Kievan-Notation-glyphs"></a>
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#solesmes-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Solesmes glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/note-head-styles" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Note head styles &gt; </a>]</td></tr></tbody></table>
+<a name="kievan-notation-glyphs"></a>
+<h3 class="unnumberedsubsec">Kievan Notation glyphs</h3>
+
+<blockquote><p>
+ <a href="http://www.lilypond.org/doc/v2.18/Documentation/4d/lily-2abb8a04.ly">
+ <img align="middle" border="0" src="./resources/lily-2abb8a04.png" alt="[image of music]">
+ </a>
+</p>
+</blockquote>
+
+
+
+<hr size="6">
+<table class="nav_table">
+<tbody><tr><td valign="middle" align="left" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/notation-manual-tables" title="Beginning of this chapter or previous chapter"> &lt;&lt; Notation manual tables&nbsp;</a>]</td><td valign="middle" align="center" colspan="3">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index" title="Cover (top) of document" rel="start">Top</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_toc#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/lilypond-command-index" title="Index" rel="index">Index</a>][<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/index_abt#SEC_About" title="About (help)" rel="help"> ? </a>]</td><td valign="middle" align="right" colspan="1">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/cheat-sheet" title="Next chapter">&nbsp;Cheat sheet &gt;&gt; </a>]</td></tr><tr><td valign="middle" align="left" colspan="2">[<a href="#solesmes-glyphs" title="Previous section in reading order" accesskey="p" rel="previous"> &lt; Solesmes glyphs&nbsp;</a>]</td><td valign="middle" align="center" colspan="1">[<a href="#the-feta-font" title="Up section" accesskey="u" rel="up">&nbsp; Up :&nbsp;The Feta font&nbsp;</a>]</td><td valign="middle" align="right" colspan="2">[<a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/note-head-styles" title="Next section in reading order" accesskey="n" rel="next">&nbsp;Note head styles &gt; </a>]</td></tr></tbody></table>
+<!-- footer_tag -->
+<div class="footer">
+<!-- This footer was autogenerated by /home/gub/gub/target/linux-x86/build/lilypond-git.sv.gnu.org--lilypond.git-stable-2.18/scripts/build/out/www_post -->
+<p class="footer_version">
+This page is for LilyPond-2.18.0 (stable-branch).
+</p>
+<p class="footer_report">
+We welcome your aid; please <a href="http://lilypond.org/help-us.html">help us</a> by reporting errors to our <a href="http://post.gmane.org/post.php?group=gmane.comp.gnu.lilypond.bugs">bug list</a>.
+</p>
+</div>
+
+
+<p id="languages">
+<!-- These links were autogenerated by /home/gub/gub/target/linux-x86/build/lilypond-git.sv.gnu.org--lilypond.git-stable-2.18/scripts/build/out/www_post -->
+ Other languages: <a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/the-feta-font.de.html">deutsch</a>, <a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/the-feta-font.es.html">español</a>, <a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/the-feta-font.fr.html">français</a>, <a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/the-feta-font.it.html">italiano</a>, <a href="http://www.lilypond.org/doc/v2.18/Documentation/notation/the-feta-font.ja.html">日本語</a>.
+ <br>
+ About <a href="http://www.lilypond.org/website/misc/browser-language">automatic language selection</a>.
+</p>
+
+<!-- FOOTER -->
+
+<!-- end div#main here -->
+</div>
+
+
+
+</body></html> \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/FONTLOG b/macros/unicodetex/latex/lilyglyphs/fonts/FONTLOG
new file mode 100644
index 0000000000..1c423c35df
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/FONTLOG
@@ -0,0 +1,23 @@
+This is the FONTLOG for the Emmentaler OpenType fonts
+distributed together with the lilyglyphs LaTeX package.
+lilyglyphs is maintained by Urs Liska (ul@openlilylib.org).
+
+Emmentaler is the music font of the LilyPond engraving software
+(http://www.lilypond.org) and contains all musical symbols that
+LilyPond doesn't draw itself.
+lilyglyphs is a package that makes LilyPond's notational elements
+available as character commands in LuaLaTeX/XeLaTeX documents.
+
+The font files distributed with lilyglyphs are the ones shipped with
+LilyPond 2.18.0 without any modifications.
+
+The fonts have been created by "The LilyPond authors" and are licensed
+under the SIL Open Font License, Version 1.1. See the file
+LICENSE.OFL in the same directory for details.
+More information on LilyPond and the Emmentaler fonts can be obtained
+at http://www.lilypond.org.
+
+The Metafont sources for the fonts can be obtained at LilyPond's
+Git repository at http://savannah.gnu.org/git/?group=lilypond,
+in particular they are in the 'mf' directory of the source tree at
+http://git.savannah.gnu.org/cgit/lilypond.git/tree/
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/LICENSE.OFL b/macros/unicodetex/latex/lilyglyphs/fonts/LICENSE.OFL
new file mode 100644
index 0000000000..41e80d6039
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/LICENSE.OFL
@@ -0,0 +1,95 @@
+
+Copyright (c) 1996--2013, The LilyPond authors (lilypond.org)
+with Reserved Font Name "Emmentaler" and "Feta".
+
+This Font Software is licensed under the SIL Open Font License, Version 1.1.
+
+This license is copied below, and is also available with a FAQ at:
+http://scripts.sil.org/OFL
+
+SIL OPEN FONT LICENSE
+
+Version 1.1 - 26 February 2007
+
+PREAMBLE
+The goals of the Open Font License (OFL) are to stimulate worldwide
+development of collaborative font projects, to support the font creation
+efforts of academic and linguistic communities, and to provide a free and
+open framework in which fonts may be shared and improved in partnership
+with others.
+
+The OFL allows the licensed fonts to be used, studied, modified and
+redistributed freely as long as they are not sold by themselves. The
+fonts, including any derivative works, can be bundled, embedded,
+redistributed and/or sold with any software provided that any reserved
+names are not used by derivative works. The fonts and derivatives,
+however, cannot be released under any other type of license. The
+requirement for fonts to remain under this license does not apply
+to any document created using the fonts or their derivatives.
+
+DEFINITIONS
+"Font Software" refers to the set of files released by the Copyright
+Holder(s) under this license and clearly marked as such. This may
+include source files, build scripts and documentation.
+
+"Reserved Font Name" refers to any names specified as such after the
+copyright statement(s).
+
+"Original Version" refers to the collection of Font Software components as
+distributed by the Copyright Holder(s).
+
+"Modified Version" refers to any derivative made by adding to, deleting,
+or substituting -- in part or in whole -- any of the components of the
+Original Version, by changing formats or by porting the Font Software to a
+new environment.
+
+"Author" refers to any designer, engineer, programmer, technical
+writer or other person who contributed to the Font Software.
+
+PERMISSION & CONDITIONS
+Permission is hereby granted, free of charge, to any person obtaining
+a copy of the Font Software, to use, study, copy, merge, embed, modify,
+redistribute, and sell modified and unmodified copies of the Font
+Software, subject to the following conditions:
+
+1) Neither the Font Software nor any of its individual components,
+in Original or Modified Versions, may be sold by itself.
+
+2) Original or Modified Versions of the Font Software may be bundled,
+redistributed and/or sold with any software, provided that each copy
+contains the above copyright notice and this license. These can be
+included either as stand-alone text files, human-readable headers or
+in the appropriate machine-readable metadata fields within text or
+binary files as long as those fields can be easily viewed by the user.
+
+3) No Modified Version of the Font Software may use the Reserved Font
+Name(s) unless explicit written permission is granted by the corresponding
+Copyright Holder. This restriction only applies to the primary font name as
+presented to the users.
+
+4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
+Software shall not be used to promote, endorse or advertise any
+Modified Version, except to acknowledge the contribution(s) of the
+Copyright Holder(s) and the Author(s) or with their explicit written
+permission.
+
+5) The Font Software, modified or unmodified, in part or in whole,
+must be distributed entirely under this license, and must not be
+distributed under any other license. The requirement for fonts to
+remain under this license does not apply to any document created
+using the Font Software.
+
+TERMINATION
+This license becomes null and void if any of the above conditions are
+not met.
+
+DISCLAIMER
+THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
+EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
+MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
+OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
+COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
+INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
+DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
+OTHER DEALINGS IN THE FONT SOFTWARE.
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-11.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-11.otf
new file mode 100644
index 0000000000..b749fe4b68
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-11.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-13.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-13.otf
new file mode 100644
index 0000000000..da5a686cbf
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-13.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-14.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-14.otf
new file mode 100644
index 0000000000..c8bf9e71d8
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-14.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-16.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-16.otf
new file mode 100644
index 0000000000..1ed1212fa0
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-16.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-18.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-18.otf
new file mode 100644
index 0000000000..bad36f2f5c
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-18.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-20.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-20.otf
new file mode 100644
index 0000000000..07ce75c902
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-20.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-23.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-23.otf
new file mode 100644
index 0000000000..d7597ddb13
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-23.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-26.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-26.otf
new file mode 100644
index 0000000000..df5c42ea81
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-26.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-brace.otf b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-brace.otf
new file mode 100644
index 0000000000..c850072863
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/fonts/emmentaler-brace.otf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/license/COPYING.LPPL b/macros/unicodetex/latex/lilyglyphs/license/COPYING.LPPL
new file mode 100644
index 0000000000..f24b18cd79
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/license/COPYING.LPPL
@@ -0,0 +1,419 @@
+'lilyglyphs' is free software and can be distributed and modified
+under the LaTeX Project Public License Version 1.3c or (at your option)
+any later version.
+
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
diff --git a/macros/unicodetex/latex/lilyglyphs/license/MANIFEST b/macros/unicodetex/latex/lilyglyphs/license/MANIFEST
new file mode 100644
index 0000000000..8b9030f086
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/license/MANIFEST
@@ -0,0 +1,180 @@
+MANIFEST for lilyglpyhs 0.2.3
+Generated on 2014-03-12
+
+The following files are part of this work:
+
+/CHANGES.md
+/INSTALL
+/README
+/deploy/documentation/lilyglyphs-example-400.png
+/deploy/documentation/lilyglyphs-example-600.png
+/deploy/documentation/lilyglyphs-example-de.pdf
+/deploy/documentation/lilyglyphs-example-de.tex
+/deploy/documentation/lilyglyphs-example.pdf
+/deploy/documentation/lilyglyphs-example.png
+/deploy/documentation/lilyglyphs-example.tex
+/deploy/documentation/lilyglyphs.pdf
+/deploy/documentation/lilyglyphs.tex
+/deploy/documentation/lilyglyphs_logo/lilyglyphs_logo.pdf
+/deploy/documentation/lilyglyphs_logo/lilyglyphs_logo.png
+/deploy/documentation/lilyglyphs_logo/lilyglyphs_logo.tex
+/deploy/documentation/the-feta-font-2-18-0.html
+/documentation/resources/lily-088c978c.png
+/documentation/resources/lily-1981c3c7.png
+/documentation/resources/lily-20e8632d.png
+/documentation/resources/lily-2abb8a04.png
+/documentation/resources/lily-2be182be.png
+/documentation/resources/lily-3b47d3fe.png
+/documentation/resources/lily-3f4afecc.png
+/documentation/resources/lily-40869867.png
+/documentation/resources/lily-5b13ce04.png
+/documentation/resources/lily-5c91a201.png
+/documentation/resources/lily-707477b7.png
+/documentation/resources/lily-76dbcd67.png
+/documentation/resources/lily-7fd84ff8.png
+/documentation/resources/lily-8155deab.png
+/documentation/resources/lily-8b332c94.png
+/documentation/resources/lily-8d82df0c.png
+/documentation/resources/lily-8d8bb8a3.png
+/documentation/resources/lily-907bc72d.png
+/documentation/resources/lily-a2bf82dd.png
+/documentation/resources/lily-ae3fd948.png
+/documentation/resources/lily-b3dc0958.png
+/documentation/resources/lily-b69af986.png
+/documentation/resources/lily-d9988a2c.png
+/documentation/resources/lily-dffaecd2.png
+/documentation/resources/lily-f4d0afc9.png
+/documentation/resources/lilyglyphsManualFonts.sty
+/documentation/resources/lilyglyphsStyle.sty
+/documentation/resources/lilypond-manuals.css
+/documentation/resources/lilypond-manuals.css~
+/fonts/FONTLOG
+/fonts/FONTLOG~
+/fonts/LICENSE.OFL
+/fonts/emmentaler-11.otf
+/fonts/emmentaler-13.otf
+/fonts/emmentaler-14.otf
+/fonts/emmentaler-16.otf
+/fonts/emmentaler-18.otf
+/fonts/emmentaler-20.otf
+/fonts/emmentaler-23.otf
+/fonts/emmentaler-26.otf
+/fonts/emmentaler-brace.otf
+/license/COPYING.LPPL
+/license/license-preamble.inp
+/scripts/README-scripts
+/scripts/deploy.py
+/scripts/lily-glyph-commands.py
+/scripts/lily-image-commands.py
+/scripts/lily-rebuild-pdfs.py
+/scripts/lilyglyphs_common.py
+/scripts/lilyglyphs_common.pyc
+/source/fonts
+/source/fonts/README-emmentaler
+/source/fonts/README-emmentaler~
+/source/fonts/emmentaler-2-18-0.zip
+/source/glyphimages/definitions/_template.ly
+/source/glyphimages/definitions/beamednotes.ly
+/source/glyphimages/definitions/dynamicsigns.ly
+/source/glyphimages/definitions/fancyexamples.ly
+/source/glyphimages/definitions/score.ily
+/source/glyphimages/definitions/singlenotes.ly
+/source/glyphimages/definitions/singlenotes.pdf
+/source/glyphimages/generated_src/lily-crescHairpin.ly
+/source/glyphimages/generated_src/lily-crotchet.ly
+/source/glyphimages/generated_src/lily-crotchetDotted.ly
+/source/glyphimages/generated_src/lily-crotchetDottedDouble.ly
+/source/glyphimages/generated_src/lily-crotchetDottedDoubleDown.ly
+/source/glyphimages/generated_src/lily-crotchetDottedDown.ly
+/source/glyphimages/generated_src/lily-crotchetDown.ly
+/source/glyphimages/generated_src/lily-decrescHairpin.ly
+/source/glyphimages/generated_src/lily-demisemiquaver.ly
+/source/glyphimages/generated_src/lily-demisemiquaverDotted.ly
+/source/glyphimages/generated_src/lily-demisemiquaverDottedDouble.ly
+/source/glyphimages/generated_src/lily-demisemiquaverDottedDoubleDown.ly
+/source/glyphimages/generated_src/lily-demisemiquaverDottedDown.ly
+/source/glyphimages/generated_src/lily-demisemiquaverDown.ly
+/source/glyphimages/generated_src/lily-fancyExample.ly
+/source/glyphimages/generated_src/lily-halfNote.ly
+/source/glyphimages/generated_src/lily-halfNoteDotted.ly
+/source/glyphimages/generated_src/lily-halfNoteDottedDouble.ly
+/source/glyphimages/generated_src/lily-halfNoteDottedDoubleDown.ly
+/source/glyphimages/generated_src/lily-halfNoteDottedDown.ly
+/source/glyphimages/generated_src/lily-halfNoteDown.ly
+/source/glyphimages/generated_src/lily-quaver.ly
+/source/glyphimages/generated_src/lily-quaverDotted.ly
+/source/glyphimages/generated_src/lily-quaverDottedDouble.ly
+/source/glyphimages/generated_src/lily-quaverDottedDoubleDdown.ly
+/source/glyphimages/generated_src/lily-quaverDottedDoubleDown.ly
+/source/glyphimages/generated_src/lily-quaverDottedDown.ly
+/source/glyphimages/generated_src/lily-quaverDown.ly
+/source/glyphimages/generated_src/lily-semiquaver.ly
+/source/glyphimages/generated_src/lily-semiquaverDotted.ly
+/source/glyphimages/generated_src/lily-semiquaverDottedDouble.ly
+/source/glyphimages/generated_src/lily-semiquaverDottedDoubleDown.ly
+/source/glyphimages/generated_src/lily-semiquaverDottedDown.ly
+/source/glyphimages/generated_src/lily-semiquaverDown.ly
+/source/glyphimages/generated_src/lily-threeBeamedQuavers.ly
+/source/glyphimages/generated_src/lily-threeBeamedQuaversI.ly
+/source/glyphimages/generated_src/lily-threeBeamedQuaversII.ly
+/source/glyphimages/generated_src/lily-threeBeamedQuaversIII.ly
+/source/glyphimages/generated_src/lily-twoBeamedQuavers.ly
+/tex/commands/README-commands
+/tex/commands/accidentals.inp
+/tex/commands/accordion.inp
+/tex/commands/beamednotes.inp
+/tex/commands/clefs.inp
+/tex/commands/dynamics.inp
+/tex/commands/fancyexamples.inp
+/tex/commands/noteheads.inp
+/tex/commands/numbers.inp
+/tex/commands/rests.inp
+/tex/commands/scripts.inp
+/tex/commands/singlenotes.inp
+/tex/commands/timesignatures.inp
+/tex/core/README-core
+/tex/core/dotted.inp
+/tex/core/genericAccess.inp
+/tex/core/keyval.inp
+/tex/core/opticals.inp
+/tex/lilyglyphs.sty
+/tex/pdfs/.gitignore
+/tex/pdfs/lily-crescHairpin.pdf
+/tex/pdfs/lily-crotchet.pdf
+/tex/pdfs/lily-crotchetDotted.pdf
+/tex/pdfs/lily-crotchetDottedDouble.pdf
+/tex/pdfs/lily-crotchetDottedDoubleDown.pdf
+/tex/pdfs/lily-crotchetDottedDown.pdf
+/tex/pdfs/lily-crotchetDown.pdf
+/tex/pdfs/lily-decrescHairpin.pdf
+/tex/pdfs/lily-demisemiquaver.pdf
+/tex/pdfs/lily-demisemiquaverDotted.pdf
+/tex/pdfs/lily-demisemiquaverDottedDouble.pdf
+/tex/pdfs/lily-demisemiquaverDottedDoubleDown.pdf
+/tex/pdfs/lily-demisemiquaverDottedDown.pdf
+/tex/pdfs/lily-demisemiquaverDown.pdf
+/tex/pdfs/lily-fancyExample.pdf
+/tex/pdfs/lily-halfNote.pdf
+/tex/pdfs/lily-halfNoteDotted.pdf
+/tex/pdfs/lily-halfNoteDottedDouble.pdf
+/tex/pdfs/lily-halfNoteDottedDoubleDown.pdf
+/tex/pdfs/lily-halfNoteDottedDown.pdf
+/tex/pdfs/lily-halfNoteDown.pdf
+/tex/pdfs/lily-quaver.pdf
+/tex/pdfs/lily-quaverDotted.pdf
+/tex/pdfs/lily-quaverDottedDouble.pdf
+/tex/pdfs/lily-quaverDottedDoubleDdown.pdf
+/tex/pdfs/lily-quaverDottedDoubleDown.pdf
+/tex/pdfs/lily-quaverDottedDown.pdf
+/tex/pdfs/lily-quaverDown.pdf
+/tex/pdfs/lily-semiquaver.pdf
+/tex/pdfs/lily-semiquaverDotted.pdf
+/tex/pdfs/lily-semiquaverDottedDouble.pdf
+/tex/pdfs/lily-semiquaverDottedDoubleDown.pdf
+/tex/pdfs/lily-semiquaverDottedDown.pdf
+/tex/pdfs/lily-semiquaverDown.pdf
+/tex/pdfs/lily-threeBeamedQuavers.pdf
+/tex/pdfs/lily-threeBeamedQuaversI.pdf
+/tex/pdfs/lily-threeBeamedQuaversII.pdf
+/tex/pdfs/lily-threeBeamedQuaversIII.pdf
+/tex/pdfs/lily-twoBeamedQuavers.pdf
diff --git a/macros/unicodetex/latex/lilyglyphs/license/license-preamble.inp b/macros/unicodetex/latex/lilyglyphs/license/license-preamble.inp
new file mode 100644
index 0000000000..9e3b129dba
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/license/license-preamble.inp
@@ -0,0 +1,31 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
diff --git a/macros/unicodetex/latex/lilyglyphs/scripts/README-scripts b/macros/unicodetex/latex/lilyglyphs/scripts/README-scripts
new file mode 100644
index 0000000000..a05dd12651
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/scripts/README-scripts
@@ -0,0 +1,3 @@
+This folder contains utility scripts to extend
+and maintain the lilyglyphs package.
+For usage information refer to the manual.
diff --git a/macros/unicodetex/latex/lilyglyphs/scripts/lily-glyph-commands.py b/macros/unicodetex/latex/lilyglyphs/scripts/lily-glyph-commands.py
new file mode 100755
index 0000000000..691652ece6
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/scripts/lily-glyph-commands.py
@@ -0,0 +1,136 @@
+#!/usr/bin/env python
+
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+# %
+# This file is part of the 'lilyglyphs' LaTeX package. %
+# ========== %
+# %
+# https://github.com/openlilylib/lilyglyphs %
+# http://www.openlilylib.org/lilyglyphs %
+# %
+# Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+# %
+# 'lilyglyphs' is free software: you can redistribute it and/or modify %
+# it under the terms of the LaTeX Project Public License, either %
+# version 1.3 of this license or (at your option) any later version. %
+# You may find the latest version of this license at %
+# http://www.latex-project.org/lppl.txt %
+# more information on %
+# http://latex-project.org/lppl/ %
+# and version 1.3 or later is part of all distributions of LaTeX %
+# version 2005/12/01 or later. %
+# %
+# This work has the LPPL maintenance status 'maintained'. %
+# The Current Maintainer of this work is Urs Liska (see above). %
+# %
+# This work consists of the files listed in the file 'manifest.txt' %
+# which can be found in the 'license' directory. %
+# %
+# 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. %
+# %
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+# ########################################################################
+# #
+# genGlyphCommands.py #
+# #
+# generate commands based on Emmentaler glyphs #
+# #
+# ########################################################################
+
+import os, sys, argparse, lilyglyphs_common as lg
+
+def main(input_file):
+ """Do the main work of the script"""
+
+ in_dir, in_file = os.path.split(input_file)
+ os.chdir(in_dir)
+
+ # load and parse input file
+ lg.read_input_file(in_file)
+ read_entries()
+
+ # generate LaTeX commands and save them to output file
+ # (will be a .tex sibling of the input file)
+ lg.generate_latex_commands()
+ out_file, out_ext = os.path.splitext(input_file)
+ lg.write_latex_file(os.path.join(os.getcwd(), out_file + '.tex'))
+
+def read_entries():
+ """Parse the input file and fill a dictionary"""
+ entry = {}
+ def reset_entry():
+ """Set all members of the dict empty,
+ because not all are present in each entry."""
+ entry['cmd'] = ''
+ entry['element'] = ''
+ entry['type'] = 'glyphname'
+ entry['comment'] = []
+ entry['raise'] = ''
+ entry['scale'] = ''
+
+ reset_entry()
+ scale = ''
+ rais = ''
+ for line in lg.definitions_file:
+ line = line.strip()
+ # empty line = end of entry
+ if not len(line):
+ # skip if cmd and glyph haven't been filled both
+ if not (entry['cmd'] and entry['element']):
+ print 'Skip malformed entry \'' + entry['cmd'] + '\'. Please check input file'
+ reset_entry()
+ else:
+ print 'Read entry \'' + entry['cmd'] + '\''
+ lg.in_cmds[entry['cmd']] = {}
+ lg.in_cmds[entry['cmd']]['element'] = entry['element']
+ lg.in_cmds[entry['cmd']]['type'] = entry['type']
+ lg.in_cmds[entry['cmd']]['comment'] = entry['comment']
+ if scale:
+ lg.in_cmds[entry['cmd']]['scale'] = scale
+ if rais:
+ lg.in_cmds[entry['cmd']]['raise'] = rais
+ reset_entry()
+ # ignore Python or LaTeX style comments
+ elif line[0] in '#%':
+ continue
+ else:
+ # add element to the entry
+ keyval = line.split('=')
+ if keyval[0] == 'scale':
+ scale = keyval[1]
+ elif keyval[0] == 'raise':
+ rais = keyval[1]
+ if keyval[0] == 'comment':
+ entry['comment'] = [keyval[1]]
+ else:
+ entry[keyval[0].strip()] = keyval[1].strip()
+
+
+def usage():
+ print 'genGlyphCommands.py'
+ print 'is part of the lilyglyphs package'
+ print ''
+ print 'Usage:'
+ print 'Pass the name (without path) of an input definitions file'
+ print '(this has to be located in the /stash_new_commands directory.'
+ print 'Please refer to the manual (documentation/lilyglyphs.pdf).'
+
+# ####################################
+# Finally launch the program
+if __name__ == "__main__":
+ # parse command line arguments
+ parser = argparse.ArgumentParser(
+ description='Generate LaTeX commands using Emmentaler glyphs',
+ parents=[lg.common_arguments])
+ parser.add_argument('i',
+ type=lg.is_file,
+ metavar='INPUT',
+ help='File with command templates.')
+ args = parser.parse_args()
+
+ # if we have exactly one existing file
+ # join its components and run the program
+ main(os.path.join(os.getcwd(), vars(args)['i']))
diff --git a/macros/unicodetex/latex/lilyglyphs/scripts/lily-image-commands.py b/macros/unicodetex/latex/lilyglyphs/scripts/lily-image-commands.py
new file mode 100755
index 0000000000..fce67ad53c
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/scripts/lily-image-commands.py
@@ -0,0 +1,321 @@
+#!/usr/bin/env python
+
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+# %
+# This file is part of the 'lilyglyphs' LaTeX package. %
+# ========== %
+# %
+# https://github.com/openlilylib/lilyglyphs %
+# http://www.openlilylib.org/lilyglyphs %
+# %
+# Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+# %
+# 'lilyglyphs' is free software: you can redistribute it and/or modify %
+# it under the terms of the LaTeX Project Public License, either %
+# version 1.3 of this license or (at your option) any later version. %
+# You may find the latest version of this license at %
+# http://www.latex-project.org/lppl.txt %
+# more information on %
+# http://latex-project.org/lppl/ %
+# and version 1.3 or later is part of all distributions of LaTeX %
+# version 2005/12/01 or later. %
+# %
+# This work has the LPPL maintenance status 'maintained'. %
+# The Current Maintainer of this work is Urs Liska (see above). %
+# %
+# This work consists of the files listed in the file 'manifest.txt' %
+# which can be found in the 'license' directory. %
+# %
+# 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. %
+# %
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+import os, sys, getopt, datetime, subprocess, argparse, lilyglyphs_common as lg
+
+
+
+# ###############
+# string to be printed before the actual command
+lily_src_prefix = """\\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+"""
+
+# string to be printed after the actual command definition
+lily_src_score = """
+ \\score {
+ \\new Staff \\with {
+ \\remove "Staff_symbol_engraver"
+ \\remove "Clef_engraver"
+ \\remove "Time_signature_engraver"
+ }
+"""
+
+def main():
+ """Do the actual work of the script"""
+ print ''
+ print 'buildglyphimages.py,'
+ print 'Part of lilyglyphs.'
+ print ''
+
+ # set CWD and ensure the necessary subdirs are present
+ check_paths()
+ print ''
+
+ # load and parse input file
+ lg.read_input_file(in_file)
+ read_entries()
+ print ''
+
+ # generate LilyPond source files for each command
+ # and compile them
+ write_lily_src_files()
+ print ''
+ lg.compile_lily_files()
+ print ''
+
+ # remove intermediate files and move pdfs to pdf directory
+ lg.cleanup_lily_files()
+ print ''
+
+ # generate latex commands and example code
+ # and write them to the output file
+ lg.generate_latex_commands()
+ print ''
+ write_latex_file()
+
+
+def check_paths():
+ """Sets CWD to 'glyphimages' subdir or root of lilyglyphs_private
+ and makes sure that the necessary subdirectories are present"""
+
+ # one level above 'definitions' is 'glyphimages'
+ os.chdir(os.path.join(in_path, '..'))
+
+ # check the presence of the necessary subdirectories
+ # and create them if necessary
+ # (otherwise we'll get errors when trying to write in them)
+ ls = os.listdir('.')
+ if not lg.dir_lysrc in ls:
+ os.mkdir(lg.dir_lysrc)
+ if not lg.dir_pdfs in ls:
+ os.mkdir(lg.dir_pdfs)
+ if not lg.dir_cmd in ls:
+ os.mkdir(lg.dir_cmd)
+
+def cmd_filename(cmd_name):
+ if cmd_name.startswith('lily'):
+ return cmd_name[:4] + '-' + cmd_name[4:]
+ elif cmd_name.startswith('lily-'):
+ return cmd_name
+ else:
+ return 'lily-' + cmd_name
+
+# set default scale and raise arguments to empty
+scale = ''
+rais = ''
+
+def read_entries():
+ """Parses the input source file and extracts glyph entries"""
+ print 'Read entries of LilyPond commands:'
+ for i in range(len(lg.definitions_file)):
+ if '%%lilyglyphs' in lg.definitions_file[i]:
+ i = read_entry(i)
+ print lg.lily_files
+
+def read_entry(i):
+ """Reads a single glyph entry from the input file and stores it
+ in the global dictionary lg.in_cmds"""
+ global scale, rais
+ # read comment line(s)
+ i += 1
+ is_protected = False
+ comment = []
+ # loop over the comment line(s)
+ while i < len(lg.definitions_file):
+ line = lg.definitions_file[i].strip()
+ # check for 'protected' entries that shouldn't be processed newly
+ if not line[0] == '%':
+ break
+ elif '%%protected' in line:
+ is_protected = True
+ elif 'scale=' in line:
+ dummy, scale = line.split('=')
+ elif 'raise=' in line:
+ dummy, rais = line.split('=')
+ else:
+ line = line[1:].strip()
+ comment.append(line)
+ i += 1
+
+ # remove any empty lines
+ while len(lg.definitions_file[i].strip()) == 0:
+ i += 1
+
+ # read command name
+ line = lg.definitions_file[i].strip()
+ cmd_name = line[: line.find('=') - 1]
+ print '- ' + cmd_name,
+ if is_protected:
+ print '(protected and skipped)'
+ else:
+ print '' #(for line break only)
+
+ # read actual command until we find a line the begins with a closing curly bracket
+ i += 1
+ lilySrc = []
+ while lg.definitions_file[i][0] != '}':
+ lilySrc.append(lg.definitions_file[i])
+ i += 1
+ if not is_protected:
+ lg.in_cmds[cmd_name] = {}
+ lg.in_cmds[cmd_name]['comment'] = comment
+ lg.in_cmds[cmd_name]['lilySrc'] = lilySrc
+ lg.in_cmds[cmd_name]['element'] = cmd_filename(cmd_name)
+ lg.in_cmds[cmd_name]['type'] = 'image'
+ if scale:
+ lg.in_cmds[cmd_name]['scale'] = scale
+ if rais:
+ lg.in_cmds[cmd_name]['raise'] = rais
+
+ lg.lily_files.append(cmd_filename(cmd_name))
+ return i
+
+
+def usage():
+ print """buildglyphimages. Part of the lilyglyphs package.
+ Parses a template file, creates
+ single .ly files from it, uses LilyPond to create single glyph
+ pdf files and set up template files to be used in LaTeX.
+ The input file has to be located in the glyphimages folder
+ of either the lilyglyph package itself or of a copy of
+ the lilyglyphs_private directory structure contained in the
+ distribution.
+ For detailed instructions refer to the manual.
+ Usage:
+ buildglyphimages.py in-file-name.
+ """
+
+def write_file_info(name, fout):
+ """Formats file specific information for the lilyPond source file"""
+ long_line = '% This file defines a single glyph to be created with LilyPond: %\n'
+ width = len(long_line) - 1
+ header = '%' * width + '\n'
+ spacer = '%' + ' ' * (width - 2) + '%\n'
+ padding = width - len(name) - 8
+ fout.write(header)
+ fout.write(spacer)
+ fout.write(long_line)
+ fout.write(spacer)
+ fout.write('% ' + name + '.ly' + ' ' * padding + '%\n')
+ fout.write(spacer)
+ fout.write(header)
+ fout.write(lg.signature())
+ fout.write('\n\n')
+
+def write_latex_file():
+ """Composes LaTeX file and writes it to disk"""
+ print 'Generate LaTeX file'
+ print lg.dir_cmd, in_basename
+ lg.write_latex_file(os.path.join(os.getcwd(), lg.dir_cmd, in_basename + '.tex'))
+
+def write_lily_src_files():
+ """Generates one .ly file for each found new command"""
+ skip_cmds = []
+ print 'Write .ly files for each entry:'
+ for cmd_name in lg.in_cmds:
+ print '- ' + cmd_name
+ gen_src_name = os.path.join(lg.dir_lysrc, cmd_filename(cmd_name) + '.ly')
+ # handle existing commands
+ if os.path.exists(gen_src_name):
+ action = ''
+ while not (action == 'Y' or action == 'N'):
+ action = raw_input('already present. Overwrite (y/n)? ')
+ action = action.upper()
+ if action == 'N':
+ skip_cmds.append(cmd_name)
+ continue
+
+ # open a single lily src file for write access
+ fout = open(gen_src_name, 'w')
+
+ #output the license information
+ fout.write(lg.lilyglyphs_copyright_string)
+ fout.write('\n')
+
+ #output information on the actual file
+ write_file_info(cmd_name, fout)
+
+ #write the default LilyPond stuff
+ fout.write(lily_src_prefix)
+
+ # write the comment for the command
+ fout.write('%{\n')
+ for line in lg.in_cmds[cmd_name]['comment']:
+ fout.write(line + '\n')
+ fout.write('%}\n\n')
+
+ # write the actual command
+ fout.write(cmd_name + ' = {\n')
+ for line in lg.in_cmds[cmd_name]['lilySrc']:
+ fout.write(line + '\n')
+ fout.write('}\n')
+
+ # write the score definition
+ fout.write(lily_src_score)
+
+ # finish the LilyPond file
+ fout.write(' \\' + cmd_name + '\n')
+ fout.write('}\n\n')
+
+ fout.close()
+
+ # remove skipped commands from in_cmds
+ print skip_cmds
+ for cmd_name in skip_cmds:
+ del lg.in_cmds[cmd_name]
+ lg.lily_files.remove(cmd_filename(cmd_name))
+
+# ####################################
+# Finally launch the program
+if __name__ == "__main__":
+
+ # parse command line arguments
+ parser = argparse.ArgumentParser(
+ description='Process templates to LilyPond input files,' +
+ 'compile these and generate LaTeX commands.',
+ parents=[lg.common_arguments])
+ parser.add_argument('i',
+ type=lg.is_file,
+ metavar='INPUT',
+ help='File with command templates.')
+ args = parser.parse_args()
+
+ # if we have exactly one existing file
+ # join its components and run the program
+
+ # process filename argument, providing absolute path
+ script_path, script_name = os.path.split(sys.argv[0])
+
+ in_file = os.path.join(os.getcwd(), vars(args)['i'])
+ # check if the input file is in the right place
+ # this has to be the definitions subdir of
+ # the package directory or the lilyglyphs_private dir
+ in_path, in_filename = os.path.split(in_file)
+ in_path = os.path.normpath(in_path)
+ if not (('lilyglyphs' in in_path) and (in_path.endswith('definitions'))):
+ print 'File in the wrong location: ' + in_path
+ usage()
+ sys.exit(2)
+ in_basename, in_ext = os.path.splitext(in_filename)
+ main()
diff --git a/macros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py b/macros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py
new file mode 100755
index 0000000000..b74ab26c6b
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/scripts/lily-rebuild-pdfs.py
@@ -0,0 +1,142 @@
+#!/usr/bin/env python
+
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+# %
+# This file is part of the 'lilyglyphs' LaTeX package. %
+# ========== %
+# %
+# https://github.com/openlilylib/lilyglyphs %
+# http://www.openlilylib.org/lilyglyphs %
+# %
+# Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+# %
+# 'lilyglyphs' is free software: you can redistribute it and/or modify %
+# it under the terms of the LaTeX Project Public License, either %
+# version 1.3 of this license or (at your option) any later version. %
+# You may find the latest version of this license at %
+# http://www.latex-project.org/lppl.txt %
+# more information on %
+# http://latex-project.org/lppl/ %
+# and version 1.3 or later is part of all distributions of LaTeX %
+# version 2005/12/01 or later. %
+# %
+# This work has the LPPL maintenance status 'maintained'. %
+# The Current Maintainer of this work is Urs Liska (see above). %
+# %
+# This work consists of the files listed in the file 'manifest.txt' %
+# which can be found in the 'license' directory. %
+# %
+# 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. %
+# %
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+# ########################################################################
+# #
+# rebuild-pdfs.py #
+# #
+# This program looks in the directories where the generated .ly files #
+# and the generated pdf images are stored. #
+# If it finds that there are missing pdfs it will recompile them #
+# using LilyPond. #
+# #
+# The main purpose is to allow the creation of pdf images of glyphs #
+# that already have been processed to LaTeX commands but whose PDF #
+# files have been lost. #
+# The other purpose is to update the set of PDF files to a new version #
+# of Emmentaler or LilyPond without touching the definitions. #
+# #
+# ########################################################################
+
+import os, sys, subprocess, argparse, lilyglyphs_common as lg
+
+
+def main():
+ """Main walk through the program"""
+ print 'rebuild-pdfs.py'
+ print 'regenerate all pdf images that are not present (anymore)'
+ print ''
+
+ # Check if we are in a legal CWD and ensure a PDF subdir is present
+ check_paths()
+
+ # build a list of commands with missing PDF files
+ src_files = check_missing_pdfs()
+
+ # is there anything to be done at all?
+ if len(src_files) == 0:
+ print ''
+ print 'No image files missing, nothing to be done.'
+ print 'If you want to re-create pdfs, then delete them first'
+ sys.exit(0)
+ print ''
+ print 'Found ' + str(len(src_files)) + ' missing file(s).'
+ for cmd in src_files:
+ print '- ' + cmd
+
+ # compile all LilyPond files without matching pdf
+ lg.lily_files = src_files
+ lg.compile_lily_files()
+
+ # clean up directories
+ lg.cleanup_lily_files()
+
+def check_missing_pdfs():
+ """Compares the list of LilyPond source and resulting PDF files.
+ Returns a list of LilyPond source file basenames
+ which don't have a corresponding PDF file"""
+ print 'Reading file lists, counting missing pdf files'
+
+ # read existing .pdf files in lg.dir_pdfs
+ img_files = []
+ for entry in os.listdir(lg.dir_pdfs):
+ entry = os.path.join(lg.dir_pdfs, entry)
+ if os.path.isfile(entry):
+ path, name = os.path.split(entry)
+ basename, ext = os.path.splitext(name)
+ if ext == '.pdf':
+ img_files.append(basename)
+
+ # read existing .ly source files in in_dir
+ # and add them to the sources list if the image is missing
+ src_files = []
+ for entry in os.listdir(lg.dir_lysrc):
+ entry = os.path.join(lg.dir_lysrc, entry)
+ if os.path.isfile(entry):
+ path, name = os.path.split(entry)
+ basename, ext = os.path.splitext(name)
+ if ext == '.ly' and basename not in img_files:
+ src_files.append(basename)
+ return src_files
+
+def check_paths():
+ """Checks if we're in the right CWD
+ and makes sure that there is a pdf output directory available"""
+
+ print 'Checking directories ...'
+
+ # check the presence of the necessary subdirectories
+ ls = os.listdir('.')
+ if not 'generated_src' in ls:
+ print 'No LilyPond source files directory found.'
+ print 'Sorry, there is something wrong :-('
+ print 'Current working directory is: ' + os.getcwd()
+ print 'Please consult the manual.'
+ sys.exit(2)
+ if not 'pdfs' in ls:
+ os.mkdir('pdfs')
+
+ print '... done'
+ print ''
+
+
+# ####################################
+# Finally launch the program
+if __name__ == "__main__":
+ # parse command line arguments
+ parser = argparse.ArgumentParser(
+ description='Rebuild all pdfs missing in the \'pdfs\' subdiredtory',
+ parents=[lg.common_arguments])
+ args = parser.parse_args()
+ main()
diff --git a/macros/unicodetex/latex/lilyglyphs/scripts/lilyglyphs_common.py b/macros/unicodetex/latex/lilyglyphs/scripts/lilyglyphs_common.py
new file mode 100644
index 0000000000..92a2c023c9
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/scripts/lilyglyphs_common.py
@@ -0,0 +1,360 @@
+#!/usr/bin/env python
+
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+# %
+# This file is part of the 'lilyglyphs' LaTeX package. %
+# ========== %
+# %
+# https://github.com/openlilylib/lilyglyphs %
+# http://www.openlilylib.org/lilyglyphs %
+# %
+# Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+# %
+# 'lilyglyphs' is free software: you can redistribute it and/or modify %
+# it under the terms of the LaTeX Project Public License, either %
+# version 1.3 of this license or (at your option) any later version. %
+# You may find the latest version of this license at %
+# http://www.latex-project.org/lppl.txt %
+# more information on %
+# http://latex-project.org/lppl/ %
+# and version 1.3 or later is part of all distributions of LaTeX %
+# version 2005/12/01 or later. %
+# %
+# This work has the LPPL maintenance status 'maintained'. %
+# The Current Maintainer of this work is Urs Liska (see above). %
+# %
+# This work consists of the files listed in the file 'manifest.txt' %
+# which can be found in the 'license' directory. %
+# %
+# 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. %
+# %
+# %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+# ########################################################################
+# #
+# lilyglyphs_common.py #
+# #
+# Common functionality for the Python scripts in lilyglyphs #
+# #
+# ########################################################################
+
+import os, sys, datetime, subprocess, argparse
+
+# ################
+# Global variables
+
+definitions_file = []
+version_string = '0.2.2'
+
+# ######################
+# Common CL arguments
+common_arguments = argparse.ArgumentParser(add_help=False)
+common_arguments.add_argument('-v', '--version',
+ action='version',
+ version='%(prog)s ' + version_string)
+
+def is_file(filename):
+ if os.path.exists(filename):
+ return filename
+ else:
+ msg = "file %s not found" % filename
+ raise argparse.ArgumentTypeError(msg)
+
+
+# ###########
+# Directories
+dir_defs = 'definitions'
+dir_lysrc = 'generated_src'
+dir_pdfs = 'pdfs'
+dir_cmd = 'generated_cmd'
+
+# LilyPond commands
+in_cmds = {}
+# LilyPond source files (corresponds to in_cmds)
+# stores basenames without path and extension
+lily_files = []
+# LaTeX commands
+latex_cmds = {}
+
+# #######
+# Strings
+
+lilyglyphs_copyright_string = """
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+"""
+
+latexfile_start_comment = """
+% This file contains definitions for the new commands
+% along with test code for them.
+% You can test the commands in the context of continuous text
+% and adjust their design time options.
+% Afterwards you should manually move the commands to
+% the appropriate .inp files,
+% because this file will be overwritten by the next run
+% of SCRIPT_NAME!
+% If you want to keep this file for reference
+% you should save it with a new name.
+%
+% There also is a table containing entries for use in the lilyglyph manual.
+% You can either copy the whole table to the appropriate
+% place in lilyglyphs.tex or just copy individual table rows.
+
+\\documentclass{scrartcl}
+\\usepackage{lilyglyphsStyle}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+% new command definitions
+
+"""
+
+latexfile_begin_document = """
+
+\\begin{document}
+
+%%%%%%%%%%%%%
+% Text output
+
+\\section*{New \\lilyglyphs{} commands}
+"""
+
+latexfile_reftable = """
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Reference table to be used in the manual
+% (use complete or single lines)
+
+\\begin{reftable}{New commands}{newcommands}
+"""
+
+latexfile_testcode = """\\end{reftable}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Test code for fine-tuning the new commands
+"""
+
+# ##############
+# Code templates
+
+# template string to build the test code for the commands
+# 'CMD' will be replaced by the actual command_name
+testcode_template = """
+
+\\noindent\\textbf{\\textsf{Continuous text for} \\cmd{CMD}:}\\\\
+Lorem ipsum dolor sit amet, consectetur adipisicing elit,
+sed \\CMD{} do eiusmod tempor incididunt ut labore et dolore magna aliqua \\CMD.\\\\
+\\CMD{} Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip
+ex ea commodo consequat. Duis aute irure dolor in reprehenderit in voluptate velit esse
+cillum dolore eu fugiat nulla pariatur \\CMD.
+\\CMD{} Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum.
+
+\\bigskip
+"""
+
+# Default values for optional argument in generated commands
+DEF_SCALE = '1'
+DEF_RAISE = '0'
+
+# template strings to build the command from
+# 'CMD' will be replaced by the actual command_name
+# 'ELEM' will be replaced by the actual content element to be rendered
+
+cmd_templates = {}
+cmd_templates['image'] = """\\newcommand*{\\CMD}[1][]{%
+ \\setkeys{lilyDesignOptions}{scale=SCALE,raise=RAISE}%
+ \\lilyPrintImage[#1]{ELEM}%
+}
+
+"""
+
+cmd_templates['glyphname'] = """\\newcommand*{\\CMD}[1][]{%
+ \\setkeys{lilyDesignOptions}{scale=SCALE,raise=RAISE}%
+ \\lilyPrint[#1]{\\lilyGetGlyph{ELEM}}%
+}
+
+"""
+
+cmd_templates['number'] = """\\newcommand*{\\CMD}[1][]{%
+ \\setkeys{lilyDesignOptions}{scale=SCALE,raise=RAISE}%
+ \\lilyPrint[#1]{\\lilyGetGlyphByNumber{ELEM}}%
+}
+
+"""
+
+cmd_templates['dynamics'] = """\\newcommand{\\CMD}[1][]{%
+ \\mbox{%
+ \\lilyDynamics[#1]{ELEM}%
+ }%
+}
+
+"""
+
+cmd_templates['text'] = """\\newcommand{\\CMD}[1][]{%
+ \\setkeys{lilyDesignOptions}{scale=SCALE,raise=RAISE}%
+ \\mbox{%
+ \\lilyText[#1]{ELEM}%
+ }%
+}
+
+"""
+
+def cleanup_lily_files():
+ """Removes unneccessary files from LilyPond compilation,
+ rename and remove the preview PDF files to the right directory."""
+
+ print 'Clean up directories'
+
+ # iterate through dir_lysrc
+ os.chdir(dir_lysrc)
+ for entry in os.listdir('.'):
+ if os.path.isfile(entry):
+ name, extension = os.path.splitext(entry)
+ #remove unnecessary files
+ if not extension in ['.pdf', '.ly']:
+ os.remove(entry)
+ if extension == '.pdf':
+ # remove full-page pdf
+ if '.preview' in name:
+ newfile = entry.replace('.preview.', '.')
+ newfile = os.path.join('..', dir_pdfs, newfile)
+ # rename/move small 'preview' pdf
+ os.rename(entry, newfile)
+ else:
+ os.remove(entry)
+ os.chdir('..')
+
+def compile_lily_files():
+ """Compiles LilyPond files to """
+ print 'Compile with LilyPond:'
+ for file in lily_files:
+ args = []
+ args.append("lilypond")
+ args.append("-o")
+ args.append(dir_lysrc)
+ args.append("-dpreview")
+ args.append("-dno-point-and-click")
+ args.append(os.path.join(dir_lysrc, file + ".ly"))
+ subprocess.call(args)
+ print ''
+
+def generate_latex_commands():
+ """Generates the templates for the commands in a new LaTeX file.
+ These should manually be moved to the appropriate .inp files
+ in lilyglyphs"""
+
+ # iterate over the list of commands
+ for cmd_name in in_cmds:
+ latex_cmds[cmd_name] = {}
+
+ # create LaTeX command
+ cmd = []
+ for line in in_cmds[cmd_name]['comment']:
+ cmd.append('% ' + line + '\n')
+ cmd.append(signature() + '\n')
+ template = cmd_templates[in_cmds[cmd_name]['type']]
+ template = template.replace('CMD', cmd_name)
+ if 'scale' in in_cmds[cmd_name]:
+ scale = in_cmds[cmd_name]['scale']
+ else:
+ scale = DEF_SCALE
+ template = template.replace('SCALE', scale)
+ if 'raise' in in_cmds[cmd_name]:
+ rais = in_cmds[cmd_name]['raise']
+ else:
+ rais = DEF_RAISE
+ template = template.replace('RAISE', rais)
+ cmd.append(template.replace('ELEM', in_cmds[cmd_name]['element']))
+ latex_cmds[cmd_name]['cmd'] = cmd
+
+ # create LaTeX test code
+ tc = []
+ tc.append(testcode_template.replace('CMD', cmd_name))
+ latex_cmds[cmd_name]['testcode'] = tc
+
+def read_input_file(in_file):
+ """Reads the input source file and stores it
+ in the global variable definitions_file"""
+ global definitions_file
+
+ in_file = os.path.normpath(in_file)
+
+ print 'Read input file ' + in_file
+
+ # check for existence of input file
+ if not os.path.exists(in_file):
+ print 'File ' + in_file + ' not found.'
+ print 'Please specify an input file'
+ sys.exit(2)
+
+ fin = open(in_file, 'r')
+ for line in fin:
+ definitions_file.append(line.rstrip(' \n'))
+ fin.close()
+
+def script_name():
+ dummy, result = os.path.split(sys.argv[0])
+ return result
+
+def signature():
+ """Returns a signature to be inserted in an output file"""
+ return '% created by ' + script_name() + ' on ' + str(datetime.date.today())
+
+def write_latex_file(file_name):
+ fout = open(file_name, 'w')
+ fout.write('% New Glyphs for the lilyglyphs package\n')
+ fout.write(signature() + '\n')
+ fout.write(latexfile_start_comment.replace('SCRIPT_NAME', script_name()))
+
+ # write out command definitions
+ sorted_cmds = sorted(latex_cmds.iterkeys())
+ for cmd_name in sorted_cmds:
+ for line in latex_cmds[cmd_name]['cmd']:
+ fout.write(line)
+
+ fout.write(latexfile_begin_document)
+ fout.write(signature()[2:]+ '\n')
+ fout.write(latexfile_reftable)
+
+ # write out the reference table
+ row_template = '\\CMD & \\cmd{CMD} & description\\\\'
+ for cmd_name in sorted_cmds:
+ fout.write(row_template.replace('CMD', cmd_name) + '\n')
+ fout.write(latexfile_testcode)
+
+ # write out the test code
+ for cmd_name in sorted_cmds:
+ for line in latex_cmds[cmd_name]['testcode']:
+ fout.write(line)
+
+ fout.write('\\end{document}\n')
+ fout.close()
diff --git a/macros/unicodetex/latex/lilyglyphs/source/fonts/README-emmentaler b/macros/unicodetex/latex/lilyglyphs/source/fonts/README-emmentaler
new file mode 100644
index 0000000000..4208f11aa0
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/fonts/README-emmentaler
@@ -0,0 +1,8 @@
+The archive emmentaler-2-18-0 contains
+the Metafont sources used to create the
+Emmentaler OpenType fonts in the /fonts
+directory.
+They were taken from LilyPond's original
+Git repository at
+http://savannah.gnu.org/git/?group=lilypond
+with the 2.18.0 release checked out.
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/_template.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/_template.ly
new file mode 100644
index 0000000000..2854b4ed7d
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/_template.ly
@@ -0,0 +1,54 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file defines a set of glyphs to be compiled in LilyPond %
+% %
+% EXAMPLE %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\version "2.17.5"
+
+%%lilyglyphs
+% example comment
+exampleCommand = {
+ g'4
+}
+
+\markup { exampleCommand}
+symbol = \exampleCommand
+\include "score.ily"
+
+% Example ends here
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/beamednotes.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/beamednotes.ly
new file mode 100644
index 0000000000..1175c8c203
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/beamednotes.ly
@@ -0,0 +1,111 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file defines a set of glyphs to be compiled in LilyPond %
+% %
+% Beamed notes %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\version "2.17.5"
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% Groups with two beams
+
+%%lilyglyphs
+% two beamed quavers with diagonal beam
+%%protected
+twoBeamedQuavers = {
+ \override Beam#'damping = 0
+ d'8[ e']
+}
+
+\markup { twoBeamedQuavers }
+symbol = \twoBeamedQuavers
+\include "score.ily"
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+% Groups with three beams
+
+%%lilyglyphs
+% raise=-0.6
+% scale=0.9
+% three beamed quavers
+%%protected
+threeBeamedQuavers = {
+ \override Beam #'positions = #'(1 . 1)
+ e'8[ e' e']
+}
+
+\markup { threeBeamedQuavers }
+symbol = \threeBeamedQuavers
+\include "score.ily"
+
+%%lilyglyphs
+% three beamed quavers, second dotted
+%%protected
+threeBeamedQuaversI = {
+ \override Beam #'positions = #'(1 . 1)
+ \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1/8)
+ e'8[ e'8. e'16]
+}
+
+\markup { threeBeamedQuaversI }
+symbol = \threeBeamedQuaversI
+\include "score.ily"
+
+%%lilyglyphs
+% three beamed quavers, first dotted
+%%protected
+threeBeamedQuaversII = {
+ \override Beam #'positions = #'(1 . 1)
+ \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1/12)
+ e'8.[ e'16 e'8]
+}
+
+\markup { threeBeamedQuaversII }
+symbol = \threeBeamedQuaversII
+\include "score.ily"
+
+%%lilyglyphs
+% three beamed quavers, last dotted
+%%protected
+threeBeamedQuaversIII = {
+ \override Beam #'positions = #'(1 . 1)
+ \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1/12)
+ e'16[ e'8. e'8]
+}
+
+\markup { threeBeamedQuaversIII }
+symbol = \threeBeamedQuaversIII
+\include "score.ily"
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/dynamicsigns.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/dynamicsigns.ly
new file mode 100644
index 0000000000..f9a8e66d0f
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/dynamicsigns.ly
@@ -0,0 +1,62 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file defines a set of glyphs to be compiled in LilyPond %
+% %
+% Beamed notes %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\version "2.17.5"
+
+
+%%lilyglyphs
+% crescendo hairpin
+crescHairpin = {
+ s1\< s4\!
+}
+
+\markup { crescHairpin }
+symbol = \crescHairpin
+\include "score.ily"
+
+
+%%lilyglyphs
+% decrescendo hairpin
+decrescHairpin = {
+ s1\> s4\!
+}
+
+\markup { decrescHairpin }
+symbol = \decrescHairpin
+\include "score.ily"
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/fancyexamples.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/fancyexamples.ly
new file mode 100644
index 0000000000..2479478563
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/fancyexamples.ly
@@ -0,0 +1,61 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file defines a set of glyphs to be compiled in LilyPond %
+% %
+% EXAMPLE %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\version "2.17.5"
+
+%{ template for a single entry
+ replace 'EXAMPLE_...' by actual content %}
+
+%%lilyglyphs
+% example of a fancy notation
+lilyFancyExample = \relative e' {
+ \override NoteHead.transparent = ##t
+ \override Stem #'length = #4
+ \override Stem #'thickness = #1.6
+ e4-.( e-. e-. e-.) \glissando
+ s4 \stemDown a4 \laissezVibrer
+}
+
+\markup { lilyFancyExample }
+symbol = \fancyExample
+\include "score.ily"
+
+% Example ends here
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/score.ily b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/score.ily
new file mode 100644
index 0000000000..a61c465e68
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/score.ily
@@ -0,0 +1,49 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is to be included in the definitions .ly files %
+% %
+% Use it to have a LilyPond-compilable .ly file if you want %
+% to visually check your new glyphs before creating the %
+% LaTeX commands %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \symbol
+} \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/singlenotes.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/singlenotes.ly
new file mode 100644
index 0000000000..dc239da35d
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/singlenotes.ly
@@ -0,0 +1,377 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file defines a set of glyphs to be compiled in LilyPond %
+% %
+% Single notes %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\version "2.17.5"
+
+%{ template for a single entry
+ replace 'EXAMPLE_...' by actual content %}
+%%lilyglyphs
+%%protected (use this line if you don't want the command to be generated)
+% EXAMPLE_comment
+EXAMPLE_command_name = {
+ g'4
+}
+
+\markup { EXAMPLE_command_name }
+symbol = \EXAMPLE_command_name
+\include "score.ily"
+
+% Example ends here
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%lilyglyphs
+% half note with upward stem
+%%protected
+halfNote = {
+ \override Stem#'length = 5
+ g'2
+}
+
+\markup { halfNote }
+symbol = \halfNote
+\include "score.ily"
+
+%%lilyglyphs
+% half note with downward stem
+% scale=0.75
+% raise=-0.4
+%%protected
+halfNoteDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'2
+}
+
+%%lilyglyphs
+% dotted half note with upward stem
+%%protected
+halfNoteDotted = {
+ \override Stem#'length = 5
+ g'2.
+}
+
+\markup { halfNoteDotted }
+symbol = \halfNoteDotted
+\include "score.ily"
+
+%%lilyglyphs
+% dotted half note with downward stem
+%%protected
+halfNoteDottedDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'2.
+}
+
+%%lilyglyphs
+% doubledotted half note with upward stem
+%%protected
+halfNoteDottedDouble = {
+ \override Stem#'length = 5
+ g'2..
+}
+
+\markup { halfNoteDottedDouble }
+symbol = \halfNoteDottedDouble
+\include "score.ily"
+
+%%lilyglyphs
+% doubledotted half note with downward stem
+%%protected
+halfNoteDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'2..
+}
+
+%%lilyglyphs
+% crotchet with upward stem
+%%protected
+crotchet = {
+ \override Stem#'length = 5
+ g'4
+}
+
+\markup { crotchet }
+symbol = \crotchet
+\include "score.ily"
+
+%%lilyglyphs
+% crotchet with downward stem
+%%protected
+crotchetDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'4
+}
+
+%%lilyglyphs
+% dotted crotchet with upward stem
+%%protected
+crotchetDotted = {
+ \override Stem#'length = 5
+ g'4.
+}
+
+\markup { crotchetDotted }
+symbol = \crotchetDotted
+\include "score.ily"
+
+%%lilyglyphs
+% dotted crotchet with downward stem
+%%protected
+crotchetDottedDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'4.
+}
+
+%%lilyglyphs
+% doubledotted crotchet with upward stem
+%%protected
+crotchetDottedDouble = {
+ \override Stem#'length = 5
+ g'4..
+}
+
+\markup { crotchetDottedDouble }
+symbol = \crotchetDottedDouble
+\include "score.ily"
+
+
+%%lilyglyphs
+% doubledotted crotchet with upward stem
+%%protected
+crotchetDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'4..
+}
+
+%%lilyglyphs
+% quaver with upward stem
+%%protected
+quaver = {
+ \override Stem#'length = 6
+ g'8
+}
+
+%%lilyglyphs
+% quaver with downward stem
+%%protected
+quaverDown = {
+ \stemDown
+ \override Stem#'length = 6
+ g'8
+}
+
+\markup { quaver }
+symbol = \quaver
+\include "score.ily"
+
+%%lilyglyphs
+% dotted quaver with upward stem
+%%protected
+quaverDotted = {
+ \override Stem#'length = 6
+ g'8.
+}
+
+\markup { quaverDotted }
+symbol = \quaverDotted
+\include "score.ily"
+
+
+%%lilyglyphs
+% dotted quaver with downward stem
+%%protected
+quaverDottedDown = {
+ \stemDown
+ \override Stem#'length = 6
+ g'8.
+}
+
+%%lilyglyphs
+% doubledotted quaver with upward stem
+%%protected
+quaverDottedDouble = {
+ \override Stem#'length = 6
+ g'8..
+}
+
+\markup { quaverDottedDouble }
+symbol = \quaverDottedDouble
+\include "score.ily"
+
+%%lilyglyphs
+% doubledotted quaver with downward stem
+%%protected
+quaverDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = 6
+ g'8..
+}
+
+%%lilyglyphs
+% semiquaver with upward stem
+%%protected
+semiquaver = {
+ \override Stem#'length = #6.5
+ g'16
+}
+
+\markup { semiquaver }
+symbol = \semiquaver
+\include "score.ily"
+
+
+%%lilyglyphs
+% semiquaver with downward stem
+%%protected
+semiquaverDown = {
+ \stemDown
+ \override Stem#'length = #6.5
+ g'16
+}
+
+%%lilyglyphs
+% dotted semiquaver with upward stem
+%%protected
+semiquaverDotted = {
+ \override Stem#'length = #6.5
+ g'16.
+}
+
+\markup { semiquaverDotted }
+symbol = \semiquaverDotted
+\include "score.ily"
+
+%%lilyglyphs
+% dotted semiquaver with downward stem
+%%protected
+semiquaverDottedDown = {
+ \stemDown
+ \override Stem#'length = #6.5
+ g'16.
+}
+
+%%lilyglyphs
+% doubledotted semiquaver with upward stem
+%%protected
+semiquaverDottedDouble = {
+ \override Stem#'length = #6.5
+ g'16..
+}
+
+\markup { semiquaverDottedDouble }
+symbol = \semiquaverDottedDouble
+\include "score.ily"
+
+%%lilyglyphs
+% doubledotted semiquaver with downward stem
+%%protected
+semiquaverDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = #6.5
+ g'16..
+}
+
+%%lilyglyphs
+% demisemiquaver with upward stem
+%%protected
+demisemiquaver = {
+ \override Stem#'length = #7.5
+ g'32
+}
+
+\markup { demisemiquaver }
+symbol = \demisemiquaver
+\include "score.ily"
+
+
+%%lilyglyphs
+% demisemiquaver with downward stem
+%%protected
+demisemiquaverDown = {
+ \stemDown
+ \override Stem#'length = #7.5
+ g'32
+}
+
+%%lilyglyphs
+% dotted demisemiquaver with upward stem
+%%protected
+demisemiquaverDotted = {
+ \override Stem#'length = #7.5
+ g'32.
+}
+
+\markup { demisemiquaverDotted }
+symbol = \demisemiquaverDotted
+\include "score.ily"
+
+%%lilyglyphs
+% dotted demisemiquaver with downward stem
+%%protected
+demisemiquaverDottedDown = {
+ \stemDown
+ \override Stem#'length = #7.5
+ g'32.
+}
+
+%%lilyglyphs
+% doubledotted demisemiquaver with upward stem
+%%protected
+demisemiquaverDottedDouble = {
+ \override Stem#'length = #7.5
+ g'32..
+}
+
+\markup { demisemiquaverDottedDouble }
+symbol = \demisemiquaverDottedDouble
+\include "score.ily"
+
+%%lilyglyphs
+% doubledotted demisemiquaver with downward stem
+%%protected
+demisemiquaverDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = #7.5
+ g'32..
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/singlenotes.pdf b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/singlenotes.pdf
new file mode 100644
index 0000000000..c44e140145
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/definitions/singlenotes.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crescHairpin.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crescHairpin.ly
new file mode 100644
index 0000000000..cecaf8f6ee
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crescHairpin.ly
@@ -0,0 +1,69 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% crescHairpin.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+crescendo hairpin
+%}
+
+crescHairpin = {
+ s1\< s4\!
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \crescHairpin
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchet.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchet.ly
new file mode 100644
index 0000000000..1ecec3a380
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchet.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% crotchet.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+crotchet with upward stem
+%}
+
+crotchet = {
+ \override Stem#'length = 5
+ g'4
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \crotchet
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDotted.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDotted.ly
new file mode 100644
index 0000000000..53412ee6db
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDotted.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% crotchetDotted.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted crotchet with upward stem
+%}
+
+crotchetDotted = {
+ \override Stem#'length = 5
+ g'4.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \crotchetDotted
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDouble.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDouble.ly
new file mode 100644
index 0000000000..e3ac2e02c9
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDouble.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% crotchetDottedDouble.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted crotchet with upward stem
+%}
+
+crotchetDottedDouble = {
+ \override Stem#'length = 5
+ g'4..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \crotchetDottedDouble
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDoubleDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDoubleDown.ly
new file mode 100644
index 0000000000..eed0a26613
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDoubleDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% crotchetDottedDoubleDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted crotchet with upward stem
+%}
+
+crotchetDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'4..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \crotchetDottedDoubleDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDown.ly
new file mode 100644
index 0000000000..41282b207a
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDottedDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% crotchetDottedDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted crotchet with downward stem
+%}
+
+crotchetDottedDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'4.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \crotchetDottedDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDown.ly
new file mode 100644
index 0000000000..2538434dd7
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-crotchetDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% crotchetDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+crotchet with downward stem
+%}
+
+crotchetDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'4
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \crotchetDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-decrescHairpin.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-decrescHairpin.ly
new file mode 100644
index 0000000000..65cfa7fc4c
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-decrescHairpin.ly
@@ -0,0 +1,69 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% decrescHairpin.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+decrescendo hairpin
+%}
+
+decrescHairpin = {
+ s1\> s4\!
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \decrescHairpin
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaver.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaver.ly
new file mode 100644
index 0000000000..209e4accdc
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaver.ly
@@ -0,0 +1,71 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% demisemiquaver.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+demisemiquaver with upward stem
+%}
+
+demisemiquaver = {
+ \override Stem#'length = #7.5
+ g'32
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \demisemiquaver
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDotted.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDotted.ly
new file mode 100644
index 0000000000..4eeddda1f2
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDotted.ly
@@ -0,0 +1,71 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% demisemiquaverDotted.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted demisemiquaver with upward stem
+%}
+
+demisemiquaverDotted = {
+ \override Stem#'length = #7.5
+ g'32.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \demisemiquaverDotted
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDouble.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDouble.ly
new file mode 100644
index 0000000000..58449d8ebf
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDouble.ly
@@ -0,0 +1,71 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% demisemiquaverDottedDouble.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted demisemiquaver with upward stem
+%}
+
+demisemiquaverDottedDouble = {
+ \override Stem#'length = #7.5
+ g'32..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \demisemiquaverDottedDouble
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDoubleDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDoubleDown.ly
new file mode 100644
index 0000000000..4147746cef
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDoubleDown.ly
@@ -0,0 +1,72 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% demisemiquaverDottedDoubleDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted demisemiquaver with downward stem
+%}
+
+demisemiquaverDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = #7.5
+ g'32..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \demisemiquaverDottedDoubleDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDown.ly
new file mode 100644
index 0000000000..5079edb323
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDottedDown.ly
@@ -0,0 +1,72 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% demisemiquaverDottedDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted demisemiquaver with downward stem
+%}
+
+demisemiquaverDottedDown = {
+ \stemDown
+ \override Stem#'length = #7.5
+ g'32.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \demisemiquaverDottedDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDown.ly
new file mode 100644
index 0000000000..772ab223b9
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-demisemiquaverDown.ly
@@ -0,0 +1,72 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% demisemiquaverDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+demisemiquaver with downward stem
+%}
+
+demisemiquaverDown = {
+ \stemDown
+ \override Stem#'length = #7.5
+ g'32
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \demisemiquaverDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-fancyExample.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-fancyExample.ly
new file mode 100644
index 0000000000..5ce138f776
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-fancyExample.ly
@@ -0,0 +1,74 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% fancyExample.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by genImageCommands.py on 2013-09-07
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+example of a fancy notation
+%}
+
+fancyExample = {
+ \override NoteHead.transparent = ##t
+ \override Stem #'length = #4
+ \override Stem #'thickness = #1.6
+ e4-.( e-. e-. e-.) \glissando
+ s4 \stemDown a4 \laissezVibrer
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \fancyExample
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNote.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNote.ly
new file mode 100644
index 0000000000..2f7065b2a9
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNote.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% halfNote.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+half note with upward stem
+%}
+
+halfNote = {
+ \override Stem#'length = 5
+ g'2
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \halfNote
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDotted.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDotted.ly
new file mode 100644
index 0000000000..c2d4f6d187
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDotted.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% halfNoteDotted.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted half note with upward stem
+%}
+
+halfNoteDotted = {
+ \override Stem#'length = 5
+ g'2.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \halfNoteDotted
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDouble.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDouble.ly
new file mode 100644
index 0000000000..46f8b4b606
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDouble.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% halfNoteDottedDouble.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted half note with upward stem
+%}
+
+halfNoteDottedDouble = {
+ \override Stem#'length = 5
+ g'2..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \halfNoteDottedDouble
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDoubleDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDoubleDown.ly
new file mode 100644
index 0000000000..6c85b2f34c
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDoubleDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% halfNoteDottedDoubleDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted half note with downward stem
+%}
+
+halfNoteDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'2..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \halfNoteDottedDoubleDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDown.ly
new file mode 100644
index 0000000000..1b8ca534f9
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDottedDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% halfNoteDottedDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted half note with downward stem
+%}
+
+halfNoteDottedDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'2.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \halfNoteDottedDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDown.ly
new file mode 100644
index 0000000000..12891815cd
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-halfNoteDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% halfNoteDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+half note with downward stem
+%}
+
+halfNoteDown = {
+ \stemDown
+ \override Stem#'length = 5
+ g'2
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \halfNoteDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaver.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaver.ly
new file mode 100644
index 0000000000..73789d53f4
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaver.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% quaver.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+quaver with upward stem
+%}
+
+quaver = {
+ \override Stem#'length = 6
+ g'8
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \quaver
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDotted.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDotted.ly
new file mode 100644
index 0000000000..d59ea8ba86
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDotted.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% quaverDotted.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted quaver with upward stem
+%}
+
+quaverDotted = {
+ \override Stem#'length = 6
+ g'8.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \quaverDotted
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDouble.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDouble.ly
new file mode 100644
index 0000000000..d3b20053b3
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDouble.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% quaverDottedDouble.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted quaver with upward stem
+%}
+
+quaverDottedDouble = {
+ \override Stem#'length = 6
+ g'8..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \quaverDottedDouble
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDoubleDdown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDoubleDdown.ly
new file mode 100644
index 0000000000..6cf3cd5e73
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDoubleDdown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% quaverDottedDoubleDdown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted quaver with downward stem
+%}
+
+quaverDottedDoubleDdown = {
+ \stemDown
+ \override Stem#'length = 6
+ g'8..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \quaverDottedDoubleDdown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDoubleDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDoubleDown.ly
new file mode 100644
index 0000000000..211cd4f6fd
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDoubleDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% quaverDottedDoubleDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted quaver with downward stem
+%}
+
+quaverDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = 6
+ g'8..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \quaverDottedDoubleDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDown.ly
new file mode 100644
index 0000000000..93ae3005f5
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDottedDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% quaverDottedDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted quaver with downward stem
+%}
+
+quaverDottedDown = {
+ \stemDown
+ \override Stem#'length = 6
+ g'8.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \quaverDottedDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDown.ly
new file mode 100644
index 0000000000..d181bdaf55
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-quaverDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% quaverDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+quaver with downward stem
+%}
+
+quaverDown = {
+ \stemDown
+ \override Stem#'length = 6
+ g'8
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \quaverDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaver.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaver.ly
new file mode 100644
index 0000000000..ebac65b3ce
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaver.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% semiquaver.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+semiquaver with upward stem
+%}
+
+semiquaver = {
+ \override Stem#'length = #6.5
+ g'16
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \semiquaver
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDotted.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDotted.ly
new file mode 100644
index 0000000000..d516b7973e
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDotted.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% semiquaverDotted.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2013-08-30
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted semiquaver with upward stem
+%}
+
+semiquaverDotted = {
+ \override Stem#'length = #6.5
+ g'16.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \semiquaverDotted
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDouble.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDouble.ly
new file mode 100644
index 0000000000..0f757c89a3
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDouble.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% semiquaverDottedDouble.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted semiquaver with upward stem
+%}
+
+semiquaverDottedDouble = {
+ \override Stem#'length = #6.5
+ g'16..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \semiquaverDottedDouble
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDoubleDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDoubleDown.ly
new file mode 100644
index 0000000000..72b641db9a
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDoubleDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% semiquaverDottedDoubleDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+doubledotted semiquaver with downward stem
+%}
+
+semiquaverDottedDoubleDown = {
+ \stemDown
+ \override Stem#'length = #6.5
+ g'16..
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \semiquaverDottedDoubleDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDown.ly
new file mode 100644
index 0000000000..f4b725cdb8
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDottedDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% semiquaverDottedDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+dotted semiquaver with downward stem
+%}
+
+semiquaverDottedDown = {
+ \stemDown
+ \override Stem#'length = #6.5
+ g'16.
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \semiquaverDottedDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDown.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDown.ly
new file mode 100644
index 0000000000..09da96d378
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-semiquaverDown.ly
@@ -0,0 +1,71 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% semiquaverDown.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-13
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+semiquaver with downward stem
+%}
+
+semiquaverDown = {
+ \stemDown
+ \override Stem#'length = #6.5
+ g'16
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \semiquaverDown
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuavers.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuavers.ly
new file mode 100644
index 0000000000..1ea9294685
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuavers.ly
@@ -0,0 +1,71 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% threeBeamedQuavers.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+three beamed quavers
+%}
+
+threeBeamedQuavers = {
+ \override Beam #'positions = #'(1 . 1)
+ e'8[ e' e']
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \threeBeamedQuavers
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversI.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversI.ly
new file mode 100644
index 0000000000..5bdebca329
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversI.ly
@@ -0,0 +1,72 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% threeBeamedQuaversI.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+three beamed quavers, second dotted
+%}
+
+threeBeamedQuaversI = {
+ \override Beam #'positions = #'(1 . 1)
+ \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1/8)
+ e'8[ e'8. e'16]
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \threeBeamedQuaversI
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversII.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversII.ly
new file mode 100644
index 0000000000..1304da565a
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversII.ly
@@ -0,0 +1,72 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% threeBeamedQuaversII.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+three beamed quavers, first dotted
+%}
+
+threeBeamedQuaversII = {
+ \override Beam #'positions = #'(1 . 1)
+ \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1/12)
+ e'8.[ e'16 e'8]
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \threeBeamedQuaversII
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversIII.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversIII.ly
new file mode 100644
index 0000000000..846a687e0a
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-threeBeamedQuaversIII.ly
@@ -0,0 +1,72 @@
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% threeBeamedQuaversIII.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by lily-image-commands.py on 2013-11-21
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+three beamed quavers, last dotted
+%}
+
+threeBeamedQuaversIII = {
+ \override Beam #'positions = #'(1 . 1)
+ \override Score.SpacingSpanner #'common-shortest-duration = #(ly:make-moment 1/12)
+ e'16[ e'8. e'8]
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \threeBeamedQuaversIII
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-twoBeamedQuavers.ly b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-twoBeamedQuavers.ly
new file mode 100644
index 0000000000..a14e064594
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/source/glyphimages/generated_src/lily-twoBeamedQuavers.ly
@@ -0,0 +1,70 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file defines a single glyph to be created with LilyPond: %
+% %
+% twoBeamedQuavers.ly %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% created by buildglyphimages.py on 2012-11-09
+
+\version "2.16.2"
+
+#(set-global-staff-size 14)
+
+\paper {
+ indent = 0
+}
+\header {
+ tagline = ""
+}
+
+%{
+two beamed quavers with diagonal beam
+%}
+
+twoBeamedQuavers = {
+ \override Beam#'damping = 0
+ d'8[ e']
+}
+
+ \score {
+ \new Staff \with {
+ \remove "Staff_symbol_engraver"
+ \remove "Clef_engraver"
+ \remove "Time_signature_engraver"
+ }
+ \twoBeamedQuavers
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/README-tex b/macros/unicodetex/latex/lilyglyphs/tex/README-tex
new file mode 100644
index 0000000000..682ff49e92
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/README-tex
@@ -0,0 +1,7 @@
+This directory contains files to be found by LaTeX.
+
+The core/ and commands/ subdirectories
+_must_ remain beside the lilyglyphs.sty package!
+
+The pdfs/ subdirectory contains files
+that are _used_ by the package. \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/README-commands b/macros/unicodetex/latex/lilyglyphs/tex/commands/README-commands
new file mode 100644
index 0000000000..4666f416f0
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/README-commands
@@ -0,0 +1,2 @@
+This folder contains command definitions
+used in the lilyglyphs LaTeX package. \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/accidentals.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/accidentals.inp
new file mode 100644
index 0000000000..e8b90a6c17
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/accidentals.inp
@@ -0,0 +1,120 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%
+% Accidentals %
+%%%%%%%%%%%%%%%
+
+% "accidentals.natural"
+\renewcommand*{\natural}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.natural}}%
+}
+
+%%%%%%%%
+% flats
+%%%%%%%%
+
+% "accidentals.flat"
+\renewcommand*{\flat}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.2}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.flat}}%
+}
+
+% "accidentals.flatflat"
+\newcommand*{\flatflat}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.2}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.flatflat}}%
+}
+
+%%%%%%%%
+% sharps
+%%%%%%%%
+
+% "accidentals.sharp"
+\renewcommand*{\sharp}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.sharp}}%
+}
+
+% "accidentals.sharp.arrowup"
+\newcommand*{\sharpArrowup}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.sharp.arrowup}}%
+}
+
+% "accidentals.sharp.arrowdown"
+\newcommand*{\sharpArrowdown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.sharp.arrowdown}}%
+}
+
+% "accidentals.sharp.arrowboth"
+\newcommand*{\sharpArrowboth}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.sharp.arrowboth}}%
+}
+
+% "accidentals.sharp.slashslash.stem"
+\newcommand*{\sharpSlashslashStem}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.sharp.slashslash.stem}}%
+}
+
+% "accidentals.sharp.slashslashslash.stemstem"
+\newcommand*{\sharpSlashslashslashStemstem}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.sharp.slashslashslash.stemstem}}%
+}
+
+% "accidentals.sharp.slashslashslash.stem"
+\newcommand*{\sharpSlashslashslashStem}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.sharp.slashslashslash.stem}}%
+}
+
+% "accidentals.sharp.slashslash.stemstemstem"
+\newcommand*{\sharpSlashslashStemstemstem}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.sharp.slashslash.stemstemstem}}%
+}
+
+% "accidentals.doublesharp"
+\newcommand*{\doublesharp}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0.35}%
+ \lilyPrint[#1]{\lilyGetGlyph{accidentals.doublesharp}}%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/accordion.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/accordion.inp
new file mode 100644
index 0000000000..b20f97203e
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/accordion.inp
@@ -0,0 +1,116 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% Accordion registers %
+%%%%%%%%%%%%%%%%%%%%%%%
+
+%------------------
+% Emmentaler glyphs
+
+% accordion bayan bass
+% created by lily-glyph-commands.py on 2013-09-23
+\newcommand*{\accordionBayanBass}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=-.2}%
+ \hspace*{.5ex}%
+ \lilyPrint[#1]{\lilyGetGlyph{accordion.bayanbass}%
+ \hspace*{-.3ex}}%
+}
+
+% accordion discant
+% created by lily-glyph-commands.py on 2013-09-23
+\newcommand*{\accordionDiscant}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=-.2}%
+ \hspace*{.6ex}%
+ \lilyPrint[#1]{\lilyGetGlyph{accordion.discant}%
+ \hspace*{-.3ex}}%
+}
+
+% accordion dot
+% created by lily-glyph-commands.py on 2013-09-23
+\newcommand*{\accordionDot}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=-.2}%
+ \hspace*{.7ex}%
+ \lilyPrint[#1]{\lilyGetGlyph{accordion.dot}}%
+}
+
+% accordion free bass
+% created by lily-glyph-commands.py on 2013-09-23
+\newcommand*{\accordionFreeBass}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=-.2}%
+ \hspace*{.5ex}%
+ \lilyPrint[#1]{\lilyGetGlyph{accordion.freebass}}%
+}
+
+% accordion old EE
+% created by lily-glyph-commands.py on 2013-09-23
+\newcommand*{\accordionOldEE}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=-.2}%
+ \hspace*{.5ex}%
+ \lilyPrint[#1]{\lilyGetGlyph{accordion.oldEE}}%
+}
+
+% accordion pull
+% created by lily-glyph-commands.py on 2013-09-23
+\newcommand*{\accordionPull}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=-.2}%
+ \hspace*{.2ex}%
+ \lilyPrint[#1]{\lilyGetGlyph{accordion.pull}}%
+}
+
+% accordion push
+% created by lily-glyph-commands.py on 2013-09-23
+\newcommand*{\accordionPush}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=-.2}%
+ \hspace*{.5ex}%
+ \lilyPrint[#1]{\lilyGetGlyph{accordion.push}}%
+}
+
+% accordion standard bass
+% created by lily-glyph-commands.py on 2013-09-23
+\newcommand*{\accordionStdBass}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=-.2}%
+ \hspace*{.9ex}%
+ \lilyPrint[#1]{\lilyGetGlyph{accordion.stdbass}%
+ \hspace*{-.4ex}}%
+}
+
+%------------------------------
+% Combined glyphs, image based
+
+%TODO
+
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/beamednotes.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/beamednotes.inp
new file mode 100644
index 0000000000..c18e3315ae
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/beamednotes.inp
@@ -0,0 +1,81 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%
+% Beamed notes %
+%%%%%%%%%%%%%%%%
+
+%------------------------------
+% Two notes connected by a beam
+
+% two beamed quavers with diagonal beam
+% created by buildglyphimages.py on 2012-11-08
+\newcommand*{\twoBeamedQuavers}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.7,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-twoBeamedQuavers}%
+}
+
+%--------------------------------
+% Three notes connected by a beam
+
+% three beamed quavers
+% created by lily-image-commands.py on 2013-11-21
+\newcommand*{\threeBeamedQuavers}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.9,raise=-0.6}%
+ \lilyPrintImage[#1]{lily-threeBeamedQuavers}%
+}
+
+% three beamed quavers, second dotted
+% created by lily-image-commands.py on 2013-11-21
+\newcommand*{\threeBeamedQuaversI}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.9,raise=-0.6}%
+ \lilyPrintImage[#1]{lily-threeBeamedQuaversI}%
+}
+
+% three beamed quavers, first dotted
+% created by lily-image-commands.py on 2013-11-21
+\newcommand*{\threeBeamedQuaversII}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.9,raise=-0.6}%
+ \lilyPrintImage[#1]{lily-threeBeamedQuaversII}%
+}
+
+% three beamed quavers, last dotted
+% created by lily-image-commands.py on 2013-11-21
+\newcommand*{\threeBeamedQuaversIII}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.9,raise=-0.6}%
+ \lilyPrintImage[#1]{lily-threeBeamedQuaversIII}%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/clefs.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/clefs.inp
new file mode 100644
index 0000000000..4f688e7f3e
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/clefs.inp
@@ -0,0 +1,76 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%
+% Clef glyphs %
+%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%
+% \treble clef
+\newcommand*{\clefG}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.2,raise=0.25}%
+ \lilyPrint[#1]{\lilyGetGlyph{clefs.G}}%
+}
+
+\newcommand*{\clefGInline}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.8,raise=0.15}%
+ \lilyPrint[#1]{\lilyGetGlyph{clefs.G}}%
+}
+
+%%%%%%%%%%%%
+% \bass clef
+\newcommand*{\clefF}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{clefs.F}}%
+}
+
+\newcommand*{\clefFInline}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.1,raise=0.65}%
+ \lilyPrint[#1]{\lilyGetGlyph{clefs.F}}%
+}
+
+%%%%%%%%%%%%
+% \alto clef
+\newcommand*{\clefC}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.1,raise=0.6}%
+ \lilyPrint[#1]{\lilyGetGlyph{clefs.C}}%
+}
+
+\newcommand*{\clefCInline}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.9,raise=0.6}%
+ \lilyPrint[#1]{\lilyGetGlyph{clefs.C}}%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/dynamics.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/dynamics.inp
new file mode 100644
index 0000000000..1ecb8807d6
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/dynamics.inp
@@ -0,0 +1,97 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Dynamic Script letters %
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%--------------
+% Single Glyphs
+
+% The dynamics letters don't have to be accessed through special commands
+% but can be written through \lilyText.
+% A chain of glyphs can be printed at once,
+% normal space is possible between letters
+% Available glyphs are
+ % f for forte
+ % p for piano
+ % m for mezzo
+ % r for rin-
+ % s for s- (as in sf)
+ % z for -z (as in sfz)
+
+% \lilyDynamics is just a wrapper around \lilyText
+% specifying a default scaling factor
+\newcommand{\lilyDynamics}[2][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0}%
+ \lilyPrint[#1]{#2}%
+}
+
+%-------------------------
+% Combined Dynamic Scripts
+
+% Combined dynamics aren't generally necessary
+% as \lilyText takes any combination of characters as argument.
+% Some combinations seem to need additonal kerning,
+% so we provide predefined commands for them
+
+% rinforzando
+\newcommand{\lilyRF}[1][]{%
+ \mbox{\lilyDynamics[#1]{r\hspace{0.035ex}f}}%
+}
+
+% rinforzando with trailing z
+\newcommand{\lilyRFZ}[1][]{%
+ \mbox{\lilyDynamics[#1]{r\hspace{0.035ex}fz}}%
+}
+
+%------------------------
+% Graphical Dynamic Signs
+
+% decrescendo Hairpin
+% created by buildglyphimages.py on 2012-11-08
+\newcommand*{\decrescHairpin}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.9,raise=0}%
+ \lilyPrintImage[#1]{lily-decrescHairpin}%
+}
+
+% crescendo Hairpin
+% created by buildglyphimages.py on 2012-11-08
+\newcommand*{\crescHairpin}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.9,raise=0}%
+ \lilyPrintImage[#1]{lily-crescHairpin}%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/fancyexamples.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/fancyexamples.inp
new file mode 100644
index 0000000000..74c371cf31
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/fancyexamples.inp
@@ -0,0 +1,51 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% fancy example %
+% This isn't a command for any real-world usage %
+% but only an example for creating complex, %
+% i.e. composed notation that can be turned %
+% into a predefined command %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% example of a fancy notation
+% created by genImageCommands.py on 2013-09-07
+\newcommand*{\lilyFancyExample}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=.7,raise=-.7}%
+ \lilyPrintImage[#1]{lily-fancyExample}%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/noteheads.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/noteheads.inp
new file mode 100644
index 0000000000..7961971ca7
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/noteheads.inp
@@ -0,0 +1,48 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% Notes and Noteheads %
+%%%%%%%%%%%%%%%%%%%%%%%
+
+%TODO This really is only a start
+%TODO There is esp. the question of Stems
+
+\newcommand*{\lilyHalfNotehead}{\lilyGlyph{1.5}{"noteheads.s1"} }
+
+\newcommand{\dottedHalf}{\lilyHalfNotehead \lilyDot}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/numbers.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/numbers.inp
new file mode 100644
index 0000000000..b1bcfcd9fe
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/numbers.inp
@@ -0,0 +1,53 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%
+% Numbers %
+%%%%%%%%%%%
+
+%--------------
+% Basic numbers
+
+% Numbers don't have to be accessed through special commands
+% but can be written through \lilyText.
+% Available are all arabic numbers from 0 through 9
+
+%TODO: provide convenience commands with default scalings for
+ % fingering
+ % Time signatures
+ % figured bass
+ % etc? \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/rests.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/rests.inp
new file mode 100644
index 0000000000..48538af3f7
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/rests.inp
@@ -0,0 +1,141 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%
+% Rests %
+%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%
+% Whole note rests
+
+% "rests.1o - whole note rest upwards"
+\newcommand*{\wholeNoteRest}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.3,raise=0.4}%
+ \lilyPrint[#1]{\hspace*{0.25ex}\lilyGetGlyph{rests.0o}}%
+}
+
+% Dotted whole note rest
+\newcommand*{\wholeNoteRestDotted}[1][]{%
+ % define the optional arguments for the dot
+ \setkeys{lilyDesignOptions}{scale=0.8,raise=0.2}%
+ % Calculate effective scale/raise and the hspace for the dot
+ \lilySetDotOptions[#1]{0}{0.5}{0.4}%
+ % Print the rest and then the dot
+ \wholeNoteRest[#1]\lilyDotSpace\lilyPrintDot
+}
+
+
+%%%%%%%%%%%%%%%%%
+% Half note rests
+%%%%%%%%%%%%%%%%%
+
+% "rests.1o - half note rest upwards"
+\newcommand*{\halfNoteRest}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.3,raise=0.4}%
+ \lilyPrint[#1]{\hspace*{0.25ex}\lilyGetGlyph{rests.1o}}%
+}
+
+% Dotted half note rest
+\newcommand*{\halfNoteRestDotted}[1][]{%
+ % define the optional arguments for the dot
+ \setkeys{lilyDesignOptions}{scale=0.8,raise=0.2}%
+ % Calculate effective scale/raise and the hspace for the dot
+ \lilySetDotOptions[#1]{0}{0.5}{0.4}%
+ % Print the rest and then the dot
+ \halfNoteRest[#1]\lilyDotSpace\lilyPrintDot
+}
+
+%%%%%%%%%%%%%%%%%
+% Crotchet Rests
+%%%%%%%%%%%%%%%%%
+
+% Crotchet Rest
+\newcommand*{\crotchetRest}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.3,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{rests.2}}%
+}
+
+% Dotted crotched rest
+\newcommand*{\crotchetRestDotted}[1][]{%
+ % define the optional arguments for the dot
+ \setkeys{lilyDesignOptions}{scale=0.8,raise=0.2}%
+ % Calculate effective scale/raise and the hspace for the dot
+ \lilySetDotOptions[#1]{0}{0}{-0.5}%
+ % Print the rest and then the dot
+ \crotchetRest[#1]\lilyPrintDot%
+}
+
+%%%%%%%%%%%%%%%
+% Quaver Rests
+%%%%%%%%%%%%%%%
+
+% Quaver Rest
+\newcommand*{\quaverRest}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.3,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{rests.3}}%
+}
+
+% Dotted crotched rest
+\newcommand*{\quaverRestDotted}[1][]{%
+ % define the optional arguments for the dot
+ \setkeys{lilyDesignOptions}{scale=0.8,raise=0.2}%
+ % Calculate effective scale/raise and the hspace for the dot
+ \lilySetDotOptions[#1]{0}{0}{-0.5}%
+ % Print the rest and then the dot
+ \quaverRest[#1]\lilyPrintDot%
+}
+
+
+%%%%%%%%%%%%%%%%%%
+% Semiquaver Rests
+%%%%%%%%%%%%%%%%%%
+
+% Semiquaver Rest
+\newcommand*{\semiquaverRest}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.3,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{rests.4}}%
+}
+
+% Dotted crotchet rest
+\newcommand*{\semiquaverRestDotted}[1][]{%
+ % define the optional arguments for the dot
+ \setkeys{lilyDesignOptions}{scale=0.8,raise=0.2}%
+ % Calculate effective scale/raise and the hspace for the dot
+ \lilySetDotOptions[#1]{0}{0}{-0.3}%
+ % Print the rest and then the dot
+ \semiquaverRest[#1]\lilyPrintDot%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/scripts.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/scripts.inp
new file mode 100644
index 0000000000..16120f05ed
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/scripts.inp
@@ -0,0 +1,121 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%
+% Scripts %
+%%%%%%%%%%%%%%%
+
+% "scripts.ufermata"
+\newcommand*{\fermata}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.2,raise=0.5}%
+ \lilyPrint[#1]{\hspace*{0.55ex}\lilyGetGlyph{scripts.ufermata}}%
+}
+
+%%%%%%%%%%%%%%%
+% Articulations
+%%%%%%%%%%%%%%%
+
+% Accent symbol
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\lilyAccent}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.5}%
+ \lilyPrint[#1]{\hspace{0.75ex}\lilyGetGlyph{scripts.sforzato}\hspace{-0.4ex}}%
+}
+
+% Espressivo
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\lilyEspressivo}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.5}%
+ \lilyPrint[#1]{\hspace{1.7ex}\lilyGetGlyph{scripts.espr}\hspace{-0.4ex}}%
+}
+
+% Staccato dot
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\lilyStaccato}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.6,raise=0.5}%
+ \lilyPrint[#1]{\hspace{0.1ex}\lilyGetGlyph{scripts.staccato}\hspace{-0.2ex}}%
+}
+
+% Thumb pizzicato for string instruments
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\lilyThumb}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.6,raise=0.65}%
+ \lilyPrint[#1]{\hspace{0.1ex}\lilyGetGlyph{scripts.thumb}\hspace{-0.3ex}}%
+}
+
+% marcato articulation
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\marcato}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{scripts.umarcato}\hspace{-0.3ex}}%
+}
+
+% marcato articulation downwards
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\marcatoDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=1}%
+ \lilyPrint[#1]{\lilyGetGlyph{scripts.dmarcato}\hspace{-0.3ex}}%
+}
+
+% portato articulation
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\portato}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.5}%
+ \lilyPrint[#1]{\hspace{0.2ex}\lilyGetGlyph{scripts.uportato}\hspace{-0.4ex}}%
+}
+
+% portato articulation downwards
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\portatoDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=1}%
+ \lilyPrint[#1]{\hspace{0.2ex}\lilyGetGlyph{scripts.dportato}\hspace{-0.4ex}}%
+}
+
+% staccatissimo articulation
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\staccatissimo}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.5}%
+ \lilyPrint[#1]{\lilyGetGlyph{scripts.ustaccatissimo}}%
+}
+
+% tenuto articulation
+% created by lily-glyph-commands.py on 2013-11-20
+\newcommand*{\tenuto}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.8}%
+ \lilyPrint[#1]{\lilyGetGlyph{scripts.tenuto}\hspace{-0.4ex}}%
+}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/singlenotes.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/singlenotes.inp
new file mode 100644
index 0000000000..8c8f16f1cf
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/singlenotes.inp
@@ -0,0 +1,321 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%
+% Single notes %
+%%%%%%%%%%%%%%%%
+
+% The commands are defined in British English
+% and are followed by their American English synonyms
+
+%%%%%%%%%%%%%
+% whole notes
+
+% whole note
+\newcommand*{\semibreve}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=0.2}%
+ \lilyPrint[#1]{\lilyGetGlyph{noteheads.s0}}%
+}
+\newcommand{\wholeNote}[1][]{\semibreve[#1]}
+
+% dotted whole note
+\newcommand*{\semibreveDotted}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1,raise=0.2}%
+ % Calculate effective scale/raise and the hspace for the dot
+ \lilySetDotOptions[#1]{0}{0.5}{0.4}%
+ % Print the rest and then the dot
+ \wholeNote[#1]\lilyDotSpace\lilyPrintDot
+}
+\newcommand*{\wholeNoteDotted}[1][]{\semibreveDotted[#1]}
+
+%%%%%%%%%%%%
+% half notes
+
+% half note with upward stem
+% created by buildglyphimages.py on 2012-11-06
+\newcommand*{\minim}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.2}%
+ \lilyPrintImage[#1]{lily-halfNote}%
+}
+\newcommand*{\halfNote}[1][]{\minim[#1]}
+
+% half note with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\minimDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.6}%
+ \lilyPrintImage[#1]{lily-halfNoteDown}%
+}
+\newcommand*{\halfNoteDown}[1][]{\minimDown[#1]}
+
+% dotted half note with upward stem
+% created by buildglyphimages.py on 2012-11-07
+\newcommand*{\minimDotted}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.2}%
+ \lilyPrintImage[#1]{lily-halfNoteDotted}%
+}
+\newcommand*{\halfNoteDotted}[1][]{\minimDotted[#1]}
+
+% dotted half note with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\minimDottedDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.6}%
+ \lilyPrintImage[#1]{lily-halfNoteDottedDown}%
+}
+\newcommand*{\halfNoteDottedDown}[1][]{\minimDottedDown[#1]}
+
+% doubledotted half note with upward stem
+% created by buildglyphimages.py on 2012-11-08
+\newcommand*{\minimDottedDouble}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.2}%
+ \lilyPrintImage[#1]{lily-halfNoteDottedDouble}%
+}
+\newcommand*{\halfNoteDottedDouble}[1][]{\minimDottedDouble[#1]}
+
+% doubledotted half note with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\minimDottedDoubleDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.6}%
+ \lilyPrintImage[#1]{lily-halfNoteDottedDoubleDown}%
+}
+\newcommand*{\halfNoteDottedDoubleDown}[1][]{\minimDottedDoubleDown[#1]}
+
+
+%%%%%%%%%%%
+% crotchets
+
+% crotchet with upward stem
+% created by buildglyphimages.py on 2012-11-06
+\newcommand*{\crotchet}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.25}%
+ \lilyPrintImage[#1]{lily-crotchet}%
+}
+\newcommand*{\quarterNote}[1][]{\crotchet[#1]}
+
+% crotchet with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\crotchetDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-crotchetDown}%
+}
+\newcommand*{\quarterNoteDown}[1][]{\crotchetDown[#1]}
+
+% dotted crotchet with upward stem
+% created by buildglyphimages.py on 2012-11-07
+\newcommand*{\crotchetDotted}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.25}%
+ \lilyPrintImage[#1]{lily-crotchetDotted}%
+}
+\newcommand*{\quarterNoteDotted}[1][]{\crotchetDotted[#1]}
+
+% dotted crotchet with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\crotchetDottedDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-crotchetDottedDown}%
+}
+\newcommand*{\quarterNoteDottedDown}[1][]{\crotchetDottedDown[#1]}
+
+% doubledotted crotchet with upward stem
+% created by buildglyphimages.py on 2012-11-08
+\newcommand*{\crotchetDottedDouble}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.25}%
+ \lilyPrintImage[#1]{lily-crotchetDottedDouble}%
+}
+\newcommand*{\quarterNoteDottedDouble}[1][]{\crotchetDottedDouble[#1]}
+
+% doubledotted crotchet with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\crotchetDottedDoubleDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-crotchetDottedDoubleDown}%
+}
+\newcommand*{\quarterNoteDottedDoubleDown}[1][]{\crotchetDottedDoubleDown[#1]}
+
+
+%%%%%%%%%
+% quavers
+
+% quaver with upward stem
+% created by buildglyphimages.py on 2012-11-06
+\newcommand*{\quaver}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.3}%
+ \lilyPrintImage[#1]{lily-quaver}%
+}
+\newcommand*{\eighthNote}[1][]{\quaver[#1]}
+
+% quaver with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\quaverDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.7}%
+ \lilyPrintImage[#1]{lily-quaverDown}%
+}
+\newcommand*{\eighthNoteDown}[1][]{\quaverDown[#1]}
+
+% dotted quaver with upward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\quaverDotted}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.3}%
+ \lilyPrintImage[#1]{lily-quaverDotted}%
+}
+\newcommand*{\eighthNoteDotted}[1][]{\quaverDotted[#1]}
+
+% dotted quaver with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\quaverDottedDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.7}%
+ \lilyPrintImage[#1]{lily-quaverDottedDown}%
+}
+\newcommand*{\eighthNoteDottedDown}[1][]{\quaverDottedDown[#1]}
+
+% doubledotted quaver with upward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\quaverDottedDouble}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.3}%
+ \lilyPrintImage[#1]{lily-quaverDottedDouble}%
+}
+\newcommand*{\eighthNoteDottedDouble}[1][]{\quaverDottedDouble[#1]}
+
+% doubledotted quaver with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\quaverDottedDoubleDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.7}%
+ \lilyPrintImage[#1]{lily-quaverDottedDoubleDown}%
+}
+\newcommand*{\eighthNoteDottedDoubleDown}[1][]{\quaverDottedDoubleDown[#1]}
+
+
+%%%%%%%%%%%%%
+% semiquavers
+
+% semiquaver with upward stem
+% created by buildglyphimages.py on 2012-11-06
+\newcommand*{\semiquaver}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.15}%
+ \lilyPrintImage[#1]{lily-semiquaver}%
+}
+\newcommand*{\sixteenthNote}[1][]{\semiquaver[#1]}
+
+% semiquaver with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\semiquaverDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.8}%
+ \lilyPrintImage[#1]{lily-semiquaverDown}%
+}
+\newcommand*{\sixteenthNoteDown}[1][]{\semiquaverDown[#1]}
+
+% dotted semiquaver with upward stem
+% created by buildglyphimages.py on 2012-11-07
+\newcommand*{\semiquaverDotted}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.15}%
+ \lilyPrintImage[#1]{lily-semiquaverDotted}%
+}
+\newcommand*{\sixteenthNoteDotted}[1][]{\semiquaverDotted[#1]}
+
+% dotted semiquaver with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\semiquaverDottedDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.8}%
+ \lilyPrintImage[#1]{lily-semiquaverDottedDown}%
+}
+\newcommand*{\sixteenthNoteDottedDown}[1][]{\semiquaverDottedDown[#1]}
+
+% doubledotted semiquaver with upward stem
+% created by buildglyphimages.py on 2012-11-08
+\newcommand*{\semiquaverDottedDouble}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.15}%
+ \lilyPrintImage[#1]{lily-semiquaverDottedDouble}%
+}
+\newcommand*{\sixteenthNoteDottedDouble}[1][]{\semiquaverDottedDouble[#1]}
+
+% doubledotted semiquaver with downward stem
+% created by buildglyphimages.py on 2012-11-13
+\newcommand*{\semiquaverDottedDoubleDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.8}%
+ \lilyPrintImage[#1]{lily-semiquaverDottedDoubleDown}%
+}
+\newcommand*{\sixteenthNoteDottedDoubleDown}[1][]{\semiquaverDottedDoubleDown[#1]}
+
+%%%%%%%%%%%%%%%%%
+% demisemiquavers
+
+% demisemiquaver with upward stem
+% created by lily-image-commands.py on 2013-11-18
+\newcommand*{\demisemiquaver}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-demisemiquaver}%
+}
+\newcommand*{\thirtysecondNote}[1][]{\demisemiquaver[#1]}
+
+% dotted demisemiquaver with upward stem
+% created by lily-image-commands.py on 2013-11-18
+\newcommand*{\demisemiquaverDotted}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-demisemiquaverDotted}%
+}
+\newcommand*{\thirtysecondNoteDotted}[1][]{\demisemiquaverDotted[#1]}
+
+% doubledotted demisemiquaver with upward stem
+% created by lily-image-commands.py on 2013-11-18
+\newcommand*{\demisemiquaverDottedDouble}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-demisemiquaverDottedDouble}%
+}
+\newcommand*{\thirtysecondNoteDottedDouble}[1][]{\demisemiquaverDottedDouble[#1]}
+
+% doubledotted demisemiquaver with downward stem
+% created by lily-image-commands.py on 2013-11-18
+\newcommand*{\demisemiquaverDottedDoubleDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-demisemiquaverDottedDoubleDown}%
+}
+\newcommand*{\thirtysecondNoteDottedDoubleDown}[1][]{\demisemiquaverDottedDoubleDown[#1]}
+
+% dotted demisemiquaver with downward stem
+% created by lily-image-commands.py on 2013-11-18
+\newcommand*{\demisemiquaverDottedDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-demisemiquaverDottedDown}%
+}
+\newcommand*{\thirtysecondNoteDottedDown}[1][]{\demisemiquaverDottedDown[#1]}
+
+% demisemiquaver with downward stem
+% created by lily-image-commands.py on 2013-11-18
+\newcommand*{\demisemiquaverDown}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.75,raise=-0.4}%
+ \lilyPrintImage[#1]{lily-demisemiquaverDown}%
+}
+\newcommand*{\thirtysecondNoteDown}[1][]{\demisemiquaverDown[#1]}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/commands/timesignatures.inp b/macros/unicodetex/latex/lilyglyphs/tex/commands/timesignatures.inp
new file mode 100644
index 0000000000..e4b248bd9b
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/commands/timesignatures.inp
@@ -0,0 +1,63 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%
+% Time Signature glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% \time 4/4
+\newcommand*{\lilyTimeC}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.7}%
+ \lilyPrint[#1]{\lilyGetGlyph{timesig.C44}}%
+}
+
+% \time 2/2
+\newcommand*{\lilyTimeCHalf}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.4,raise=0.7}%
+ \lilyPrint[#1]{\lilyGetGlyph{timesig.C22}}%
+}
+
+% general \time n/m command (prints time signature as a fraction in emmentaler font)
+% doesn't need curly braces after it
+\newcommand*{\lilyTimeSignature}[3][]{%
+ \setkeys{lilyDesignOptions}{scale=1.1,raise=0}%
+ \setkeys{lilyCmdOptions}{#1}%
+ \adjustbox{stack=cc}{%
+ \baselineskip=0pt%
+ \lilyPrint[#1]{#2}\\%
+ \lilyPrint[#1]{#3}\par}%
+} \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/core/README-core b/macros/unicodetex/latex/lilyglyphs/tex/core/README-core
new file mode 100644
index 0000000000..23286b05f8
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/core/README-core
@@ -0,0 +1,2 @@
+This folder contains the core functionality
+of the lilyglyphs LaTeX package. \ No newline at end of file
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/core/dotted.inp b/macros/unicodetex/latex/lilyglyphs/tex/core/dotted.inp
new file mode 100644
index 0000000000..6b7b7f634b
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/core/dotted.inp
@@ -0,0 +1,114 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% logic for dotted glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Dot, e.g. necessary to create dotted notes
+\newcommand*{\lilyDot}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=1.5,raise=0}%
+ \lilyPrint[#1]{\lilyGetGlyph{dots.dot}}%
+}
+
+\makeatletter
+
+% Calculate the space between a glyph and a dot
+% based on the 2nd order function
+% f(x) = (1/n * x^2) - 1/n + (m * x) - m + o
+% where
+% #1: scaling factor x
+% #2: curve factor n
+% #4 line steepness m
+% #3 offset o (offset of 0 results in a dotSpace of 0 at scale=1).
+% The result is supposed to be taken as ex and stored in \lilyDotSpaceF
+% which is used by \lilyDotSpace
+\newcommand*{\lilyCalcDotSpace}[4]{%
+ \pgfmathsetmacro{\lilyDotSpaceF}{%
+ #1 * #1% x^2
+ * #2 - #2%
+ + #1 * #3 - #3 + #4}%
+}
+
+% Interpret the different options to be used for printing a dot
+% The optional arguments (passed as #1)given by the user are taken into account,
+% then the scaling and raise are calculated using the design options
+% from the calling predefined command.
+% Finally the space between the glyph and the dot is calculated using the
+% 2nd order function \lilyCalcDotSpace:
+% (1/n * scale^2) - 1/n + (1/m * scale) - 1/m + o
+% #2: curve factor n
+% #4 line steepness m
+% #3 offset o (offset of 0 results in a dotSpace of 0 at scale=1).
+
+\newcommand*{\lilySetDotOptions}[4][]{%
+ % Initialize the user's command option in case he didn't provide them
+ \setkeys{lilyCmdOptions}{scale=1,raise=0}%
+ % process the optional argument to access the values
+ \setkeys{lilyCmdOptions}{#1}%
+ % calculate optional arguments for the dot,
+ % based on "design options" and the given arguments
+ \pgfmathsetmacro{\lilyDotScale}{\lilyCmdOptions@scale * \lilyDesignOptions@scale}%
+ \pgfmathsetmacro{\lilyDotRaise}{\lilyCmdOptions@raise + \lilyDesignOptions@raise}%
+ % calculate the space between the rest and the dot
+ \lilyCalcDotSpace{\lilyCmdOptions@scale}{#2}{#3}{#4}%
+}
+\makeatother
+
+% Insert a space between a glyph and a dot
+% \lilyCalcDotSpace or better \lilySetDotOptions should have been called
+% immediately before \lilyDotSpace,
+% otherwise the result could be undefined
+\newcommand*{\lilyDotSpace}{\hspace*{\lilyDotSpaceF ex}}
+
+% Print the actual dot,
+% use the settings defined in \lilySetDotOptions
+\newcommand*{\lilyPrintDot}{\lilyDot[raise=\lilyDotRaise,scale=\lilyDotScale]}
+
+% Print another dot, for multiply dotted symbols.
+% It uses the dot settings from the previous command.
+% So if you encounter strange settings, make sure you have called
+% a predefined command of a dotted symbol immediately before.
+% If no predefined command has been called at all
+% you will see an error message because the key-value pairs
+% haven't been initialized yet.
+% It uses a different way to determine the space between dots.
+% It defaults to 0.25 ex, but you can optionally pass it
+% a number that is interpreted as ex.
+\newcommand*{\lilyPrintMoreDots}[1][0.25]{%
+ \hspace*{#1 ex}\lilyPrintDot%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/core/genericAccess.inp b/macros/unicodetex/latex/lilyglyphs/tex/core/genericAccess.inp
new file mode 100644
index 0000000000..095dd2de64
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/core/genericAccess.inp
@@ -0,0 +1,189 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines the generic printing functionality %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This is the internal command that actually prints the glyph(s)%
+% Users aren't intended to use it directly %
+% #1 are key-value options
+% #2 the content to be printed
+\newcommand*{\lilyPrint}[2][]{%
+ % interpret optional argument
+ \interpretLilyOptions{#1}%
+ % print the glyph in a raisebox
+ \raisebox{\lilyEffectiveRaise ex}{%
+ {\fontspec[Scale=\lilyEffectiveScale]{emmentaler-\lilyOpticalSuffix.otf}#2}%
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Helper functions for \lilyPrintImage below
+
+% Calculate the (point) ratio between the current font size
+% and the size of \normalsize fonts.
+% This is used to scale the output of \lilyPrintImage
+% as images aren't scaled automatically with font size commands.
+\makeatletter
+\newcommand*{\currentFontRatio}{%
+ % store point size of current font
+ \xdef\currentFontSize{\f@size}%
+ {%
+ % Temporarily switch to normal size
+ \normalsize%
+ % and store normal point size
+ \xdef\normalFontSize{\f@size}%
+ }%
+ % Calculate ratio and store the value
+ \pgfmathsetmacro{\getCurrentFontRatio}{%
+ \currentFontSize / \normalFontSize}%
+}
+\makeatother
+
+% Apply the scaling factor that is necessary to
+% accomodate the current font size.
+% The accumulated scaling factor of the other sources
+% is taken into account through \lilyEffectiveScale.
+\newcommand*{\lilyScaleImage}{%
+ \currentFontRatio%
+ \pgfmathsetmacro{\lilyImageEffectiveScale}{%
+ \lilyEffectiveScale * \getCurrentFontRatio}%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Load 'glyph' from an image (preferrably PDF). %
+% Used for items that are created using LilyPond itself %
+% Users aren't intended to use it directly %
+% #1 are key-value options
+% #2 the content to be printed
+\newcommand*{\lilyPrintImage}[2][]{%
+ % interpret optional argument
+ \interpretLilyOptions{#1}%
+ % determine scaling factor to accomodate the current font size
+ % (as images don't scale automatically with the font)
+ \lilyScaleImage%
+ % Print the image in a raisebox
+ \raisebox{\lilyEffectiveRaise ex}{%
+ \includegraphics[scale=\lilyImageEffectiveScale]{#2.pdf}%
+ }%
+}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Generic command(s) to select a LilyPond Glyph %
+% These shouldn't be used by end users but %
+% for designing predefined commands. %
+% They select a glyph by a specific method and %
+% return the #2 to be passed to \lilyPrint %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% Determine the glyph by its OpenType glyphName
+
+\usepackage{ifluatex,ifxetex}
+
+\ifluatex
+\usepackage{luaotfload,luacode}
+\begin{luacode}
+documentdata = documentdata or { }
+
+local stringformat = string.format
+local texsprint = tex.sprint
+local slot_of_name = luaotfload.aux.slot_of_name
+
+documentdata.fontchar = function (chr)
+local chr = slot_of_name(font.current(), chr, false)
+if chr and type(chr) == "number" then
+texsprint
+(stringformat ([[\char"%X"]], chr))
+end
+end
+\end{luacode}
+
+\def\lilyGetGlyph#1{\directlua{documentdata.fontchar "#1"}}
+\fi
+
+\ifxetex
+\newcommand*{\lilyGetGlyph}[1]{\XeTeXglyph\XeTeXglyphindex"#1" }
+\fi
+
+% Determine the glyph by its OpenType character number
+% (these may change with new versions of the fonts!)
+\newcommand*{\lilyGetGlyphByNumber}[1]{\char"#1 }
+
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Generic commands to print glyphs that aren't %
+% covered by predefined commands yet. %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Print a glyph by its glyph name. %
+% Glyph names have to be looked up %
+% in the docs. %
+
+\newcommand*{\lilyGlyph}[2][]{%
+ % set defaults
+ \setkeys{lilyDesignOptions}{scale=1,raise=0}%
+ \lilyPrint[#1]{\lilyGetGlyph{#2}}%
+}
+
+% Determine the glyph by its Unicode number
+% (works for those glyphs that reside in 'standard' places)
+\newcommand*{\lilyGlyphByNumber}[2][]{%
+ % set defaults
+ \setkeys{lilyDesignOptions}{scale=1,raise=0}%
+ \lilyPrint[#1]{\lilyGetGlyphByNumber{#2}}%
+}
+
+% Don't 'determine' glyph positions but just use plain text.
+% This works for dynamics letters, numbers and + - . ,
+\newcommand*{\lilyText}[2][]{%
+ % set defaults
+ \setkeys{lilyDesignOptions}{scale=1,raise=0}%
+ \lilyPrint[#1]{#2}%
+}
+
+% Load 'glyph' from an image (preferrably PDF).
+% Used for items that are created using LilyPond itself.
+\newcommand*{\lilyImage}[2][]{%
+ % set defaults
+ \setkeys{lilyDesignOptions}{scale=1, raise=0}%
+ % interpret optional argument
+ \interpretLilyOptions{#1}%
+ \raisebox{\lilyEffectiveRaise ex}{%
+ \includegraphics[scale=\lilyEffectiveScale]{#2}%
+ }%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/core/keyval.inp b/macros/unicodetex/latex/lilyglyphs/tex/core/keyval.inp
new file mode 100644
index 0000000000..840bbacc36
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/core/keyval.inp
@@ -0,0 +1,100 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines the key-value functionality %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define keys for keyval options
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\makeatletter
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Family lilyDesignOptions
+%
+% This family is used for defining default values for the options at design time
+% i.e. when developping predefined commands.
+\define@key{lilyDesignOptions}{scale}{\def\lilyDesignOptions@scale{#1}}
+\define@key{lilyDesignOptions}{raise}{\def\lilyDesignOptions@raise{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Family lilyGlobalOptions
+%
+% This family is used for globally adjusting the option values.
+% The user can globally override options at any time
+% using the command \lilyOptions.
+% This is originally intended for cases where the package defaults
+% are not very suitable for the font of the continuous text
+\define@key{lilyGlobalOptions}{scale}{\def\lilyGlobalOptions@scale{#1}}
+\define@key{lilyGlobalOptions}{raise}{\def\lilyGlobalOptions@raise{#1}}
+% Initialize these \defs to 'no adjustment' because the user doesn't have to do that
+\def\lilyGlobalOptions@scale{1}
+\def\lilyGlobalOptions@raise{0}
+
+% Change any of the global options at any place in the document
+% (only options that are present are affected)
+\newcommand*{\lilyGlobalOptions}[1]{\setkeys{lilyGlobalOptions}{#1}}
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% Family lilyCmdOptions
+%
+% This family is used for options the end user can use to fine tune the output
+% (i.e. within the actual document)
+\define@key{lilyCmdOptions}{scale}{\def\lilyCmdOptions@scale{#1}}
+\define@key{lilyCmdOptions}{raise}{\def\lilyCmdOptions@raise{#1}}
+
+% Calculate the effective option values from
+% - global defaults,
+% - design time defaults and
+% - actual user options
+%
+% Scaling factors are multiplied.
+% Raise levels are summed.
+\newcommand*{\interpretLilyOptions}[1]{%
+ % initialize user arguments (no argument = no change)
+ % in order to avoid uninitialized arguments
+ \setkeys{lilyCmdOptions}{scale=1,raise=0}%
+ % Options that are present override the defaults
+ \setkeys{lilyCmdOptions}{#1}%
+ % calculate the scaling factor
+ \pgfmathsetmacro{\lilyEffectiveScale}{%
+ \lilyGlobalOptions@scale * \lilyCmdOptions@scale * \lilyDesignOptions@scale}%
+ % calculate the raise level from the design value and the optional user value
+ \pgfmathsetmacro{\lilyEffectiveRaise}{%
+ \lilyGlobalOptions@raise + \lilyCmdOptions@raise + \lilyDesignOptions@raise}%
+}
+
+\makeatother
+
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/core/opticals.inp b/macros/unicodetex/latex/lilyglyphs/tex/core/opticals.inp
new file mode 100644
index 0000000000..83c39ede6e
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/core/opticals.inp
@@ -0,0 +1,55 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% This file is part of the lilyglyphs package %
+% and defines one subset of glyphs %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Define the used optical size font
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
+% The Emmentaler font comes in several optical sizes
+% While these are originally intendes for use at different point sizes
+% they are rather weights in the context of continuous text.
+%
+% Default to 16 (medium)
+\def\lilyOpticalSuffix{16}
+% The following command select from the available fonts
+% and can be used anywhere in the document
+% #1 is the suffix number of the font file
+% and has to be on of the following:
+% 11,13,14,16,18,20,23,26
+% Higher the number result in thinner glyphs
+\newcommand{\lilyOpticalSize}[1]{\def\lilyOpticalSuffix{#1}}
+
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/lilyglyphs.sty b/macros/unicodetex/latex/lilyglyphs/tex/lilyglyphs.sty
new file mode 100644
index 0000000000..7788f40755
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/lilyglyphs.sty
@@ -0,0 +1,103 @@
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% %
+% This file is part of the 'lilyglyphs' LaTeX package. %
+% ========== %
+% %
+% https://github.com/openlilylib/lilyglyphs %
+% http://www.openlilylib.org/lilyglyphs %
+% %
+% Copyright 2012-2013 Urs Liska and others, ul@openlilylib.org %
+% %
+% 'lilyglyphs' is free software: you can redistribute it and/or modify %
+% it under the terms of the LaTeX Project Public License, either %
+% version 1.3 of this license or (at your option) any later version. %
+% You may find the latest version of this license at %
+% http://www.latex-project.org/lppl.txt %
+% more information on %
+% http://latex-project.org/lppl/ %
+% and version 1.3 or later is part of all distributions of LaTeX %
+% version 2005/12/01 or later. %
+% %
+% This work has the LPPL maintenance status 'maintained'. %
+% The Current Maintainer of this work is Urs Liska (see above). %
+% %
+% This work consists of the files listed in the file 'manifest.txt' %
+% which can be found in the 'license' directory. %
+% %
+% 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. %
+% %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+\NeedsTeXFormat{LaTeX2e}
+\ProvidesPackage{lilyglyphs}
+
+% Introduce key=value options
+\RequirePackage{keyval}
+
+% Necessary for calculations.
+% TODO: Is that really necessary or can it be achieved much cheaper?
+\RequirePackage{pgf}
+
+% Create a vertically stacked box (time signatures)
+\RequirePackage[export]{adjustbox}
+
+%%%%%%%%%%%%%%%%%%%%%%
+% Core functionality %
+
+% select from the optical sizes fonts
+\input{core/opticals.inp}
+
+% include the functionality for the key=value options
+\input{core/keyval.inp}
+
+% include the basic functionality to select and print glyphs
+\input{core/genericAccess.inp}
+
+% include logic and functionality to create dotted symbols
+\input{core/dotted.inp}
+
+% Core functionality %
+%%%%%%%%%%%%%%%%%%%%%%
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% Definitions of the glyphs in groups %
+% corresponding to the glyph list in the LilyPond docs %
+
+\input{commands/clefs.inp}
+
+\input{commands/numbers.inp}
+
+\input{commands/timesignatures.inp}
+
+\input{commands/dynamics.inp}
+
+\input{commands/accidentals.inp}
+
+%\input{commands/noteheads.inp}
+
+\input{commands/rests.inp}
+
+\input{commands/scripts.inp}
+
+\input{commands/accordion.inp}
+
+% Definitions of complex glyphs created with LilyPond
+% and included as image files
+
+\input{commands/singlenotes.inp}
+
+\input{commands/beamednotes.inp}
+
+\input{commands/fancyexamples.inp}
+
+% End of command definitions %
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+% lilyglyphs logo to be used in texts about lilyglyphs
+% created by genGlyphCommands.py on 2012-11-10
+\newcommand*{\lilyglyphs}[1][]{%
+ \setkeys{lilyDesignOptions}{scale=0.97,raise=-0.78}%
+ \lilyPrintImage[#1]{lilyglyphs_logo}%
+}
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crescHairpin.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crescHairpin.pdf
new file mode 100644
index 0000000000..cba460c570
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crescHairpin.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchet.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchet.pdf
new file mode 100644
index 0000000000..9ce5a793ab
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchet.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDotted.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDotted.pdf
new file mode 100644
index 0000000000..1c55a09877
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDotted.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDouble.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDouble.pdf
new file mode 100644
index 0000000000..0f39bd0606
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDouble.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDoubleDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDoubleDown.pdf
new file mode 100644
index 0000000000..ccde99d755
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDoubleDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDown.pdf
new file mode 100644
index 0000000000..963557dc53
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDottedDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDown.pdf
new file mode 100644
index 0000000000..75db5762fe
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-crotchetDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-decrescHairpin.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-decrescHairpin.pdf
new file mode 100644
index 0000000000..3d676e5bee
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-decrescHairpin.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaver.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaver.pdf
new file mode 100644
index 0000000000..edfe5bc1b4
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaver.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDotted.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDotted.pdf
new file mode 100644
index 0000000000..2ff802c1cf
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDotted.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDouble.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDouble.pdf
new file mode 100644
index 0000000000..899060302e
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDouble.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDoubleDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDoubleDown.pdf
new file mode 100644
index 0000000000..09fb1be424
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDoubleDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDown.pdf
new file mode 100644
index 0000000000..85e89b8ca0
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDottedDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDown.pdf
new file mode 100644
index 0000000000..ce361e340d
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-demisemiquaverDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-fancyExample.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-fancyExample.pdf
new file mode 100644
index 0000000000..48c9e4c06c
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-fancyExample.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNote.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNote.pdf
new file mode 100644
index 0000000000..639277692a
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNote.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDotted.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDotted.pdf
new file mode 100644
index 0000000000..67f68c534d
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDotted.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDouble.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDouble.pdf
new file mode 100644
index 0000000000..6d8dd52076
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDouble.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDoubleDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDoubleDown.pdf
new file mode 100644
index 0000000000..f93e8c487f
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDoubleDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDown.pdf
new file mode 100644
index 0000000000..1ca33ca079
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDottedDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDown.pdf
new file mode 100644
index 0000000000..699ba96fc5
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-halfNoteDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaver.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaver.pdf
new file mode 100644
index 0000000000..c9b6e0a8d1
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaver.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDotted.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDotted.pdf
new file mode 100644
index 0000000000..95d24f18fb
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDotted.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDouble.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDouble.pdf
new file mode 100644
index 0000000000..e448e06f15
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDouble.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDoubleDdown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDoubleDdown.pdf
new file mode 100644
index 0000000000..4e2f48e68f
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDoubleDdown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDoubleDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDoubleDown.pdf
new file mode 100644
index 0000000000..e59325eed5
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDoubleDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDown.pdf
new file mode 100644
index 0000000000..b68c341da6
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDottedDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDown.pdf
new file mode 100644
index 0000000000..52ce2437b1
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-quaverDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaver.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaver.pdf
new file mode 100644
index 0000000000..a72405f5b7
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaver.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDotted.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDotted.pdf
new file mode 100644
index 0000000000..d810ea9339
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDotted.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDouble.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDouble.pdf
new file mode 100644
index 0000000000..b2434a6c76
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDouble.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDoubleDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDoubleDown.pdf
new file mode 100644
index 0000000000..e8b391aae0
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDoubleDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDown.pdf
new file mode 100644
index 0000000000..c980d5b86d
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDottedDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDown.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDown.pdf
new file mode 100644
index 0000000000..3ea309c499
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-semiquaverDown.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuavers.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuavers.pdf
new file mode 100644
index 0000000000..c8503af46a
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuavers.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversI.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversI.pdf
new file mode 100644
index 0000000000..0743b08b5c
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversI.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversII.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversII.pdf
new file mode 100644
index 0000000000..3985befd88
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversII.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversIII.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversIII.pdf
new file mode 100644
index 0000000000..9b8cd50615
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-threeBeamedQuaversIII.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-twoBeamedQuavers.pdf b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-twoBeamedQuavers.pdf
new file mode 100644
index 0000000000..45b88b27c5
--- /dev/null
+++ b/macros/unicodetex/latex/lilyglyphs/tex/pdfs/lily-twoBeamedQuavers.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/polyglossia/README.md b/macros/unicodetex/latex/polyglossia/README.md
new file mode 100644
index 0000000000..79b922ef93
--- /dev/null
+++ b/macros/unicodetex/latex/polyglossia/README.md
@@ -0,0 +1,42 @@
+# THE POLYGLOSSIA PACKAGE v1.49
+## Multilingual typesetting with XeLaTeX and LuaLaTeX
+
+This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX
+(with a few languages incompletely supported for the latter). This version
+includes support for over 70 different languages, some of which in different
+regional or national varieties, or using a different writing system.
+
+Polyglossia makes it possible to automate the following tasks:
+
+* Loading the appropriate hyphenation patterns.
+* Setting the script and language tags of the current font (if possible and
+ available), using the package fontspec.
+* Switching to a font assigned by the user to a particular script or language.
+* Adjusting some typographical conventions in function of the current language
+ (such as afterindent, frenchindent, spaces before or after punctuation marks,
+ etc.).
+* Redefining the document strings (like “chapter”, “figure”, “bibliography”).
+* Adapting the formatting of dates (for non-gregorian calendars via external
+ packages bundled with polyglossia: currently the Hebrew, Islamic and Farsi
+ calendars are supported).
+* For languages that have their own numeration system, modifying the formatting
+ of numbers appropriately.
+* Ensuring the proper directionality if the document contains languages
+ written from right to left (via the packages bidi and luabidi, available
+ separately).
+
+# LICENCE
+
+Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer,
+Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller
+
+Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence
+(https://opensource.org/licenses/MIT).
+
+# BUGS
+
+If you run into a bug, or suspect you do, or you have a request or comment, please
+use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues
+
+This is more efficient than contacting the maintainer by email as it allows me
+to track the issues and follow progress.
diff --git a/macros/unicodetex/latex/polyglossia/polyglossia.dtx b/macros/unicodetex/latex/polyglossia/polyglossia.dtx
new file mode 100644
index 0000000000..246c37edb0
--- /dev/null
+++ b/macros/unicodetex/latex/polyglossia/polyglossia.dtx
@@ -0,0 +1,20295 @@
+%\iffalse
+% polyglossia.dtx generated using mkpolyglossiadtx.pl
+% (derived from makedtx.pl version 1.49 (c) Nicola Talbot)
+%
+% To extract the files, use xetex polyglossia.dtx or luatex polyglossia.dtx
+%
+%<*internal>
+\iffalse
+%</internal>
+%<*README>
+# THE POLYGLOSSIA PACKAGE v1.49
+## Multilingual typesetting with XeLaTeX and LuaLaTeX
+
+This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX
+(with a few languages incompletely supported for the latter). This version
+includes support for over 70 different languages, some of which in different
+regional or national varieties, or using a different writing system.
+
+Polyglossia makes it possible to automate the following tasks:
+
+* Loading the appropriate hyphenation patterns.
+* Setting the script and language tags of the current font (if possible and
+ available), using the package fontspec.
+* Switching to a font assigned by the user to a particular script or language.
+* Adjusting some typographical conventions in function of the current language
+ (such as afterindent, frenchindent, spaces before or after punctuation marks,
+ etc.).
+* Redefining the document strings (like “chapter”, “figure”, “bibliography”).
+* Adapting the formatting of dates (for non-gregorian calendars via external
+ packages bundled with polyglossia: currently the Hebrew, Islamic and Farsi
+ calendars are supported).
+* For languages that have their own numeration system, modifying the formatting
+ of numbers appropriately.
+* Ensuring the proper directionality if the document contains languages
+ written from right to left (via the packages bidi and luabidi, available
+ separately).
+
+# LICENCE
+
+Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer,
+Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller
+
+Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence
+(https://opensource.org/licenses/MIT).
+
+# BUGS
+
+If you run into a bug, or suspect you do, or you have a request or comment, please
+use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues
+
+This is more efficient than contacting the maintainer by email as it allows me
+to track the issues and follow progress.
+%</README>
+%<*internal>
+\fi
+%</internal>
+%
+%<*internal>
+\begingroup
+%</internal>
+%<*batchfile>
+\input docstrip.tex
+\keepsilent
+\let\MetaPrefix\relax
+\preamble
+ ____________________________
+
+ The polyglossia package
+ (C) 2008–2010 François Charette
+ (C) 2011–2020 Arthur Reutenauer
+ (C) 2013 Elie Roux
+ (C) 2019 Bastien Roucariès
+ (C) 2019–2020 Jürgen Spitzmüller
+ License information appended
+
+
+\endpreamble
+\postamble
+
+ Copyright (C) 2020 by Arthur Reutenauer <arthur 'dot' reutenauer 'at' normalesup 'dot' org>
+
+ This work may be distributed and/or modified under the
+ conditions of the LaTeX Project Public License, either version 1.3
+ of this license of (at your option) any later version.
+ The latest version of this license is in
+ http://www.latex-project.org/lppl.txt
+ and version 1.3 or later is part of all distributions of LaTeX
+ version 2005/12/01 or later.
+
+ This work has the LPPL maintenance status `maintained'.
+
+ The Current Maintainer of this work is Arthur Reutenauer.
+
+
+\endpostamble
+\let\MetaPrefix\DoubleperCent
+\askforoverwritefalse
+\generate{\file{gloss-acadien.ldf}{\from{polyglossia.dtx}{gloss-acadien.ldf}}}
+\generate{\file{gloss-aeb.ldf}{\from{polyglossia.dtx}{gloss-aeb.ldf}}}
+\generate{\file{gloss-af.ldf}{\from{polyglossia.dtx}{gloss-af.ldf}}}
+\generate{\file{gloss-afb.ldf}{\from{polyglossia.dtx}{gloss-afb.ldf}}}
+\generate{\file{gloss-afrikaans.ldf}{\from{polyglossia.dtx}{gloss-afrikaans.ldf}}}
+\generate{\file{gloss-albanian.ldf}{\from{polyglossia.dtx}{gloss-albanian.ldf}}}
+\generate{\file{gloss-am.ldf}{\from{polyglossia.dtx}{gloss-am.ldf}}}
+\generate{\file{gloss-american.ldf}{\from{polyglossia.dtx}{gloss-american.ldf}}}
+\generate{\file{gloss-amharic.ldf}{\from{polyglossia.dtx}{gloss-amharic.ldf}}}
+\generate{\file{gloss-apd.ldf}{\from{polyglossia.dtx}{gloss-apd.ldf}}}
+\generate{\file{gloss-ar-IQ.ldf}{\from{polyglossia.dtx}{gloss-ar-IQ.ldf}}}
+\generate{\file{gloss-ar-JO.ldf}{\from{polyglossia.dtx}{gloss-ar-JO.ldf}}}
+\generate{\file{gloss-ar-LB.ldf}{\from{polyglossia.dtx}{gloss-ar-LB.ldf}}}
+\generate{\file{gloss-ar-MR.ldf}{\from{polyglossia.dtx}{gloss-ar-MR.ldf}}}
+\generate{\file{gloss-ar-PS.ldf}{\from{polyglossia.dtx}{gloss-ar-PS.ldf}}}
+\generate{\file{gloss-ar-SY.ldf}{\from{polyglossia.dtx}{gloss-ar-SY.ldf}}}
+\generate{\file{gloss-ar-YE.ldf}{\from{polyglossia.dtx}{gloss-ar-YE.ldf}}}
+\generate{\file{gloss-ar.ldf}{\from{polyglossia.dtx}{gloss-ar.ldf}}}
+\generate{\file{gloss-arabic.ldf}{\from{polyglossia.dtx}{gloss-arabic.ldf}}}
+\generate{\file{gloss-armenian.ldf}{\from{polyglossia.dtx}{gloss-armenian.ldf}}}
+\generate{\file{gloss-arq.ldf}{\from{polyglossia.dtx}{gloss-arq.ldf}}}
+\generate{\file{gloss-ary.ldf}{\from{polyglossia.dtx}{gloss-ary.ldf}}}
+\generate{\file{gloss-arz.ldf}{\from{polyglossia.dtx}{gloss-arz.ldf}}}
+\generate{\file{gloss-ast.ldf}{\from{polyglossia.dtx}{gloss-ast.ldf}}}
+\generate{\file{gloss-asturian.ldf}{\from{polyglossia.dtx}{gloss-asturian.ldf}}}
+\generate{\file{gloss-australian.ldf}{\from{polyglossia.dtx}{gloss-australian.ldf}}}
+\generate{\file{gloss-austrian.ldf}{\from{polyglossia.dtx}{gloss-austrian.ldf}}}
+\generate{\file{gloss-ayl.ldf}{\from{polyglossia.dtx}{gloss-ayl.ldf}}}
+\generate{\file{gloss-bahasa.ldf}{\from{polyglossia.dtx}{gloss-bahasa.ldf}}}
+\generate{\file{gloss-bahasai.ldf}{\from{polyglossia.dtx}{gloss-bahasai.ldf}}}
+\generate{\file{gloss-bahasam.ldf}{\from{polyglossia.dtx}{gloss-bahasam.ldf}}}
+\generate{\file{gloss-basque.ldf}{\from{polyglossia.dtx}{gloss-basque.ldf}}}
+\generate{\file{gloss-be-tarask.ldf}{\from{polyglossia.dtx}{gloss-be-tarask.ldf}}}
+\generate{\file{gloss-be.ldf}{\from{polyglossia.dtx}{gloss-be.ldf}}}
+\generate{\file{gloss-belarusian.ldf}{\from{polyglossia.dtx}{gloss-belarusian.ldf}}}
+\generate{\file{gloss-bengali.ldf}{\from{polyglossia.dtx}{gloss-bengali.ldf}}}
+\generate{\file{gloss-bg.ldf}{\from{polyglossia.dtx}{gloss-bg.ldf}}}
+\generate{\file{gloss-bn.ldf}{\from{polyglossia.dtx}{gloss-bn.ldf}}}
+\generate{\file{gloss-bo.ldf}{\from{polyglossia.dtx}{gloss-bo.ldf}}}
+\generate{\file{gloss-bosnian.ldf}{\from{polyglossia.dtx}{gloss-bosnian.ldf}}}
+\generate{\file{gloss-br.ldf}{\from{polyglossia.dtx}{gloss-br.ldf}}}
+\generate{\file{gloss-brazil.ldf}{\from{polyglossia.dtx}{gloss-brazil.ldf}}}
+\generate{\file{gloss-breton.ldf}{\from{polyglossia.dtx}{gloss-breton.ldf}}}
+\generate{\file{gloss-british.ldf}{\from{polyglossia.dtx}{gloss-british.ldf}}}
+\generate{\file{gloss-bs.ldf}{\from{polyglossia.dtx}{gloss-bs.ldf}}}
+\generate{\file{gloss-bulgarian.ldf}{\from{polyglossia.dtx}{gloss-bulgarian.ldf}}}
+\generate{\file{gloss-ca.ldf}{\from{polyglossia.dtx}{gloss-ca.ldf}}}
+\generate{\file{gloss-canadian.ldf}{\from{polyglossia.dtx}{gloss-canadian.ldf}}}
+\generate{\file{gloss-canadien.ldf}{\from{polyglossia.dtx}{gloss-canadien.ldf}}}
+\generate{\file{gloss-catalan.ldf}{\from{polyglossia.dtx}{gloss-catalan.ldf}}}
+\generate{\file{gloss-ckb-Arab.ldf}{\from{polyglossia.dtx}{gloss-ckb-Arab.ldf}}}
+\generate{\file{gloss-ckb-Latn.ldf}{\from{polyglossia.dtx}{gloss-ckb-Latn.ldf}}}
+\generate{\file{gloss-ckb.ldf}{\from{polyglossia.dtx}{gloss-ckb.ldf}}}
+\generate{\file{gloss-cop.ldf}{\from{polyglossia.dtx}{gloss-cop.ldf}}}
+\generate{\file{gloss-coptic.ldf}{\from{polyglossia.dtx}{gloss-coptic.ldf}}}
+\generate{\file{gloss-croatian.ldf}{\from{polyglossia.dtx}{gloss-croatian.ldf}}}
+\generate{\file{gloss-cy.ldf}{\from{polyglossia.dtx}{gloss-cy.ldf}}}
+\generate{\file{gloss-cz.ldf}{\from{polyglossia.dtx}{gloss-cz.ldf}}}
+\generate{\file{gloss-czech.ldf}{\from{polyglossia.dtx}{gloss-czech.ldf}}}
+\generate{\file{gloss-da.ldf}{\from{polyglossia.dtx}{gloss-da.ldf}}}
+\generate{\file{gloss-danish.ldf}{\from{polyglossia.dtx}{gloss-danish.ldf}}}
+\generate{\file{gloss-de-AT-1901.ldf}{\from{polyglossia.dtx}{gloss-de-AT-1901.ldf}}}
+\generate{\file{gloss-de-AT-1996.ldf}{\from{polyglossia.dtx}{gloss-de-AT-1996.ldf}}}
+\generate{\file{gloss-de-AT.ldf}{\from{polyglossia.dtx}{gloss-de-AT.ldf}}}
+\generate{\file{gloss-de-CH-1901.ldf}{\from{polyglossia.dtx}{gloss-de-CH-1901.ldf}}}
+\generate{\file{gloss-de-CH-1996.ldf}{\from{polyglossia.dtx}{gloss-de-CH-1996.ldf}}}
+\generate{\file{gloss-de-CH.ldf}{\from{polyglossia.dtx}{gloss-de-CH.ldf}}}
+\generate{\file{gloss-de-DE-1901.ldf}{\from{polyglossia.dtx}{gloss-de-DE-1901.ldf}}}
+\generate{\file{gloss-de-DE-1996.ldf}{\from{polyglossia.dtx}{gloss-de-DE-1996.ldf}}}
+\generate{\file{gloss-de-DE.ldf}{\from{polyglossia.dtx}{gloss-de-DE.ldf}}}
+\generate{\file{gloss-de-Latf-AT-1901.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-AT-1901.ldf}}}
+\generate{\file{gloss-de-Latf-AT-1996.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-AT-1996.ldf}}}
+\generate{\file{gloss-de-Latf-AT.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-AT.ldf}}}
+\generate{\file{gloss-de-Latf-CH-1901.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-CH-1901.ldf}}}
+\generate{\file{gloss-de-Latf-CH-1996.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-CH-1996.ldf}}}
+\generate{\file{gloss-de-Latf-CH.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-CH.ldf}}}
+\generate{\file{gloss-de-Latf-DE-1901.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-DE-1901.ldf}}}
+\generate{\file{gloss-de-Latf-DE-1996.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-DE-1996.ldf}}}
+\generate{\file{gloss-de-Latf-DE.ldf}{\from{polyglossia.dtx}{gloss-de-Latf-DE.ldf}}}
+\generate{\file{gloss-de-Latf.ldf}{\from{polyglossia.dtx}{gloss-de-Latf.ldf}}}
+\generate{\file{gloss-de.ldf}{\from{polyglossia.dtx}{gloss-de.ldf}}}
+\generate{\file{gloss-divehi.ldf}{\from{polyglossia.dtx}{gloss-divehi.ldf}}}
+\generate{\file{gloss-dsb.ldf}{\from{polyglossia.dtx}{gloss-dsb.ldf}}}
+\generate{\file{gloss-dutch.ldf}{\from{polyglossia.dtx}{gloss-dutch.ldf}}}
+\generate{\file{gloss-dv.ldf}{\from{polyglossia.dtx}{gloss-dv.ldf}}}
+\generate{\file{gloss-el-monoton.ldf}{\from{polyglossia.dtx}{gloss-el-monoton.ldf}}}
+\generate{\file{gloss-el-polyton.ldf}{\from{polyglossia.dtx}{gloss-el-polyton.ldf}}}
+\generate{\file{gloss-el.ldf}{\from{polyglossia.dtx}{gloss-el.ldf}}}
+\generate{\file{gloss-en-AU.ldf}{\from{polyglossia.dtx}{gloss-en-AU.ldf}}}
+\generate{\file{gloss-en-CA.ldf}{\from{polyglossia.dtx}{gloss-en-CA.ldf}}}
+\generate{\file{gloss-en-GB.ldf}{\from{polyglossia.dtx}{gloss-en-GB.ldf}}}
+\generate{\file{gloss-en-NZ.ldf}{\from{polyglossia.dtx}{gloss-en-NZ.ldf}}}
+\generate{\file{gloss-en-US.ldf}{\from{polyglossia.dtx}{gloss-en-US.ldf}}}
+\generate{\file{gloss-en.ldf}{\from{polyglossia.dtx}{gloss-en.ldf}}}
+\generate{\file{gloss-english.ldf}{\from{polyglossia.dtx}{gloss-english.ldf}}}
+\generate{\file{gloss-eo.ldf}{\from{polyglossia.dtx}{gloss-eo.ldf}}}
+\generate{\file{gloss-es-ES.ldf}{\from{polyglossia.dtx}{gloss-es-ES.ldf}}}
+\generate{\file{gloss-es-MX.ldf}{\from{polyglossia.dtx}{gloss-es-MX.ldf}}}
+\generate{\file{gloss-es.ldf}{\from{polyglossia.dtx}{gloss-es.ldf}}}
+\generate{\file{gloss-esperanto.ldf}{\from{polyglossia.dtx}{gloss-esperanto.ldf}}}
+\generate{\file{gloss-estonian.ldf}{\from{polyglossia.dtx}{gloss-estonian.ldf}}}
+\generate{\file{gloss-et.ldf}{\from{polyglossia.dtx}{gloss-et.ldf}}}
+\generate{\file{gloss-eu.ldf}{\from{polyglossia.dtx}{gloss-eu.ldf}}}
+\generate{\file{gloss-fa.ldf}{\from{polyglossia.dtx}{gloss-fa.ldf}}}
+\generate{\file{gloss-farsi.ldf}{\from{polyglossia.dtx}{gloss-farsi.ldf}}}
+\generate{\file{gloss-fi.ldf}{\from{polyglossia.dtx}{gloss-fi.ldf}}}
+\generate{\file{gloss-finnish.ldf}{\from{polyglossia.dtx}{gloss-finnish.ldf}}}
+\generate{\file{gloss-fr-CA.ldf}{\from{polyglossia.dtx}{gloss-fr-CA.ldf}}}
+\generate{\file{gloss-fr-CH.ldf}{\from{polyglossia.dtx}{gloss-fr-CH.ldf}}}
+\generate{\file{gloss-fr-FR.ldf}{\from{polyglossia.dtx}{gloss-fr-FR.ldf}}}
+\generate{\file{gloss-fr.ldf}{\from{polyglossia.dtx}{gloss-fr.ldf}}}
+\generate{\file{gloss-french.ldf}{\from{polyglossia.dtx}{gloss-french.ldf}}}
+\generate{\file{gloss-friulan.ldf}{\from{polyglossia.dtx}{gloss-friulan.ldf}}}
+\generate{\file{gloss-friulian.ldf}{\from{polyglossia.dtx}{gloss-friulian.ldf}}}
+\generate{\file{gloss-fur.ldf}{\from{polyglossia.dtx}{gloss-fur.ldf}}}
+\generate{\file{gloss-ga.ldf}{\from{polyglossia.dtx}{gloss-ga.ldf}}}
+\generate{\file{gloss-gaelic.ldf}{\from{polyglossia.dtx}{gloss-gaelic.ldf}}}
+\generate{\file{gloss-galician.ldf}{\from{polyglossia.dtx}{gloss-galician.ldf}}}
+\generate{\file{gloss-gd.ldf}{\from{polyglossia.dtx}{gloss-gd.ldf}}}
+\generate{\file{gloss-georgian.ldf}{\from{polyglossia.dtx}{gloss-georgian.ldf}}}
+\generate{\file{gloss-german.ldf}{\from{polyglossia.dtx}{gloss-german.ldf}}}
+\generate{\file{gloss-germanb.ldf}{\from{polyglossia.dtx}{gloss-germanb.ldf}}}
+\generate{\file{gloss-gl.ldf}{\from{polyglossia.dtx}{gloss-gl.ldf}}}
+\generate{\file{gloss-grc.ldf}{\from{polyglossia.dtx}{gloss-grc.ldf}}}
+\generate{\file{gloss-greek.ldf}{\from{polyglossia.dtx}{gloss-greek.ldf}}}
+\generate{\file{gloss-he.ldf}{\from{polyglossia.dtx}{gloss-he.ldf}}}
+\generate{\file{gloss-hebrew.ldf}{\from{polyglossia.dtx}{gloss-hebrew.ldf}}}
+\generate{\file{gloss-hi.ldf}{\from{polyglossia.dtx}{gloss-hi.ldf}}}
+\generate{\file{gloss-hindi.ldf}{\from{polyglossia.dtx}{gloss-hindi.ldf}}}
+\generate{\file{gloss-hr.ldf}{\from{polyglossia.dtx}{gloss-hr.ldf}}}
+\generate{\file{gloss-hsb.ldf}{\from{polyglossia.dtx}{gloss-hsb.ldf}}}
+\generate{\file{gloss-hu.ldf}{\from{polyglossia.dtx}{gloss-hu.ldf}}}
+\generate{\file{gloss-hungarian.ldf}{\from{polyglossia.dtx}{gloss-hungarian.ldf}}}
+\generate{\file{gloss-hy.ldf}{\from{polyglossia.dtx}{gloss-hy.ldf}}}
+\generate{\file{gloss-ia.ldf}{\from{polyglossia.dtx}{gloss-ia.ldf}}}
+\generate{\file{gloss-icelandic.ldf}{\from{polyglossia.dtx}{gloss-icelandic.ldf}}}
+\generate{\file{gloss-id.ldf}{\from{polyglossia.dtx}{gloss-id.ldf}}}
+\generate{\file{gloss-interlingua.ldf}{\from{polyglossia.dtx}{gloss-interlingua.ldf}}}
+\generate{\file{gloss-irish.ldf}{\from{polyglossia.dtx}{gloss-irish.ldf}}}
+\generate{\file{gloss-is.ldf}{\from{polyglossia.dtx}{gloss-is.ldf}}}
+\generate{\file{gloss-it.ldf}{\from{polyglossia.dtx}{gloss-it.ldf}}}
+\generate{\file{gloss-italian.ldf}{\from{polyglossia.dtx}{gloss-italian.ldf}}}
+\generate{\file{gloss-ja.ldf}{\from{polyglossia.dtx}{gloss-ja.ldf}}}
+\generate{\file{gloss-japanese.ldf}{\from{polyglossia.dtx}{gloss-japanese.ldf}}}
+\generate{\file{gloss-ka.ldf}{\from{polyglossia.dtx}{gloss-ka.ldf}}}
+\generate{\file{gloss-kannada.ldf}{\from{polyglossia.dtx}{gloss-kannada.ldf}}}
+\generate{\file{gloss-khmer.ldf}{\from{polyglossia.dtx}{gloss-khmer.ldf}}}
+\generate{\file{gloss-km.ldf}{\from{polyglossia.dtx}{gloss-km.ldf}}}
+\generate{\file{gloss-kmr-Arab.ldf}{\from{polyglossia.dtx}{gloss-kmr-Arab.ldf}}}
+\generate{\file{gloss-kmr-Latn.ldf}{\from{polyglossia.dtx}{gloss-kmr-Latn.ldf}}}
+\generate{\file{gloss-kmr.ldf}{\from{polyglossia.dtx}{gloss-kmr.ldf}}}
+\generate{\file{gloss-kn.ldf}{\from{polyglossia.dtx}{gloss-kn.ldf}}}
+\generate{\file{gloss-ko.ldf}{\from{polyglossia.dtx}{gloss-ko.ldf}}}
+\generate{\file{gloss-korean.ldf}{\from{polyglossia.dtx}{gloss-korean.ldf}}}
+\generate{\file{gloss-ku-Arab.ldf}{\from{polyglossia.dtx}{gloss-ku-Arab.ldf}}}
+\generate{\file{gloss-ku-Latn.ldf}{\from{polyglossia.dtx}{gloss-ku-Latn.ldf}}}
+\generate{\file{gloss-ku.ldf}{\from{polyglossia.dtx}{gloss-ku.ldf}}}
+\generate{\file{gloss-kurdish.ldf}{\from{polyglossia.dtx}{gloss-kurdish.ldf}}}
+\generate{\file{gloss-kurmanji.ldf}{\from{polyglossia.dtx}{gloss-kurmanji.ldf}}}
+\generate{\file{gloss-la-x-classic.ldf}{\from{polyglossia.dtx}{gloss-la-x-classic.ldf}}}
+\generate{\file{gloss-la-x-ecclesia.ldf}{\from{polyglossia.dtx}{gloss-la-x-ecclesia.ldf}}}
+\generate{\file{gloss-la-x-medieval.ldf}{\from{polyglossia.dtx}{gloss-la-x-medieval.ldf}}}
+\generate{\file{gloss-la.ldf}{\from{polyglossia.dtx}{gloss-la.ldf}}}
+\generate{\file{gloss-lao.ldf}{\from{polyglossia.dtx}{gloss-lao.ldf}}}
+\generate{\file{gloss-latex.ldf}{\from{polyglossia.dtx}{gloss-latex.ldf}}}
+\generate{\file{gloss-latin.ldf}{\from{polyglossia.dtx}{gloss-latin.ldf}}}
+\generate{\file{gloss-latinclassic.ldf}{\from{polyglossia.dtx}{gloss-latinclassic.ldf}}}
+\generate{\file{gloss-latinecclesiastic.ldf}{\from{polyglossia.dtx}{gloss-latinecclesiastic.ldf}}}
+\generate{\file{gloss-latinmedieval.ldf}{\from{polyglossia.dtx}{gloss-latinmedieval.ldf}}}
+\generate{\file{gloss-latvian.ldf}{\from{polyglossia.dtx}{gloss-latvian.ldf}}}
+\generate{\file{gloss-lithuanian.ldf}{\from{polyglossia.dtx}{gloss-lithuanian.ldf}}}
+\generate{\file{gloss-lo.ldf}{\from{polyglossia.dtx}{gloss-lo.ldf}}}
+\generate{\file{gloss-lowersorbian.ldf}{\from{polyglossia.dtx}{gloss-lowersorbian.ldf}}}
+\generate{\file{gloss-lsorbian.ldf}{\from{polyglossia.dtx}{gloss-lsorbian.ldf}}}
+\generate{\file{gloss-lt.ldf}{\from{polyglossia.dtx}{gloss-lt.ldf}}}
+\generate{\file{gloss-lv.ldf}{\from{polyglossia.dtx}{gloss-lv.ldf}}}
+\generate{\file{gloss-macedonian.ldf}{\from{polyglossia.dtx}{gloss-macedonian.ldf}}}
+\generate{\file{gloss-magyar.ldf}{\from{polyglossia.dtx}{gloss-magyar.ldf}}}
+\generate{\file{gloss-malay.ldf}{\from{polyglossia.dtx}{gloss-malay.ldf}}}
+\generate{\file{gloss-malayalam.ldf}{\from{polyglossia.dtx}{gloss-malayalam.ldf}}}
+\generate{\file{gloss-marathi.ldf}{\from{polyglossia.dtx}{gloss-marathi.ldf}}}
+\generate{\file{gloss-mk.ldf}{\from{polyglossia.dtx}{gloss-mk.ldf}}}
+\generate{\file{gloss-ml.ldf}{\from{polyglossia.dtx}{gloss-ml.ldf}}}
+\generate{\file{gloss-mn.ldf}{\from{polyglossia.dtx}{gloss-mn.ldf}}}
+\generate{\file{gloss-mongolian.ldf}{\from{polyglossia.dtx}{gloss-mongolian.ldf}}}
+\generate{\file{gloss-mr.ldf}{\from{polyglossia.dtx}{gloss-mr.ldf}}}
+\generate{\file{gloss-naustrian.ldf}{\from{polyglossia.dtx}{gloss-naustrian.ldf}}}
+\generate{\file{gloss-nb.ldf}{\from{polyglossia.dtx}{gloss-nb.ldf}}}
+\generate{\file{gloss-newzealand.ldf}{\from{polyglossia.dtx}{gloss-newzealand.ldf}}}
+\generate{\file{gloss-ngerman.ldf}{\from{polyglossia.dtx}{gloss-ngerman.ldf}}}
+\generate{\file{gloss-nko.ldf}{\from{polyglossia.dtx}{gloss-nko.ldf}}}
+\generate{\file{gloss-norsk.ldf}{\from{polyglossia.dtx}{gloss-norsk.ldf}}}
+\generate{\file{gloss-norwegian.ldf}{\from{polyglossia.dtx}{gloss-norwegian.ldf}}}
+\generate{\file{gloss-nswissgerman.ldf}{\from{polyglossia.dtx}{gloss-nswissgerman.ldf}}}
+\generate{\file{gloss-nynorsk.ldf}{\from{polyglossia.dtx}{gloss-nynorsk.ldf}}}
+\generate{\file{gloss-occitan.ldf}{\from{polyglossia.dtx}{gloss-occitan.ldf}}}
+\generate{\file{gloss-persian.ldf}{\from{polyglossia.dtx}{gloss-persian.ldf}}}
+\generate{\file{gloss-piedmontese.ldf}{\from{polyglossia.dtx}{gloss-piedmontese.ldf}}}
+\generate{\file{gloss-polish.ldf}{\from{polyglossia.dtx}{gloss-polish.ldf}}}
+\generate{\file{gloss-polutonikogreek.ldf}{\from{polyglossia.dtx}{gloss-polutonikogreek.ldf}}}
+\generate{\file{gloss-portuges.ldf}{\from{polyglossia.dtx}{gloss-portuges.ldf}}}
+\generate{\file{gloss-portuguese.ldf}{\from{polyglossia.dtx}{gloss-portuguese.ldf}}}
+\generate{\file{gloss-romanian.ldf}{\from{polyglossia.dtx}{gloss-romanian.ldf}}}
+\generate{\file{gloss-romansh.ldf}{\from{polyglossia.dtx}{gloss-romansh.ldf}}}
+\generate{\file{gloss-russian.ldf}{\from{polyglossia.dtx}{gloss-russian.ldf}}}
+\generate{\file{gloss-sami.ldf}{\from{polyglossia.dtx}{gloss-sami.ldf}}}
+\generate{\file{gloss-samin.ldf}{\from{polyglossia.dtx}{gloss-samin.ldf}}}
+\generate{\file{gloss-sanskrit.ldf}{\from{polyglossia.dtx}{gloss-sanskrit.ldf}}}
+\generate{\file{gloss-scottish.ldf}{\from{polyglossia.dtx}{gloss-scottish.ldf}}}
+\generate{\file{gloss-serbian.ldf}{\from{polyglossia.dtx}{gloss-serbian.ldf}}}
+\generate{\file{gloss-serbianc.ldf}{\from{polyglossia.dtx}{gloss-serbianc.ldf}}}
+\generate{\file{gloss-slovak.ldf}{\from{polyglossia.dtx}{gloss-slovak.ldf}}}
+\generate{\file{gloss-slovene.ldf}{\from{polyglossia.dtx}{gloss-slovene.ldf}}}
+\generate{\file{gloss-slovenian.ldf}{\from{polyglossia.dtx}{gloss-slovenian.ldf}}}
+\generate{\file{gloss-sorbian.ldf}{\from{polyglossia.dtx}{gloss-sorbian.ldf}}}
+\generate{\file{gloss-spanish.ldf}{\from{polyglossia.dtx}{gloss-spanish.ldf}}}
+\generate{\file{gloss-spanishmx.ldf}{\from{polyglossia.dtx}{gloss-spanishmx.ldf}}}
+\generate{\file{gloss-swedish.ldf}{\from{polyglossia.dtx}{gloss-swedish.ldf}}}
+\generate{\file{gloss-swissgerman.ldf}{\from{polyglossia.dtx}{gloss-swissgerman.ldf}}}
+\generate{\file{gloss-syriac.ldf}{\from{polyglossia.dtx}{gloss-syriac.ldf}}}
+\generate{\file{gloss-tamil.ldf}{\from{polyglossia.dtx}{gloss-tamil.ldf}}}
+\generate{\file{gloss-telugu.ldf}{\from{polyglossia.dtx}{gloss-telugu.ldf}}}
+\generate{\file{gloss-thai.ldf}{\from{polyglossia.dtx}{gloss-thai.ldf}}}
+\generate{\file{gloss-tibetan.ldf}{\from{polyglossia.dtx}{gloss-tibetan.ldf}}}
+\generate{\file{gloss-turkish.ldf}{\from{polyglossia.dtx}{gloss-turkish.ldf}}}
+\generate{\file{gloss-turkmen.ldf}{\from{polyglossia.dtx}{gloss-turkmen.ldf}}}
+\generate{\file{gloss-ukrainian.ldf}{\from{polyglossia.dtx}{gloss-ukrainian.ldf}}}
+\generate{\file{gloss-uppersorbian.ldf}{\from{polyglossia.dtx}{gloss-uppersorbian.ldf}}}
+\generate{\file{gloss-urdu.ldf}{\from{polyglossia.dtx}{gloss-urdu.ldf}}}
+\generate{\file{gloss-usorbian.ldf}{\from{polyglossia.dtx}{gloss-usorbian.ldf}}}
+\generate{\file{gloss-vietnamese.ldf}{\from{polyglossia.dtx}{gloss-vietnamese.ldf}}}
+\generate{\file{gloss-welsh.ldf}{\from{polyglossia.dtx}{gloss-welsh.ldf}}}
+\generate{\file{arabicdigits.map}{\from{polyglossia.dtx}{arabicdigits.map}}}
+\generate{\file{bengalidigits.map}{\from{polyglossia.dtx}{bengalidigits.map}}}
+\generate{\file{devanagaridigits.map}{\from{polyglossia.dtx}{devanagaridigits.map}}}
+\generate{\file{farsidigits.map}{\from{polyglossia.dtx}{farsidigits.map}}}
+\generate{\file{thaidigits.map}{\from{polyglossia.dtx}{thaidigits.map}}}
+\def\MetaPrefix{-- }
+\generate{\file{polyglossia-french.lua}{\from{polyglossia.dtx}{polyglossia-french.lua}}}
+\generate{\file{polyglossia-korean.lua}{\from{polyglossia.dtx}{polyglossia-korean.lua}}}
+\generate{\file{polyglossia-latin.lua}{\from{polyglossia.dtx}{polyglossia-latin.lua}}}
+\generate{\file{polyglossia-punct.lua}{\from{polyglossia.dtx}{polyglossia-punct.lua}}}
+\generate{\file{polyglossia-sanskrit.lua}{\from{polyglossia.dtx}{polyglossia-sanskrit.lua}}}
+\generate{\file{polyglossia-tibt.lua}{\from{polyglossia.dtx}{polyglossia-tibt.lua}}}
+\generate{\file{polyglossia.lua}{\from{polyglossia.dtx}{polyglossia.lua}}}
+\let\MetaPrefix\DoubleperCent
+%</batchfile>
+%<batchfile>\endbatchfile
+%<*internal>
+\generate{\file{polyglossia.ins}{\from{polyglossia.dtx}{batchfile}}}
+\nopreamble\nopostamble
+\generate{\file{../README.md}{\from{polyglossia.dtx}{../README.md}}}
+\generate{\file{Changelog}{\from{polyglossia.dtx}{Changelog}}}
+\generate{\file{examples.tex}{\from{polyglossia.dtx}{examples.tex}}}
+\generate{\file{example-arabic.tex}{\from{polyglossia.dtx}{example-arabic.tex}}}
+\generate{\file{example-thai.tex}{\from{polyglossia.dtx}{example-thai.tex}}}
+\endgroup
+%</internal>
+%
+%<*driver>
+% !TeX spellcheck = en_US
+% !TeX TS-program = xelatex
+\documentclass[11pt]{ltxdoc}
+\usepackage{color}
+\usepackage{xspace,fancyvrb,longtable,booktabs}
+\usepackage[neverdecrease]{paralist}
+\usepackage[format=hang,labelfont=bf,labelsep=period]{caption}
+\definecolor{xpgblue}{rgb}{0.02,0.04,0.48}
+\definecolor{lightblue}{rgb}{0.61,.8,.8}
+\definecolor{xpgred}{rgb}{0.65,0.04,0.07}
+\usepackage[
+ unicode=true,
+ bookmarks=true,
+ colorlinks=true,
+ linkcolor=xpgblue,
+ urlcolor=xpgblue,
+ citecolor=xpgblue,
+ hyperindex=false,
+ hyperfootnotes=false,
+ pdftitle={Polyglossia: Modern multilingual typesetting with XeLaTeX and LuaLaTeX},
+ pdfauthor={F Charette, A Reutenauer, B Roucariès, J Spitzmüller},
+ pdfkeywords={xetex, xelatex, luatex, lualatex, multilingual, babel, hyphenation}
+ ]{hyperref}
+\usepackage{metalogo}
+\let\XeTeX\undefined
+\let\XeLaTeX\undefined
+\usepackage[babelshorthands]{polyglossia}
+\usepackage{farsical}
+\setmainlanguage[variant=british,ordinalmonthday=false]{english}
+\setotherlanguages{arabic,armenian,hebrew,syriac,greek,russian,serbian,catalan,georgian}
+\usepackage[protrusion]{microtype}
+\newcommand*\Cmd[1]{\cmd{#1}\DescribeMacro{#1}\xspace}
+\newcommand*\pkg[1]{\textsf{\color{xpgblue}#1}}
+\newcommand*\file[1]{\texttt{\color{xpgblue}#1}}
+\newcommand*\TR[1]{\textcolor{xpgred}{#1}}
+\newcommand*\TX[1]{\hyperref[#1]{\textcolor{xpgred}{#1}}}
+\newcommand*\TA[1]{\textsc{\color{xpgblue}#1}}
+\newcommand*\link[1]{\href{#1}{#1}}
+\renewcommand*\meta[1]{\texttt{⟨#1⟩}}
+\def\eg{\textit{e.g.,}\xspace}
+\def\ie{\textit{i.e.,}\xspace}
+\def\ca{\textit{ca.}\@\xspace}
+\def\Eg{\textit{E.g.,}\xspace}
+\def\Ie{\textit{I.e.,}\xspace}
+\def\etc{\@ifnextchar.{\textit{etc}}{\textit{etc.}\@\xspace}}
+
+%% Commands for documenting options
+\newcommand*\xpgoption[1]{\textcolor{xpgblue}{\ttfamily\bfseries #1}}
+\newcommand*\xpgvalue[1]{\texttt{#1}}
+\newcommand*\xpgpresetvalue[1]{\texttt{\textit{#1}}}
+\newcommand*\xpgdefaultvalue[1]{\texttt{*#1}}
+
+% arguments: #1 version number, #2 key name, #3 footnote, #4 possible values
+\NewDocumentCommand\xpgchoicekey{omom}{%
+ \xpgoption{#2}\IfValueT{#3}{\footnote{#3}}%
+ \IfValueT{#1}{\new{#1}} \xpgvalue{=} #4\par%
+}
+
+% arguments: #1 version number, #2 key name, #3 footnote
+\NewDocumentCommand\xpgboolkey{omo}{\xpgchoicekey[#1]{#2}[#3]{\xpgdefaultvalue{true} or \xpgvalue{false}}}
+\NewDocumentCommand\xpgboolkeytrue{omo}{\xpgchoicekey[#1]{#2}[#3]{\xpgdefaultvalue{\xpgpresetvalue{true}} or \xpgvalue{false}}}
+\NewDocumentCommand\xpgboolkeyfalse{omo}{\xpgchoicekey[#1]{#2}[#3]{\xpgdefaultvalue{true} or \xpgpresetvalue{false}}}
+
+% arguments: #1 version number, #2 key name, #3 default code
+\NewDocumentCommand\xpgcodekey{omv}{%
+ \xpgoption{#2}\IfValueT{#1}{\new{#1}}
+ \xpgvalue{=} \meta{code} (default value: \texttt{#3})\par%
+}
+
+%% Sidenotes << copied from fontspec.dtx
+\newcommand\new[1]{%
+ \edef\thisversion{v#1}%
+ \ifhmode\unskip~\fi{\ifx\thisversion\fileversion\color{blue}\else\color[gray]{0.5}\fi
+ $\leftarrow$}%
+ \marginpar{\centering
+ \small\ifx\thisversion\fileversion\color{blue}\else\color[gray]{0.5}\fi
+ \textsf{v#1}}}
+\newcommand\displaycmd[2]{%
+ \\\DescribeMacro{#2}\centerline{\cmd{#1}}}
+\renewenvironment{itemize}{\begin{compactitem}[\char"2023]}%[{\fontspec{DejaVu Sans}\char"25BB}]}%
+ {\end{compactitem}}
+\renewenvironment{enumerate}{\begin{compactenum}}{\end{compactenum}}
+\newenvironment{shorthands}{%
+ \begin{list}{}%
+ {\settowidth{\labelwidth}{MM}%
+ \setlength{\leftmargin}{\labelwidth}%
+ \addtolength{\leftmargin}{\labelsep}%
+ \renewcommand{\makelabel}[1]{##1\hfil}}}%
+ {\end{list}}
+
+% This is to prevent page breaks too short after subsections
+\def\condbreak#1{%
+ \vskip 0pt plus #1\pagebreak[3]\vskip 0pt plus -#1\relax}
+\pretocmd{\subsection}{\condbreak{2\baselineskip}}{}{}
+
+%% fontspec declarations:
+\setmainfont{Linux Libertine O}[Numbers=OldStyle]
+\setsansfont{Linux Biolinum O}
+\setmonofont[Scale=MatchLowercase]{DejaVu Sans Mono}
+\newfontfamily\arabicfont[Script=Arabic]{Amiri}
+\newfontfamily\armenianfont[Script=Armenian]{DejaVu Sans}
+\newfontfamily\syriacfont[Script=Syriac]{Serto Jerusalem}
+\newfontfamily\hebrewfont[Script=Hebrew]{Ezra SIL}
+\newfontfamily\georgianfont{DejaVu Serif}
+
+\linespread{1.05}
+\frenchspacing
+\EnableCrossrefs
+\CodelineIndex
+\RecordChanges
+% COMMENT THE NEXT LINE TO INCLUDE THE CODE
+\AtBeginDocument{\OnlyDescription}
+
+
+\begin{document}
+\ifxetex
+ \DocInput{polyglossia.dtx}
+\fi
+\end{document}
+%</driver>
+%
+% \fi
+%
+% \errorcontextlines=999
+% \makeatletter
+%
+% \hyphenation{Kha-li-ghi Reu-ten-auer new-zea-land}
+% \GetFileInfo{polyglossia.sty}
+%
+% \title{\textcolor{lightblue}{\Huge\fontspec[LetterSpace=40]{GFS Ambrosia} Πολυγλωσσια}
+% \\[16pt]
+% \color{xpgblue}Polyglossia: Modern multilingual typesetting with \XeLaTeX\ and \LuaLaTeX}
+% \author{\TA{François Charette} \and \TA{Arthur Reutenauer}\thanks{Current maintainer}
+% \and \TA{Bastien Roucariès} \and \TA{Jürgen Spitzmüller}}
+% \date{\filedate \qquad \fileversion\\
+% \footnotesize (\textsc{pdf} file generated on \today)}
+%
+% \maketitle
+% \tableofcontents
+%
+% \condbreak{4\baselineskip}
+%
+%
+% \DeleteShortVerb{\|}
+% \MakeShortVerb{\¦}
+%
+% ^^A\begin{abstract}
+% ^^ABlablabla
+% ^^A\end{abstract}
+%
+%
+% \section{Introduction}
+%
+% \pkg{Polyglossia} is a package for facilitating multilingual typesetting with
+% \XeLaTeX\ and (with some exceptions) \LuaLaTeX. Basically, it
+% can be used as an alternative to \pkg{babel} for performing the following
+% tasks automatically:
+%
+% \begin{enumerate}
+% \item Loading the appropriate hyphenation patterns.
+% \item Setting the script and language tags of the current font (if possible and
+% available), via the package \pkg{fontspec}.
+% \item Switching to a font assigned by the user to a particular script or language.
+% \item Adjusting some typographical conventions according to the current language
+% (such as afterindent, frenchindent, spaces before or after punctuation marks,
+% etc.).
+% \item Redefining all document strings (like “chapter”, “figure”, “bibliography”).
+% \item Adapting the formatting of dates (for non-Gregorian calendars via external
+% packages bundled with polyglossia: currently the Hebrew, Islamic and Farsi
+% calendars are supported).
+% \item For languages that have their own numbering system, modifying the formatting
+% of numbers appropriately (this also includes redefining the alphabetic sequence
+% for non-Latin alphabets).\footnote{%
+% This is done by bundled sub-packages such as \pkg{arabicnumbers}.}
+% \item Ensuring proper directionality if the document contains languages
+% that are written from right to left (via the package \pkg{bidi},
+% available separately).
+% \end{enumerate}
+% ^^A
+% Several features of \pkg{babel} that do not make sense in the \XeTeX\ world (like font
+% encodings, shorthands, etc.) are not supported.
+% Generally speaking, \pkg{polyglossia} aims to remain as compatible as possible
+% with the fundamental features of \pkg{babel} while being cleaner, light-weight,
+% and modern. The package \pkg{antomega} has been very beneficial in our attempt to
+% reach this objective.
+%
+% \paragraph{Requirements} The current version of \pkg{polyglossia} makes use of some convenient
+% macros defined in the \pkg{etoolbox} package by \TA{Philipp Lehmann} and \TA{Joseph Wright}.
+% Being designed for \XeLaTeX\ and \LuaLaTeX, it obviously also relies on \pkg{fontspec} by
+% \TA{Will Robertson}. For languages written from right to left, it needs the package \pkg{bidi}
+% (for \XeTeX) or \pkg{luabidi} (for \LuaTeX) by \TA{Vafa Khalighi} (\textarabic{وفا خليقي}) and
+% the \pkg{bidi-tex GitHub Organisation}.
+% Polyglossia also bundles three packages for calendaric computations (\pkg{hebrewcal},
+% \pkg{hijrical}, and \pkg{farsical}).
+%
+%
+% \section{Setting up multilingual documents}
+%
+% \subsection{Activating languages}
+%
+% The default language of a document is specified by means of the command
+% \displaycmd{\setdefaultlanguage\oarg{options}\marg{lang}}{\setdefaultlanguage}
+% (or, equivalently, \Cmd\setmainlanguage).
+% Secondary languages are specified with
+% \displaycmd{\setotherlanguage\oarg{options}\marg{lang}.}{\setotherlanguage}
+% All these commands allow you to set language-specific options.\footnote{%
+% Section~\ref{specific} documents these options for the respective languages.}
+% It is also possible to load a series of secondary languages at once (but without options)
+% using
+% \displaycmd{\setotherlanguages\marg{lang1⟩,⟨lang2⟩,⟨lang3⟩,⟨…}.}{\setotherlanguages}
+% ^^A
+% All language-specific options can be modified locally by means of the
+% language-switching commands described in section \ref{languageswitching}.
+%
+% \paragraph{Note} In general, it is advisable to activate the languages \emph{after} all
+% packages have been loaded. This is particularly important if you use right-to-left scripts
+% or languages with babel shorthands.
+%
+%
+% \subsection{Supported languages}
+%
+% Table~\ref{tab:lang} lists all languages currently supported.
+% Those in \TR{red} have specific options and/or commands
+% that are explained in section \ref{specific} below.
+%
+% \begin{table}[ht]\centering
+% \caption{\label{tab:lang}Languages currently supported in \pkg{polyglossia}}
+% ^^A Produced with tools/insert-language-list.rb -- JS, 2019-11-01
+% ^^A Edited by hand -- JS, 2019-11-01
+% \begin{tabular}{lllll}
+% \toprule
+% \TX{afrikaans} & danish & \TX{hungarian} & \TX{marathi} & \TX{slovenian} \\
+% albanian & divehi & icelandic & \TX{mongolian} & \TX{sorbian} \\
+% amharic & \TX{dutch} & interlingua & nko & \TX{spanish} \\
+% \TX{arabic} & \TX{english} & \TX{italian} & \TX{norwegian} & swedish \\
+% \TX{armenian} & \TX{esperanto} & japanese & occitan & \TX{syriac} \\
+% asturian & estonian & kannada & \TX{persian} & tamil \\
+% basque & \TX{finnish} & khmer & piedmontese & telugu \\
+% \TX{belarusian} & \TX{french} & \TX{korean} & polish & \TX{thai} \\
+% \TX{bengali} & friulian & \TX{kurdish} & \TX{portuguese} & \TX{tibetan} \\
+% bosnian & \TX{gaelic} & \TX{lao} & romanian & turkish \\
+% breton & galician & \TX{latin} & romansh & turkmen \\
+% bulgarian & \TX{georgian} & latvian & \TX{russian} & \TX{ukrainian} \\
+% \TX{catalan} & \TX{german} & lithuanian & \TX{sami} & urdu \\
+% coptic & \TX{greek} & macedonian & \TX{sanskrit} & vietnamese \\
+% \TX{croatian} & \TX{hebrew} & \TX{malay} & \TX{serbian} & \TX{welsh} \\
+% \TX{czech} & \TX{hindi} & malayalam & \TX{slovak} & \\
+% \bottomrule
+% \end{tabular}
+%
+% \end{table}
+%
+% \paragraph{Version Notes} The support for Amharic\new{1.0.1} should be considered an experimental attempt to
+% port the package \pkg{ethiop}; feedback is welcome.
+% Version 1.1.1\new{1.1.1} added support for Asturian, %\footnote{ Provided by Kevin Godby and Xuacu Saturio.},
+% Lithuanian, %\footnote{ Provided by Kevin Godby and Paulius Sladkevičius.},
+% and Urdu. %\footnote{ Provided by Kamal Abdali.}
+% ^^A
+% Version 1.2\new{1.2.0} introduced Armenian, Occitan, Bengali,
+% Lao, Malayalam, Marathi, Tamil, Telugu, and Turkmen.\footnote{%
+% See acknowledgements at the end for due credit to the various contributors.}
+% Version 1.43\new{1.43} brought basic support for Japanese (this
+% is considered experimental, feedback is appreciated).
+% In version 1.45\new{1.45}, support for Kurdish and Mongolian as well as some new
+% variants (Canadian French and English) have been added. Furthermore, for consistency reasons, some language have
+% been renamed (\emph{farsi}\textrightarrow\emph{persian}, \emph{friulan}\textrightarrow\emph{friulian},
+% \emph{magyar}\textrightarrow\emph{hungarian}, \emph{portuges}\textrightarrow\emph{portuguese},
+% \emph{samin}\textrightarrow\emph{sami}) or merged (\emph{bahasai}\slash\emph{bahasam}\textrightarrow\emph{malay},
+% \emph{brazil}\slash\emph{portuges}\textrightarrow\emph{portuguese},
+% \emph{lsorbian}\slash\emph{usorbian}\textrightarrow\emph{sorbian},
+% \emph{irish}\slash\emph{scottish}\textrightarrow\emph{gaelic},
+% \emph{norsk}\slash\emph{nynorsk}\textrightarrow\emph{norwegian}). The old names are still supported for backwards
+% compatibility reasons.
+% Version 1.46\new{1.46} introduces support for Afrikaans, Belarusian, Bosnian and Georgian.
+%
+%
+% \subsection{Relation to and use of Babel language names}\label{sec:babelnames}
+%
+% If you are familiar with the \pkg{babel} package, you will note that \pkg{polyglossia}'s language naming
+% slightly differs. Whereas \pkg{babel} has a unique name for each language variety (\eg\emph{american} and \emph{british}),
+% \pkg{polyglossia} differentiates language varieties via language options (\eg \emph{english}, ¦variant=american¦).
+%
+% Furthermore, \pkg{babel} sometimes uses abbreviated language names (\eg\emph{bahasam} for Bahasa Malayu) as well
+% as endonyms, \ie language names coming from the designated languages (such as \emph{bahasa}, \emph{canadien} or \emph{magyar}).
+% As opposed to this, \pkg{polyglossia} always uses spelled-out (lower-cased) English language names.
+% Please refer to table~\ref{tab:bbllang} for the differing language names in both packages.
+%
+% \begin{table}
+% \caption{\label{tab:bbllang}Babel-polyglossia language name matching}
+%
+% \begin{minipage}[t]{1\columnwidth}
+% \small\centering
+% \begin{tabular}{lll}
+% \toprule
+% \textbf{Babel name} & \textbf{Polyglossia name} & \textbf{Polyglossia options}\tabularnewline
+% \midrule
+% acadien & french & variant=acadian \\
+% american & english & variant=american [\emph{default}] \\
+% australian & english & variant=australian \\
+% austrian & german & variant=austrian, spelling=old \\
+% bahasa & malay & variant=indonesian [\emph{default}] \\
+% bahasam & malay & variant=malaysian \\
+% brazil & portuguese & variant=brazilian \\
+% british & english & variant=british \\
+% canadian & english & variant=canadian \\
+% canadien & french & variant=canadian \\
+% classiclatin\footnote{In \pkg{babel} currently only selectable via dot modifier (\emph{latin.classic}).}
+% & latin & variant=classic \\
+% farsi & persian & \\
+% ecclesiasticlatin\footnote{In \pkg{babel} currently only selectable via dot modifier (\emph{latin.ecclesiastic}).}
+% & latin & variant=ecclesiastic \\
+% friulan & friulian & \\
+% german\footnote{Due to the name conflict only available in \pkg{polyglossia} as \emph{germanb} (which is a \pkg{babel} synonym).}
+% & german & spelling=old \\
+% irish & gaelic & variant=irish [\emph{default}] \\
+% kurmanji & kurdish & variant=kurmanji \\
+% lowersorbian & sorbian & variant=lower \\
+% magyar & hungarian & \\
+% medievallatin\footnote{In \pkg{babel} currently only selectable via dot modifier (\emph{latin.medieval}).}
+% & latin & variant=medieval \\
+% naustrian & german & variant=austrian \\
+% newzealand & english & variant=newzealand \\
+% ngerman & german & variant=german [\emph{default}] \\
+% norsk & norwegian & variant=bokmal \\
+% nswissgerman & german & variant=swiss \\
+% nynorsk & norwegian & variant=nynorsk [\emph{default}] \\
+% polutonikogreek & greek & variant=polytonic \\
+% portuges & portuguese & variant=portuguese [\emph{default}] \\
+% samin & sami & \\
+% scottish & gaelic & variant=scottish \\
+% serbianc & serbian & script=Cyrillic \\
+% slovene & slovenian & \\
+% spanishmx & spanish & variant=mexican \\
+% swissgerman & german & variant=swiss, spelling=old \\
+% uppersorbian & sorbian & variant=upper [\emph{default}] \\
+% \bottomrule
+% \end{tabular}
+% \end{minipage}
+%
+% \end{table}
+%
+% For convenience reasons, \pkg{polyglossia} also supports the use of babel names\new{1.46} (for the few justified
+% exceptions, please refer to the notes in table~\ref{tab:bbllang}).
+% The babel names listed in table~\ref{tab:bbllang} can be used instead of the corresponding polyglossia
+% name\slash options in \cmd\setdefaultlanguage\ and \cmd\setotherlanguage\ as well as in the \pkg{polyglossia} and
+% \pkg{babel} language switching commands\slash environments documented in section~\ref{sec:langcmds} and
+% \ref{sec:babelcmds} (\eg \cmd\textaustrian\ is synonymous to ¦\textgerman[variant=austrian,spelling=old]¦).
+% However, unless you have special reasons, we strongly encourage you to use the \pkg{polyglossia} names.
+%
+%
+% \subsection{Using IETF language tags}\label{sec:langtags}
+%
+% \pkg{Polyglossia}\new{1.47} also supports the use of language tags that conform to the IETF BCP-47
+% \emph{Best Current Practice}.\footnote{Please refer to \url{https://tools.ietf.org/html/bcp47} and
+% \url{https://en.wikipedia.org/wiki/IETF_language_tag} for details.}
+% Thus, you can use tags such as ¦en-GB¦ (for British English) or ¦de-AT-1901¦ (for Austrian German, old spelling)
+% in \cmd\setdefaultlanguage\ and \cmd\setotherlanguage\ as well as in the language switching command
+% \cmd{\textlang\marg{tag}}, the environment \cmd{\begin\{lang\}\marg{tag}} \ldots\ \cmd{\end\{lang\}} and the \pkg{babel}
+% language switching commands\slash environments documented in section~\ref{sec:babelcmds}.
+% Table~\ref{tab:BCP47-polyglossia} lists the currently supported tags.
+%
+% \bgroup\small\addfontfeatures{Numbers={Monospaced,Lining}}
+% \begin{longtable}[c]{lll}
+% \caption{\label{tab:BCP47-polyglossia}BCP47-polyglossia language name matching}\\
+% \toprule
+% \textbf{BCP-47 tag} & \textbf{Polyglossia name} & \textbf{Polyglossia options}\\
+% \midrule
+% \endfirsthead
+% \caption[]{BCP47-polyglossia language name matching (\emph{continued})}\\
+% \toprule
+% \textbf{BCP-47 tag} & \textbf{Polyglossia name} & \textbf{Polyglossia options}\\
+% \midrule
+% \endhead
+% aeb & arabic & locale=tunisia \\
+% af & afrikaans & \\
+% afb & arabic & locale=default \\
+% am & amharic & \\
+% apd & arabic & locale=default \\
+% ar & arabic & \\
+% ar-IQ & arabic & locale=mashriq \\
+% ar-JO & arabic & locale=mashriq \\
+% ar-LB & arabic & locale=mashriq \\
+% ar-MR & arabic & locale=mauritania \\
+% ar-PS & arabic & locale=mashriq \\
+% ar-SY & arabic & locale=mashriq \\
+% ar-YE & arabic & locale=default \\
+% arq & arabic & locale=algeria \\
+% ary & arabic & locale=morocco \\
+% arz & arabic & locale=default \\
+% ast & asturian & \\
+% ayl & arabic & locale=libya \\
+% be & belarusian & \\
+% be-tarask & belarusian & spelling=classic \\
+% bg & bulgarian & \\
+% bn & bengali & \\
+% bo & tibetan & \\
+% br & breton & \\
+% bs & bosnian & \\
+% ca & catalan & \\
+% ckb & kurdish & variant=sorani [\emph{default}] \\
+% ckb-Arab & kurdish & variant=sorani, script=Arabic [\emph{default}] \\
+% ckb-Latn & kurdish & variant=sorani, script=Latin \\
+% cop & coptic & \\
+% cy & welsh & \\
+% cz & czech & \\
+% da & danish & \\
+% de & german & \\
+% de-AT & german & variant=austrian, spelling=new \\
+% de-AT-1901 & german & variant=austrian, spelling=old \\
+% de-AT-1996 & german & variant=austrian, spelling=new \\
+% de-CH & german & variant=swiss, spelling=new \\
+% de-CH-1901 & german & variant=swiss, spelling=old \\
+% de-CH-1996 & german & variant=swiss, spelling=new \\
+% de-DE & german & variant=german, spelling=new \\
+% de-DE-1901 & german & variant=german, spelling=old \\
+% de-DE-1996 & german & variant=german, spelling=new [\emph{default}] \\
+% de-Latf & german & script=blackletter \\
+% de-Latf-AT & german & variant=austrian, spelling=new, script=blackletter \\
+% de-Latf-AT-1901 & german & variant=austrian, spelling=old, script=blackletter \\
+% de-Latf-AT-1996 & german & variant=austrian, spelling=new, script=blackletter \\
+% de-Latf-CH & german & variant=swiss, spelling=new, script=blackletter \\
+% de-Latf-CH-1901 & german & variant=swiss, spelling=old, script=blackletter \\
+% de-Latf-CH-1996 & german & variant=swiss, spelling=new, script=blackletter \\
+% de-Latf-DE & german & variant=german, spelling=new, script=blackletter \\
+% de-Latf-DE-1901 & german & variant=german, spelling=old, script=blackletter \\
+% de-Latf-DE-1996 & german & variant=german, spelling=new, script=blackletter \\
+% dsb & sorbian & variant=lower \\
+% dv & divehi & \\
+% el & greek & \\
+% el-monoton & greek & variant=monotonic [\emph{default}] \\
+% el-polyton & greek & varant=polytonic \\
+% en & english & \\
+% en-AU & english & variant=australian \\
+% en-CA & english & variant=canadian \\
+% en-GB & english & variant=british \\
+% en-NZ & english & variant=newzealand \\
+% en-US & english & variant=us [\emph{default}] \\
+% eo & esperanto & \\
+% es & spanish & \\
+% es-ES & spanish & variant=spanish [\emph{default}] \\
+% es-MX & spanish & variant=mexican \\
+% et & estonian & \\
+% eu & basque & \\
+% fa & persian & \\
+% fi & finnish & \\
+% fr & french & \\
+% fr-CA & french & variant=canadian \\
+% fr-CH & french & variant=swiss \\
+% fr-FR & french & variant=french [\emph{default}] \\
+% fur & friulian & \\
+% ga & gaelic & variant=irish [\emph{default}] \\
+% gd & gaelic & variant=scottish \\
+% gl & galician & \\
+% grc & greek & variant=ancient \\
+% he & hebrew & \\
+% hi & hindi & \\
+% hr & croatian & \\
+% hsb & sorbian & variant=upper [\emph{default}] \\
+% hu & hungarian & \\
+% hy & armenian & \\
+% ia & interlingua & \\
+% id & malay & variant=indonesian \\
+% is & icelandic & \\
+% it & italian & \\
+% ja & japanese & \\
+% ka & georgian & \\
+% km & khmer & \\
+% kmr & kurdish & variant=kurmanji \\
+% kmr-Arab & kurdish & variant=kurmanji, script=Arabic \\
+% kmr-Latn & kurdish & variant=kurmanji, script=Latin \\
+% kn & kannada & \\
+% ko & korean & \\
+% ku & kurdish & \\
+% ku-Arab & kurdish & script=Arabic \\
+% ku-Latn & kurdish & script=Latin \\
+% la & latin & \\
+% la-x-classic & latin & variant=classic \\
+% la-x-ecclesia & latin & variant=ecclesiastic \\
+% la-x-medieval & latin & variant=medieval \\
+% lo & lao & \\
+% lt & lithuanian & \\
+% lv & latvian & \\
+% mk & macedonian & \\
+% ml & malayalam & \\
+% mn & mongolian & \\
+% mr & marathi & \\
+% nb & norwegian & variant=bokmal \\
+% nko & nko & \\
+% nl & dutch & \\
+% nn & norwegian & variant=nynorsk [\emph{default}] \\
+% oc & occitan & \\
+% pl & polish & \\
+% pms & piedmontese & \\
+% pt & portuguese & \\
+% pt-BR & portuguese & variant=brazilian \\
+% pt-PT & portuguese & variant=portuguese [\emph{default}] \\
+% rm & romansh & \\
+% ro & romanian & \\
+% ru & russian & \\
+% ru-luna1918 & russian & spelling=modern [\emph{default}] \\
+% ru-petr1708 & russian & spelling=old \\
+% sa & sanskrit & \\
+% sa-Beng & sanskrit & script=Bengali \\
+% sa-Deva & sanskrit & script=Devanagari [\emph{default}] \\
+% sa-Gujr & sanskrit & script=Gujarati \\
+% sa-Knda & sanskrit & script=Kannada \\
+% sa-Mlym & sanskrit & script=Malayalam \\
+% sa-Telu & sanskrit & script=Telugu \\
+% se & sami & \\
+% sk & slovak & \\
+% sl & slovenian & \\
+% sq & albanian & \\
+% sr & serbian & \\
+% sr-Cyrl & serbian & script=Cyrillic \\
+% sr-Latn & serbian & script=Latin [\emph{default}] \\
+% sv & swedish & \\
+% syr & syriac & \\
+% ta & tamil & \\
+% te & telugu & \\
+% th & thai & \\
+% tk & turkmen & \\
+% tr & turkish & \\
+% uk & ukrainian & \\
+% ur & urdu & \\
+% vi & vietnamese & \\
+% zsm & malay & variant=malaysian [\emph{default}] \\
+% \bottomrule
+% \end{longtable}
+% \egroup
+%
+% \subsection{Global options}
+%
+% \pkg{Polyglossia} can be loaded with the following global package options:
+%
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.1.1]{babelshorthands}
+% Globally activates \pkg{babel} shorthands whenever available. Currently
+% shorthands are implemented for Afrikaans, Belarusian, Catalan, Croatian,
+% Czech, Dutch, Finnish, Georgian, German, Italian, Latin, Mongolian,
+% Russian, Slovak, and Ukrainian. Please refer to the respective language descriptions
+% (sec.~\ref{specific}) for details.
+%
+% \item \xpgboolkeyfalse{localmarks} redefines the internal \LaTeX\ macros \cmd\markboth\ and
+% \cmd\markright\ to the effect that the header text is explicitly set in the currently
+% active language (\ie wrapped into \cmd\foreignlanguage\{\meta{lang}\}\{\meta{\ldots}\}).
+%
+% In earlier versions of \pkg{polyglossia},\new{1.2.0} this
+% option was enabled by default, but we now realize that it causes more problems
+% than it helps (since it breaks if a package or class redefines \cmd\markboth\ or
+% \cmd\markright), so it is now disabled by default. For backwards compatibility, the
+% option \xpgoption{nolocalmarks} which used to switch off the previous default, and
+% now equals the default, is still available.
+%
+% \item \xpgoption{quiet} turns off most info messages and some of the warnings issued
+% by \LaTeX, \pkg{fontspec} and \pkg{polyglossia}.
+% \end{itemize}
+%
+% \pagebreak
+% \section{Language-switching commands}\label{languageswitching}
+%
+% \subsection{Recommended commands}\label{sec:langcmds}
+% For each activated language the command
+% \cmd{\text\meta{lang}\oarg{options}\marg{…}} \DescribeMacro{\text\meta{lang}}
+% (as well as the synonymous \DescribeMacro{\textlang}%
+% \cmd{\textlang\oarg{options}\marg{lang}\marg{…}}\new{1.46})
+% becomes available for short insertions of text in that language.
+%
+% For example ¦\textrussian{\today}¦ and ¦\textlang{russian}{\today}¦ yield \textrussian{\today}
+% The commands switch to the correct hyphenation patterns, they activate
+% some extra features for the selected language (such as extra spacing before
+% punctuation in French), and they translate the date when using \cmd\today.
+% They do not, however, translate so-called \textit{caption strings}, \ie
+% ``chapter'', ``figure'' etc., to the local language (these remain in the currently active `outer'
+% language).
+%
+% The\DescribeEnv{\meta{lang}}\ environment \meta{lang}, which is also available for any activated language
+% (as well as the equivalent \DescribeMacro{lang}%
+% \cmd{\begin\{lang\}\oarg{options}\marg{lang}} \dots{} \cmd{\end\{lang\}}\new{1.47}),
+% is meant for longer passages of text. It behaves slightly different than the \cmd{\text\meta{lang}} and
+% \cmd\textlang\ commands: It does everything the latter do, but additionally, the caption strings
+% are translated as well, and the language is also passed to auxiliary files, the table of contents
+% and the lists of figures/tables.
+% Like the commands, the environment provides the possibility of setting language options locally.
+% For instance the following allows us to quote the beginning
+% of Homer’s \textit{Iliad}:
+%
+% \begin{Verbatim}[formatcom=\color{xpgblue}]
+% \begin{quote}
+% \begin{greek}[variant=ancient]
+% μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος οὐλομένην, ἣ μυρί' Ἀχαιοῖς
+% ἄλγε' ἔθηκε, πολλὰς δ' ἰφθίμους ψυχὰς Ἄϊδι προί̈αψεν ἡρώων,
+% αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν οἰωνοῖσί τε πᾶσι, Διὸς δ'
+% ἐτελείετο βουλή, ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε Ἀτρεί̈δης
+% τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.
+% \end{greek}
+% \end{quote}
+% \end{Verbatim}
+%
+% \vspace{-.5\baselineskip}
+%
+% \begin{quote}
+% \begin{greek}[variant=ancient]
+% μῆνιν ἄειδε θεὰ Πηληϊάδεω Ἀχιλῆος οὐλομένην, ἣ μυρί' Ἀχαιοῖς ἄλγε' ἔθηκε,
+% πολλὰς δ' ἰφθίμους ψυχὰς Ἄϊδι προί̈αψεν ἡρώων, αὐτοὺς δὲ ἑλώρια τεῦχε κύνεσσιν
+% οἰωνοῖσί τε πᾶσι, Διὸς δ' ἐτελείετο βουλή, ἐξ οὗ δὴ τὰ πρῶτα διαστήτην ἐρίσαντε
+% Ἀτρεί̈δης τε ἄναξ ἀνδρῶν καὶ δῖος Ἀχιλλεύς.
+% \end{greek}
+% \end{quote}
+%
+% \noindent\DescribeEnv{Arabic} Note that for Arabic one cannot use the environment ¦arabic¦,
+% as \cmd\arabic\ is defined internally by \LaTeX. In this case
+% we need to use the environment ¦Arabic¦ instead.
+%
+% \subsection{Babel commands}\label{sec:babelcmds}
+% Some macros defined in \pkg{babel}’s \file{hyphen.cfg} (and thus usually
+% compiled into the \XeLaTeX\ and \LuaLaTeX\ format) are redefined, but keep a
+% similar behaviour.
+% \begin{itemize}
+% \item \DescribeMacro{\selectlanguage}\cmd{\selectlanguage\oarg{options}\marg{lang}}
+% \item \DescribeMacro{\foreignlanguage}\cmd{\foreignlanguage\oarg{options}\marg{lang}\marg{…}}
+% \item \DescribeEnv{otherlanguage}\cmd{\begin\{otherlanguage\}\oarg{options}\marg{lang}} \dots{} \cmd{\end\{otherlanguage\}}
+% \item \DescribeEnv{otherlanguage*}\cmd{\begin\{otherlanguage*\}\oarg{options}\marg{lang}} \dots{} \cmd{\end\{otherlanguage*\}}
+% \end{itemize}
+% ^^A
+% \cmd\selectlanguage\marg{lang} and the ¦otherlanguage¦ environment are identical to the
+% the \meta{lang} environment, except that \cmd\selectlanguage\marg{lang}
+% does not need to be explicitly closed. The command \cmd\foreinlanguage\marg{lang}\marg{…} and the ¦otherlanguage*¦
+% environment are identical with the use of the \cmd\text\meta{lang} or \cmd\textlang\ command, with the one
+% notable exception that they do not translate the date with \cmd\today.
+%
+% Since the \XeLaTeX\ and \LuaLaTeX\ format incorporate \pkg{babel}’s \file{hyphen.cfg},
+% the low-level commands for hyphenation and language switching
+% defined there are also accessible.
+%
+% \subsection{Other commands}
+% The following commands are probably of lesser interest to the end user, but
+% ought to be mentioned here.
+% \begin{itemize}
+% \item \DescribeMacro{\selectbackgroundlanguage}\cmd{\selectbackgroundlanguage\marg{lang}}:
+% this selects the global font setup and the numbering definitions for the default language.
+%
+% \item \DescribeMacro{\resetdefaultlanguage}\cmd{\resetdefaultlanguage\oarg{options}\marg{lang}} (experimental):
+% completely switches the default language
+% to another one in the middle of a document: \textit{this may have adverse effects}!
+%
+% \item \Cmd\normalfontlatin: in an environment where \cmd\normalfont\ has been redefined
+% to a non-latin script, this will reset to the font defined with \cmd\setmainfont\ etc.
+% In a similar vein, it is possible to use \Cmd\rmfamilylatin, \Cmd\sffamilylatin,
+% and \Cmd\ttfamilylatin.
+%
+% \item \Cmd\latinalph: Representation of counter as a lower-case letter: 1 = a, 2 = b, etc.
+%
+% \item \Cmd\latinAlph: Representation of counter as a upper-case letter: 1 = A, 2 = B, etc.
+% \end{itemize}
+%
+%
+% \subsection{Setting up alias commands}
+%
+% By means of the macro
+% \displaycmd{\setlanguagealias\oarg{options}\marg{language}\marg{alias}}{\setlanguagealias}\new{1.46}
+% you can define alias commands for specific language (variants). \Eg
+%
+% \begin{quote}
+% \begin{verbatim}
+% \setlanguagealias[variant=austrian]{german}{AT}
+% \end{verbatim}
+% \end{quote}
+% ^^A
+% will define a command \cmd{\textAT} as well as an environment ¦{AT}¦ which will link towards
+% the command ¦\textgerman[variant=austrian]¦ and the environment ¦{german}[variant=austrian]¦,
+% respectively. The aliases can also be used in the language switching commands described in
+% section~\ref{sec:langcmds} and \ref{sec:babelcmds}.
+% Note, though, that the usual restrictions for command names apply, so something such as
+% ¦de-AT¦ or ¦de_AT¦ will not work since ¦-¦ and ¦_¦ are not allowed in command names (the same
+% holds true for any non-ASCII character and for digits).
+%
+% For the latter case, and for the case where an alias would clash with an existing command
+% (\eg ¦\fi¦) or a \cmd{\text\meta{\ldots}} command (\eg \cmd\textit), a starred version \Cmd{\setlanguagealias*}
+% is provided which does neither define a \cmd{\text\meta{alias}} command nor an \meta{alias} environment,
+% but which will set up the alias for everything else, including \cmd{\textlang\marg{alias}}
+% and \cmd{\begin\{lang\}\marg{alias}}.
+%
+% \pkg{Polyglossia} comes with some aliases predefined, namely aliases for \pkg{babel} language names
+% (see sec.~\ref{sec:babelnames}) and for IETF BCP-47 language tags (the latter via \cmd{\setlanguagealias*};
+% see sec.~\ref{sec:langtags}).
+%
+% \section{Font setup}
+%
+% With polyglossia it is possible to associate a specific font with any script or language
+% that occurs in the document. That font should always be defined as
+% \cmd{\⟨script⟩font}\ or \cmd{\⟨language⟩font}.
+% For instance, if the default font defined by \cmd\setmainfont\
+% does not support Greek, then one can define the font used to display Greek with:\\
+% \centerline{ \cmd\newfontfamily\cmd{\greekfont[Script=Greek,\meta{…}]\marg{font}}. }
+% Note that polyglossia will use the font defined as is, so assure to do all necessary settings
+% (please refer to the \pkg{fontspec} documentation for details).
+% For instance, if \cmd\arabicfont\ is explicitly defined, then the option ¦Script=Arabic¦ should
+% be included in that definition.
+%
+% If a specific sans serif or monospace (`teletype') font is needed for a particular script or language,
+% it can be defined by means of \new{1.2.0}
+% \cmd{\⟨script⟩fontsf} or \cmd{\⟨language⟩fontsf} and \cmd{\⟨script⟩fonttt} or \cmd{\⟨language⟩fonttt}, respectively.
+%
+% Whenever a new language is activated, \pkg{polyglossia} will first check whether
+% a font has been defined for that language or – for languages in non-Latin scripts –
+% for the script it uses. If it is not defined, it will use the currently active font
+% and – in the case of OpenType fonts – will attempt to turn on the appropriate
+% OpenType tags for the script and language used, in case these are available in
+% the font, by means of \pkg{fontspec}’s \cmd\addfontfeature. If the current font
+% does not appear to support the script of that language, an error message is
+% displayed.
+%
+% \section{Adapting hyphenation}
+%
+% \subsection{Hyphenation exceptions}
+%
+% \TeX\ provides the command \cmd\hyphenation\marg{exceptions} to globally define hyphenation exceptions
+% which override the hyphenation patterns for specified words. The command takes as argument a space-separated
+% list of words where hyphenation points are marked by a dash (if no dash is used, the respective word is not
+% hyphenated at all):
+% \begin{Verbatim}
+% \hyphenation{%
+% po-ly-glos-sia
+% LaTeX
+% }
+% \end{Verbatim}
+% ^^A
+% These exceptions, however, apply to all languages. In addition to this, \pkg{polyglossia} provides
+% the command\new{1.45}
+% \displaycmd{\xpghyphenation\oarg{options}\marg{lang}\marg{exceptions}}{\xpghyphenation}
+% which can be used to define exceptions that only apply to a specific language or language variant,
+% respectively.
+%
+% \subsection{Hyphenation disabling}
+%
+% In some very specific contexts (such as music score creation), \TeX{} hyphenation
+% is something to avoid as it may cause troubles. \pkg{polyglossia} provides two
+% functions: \Cmd\disablehyphenation\ and \Cmd\enablehyphenation. Note that if
+% you select a new language while hyphenation is disabled, it will remain disabled.
+% If you re-enable it, the hyphenation patterns of the currently selected language
+% will be activated.
+%
+% \section{Language-specific options and commands}\label{specific}
+%
+% This section gives a list of all languages for which options and end-user
+% commands are defined. Note the following conventions:
+% \begin{itemize}
+% \item The preset value of each option (\ie the setting that applies by default,
+% if the option is not explicitly set) is given in \xpgpresetvalue{italics}.
+% \item If an option key may be used without a value, the value that applies
+% for value-less keys is marked by a preceding \xpgdefaultvalue{asterisk}.
+% \end{itemize}
+% For instance, \texttt{babelshorthands = *true} or \texttt{\textit{false}} means that
+% \xpgvalue{babelshorthands} is \xpgvalue{false} by default in the respective language,
+% and that passing \xpgvalue{babelshorthands} (without value) is equivalent to passing
+% \xpgvalue{babelshorthands=true}.
+%
+% \subsection{afrikaans}\label{afrikaans}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.1.1]{babelshorthands}
+% If this is turned on, the following shorthands defined for fine-tuning hyphenation and
+% micro-typography of Afrikaans words are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\- in default \TeX).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to \cmd\slash,
+% hyphenation at the breakpoints preset in the hyphenation patterns is still allowed.
+% \end{shorthands}
+% \end{itemize}
+%
+% \subsection{arabic}\label{arabic}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{calendar}{\xpgpresetvalue{gregorian} or \xpgvalue{islamic} (= \xpgvalue{hijri})}
+% \item \xpgchoicekey{locale}{\xpgpresetvalue{default}\footnote{ %
+% For Egypt, Sudan, Yemen and the Gulf states.},
+% \xpgvalue{mashriq}\footnote{ %
+% For Iraq, Syria, Jordan, Lebanon and Palestine.},
+% \xpgvalue{libya}, \xpgvalue{algeria}, \xpgvalue{tunisia}, \xpgvalue{morocco}, \xpgvalue{mauritania}}
+% This setting influences the spelling of the month names for the Gregorian calendar,
+% as well as the form of the numerals (unless overriden by the following option).
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{mashriq} or \xpgvalue{maghrib}}
+% The latter is the default when \xpgvalue{locale=algeria}, \xpgvalue{tunisia}, or \xpgvalue{morocco}.
+% \item \xpgboolkeyfalse[1.0.3]{abjadjimnotail}
+% Set this to true if you want the \textit{abjad} form of the number three to be \textarabic{ج‍} – as in the manuscript tradition – instead of the modern usage \textarabic{ج}.
+% \end{itemize}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\abjad and \Cmd\abjadmaghribi (see section \ref{abjad})
+% \item \Cmd\aemph to emphasize text with \cmd\overline.\new{1.2.0}
+% ¦\textarabic{\aemph{اب}}¦ yields \textarabic{\aemph{اب}}.
+% This command is also available for Farsi, Urdu, etc.
+% \end{itemize}
+%
+% \subsection{armenian}\label{armenian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.45]{variant}{\xpgvalue{eastern} or \xpgpresetvalue{western}}
+% \item \xpgchoicekey[1.45]{numerals}{\xpgvalue{armenian} or \xpgpresetvalue{arabic}}
+% \end{itemize}
+%
+% \subsection[belarusian]{belarusian\new{1.46}}\label{belarusian}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse{babelshorthands}
+% If this is turned on, the following shorthands are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"---¦] Cyrillic emdash in plain text.
+% \item[¦"--~¦] Cyrillic emdash in compound names (surnames).
+% \item[¦"--*¦] Cyrillic emdash for denoting direct speech.
+% \item[¦",¦] thinspace for initials with a breakpoint in following surname.
+% \item[¦"‘¦] for German left double quotes (looks like ,,).
+% \item[¦"’¦] for German right double quotes (looks like “).
+% \item[¦"<¦] for French left double quotes (looks like <<).
+% \item[¦">¦] for French right double quotes (looks like >>).
+% \end{shorthands}
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{arabic}, \xpgvalue{cyrillic-alph} or \xpgvalue{cyrillic-trad}}
+% Uses either Arabic numerals or Cyrillic alphanumerical numbering. The two Cyrillic variants differ as follows:
+% \begin{itemize}
+% \item \xpgvalue{cyrillic-alph} steps through the Cyrillic alphabet. Thus it can only be used up to 30.
+% \item \xpgvalue{cyrillic-trad} (= \xpgvalue{cyrillic}) uses a traditional Cyrillic alphanumeric system.%
+% \footnote{See \url{https://en.wikipedia.org/wiki/Cyrillic_numerals}.}
+% It supports numbers up to 999\,999.
+% \end{itemize}
+% \item \xpgchoicekey{spelling}{\xpgpresetvalue{modern} or \xpgvalue{classic} (= \xpgvalue{tarask})}
+% With ¦spelling=classic¦, captions and dates adhere to the Taraškievica (or
+% Belarusian classical) orthography rather than the standard orthography.
+% \end{itemize}
+% ^^A
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\Asbuk: produces uppercased Cyrillic alphanumerals, for environments such as ¦enumerate¦.
+% It steps through the Cyrillic alphabet and thus it can only be used up to 30.
+% The command takes a counter as argument, \eg ¦\textbelarusian{\Asbuk{page}}¦ produces \textrussian{\Asbuk{page}}.
+% \item \Cmd\asbuk: same as \cmd\Asbuk\ but in lowercase.
+% \item \Cmd\AsbukTrad: same as \cmd\Asbuk\ but using the traditional Cyrillic alphanumeric numbering which supports
+% numbers up to 999\,999.\\
+% \Eg ¦\textbelarusian{\AsbukTrad{page}}¦ produces \textrussian{\AsbukTrad{page}}.
+% \item \Cmd\asbukTrad: same as \cmd\AsbukTrad\ but in lowercase.
+% \end{itemize}
+%
+% \subsection[bengali]{bengali\new{1.2.0}}\label{bengali}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{numerals}{\xpgvalue{Western}, \xpgvalue{Bengali}, or \xpgpresetvalue{Devanagari}}
+% \item \xpgboolkeyfalse{changecounternumbering}
+% Use specified numerals for headings and page numbers.
+% \end{itemize}
+%
+% \subsection{catalan}\label{catalan}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.1.1]{babelshorthands}
+% Activates the shorthands \texttt{"l} and \texttt{"L} to type geminated l or L.
+% \end{itemize}
+%
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd{\l.l} and \Cmd{\L.L}\new{1.1.1} can be used to type a geminated l, as in \textit{co\l.laborar},
+% similar to \pkg{babel} (the glyph U+00B7 MIDDLE DOT is used as a geminating sign).
+% \end{itemize}
+%
+% \subsection{croatian}\label{croatian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.47]{babelshorthands}
+% If this is turned on, the following shorthands for fine-tuning hyphenation and micro-typography
+% of Croatian words are activated.
+% \begin{shorthands}
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦"=¦] for an explicit hyphen with a breakpoint, allowing for hyphenation at the
+% other points preset in the hyphenation patterns (as opposed to plain ¦-¦).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to \cmd\slash, hyphenation
+% at the breakpoints preset in the hyphenation patterns is still allowed.
+% \end{shorthands}
+% Furthermore, the following shorthands generate easy access to Croatian digraphs (ligatures):
+% \begin{shorthands}
+% \item[¦"dz¦] Generates the ligature \charifavailable{01C6}{dž}\ if the font provides it. If not, the
+% two characters are output separately. Also available for ¦"Dz¦ (\charifavailable{01C5}{Dž})
+% and ¦"DZ¦ (\charifavailable{01C4}{DŽ}).
+% \item[¦"lj¦] Generates the ligature \charifavailable{01C9}{lj}\ if the font provides it. If not, the
+% two characters are output separately. Also available for ¦"Lj¦ (\charifavailable{01C8}{Lj})
+% and ¦"LJ¦ (\charifavailable{01C7}{LJ}).
+% \item[¦"nj¦] Generates the ligature \charifavailable{01CC}{nj}\ if the font provides it. If not, the
+% two characters are output separately. Also available for ¦"Nj¦ (\charifavailable{01CB}{Nj})
+% and ¦"NJ¦ (\charifavailable{01CA}{NJ}).
+% \end{shorthands}
+%
+% Finally, there are also four shorthands for quotation marks:
+% \begin{shorthands}
+% \item[¦"`¦] for Croatian left double quotes („).
+% \item[¦"'¦] for Croatian right double quotes (”).
+% \item[¦">¦] for Croatian left guillemets (»).
+% \item[¦"<¦] for Croatian right guillemets («).
+% \end{shorthands}
+% \item \xpgboolkeyfalse[1.47]{disableligatures}
+% If this is \xpgvalue{true}, all Croatian ligatures (for digraphs such as
+% \charifavailable{01C6}{dž}) will be replaced by single characters. This can
+% be useful if the ligatures on your font are broken (if the font does not
+% have them, they are automatically replaced).
+% \end{itemize}
+%
+% \subsection{czech}\label{czech}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.45]{babelshorthands}
+% If this is turned on, the following shorthands for Czech are activated:
+% \begin{shorthands}
+% \item[¦"=¦] for an explicit hyphen sign which is repeated at the beginning
+% of the next line when hyphenated, as common in Czech typesetting
+% (only needed with ¦splithyphens=false¦).
+% \item[¦"‘¦] for Czech left double quotes („).
+% \item[¦"’¦] for Czech right double quotes (“).
+% \item[¦">¦] for Czech left double guillemets (»).
+% \item[¦"<¦] for Czech right double guillemets («).
+% \end{shorthands}
+% \item \xpgboolkeytrue[1.45]{splithyphens}
+% According to Czech typesetting conventions, if a word with a hard hyphen (such as \emph{je-li})
+% is hyphenated at this hyphen, a second hyphenation character is to be inserted at the beginning
+% of the line that follows the hyphenation (\emph{je-/-li}).
+% By default, this is done automatically\new{1.46} (if you are using \LuaTeX, the \pkg{luavlna} package is
+% loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
+% \item \xpgboolkeytrue[1.45]{vlna}
+% According to Czech typesetting conventions, single-letter words (non-syllable prepositions)
+% must not occur at line ends.
+% \pkg{Polyglossia} takes care of this automatically by default\new{1.46} (if you are using \LuaTeX, the
+% \pkg{luavlna} package is loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
+% \end{itemize}
+%
+% \subsection{dutch}\label{dutch}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.1.1]{babelshorthands}
+% If this is turned on, the following shorthands defined for fine-tuning hyphenation and
+% micro-typography of Dutch words are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\- in default \TeX).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to \cmd\slash,
+% hyphenation at the breakpoints preset in the hyphenation patterns is still allowed.
+% \end{shorthands}
+% In addition, the macro \Cmd\- is redefined to allow hyphens in the rest of the word (equivalent to ¦"-¦).
+% \end{itemize}
+%
+% \subsection{english}\label{english}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{variant}{\xpgpresetvalue{american} (= \xpgvalue{us}), \xpgvalue{usmax} (same as \xpgvalue{american} but with additional hyphenation patterns),
+% \xpgvalue{british} (= \xpgvalue{uk}), \xpgvalue{australian}, \xpgvalue{canadian}\new{1.45}, or \xpgvalue{newzealand}}
+% \item \xpgboolkeyfalse{ordinalmonthday}
+% The default value is true for \xpgvalue{variant=british}.
+% \end{itemize}
+%
+% \subsection{esperanto}\label{esperanto}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\hodiau\ and \Cmd\hodiaun are special forms of \cmd\today. The former produces the date in Esperanto
+% preceded by the article (\emph{la}), which is the most common date format.
+% The latter produces the same date format in accusative case.
+% \end{itemize}
+%
+% \subsection{finnish}\label{finnish}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.45]{babelshorthands}
+% If this is turned on, the following shorthands for fine-tuning hyphenation
+% and micro-typography of Finnish words are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to \cmd\slash,
+% hyphenation at the breakpoints preset in the hyphenation patterns is still allowed.
+% \end{shorthands}
+% \end{itemize}
+%
+% \subsection{french}\label{french}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{variant}{\xpgpresetvalue{french} or \xpgvalue{canadian} (=~\xpgvalue{acadian})\new{1.45}, \xpgvalue{swiss}\new{1.47}}
+% Currently, the only difference between the four variants is that \xpgvalue{swiss}
+% uses \xpgvalue{thincolonspace=true} by default since this conforms to the Swiss
+% conventions.
+% \item \xpgboolkeytrue{autospacing}
+% One of the most distinct features of French typography is the addition of
+% extra spacing around punctuation and quotation marks (guillemets). By
+% default, polyglossia adds these spaces automatically, so you don't need
+% to enter them. This options allows you to switch this feature off
+% globally.
+% \item \xpgboolkeyfalse[1.46]{thincolonspace}
+% With \xpgvalue{variant=swiss}, the default value is \xpgvalue{true}. If \xpgvalue{false}, a full
+% (non-breaking) interword space is inserted before a colon. If \xpgvalue{true}, a
+% thinner space -- as before \texttt{;}, \texttt{!}, and \texttt{?} -- is
+% used. Note that this option must be set after the ¦variant¦ option.
+% \item \xpgboolkeytrue{autospaceguillemets}[Up to version 1.44, the option was
+% called \xpgvalue{automaticspacesaroundguillemets}. For backwards compatibility
+% reasons, the more verbose old option is still supported.]
+% If you only want to disable the automatic addition of spacing after
+% opening and before closing guillemets (and not at punctuation), set this
+% to \textit{false}. Note that the more general option \textit{autospacing}
+% overrides this.
+% \item \xpgboolkeyfalse[1.45]{autospacetypewriter}[Babel's syntax \xpgvalue{OriginalTypewriter}
+% is also supported.]
+% By default, automatic spacing is disabled in typewriter font. If this is
+% enabled, spacing in typewriter context is the same as with roman and sans
+% serif font, depending on the \xpgvalue{autospacing} and
+% \xpgvalue{autospaceguillemets} settings (note that this was the default up
+% to v.~1.44).
+% \item \xpgboolkeyfalse{frenchfootnote}
+% If \xpgvalue{true}, footnotes start with a non-superscripted number
+% followed by a dot, as common in French typography. Note that this might
+% interfere with the specific footnote handling of classes or packages.
+% Also note that this option is only functional (by design) if French is
+% the main language.
+% \item \xpgboolkeyfalse[1.46]{frenchitemlabels}
+% If \textit{true}, itemize item labels use em-dashes throughout, as common
+% in French typography. Note that this option is only functional (by
+% design) if French is the main language. Also, it might interfere with
+% list packages such as \pkg{enumitem}.
+% \item \xpgcodekey[1.46]{itemlabels}¦\textemdash¦
+% If \emph{frenchitemlabels} is true, you can customize here the used item
+% label of all levels.
+% \item \xpgcodekey[1.46]{itemlabeli}¦\textemdash¦
+% If \emph{frenchitemlabels} is true, you can customize here the used item
+% label of the first level.
+% \item \xpgcodekey[1.46]{itemlabelii}¦\textemdash¦
+% If \emph{frenchitemlabels} is true, you can customize here the used item
+% label of the second level.
+% \item \xpgcodekey[1.46]{itemlabeliii}¦\textemdash¦
+% If \emph{frenchitemlabels} is true, you can customize here the used item
+% label of the third level.
+% \item \xpgcodekey[1.46]{itemlabeliv}¦\textemdash¦
+% If \emph{frenchitemlabels} is true, you can customize here the used item
+% label of the fourth level.
+% \end{itemize}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\NoAutoSpacing\new{1.45} disables automatic spacing around punctuation and quotation marks in all following text. The command can also be used locally if braces are used for grouping: ¦{\NoAutoSpacing foo:bar}¦
+% \item \Cmd\AutoSpacing\new{1.45} enables automatic spacing around punctuation and quotation marks in all following text. The command can also be used locally if braces are used for grouping: ¦{\AutoSpacing regarde!}¦
+% \end{itemize}
+%
+% \subsection[gaelic]{gaelic\new{1.45}}\label{gaelic}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{variant}{\xpgpresetvalue{irish} or \xpgvalue{scottish}}
+% \end{itemize}
+%
+% \subsection[georgian]{georgian\new{1.46}}\label{georgian}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse{babelshorthands}
+% If this is turned on, the following shorthands are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for
+% hyphenation at the points preset in the hyphenation patterns (as opposed
+% to \cmd\-).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"---¦] Cyrillic emdash in plain text.
+% \item[¦"--~¦] Cyrillic emdash in compound names (surnames).
+% \item[¦"--*¦] Cyrillic emdash for denoting direct speech.
+% \item[¦",¦] thinspace for initials with a breakpoint in following surname.
+% \item[¦"‘¦] for German left double quotes (looks like ,,).
+% \item[¦"’¦] for German right double quotes (looks like “).
+% \item[¦"<¦] for French left double quotes (looks like <<).
+% \item[¦">¦] for French right double quotes (looks like >>).
+% \end{shorthands}
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{arabic} or \xpgvalue{georgian}}
+% Uses either Arabic numerals or Georgian alphanumerical numbering.
+% \item \xpgboolkeyfalse{oldmonthnames}
+% Uses traditional Georgian month names.
+% \end{itemize}
+%
+% \subsection{german}\label{german}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{variant}{\xpgpresetvalue{german}, austrian, or swiss\new{1.33.4}}
+% Setting \xpgvalue{variant=austrian} or \xpgvalue{variant=swiss} uses some lexical variants.
+% With \xpgvalue{spelling=old}, \xpgvalue{variant=swiss} furthermore loads specific hyphenation
+% patterns.
+% \item \xpgchoicekey{spelling}{\xpgpresetvalue{new} (= \xpgvalue{1996}) or \xpgvalue{old} (= \xpgvalue{1901})}
+% Indicates whether hyphenation patterns for traditional (1901) or reformed
+% (1996) orthography should be used. The latter is the default.
+% \item \xpgboolkeyfalse[1.0.3]{babelshorthands}
+% If this is turned on, all shorthands defined in \pkg{babel}
+% for fine-tuning hyphenation and micro-typography of German words are activated.
+% \begin{shorthands}
+% \item[¦"ck¦] for ¦ck¦ to be hyphenated as ¦k-k¦ (1901 spelling).
+% \item[¦"ff¦] for ¦ff¦ to be hyphenated as ¦ff-f¦ (1901 spelling); this is also available
+% for the letters l, m, n, p, r and t.
+% \item[¦"|¦] disables a ligature at this position (\eg ¦Auf"|lage¦).
+% \item[¦"=¦] for an explicit hyphen with a breakpoint, allowing for hyphenation at the
+% other points preset in the hyphenation patterns (as opposed to plain ¦-¦).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable, \eg ¦bergauf und "~ab¦.
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign);
+% \eg ¦(pseudo"~)""wissenschaftlich¦.
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to \cmd\slash, hyphenation at the breakpoints
+% preset in the hyphenation patterns is still allowed.
+% \end{shorthands}
+%
+% There are also four shorthands for quotation signs:
+% \begin{shorthands}
+% \item[¦"`¦] for German left double quotes („)
+% \item[¦"'¦] for German right double quotes (“)
+% \item[¦"<¦] for French left double quotes («)
+% \item[¦">¦] for French right double quotes (»).
+% \end{shorthands}
+% \item \xpgchoicekey[1.2.0]{script}{\xpgpresetvalue{latin} or \xpgvalue{blackletter}\new{1.46} (= \xpgvalue{fraktur})}
+% Setting ¦script=blackletter¦ adapts the captions for typesetting German in blackletter type (using the long s (ſ)
+% where appropriate).
+% \end{itemize}
+%
+% \subsection{greek}\label{greek}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{variant}{\xpgpresetvalue{monotonic} (= \xpgvalue{mono}), \xpgvalue{polytonic} (= \xpgvalue{poly}), or \xpgvalue{ancient}}
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{greek} or \xpgvalue{arabic}}
+% \item \xpgboolkeyfalse{attic}
+% \end{itemize}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\Greeknumber and \Cmd\greeknumber \ (see section \ref{abjad}).
+% \item The command \Cmd\atticnumeral (= \Cmd\atticnum) (activated with
+% the option ¦attic=true¦), displays numbers using the acrophonic
+% numbering system (defined in the Unicode range
+% \textsf{U+10140–U+10174}).\footnote{ %
+% See the documentation of the \pkg{xgreek} package for more details.}
+% \end{itemize}
+%
+% \subsection{hebrew}\label{hebrew}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{numerals}{\xpgvalue{hebrew} or \xpgpresetvalue{arabic}}
+% \item \xpgchoicekey{calendar}{\xpgvalue{hebrew} or \xpgpresetvalue{gregorian}}
+% \item \xpgboolkeyfalse{marcheshvan}
+% If \xpgvalue{true}, the second month of the civil year will be output as
+% \texthebrew{מרחשון} (Marcheshvan) rather than \texthebrew{חשון} (Heshvan),
+% which is the default.
+% \end{itemize}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\hebrewnumeral\ (= \Cmd\hebrewalph) (see section \ref{abjad}).
+% \item \Cmd\aemph (see section \ref{arabic}).
+% \end{itemize}
+%
+% \subsection[hindi]{hindi\new{1.2.0}}\label{hindi}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{numerals}{\xpgvalue{Western} or \xpgpresetvalue{Devanagari}}
+% \end{itemize}
+%
+% \subsection{hungarian}\label{hungarian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.46]{swapstrings}{\xpgdefaultvalue{\xpgpresetvalue{all}},
+% \xpgvalue{captions}, \xpgvalue{headings}, \xpgvalue{headers}, \xpgvalue{hheaders}, or \xpgvalue{none}}
+% In Hungarian, some caption strings need to be in a different order than in other languages
+% (\eg \emph{1. fejezet} instead of \emph{Chapter 1}). By default, \pkg{polyglossia} tries hard to
+% provide the correct order for different classes and packages (standard classes, \pkg{KOMA-script},
+% \pkg{memoir}, and \pkg{titlesec} package should work, as well as \pkg{fancyhdr} and \pkg{caption}).
+% However, since the definition of these strings is not standardized, the redefinitions might not work
+% and even interfere badly if you use specific classes or packages that redefine the respective strings
+% themselves. In this case, you can disable some or all changes.
+% The possibilities are:
+% \begin{itemize}
+% \item ¦all¦: Redefine figure and table captions, part and chapter headings, and running headers (=~default setting)
+% \item ¦captions¦: Redefine figure and table captions only
+% \item ¦headings¦: Redefine part and chapter headings only
+% \item ¦headers¦: Redefine running headers only
+% \item ¦hheaders¦: Redefine part and chapter headings as well as running headers
+% \item ¦none¦: Do not redefine anything
+% \end{itemize}
+% \end{itemize}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\ontoday\ (= \Cmd\ondatehungarian): special form of \cmd\today\ which produces a slightly different
+% date format as used in prepositional phrases (such as ‘on February 10th’) in Hungarian.
+% \end{itemize}
+%
+% \subsection{italian}\label{italian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.2.0cc]{babelshorthands}% TODO: check version
+% Activates the ¦"¦ character as a switch to perform etymological
+% hyphenation when followed by a letter. Furthermore, the following shorthands are activated:
+% \begin{shorthands}
+% \item[¦""¦] double raised open quotes (the Italian keyboard misses the backtick).
+% \item[¦"<¦] open guillemet (looks like <<).
+% \item[¦">¦] closing guillemet (looks like >>).
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to \cmd\slash,
+% hyphenation at the breakpoints preset in the hyphenation patterns is still allowed.
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \end{shorthands}
+% \end{itemize}
+%
+% \subsection[korean]{korean\new{1.40.0}}\label{korean}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{variant}{\xpgpresetvalue{plain}, \xpgvalue{classic}, or \xpgvalue{modern}}
+% These variants control spacing before/after CJK punctuations.
+% \begin{itemize}
+% \item ¦plain¦: Do nothing
+% \item ¦classic¦: Suitable for text with no interword spaces.
+% This option forces CJK punctuations to half-width, and
+% inserts half-width glue around them.
+% \item ¦modern¦: Suitable for text with interword spaces.
+% This option forces CJK punctuations to half-width, and
+% inserts small (half of interword space) glue around them.
+% \end{itemize}
+% \item \xpgchoicekey{captions}{\xpgpresetvalue{hangul} or \xpgvalue{hanja}}
+% \item \xpgchoicekey[1.47]{swapstrings}{\xpgdefaultvalue{\xpgpresetvalue{all}},
+% \xpgvalue{headers}, \xpgvalue{headings}, or \xpgvalue{none}}
+% With this option, Korean-style part and chapter headings, and
+% running headers are available.
+% It is similar to Hungarian (see \ref{hungarian}) except that
+% figure and table captions are not touched.
+% \begin{itemize}
+% \item ¦all¦: Redefine part and chapter headings, and running headers
+% (=~default setting)
+% \item ¦headings¦: Redefine part and chapter headings only
+% \item ¦headers¦: Redefine running headers only
+% \item ¦none¦: Do not redefine anything
+% \end{itemize}
+% \end{itemize}
+%
+% \subsection[kurdish]{kurdish\new{1.45}}\label{kurdish}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{variant}{\xpgvalue{kurmanji} or \xpgpresetvalue{sorani}}
+% \item \xpgchoicekey{script}{\xpgvalue{Arabic} or \xpgvalue{Latin}}
+% Defaults are \xpgvalue{Arabic} for Sorani and \xpgvalue{Latin} for Kurmanji.
+% \item \xpgchoicekey{numerals}{\xpgvalue{western} or \xpgvalue{eastern}}
+% Defaults are \xpgvalue{western} for Latin and \xpgvalue{eastern} for Arabic script, depending
+% on the selection above.
+% \item \xpgboolkeyfalse{abjadjimnotail}
+% Set this to true if you want the \textit{abjad} form of the number three to
+% be \textarabic{ج‍} – as in the manuscript tradition – instead of the
+% modern usage \textarabic{ج}.
+% ^^A \item \xpgchoicekey{locale}{} (not yet implemented)
+% ^^A \item \xpgchoicekey{calendar}{} (not yet implemented)
+% \end{itemize}
+% \condbreak{2\baselineskip}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\ontoday: special form of \cmd\today\ which produces a slightly different
+% date format as used in prepositional phrases (as in ‘on February 10th’). Only available for Latin script.
+% \item \Cmd\abjad (see section \ref{abjad})
+% \item \Cmd\aemph (see section \ref{arabic})
+% \end{itemize}
+%
+% \subsection[lao]{lao\new{1.2.0}}\label{lao}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{numerals}{\xpgvalue{lao} or \xpgpresetvalue{arabic}}
+% \end{itemize}
+%
+% \subsection{latin}\label{latin}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{variant}{\xpgvalue{classic}, \xpgvalue{medieval}, \xpgpresetvalue{modern}, or \xpgvalue{ecclesiastic}\new{1.46}}
+% These variants refer to different spelling conventions. The \xpgvalue{classic}
+% and the \xpgvalue{medieval} variant do not use the letters \emph{U} and
+% \emph{v}, but only \emph{V} and \emph{u}. This concerns predefined terms like
+% month names as well as the behaviour of the \cmd\MakeUppercase\ and the
+% \cmd\MakeLowercase\ command. The ¦medieval¦ and the
+% ¦ecclesiastic¦ variant use the ligatures \emph{\ae} and \emph{\oe}.
+% See table \ref{tab:latin-spelling} for examples.
+%
+% Furthermore, the \xpgvalue{ecclesiastic} variant takes care for a punctuation
+% spacing similar to French, but with smaller spaces, as provided for
+% PDF\TeX\ by the \pkg{ecclesiastic} package.
+% \begin{table}
+% \centering
+% \caption{\label{tab:latin-spelling}Spelling differences between the Latin
+% language variants.\newline The capitalization of month names and the use of
+% \emph{i/j} may be affected by the \xpgvalue{capitalizemonth} and the
+% \xpgvalue{usej} option.}
+% \begin{tabular}{llll}
+% \toprule
+% \textbf{classic} & \textbf{medieval} & \textbf{modern} & \textbf{ecclesiastic} \\
+% \midrule
+% Ianuarii & Ianuarii & Ianuarii & ianuarii \\
+% Nouembris & Nouembris & Novembris & novembris \\
+% Praefatio & Præfatio & Praefatio & Præfatio \\
+% \addlinespace\multicolumn{4}{@{}l}{\cmd{\MakeUppercase\{Iulius\}} yields:} \\
+% IVLIVS & IVLIVS & IULIUS & IULIUS \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+% \item \xpgchoicekey[1.46]{hyphenation}{\xpgvalue{classic}, \xpgvalue{modern}, or \xpgvalue{liturgical}}
+% There are three different sets of hyphenation patterns for Latin. Separate
+% documention for them is available on the
+% Internet.\footnote{\url{https://github.com/gregorio-project/hyphen-la/blob/master/doc/README.md\#hyphenation-styles}}
+% Each of the four variants mentioned above has its default set of hyphenation
+% patterns as indicated by table \ref{tab:latin-hyphenation}. Use the
+% ¦hyphenation¦ option if the default style does not fit your needs.
+% Note that the liturgical hyphenation patterns are the default of none of the
+% language variants. To use them, you have to say
+% \xpgvalue{hyphenation=liturgical} in any case.
+% \begin{table}
+% \caption{\label{tab:latin-hyphenation}Latin default hyphenation styles}
+% \centering
+% \begin{tabular}{ll}
+% \toprule
+% \textbf{Language variant} & \textbf{Default hyphenation style} \\
+% \midrule
+% classic & classic \\
+% medieval & modern \\
+% modern & modern \\
+% ecclesiastic & modern \\
+% \bottomrule
+% \end{tabular}
+% \end{table}
+% \item \xpgboolkeyfalse[1.46]{ecclesiasticfootnotes}
+% Use footnotes as provided by the \pkg{ecclesiastic} package, which typesets
+% footnotes with ordinary instead of superior numbers and without indentation.
+% As many ecclesiastic documents and liturgical books use footnotes that are
+% very similar to the ordinary \LaTeX\ ones, we do not use this footnote style
+% as default even for the ¦ecclesiastic¦ variant.
+%
+% Note that this option is only possible if Latin is the main language of your
+% document.
+% \item \xpgboolkeyfalse[1.46]{usej}
+% Use \emph{J/j} in predefined terms. The letter \emph{j} is not of ancient
+% origin. In early modern times, it was used to distinguish the consonantic
+% \emph{i} from the vocalic~\emph{i}. Nowadays, the use of \emph{j} has
+% disappeared from most Latin publications. So ¦false¦ is the default
+% value for all four language variants. Use this option if you prefer
+% \emph{Januarii} and \emph{Maji} to \emph{Ianuarii} and \emph{Maii}.
+% \item \xpgboolkey[1.46]{capitalizemonth}
+% Capitalize the month name when printing dates (using the \cmd\today\
+% command). Traditionally, month names are capitalized. However, in recent
+% liturgical books they are lowercase. So ¦true¦ is the default value for
+% the variants ¦classic¦, ¦medieval¦, and ¦modern¦,
+% whereas ¦false¦ is the default value for the ¦ecclesiastic¦
+% variant.
+% \item \xpgboolkeyfalse{babelshorthands}
+% Enable the following shorthands inherited from \pkg{babel-latin} and the
+% \pkg{ecclesiastic} package.
+% \begin{shorthands}
+% \item[¦"<¦] for « (left guillemet)
+% \item[¦">¦] for » (right guillemet)
+% \item[¦"¦] If no other shorthand applies, ¦"¦ before any letter
+% character defines an optional break point allowing further break points
+% within the same word (as opposed to the \cmd\- command).
+% \item[¦"|¦] the same as ¦"¦, but also possible before non-letter
+% characters
+% \item[¦'a¦] for á (a with acute), also available for é, í, ó, ú, ý, ǽ, and
+% \'œ
+% \item[¦'A¦] for Á (A with acute), also available for É, Í, Ó, Ú, \'V, Ý, Ǽ,
+% and \'Œ
+% \end{shorthands}
+% The following shorthands are only available for the ¦medieval¦ and the
+% ¦ecclesiastic¦ variant.
+% \begin{shorthands}
+% \item[¦"ae¦] for æ (ae ligature), also available for œ
+% \item[¦"Ae¦] for Æ (AE ligature), also available for Œ
+% \item[¦"AE¦] for Æ (AE ligature), also available for Œ
+% \item[¦'ae¦] for ǽ (ae ligature with acute), also available for \'œ
+% \item[¦'Ae¦] for Ǽ (AE ligature with acute), also available for \'Œ
+% \item[¦'AE¦] for Ǽ (AE ligature with acute), also available for \'Œ
+% \end{shorthands}
+% \item \xpgboolkeyfalse[1.46]{prosodicshorthands}
+% Enable shorthands for prosodic marks (macrons and breves) very similiar to
+% those provided by \pkg{babel-latin} using the ¦withprosodicmarks¦
+% modifier.
+% Note that the active ¦=¦ character used for macrons will cause problems with
+% commands using \texttt{key=value} interfaces, such as the command
+% ¦\includegraphics[scale=2]{...}¦. Use \cmd{\shorthandoff\{=\}} before
+% such commands (and \cmd{\shorthandon\{=\}} thereafter) within every
+% environment with prosodic shorthands enabled.
+%
+% The following shorthands are available.
+% \begin{shorthands}
+% \item[¦=a¦] for ā (a with macron), also available for ē, ī, ō, ū, and ȳ
+% \item[¦=A¦] for Ā (A with macron), also available for Ē, Ī, Ō, Ū, V̄, and Ȳ.
+% Note that a macron above the letter V is only displayed if your font
+% supports the Unicode character ¦0304¦ (\emph{combining macron}).
+% \item[¦=ae¦] for a͞e (ae diphthong with macron), also available for a͞u, e͞u,
+% and o͞e. Note that macrons above diphthongs are only displayed if your font
+% supports the Unicode character ¦035E¦ (\emph{combining double
+% macron}).
+% \item[¦=Ae¦] for A͞e (Ae diphthong with macron), also available for A͞u, E͞u,
+% and O͞e.
+% \item[¦=AE¦] for A͞E (AE diphthong with macron), also available for A͞U, E͞U,
+% and O͞E.
+% \item[¦\textasciicircum a¦] for ă (a with breve), also available for ĕ, ĭ,
+% ŏ, ŭ, and y̆. Note that a breve above the letter y is only displayed if
+% your font supports the Unicode character ¦0306¦ (\emph{combining
+% breve}).
+% \item[¦\textasciicircum A¦] Ă (A with breve), also available for Ĕ, Ĭ, Ŏ,
+% Ŭ, V̆, and Y̆. Note that breves above the letters V and Y are only displayed
+% if your font supports the Unicode character ¦0306¦ (\emph{combining
+% breve}).
+% \end{shorthands}
+% \end{itemize}
+%
+% \subsection{malay}\label{malay}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.45]{variant}{\xpgpresetvalue{indonesian} or \xpgvalue{malaysian}}
+% \end{itemize}
+%
+% \subsection{marathi}\label{marathi}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{Devanagari} or \xpgvalue{Western}}
+% \end{itemize}
+%
+% \subsection[mongolian]{mongolian\new{1.45}}\label{mongolian}
+% Currently, only the Khalkha variety in Cyrillic script is supported.
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse{babelshorthands}
+% If this is turned on, the following shorthands are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"---¦] Cyrillic emdash in plain text.
+% \item[¦"--~¦] Cyrillic emdash in compound names (surnames).
+% \item[¦"--*¦] Cyrillic emdash for denoting direct speech.
+% \item[¦",¦] thinspace for initials with a breakpoint in following surname.
+% \item[¦"‘¦] for German left double quotes (looks like ,,).
+% \item[¦"’¦] for German right double quotes (looks like “).
+% \item[¦"<¦] for French left double quotes (looks like <<).
+% \item[¦">¦] for French right double quotes (looks like >>).
+% \end{shorthands}
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{arabic}, \xpgvalue{cyrillic-alph} or \xpgvalue{cyrillic-trad}}
+% Uses either Arabic numerals or Cyrillic alphanumerical numbering. The two Cyrillic variants differ as follows:
+% \begin{itemize}
+% \item \xpgvalue{cyrillic-alph} steps through the Cyrillic alphabet. Thus it can only be used up to 30.
+% \item \xpgvalue{cyrillic-trad} (= \xpgvalue{cyrillic}) uses a traditional Cyrillic alphanumeric system.%
+% \footnote{See \url{https://en.wikipedia.org/wiki/Cyrillic_numerals}.}
+% It supports numbers up to 999\,999.
+% \end{itemize}
+% \end{itemize}
+% ^^A
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\Asbuk: produces uppercased Cyrillic alphanumerals, for environments such as ¦enumerate¦.
+% It steps through the Cyrillic alphabet and thus it can only be used up to 30.
+% The command takes a counter as argument, \eg ¦\textmongolian{\Asbuk{section}}¦ produces \textrussian{\Asbuk{section}}.
+% \item \Cmd\asbuk: same as \cmd\Asbuk\ but in lowercase.
+% \item \Cmd\AsbukTrad: same as \cmd\Asbuk\ but using the traditional Cyrillic alphanumeric numbering which supports
+% numbers up to 999\,999.\\
+% \Eg ¦\textmongolian{\AsbukTrad{section}}¦ produces \textrussian{\AsbukTrad{section}}.
+% \item \Cmd\asbukTrad: same as \cmd\AsbukTrad\ but in lowercase.
+% \end{itemize}
+%
+% \subsection{norwegian}\label{norwegian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.45]{variant}{\xpgvalue{bokmal} or \xpgpresetvalue{nynorsk}}
+% \end{itemize}
+%
+% \subsection{persian}\label{persian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{numerals}{\xpgvalue{western} or \xpgpresetvalue{eastern}}
+% \item \xpgboolkeyfalse[1.0.3]{abjadjimnotail}
+% Set this to \xpgvalue{true} if you want the \textit{abjad} form of the number three to
+% be \textarabic{ج‍} – as in the manuscript tradition – instead of the
+% modern usage \textarabic{ج}.
+% ^^A \item \xpgchoicekey{locale}{} (not yet implemented)
+% ^^A \item \xpgchoicekey{calendar}{} (not yet implemented)
+% \end{itemize}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\abjad (see section \ref{abjad})
+% \item \Cmd\aemph (see section \ref{arabic}).
+% \end{itemize}
+%
+% \subsection{portuguese}\label{portuguese}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.45]{variant}{\xpgvalue{brazilian} or \xpgpresetvalue{portuguese}}
+% \end{itemize}
+%
+% \subsection{russian}\label{russian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse{babelshorthands}
+% If this is turned on, the following shorthands are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"---¦] Cyrillic emdash in plain text.
+% \item[¦"--~¦] Cyrillic emdash in compound names (surnames).
+% \item[¦"--*¦] Cyrillic emdash for denoting direct speech.
+% ^^A These are commented out in gloss-russian
+% ^^A \item[¦",¦] thinspace for initials with a breakpoint in following surname.
+% ^^A \item[¦"‘¦] for German left double quotes (looks like ,,).
+% ^^A \item[¦"’¦] for German right double quotes (looks like “).
+% ^^A \item[¦"<¦] for French left double quotes (looks like <<).
+% ^^A \item[¦">¦] for French right double quotes (looks like >>).
+% \end{shorthands}
+% \item \xpgboolkeytrue[1.46]{indentfirst}
+% By default, all paragraphs are indented in Russian, also those after a
+% chapter or section heading. If this option is false, the latter paragraphs
+% are not indented, as normal in \LaTeX.
+% \item \xpgchoicekey{spelling}{\xpgpresetvalue{modern} or \xpgvalue{old}}
+% This option is for captions and date only, not for hyphenation.
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{arabic}, \xpgvalue{cyrillic-alph} or \xpgvalue{cyrillic-trad}}
+% Uses either Arabic numerals or Cyrillic alphanumerical numbering. The two Cyrillic variants differ as follows:
+% \begin{itemize}
+% \item \xpgvalue{cyrillic-alph} steps through the Cyrillic alphabet. Thus it can only be used up to 30.
+% \item \xpgvalue{cyrillic-trad} (= \xpgvalue{cyrillic}) uses a traditional Cyrillic alphanumeric system.%
+% \footnote{See \url{https://en.wikipedia.org/wiki/Cyrillic_numerals}.}
+% It supports numbers up to 999\,999.
+% \end{itemize}
+% \end{itemize}
+% ^^A
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\Asbuk: produces uppercased Cyrillic alphanumerals, for environments such as ¦enumerate¦.
+% It steps through the Cyrillic alphabet and thus it can only be used up to 30.
+% The command takes a counter as argument, \eg ¦\textrussian{\Asbuk{section}}¦ produces \textrussian{\Asbuk{section}}.
+% \item \Cmd\asbuk: same as \cmd\Asbuk\ but in lowercase.
+% \item \Cmd\AsbukTrad: same as \cmd\Asbuk\ but using the traditional Cyrillic alphanumeric numbering which supports
+% numbers up to 999\,999.\\
+% \Eg ¦\textrussian{\AsbukTrad{page}}¦ produces \textrussian{\AsbukTrad{page}}.
+% \item \Cmd\asbukTrad: same as \cmd\AsbukTrad\ but in lowercase.
+% \end{itemize}
+%
+% \subsection[sami]{sami\new{1.45}}\label{sami}
+% Currently support for Sami is limited to Northern Sami.
+%
+% \subsection{sanskrit}\label{sanskrit}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.0.2]{script}{\xpgpresetvalue{Devanagari}, \xpgvalue{Gujarati},
+% \xpgvalue{Malayalam}, \xpgvalue{Bengali}, \xpgvalue{Kannada}, \xpgvalue{Telugu}, or \xpgvalue{Latin}}
+% The value is passed to \pkg{fontspec} in cases where the respective
+% \cmd{\⟨script⟩font} is not defined. This can be useful if you typeset Sanskrit
+% texts in scripts other than Devanagari.
+% \item \xpgchoicekey[1.45]{numerals}{\xpgpresetvalue{Devanagari} or \xpgvalue{Western}}
+% \end{itemize}
+%
+% \subsection{serbian}\label{serbian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{script}{\xpgpresetvalue{Cyrillic} or \xpgvalue{Latin}}
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{arabic}, \xpgvalue{cyrillic-alph} or \xpgvalue{cyrillic-trad}}
+% Uses either Arabic numerals or Cyrillic alphanumerical numbering. The two Cyrillic variants differ as follows:
+% \begin{itemize}
+% \item \xpgvalue{cyrillic-alph} steps through the Cyrillic alphabet. Thus it can only be used up to 30.
+% \item \xpgvalue{cyrillic-trad} (= \xpgvalue{cyrillic}) uses a traditional Cyrillic alphanumeric system.%
+% \footnote{See \url{https://en.wikipedia.org/wiki/Cyrillic_numerals}.}
+% It supports numbers up to 999\,999.
+% \end{itemize}
+% \end{itemize}
+% ^^A
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\Asbuk: produces uppercased Cyrillic alphanumerals, for environments such as ¦enumerate¦.
+% It steps through the Cyrillic alphabet and thus it can only be used up to 30.
+% The command takes a counter as argument, \eg ¦\textserbian{\Asbuk{section}}¦ produces \textrussian{\Asbuk{section}}.
+% \item \Cmd\asbuk: same as \cmd\Asbuk\ but in lowercase.
+% \item \Cmd\AsbukTrad: same as \cmd\Asbuk\ but using the traditional Cyrillic alphanumeric numbering which supports
+% numbers up to 999\,999.\\
+% \Eg ¦\textserbian{\AsbukTrad{page}}¦ produces \textrussian{\AsbukTrad{page}}.
+% \item \Cmd\asbukTrad: same as \cmd\AsbukTrad\ but in lowercase.
+% \end{itemize}
+%
+%
+% \subsection{slovak}\label{slovak}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse[1.46]{babelshorthands}
+% If this is turned on, the following shorthands for Slovak are activated:
+% \begin{shorthands}
+% \item[¦"=¦] for an explicit hyphen sign which is repeated at the beginning
+% of the next line when hyphenated, as common in Slovak typesetting
+% (only needed with ¦splithyphens=false¦).
+% \item[¦"|¦] disables a ligature at this position.
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"/¦] a slash that allows for a subsequent line break. As opposed to \cmd\slash, hyphenation at the breakpoints
+% preset in the hyphenation patterns is still allowed.
+% \item[¦"‘¦] for Slovak left double quotes (looks like ,,).
+% \item[¦"’¦] for Slovak right double quotes (looks like “).
+% \item[¦">¦] for Slovak left double guillemets (looks like >>).
+% \item[¦"<¦] for Slovak right double guillemets (looks like <<).
+% \end{shorthands}
+% \item \xpgboolkeytrue[1.46]{splithyphens}
+% According to Slovak typesetting conventions, if a word with a hard hyphen (such as \emph{je-li})
+% is hyphenated at this hyphen, a second hyphenation character is to be inserted at the beginning
+% of the line that follows the hyphenation (\emph{je-/-li}).
+% By default, this is done automatically (if you are using \LuaTeX, the \pkg{luavlna} package is
+% loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
+% \item \xpgboolkeytrue[1.46]{vlna}
+% According to Slovak typesetting conventions, single-letter words (non-syllable prepositions)
+% must not occur at line ends.
+% \pkg{Polyglossia} takes care of this automatically by default (if you are using \LuaTeX, the
+% \pkg{luavlna} package is loaded to achieve this).
+% Set this option to ¦false¦ to disable the feature.
+% \end{itemize}
+%
+% \subsection{slovenian}\label{slovenian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse{localalph}
+% If \xpgvalue{true}, alpha-numeric counters will use a localized version including characters with caron
+% (a, b, c, č, d, \ldots).
+% \end{itemize}
+%
+% \subsection{sorbian}\label{sorbian}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.45]{variant}{\xpgvalue{lower} or \xpgpresetvalue{upper}}
+% \item \xpgboolkeyfalse[1.45]{olddate}
+% If \xpgvalue{true}, \cmd\today\ will use traditional Sorbian month names (\ie it will be
+% synonymous to \cmd\oldtoday\ below).
+% \end{itemize}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\oldtoday: outputs the current date using traditional Sorbian month names, even if
+% \xpgvalue{olddate} is \xpgvalue{false}.
+% \end{itemize}
+%
+% \subsection{spanish}\label{spanish}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.46]{variant}{\xpgpresetvalue{spanish} or \xpgvalue{mexican}}
+% \item \xpgchoicekey[1.46]{spanishoperators}{\xpgdefaultvalue{all}, \xpgvalue{accented},
+% \xpgvalue{spaced}, \xpgvalue{none}, or \xpgpresetvalue{false}}
+% Determines of and how math operators are localized to Spanish.
+% \begin{itemize}
+% \item ¦accented¦ causes some math operators to use accents where usual in Spanish (\emph{lím},
+% \emph{lím\,sup}, \emph{lím\,inf}, \emph{máx}, \emph{mín}, \emph{ínf}, \emph{mód}).
+% \item ¦spaced¦ causes some math operators to use spaces where usual in Spanish (\emph{arc\,cos},
+% \emph{arc\,sen}, \emph{arc\,tg}).
+% \item ¦all¦ activates ¦accented¦ and ¦spaced¦ and furthermore provides Spanish localizations of
+% \cmd\sin\ (\emph{sen}), \cmd\tan\ (\emph{tg}), \cmd\sinh\ (\emph{senh}), and \cmd\tanh\ (\emph{tgh}).
+% \item ¦none¦ does no localization at all (default setting).
+% \end{itemize}
+% \end{itemize}
+% \paragraph*{\color{black}Commands:}\new{1.46}
+% \begin{itemize}
+% \item \Cmd\arcsen: alias to \cmd\arcsin\ (\pkg{babel} compatibility)
+% \item \Cmd\arctg: alias to \cmd\arctan\ (\pkg{babel} compatibility)
+% \item \Cmd\sen: alias to \cmd\sin\ (\pkg{babel} compatibility)
+% \item \Cmd\senh: alias to \cmd\sinh\ (\pkg{babel} compatibility)
+% \item \Cmd\tg: alias to \cmd\tan\ (\pkg{babel} compatibility)
+% \item \Cmd\tgh: alias to \cmd\tanh\ (\pkg{babel} compatibility)
+% \item \Cmd\spanishoperator: allows you to define further localized operators. For instance, ¦\spanishoperator{cotg}¦
+% defines a command \cmd\cotg\ that outputs \emph{cotg} in math. The optional argument of the command lets you specify the
+% spelling, if needed, \eg ¦\spanishoperator[arc\,ctg]{arcctg}¦.
+% \end{itemize}
+%
+% \subsection{syriac}\label{syriac}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey[1.0.1]{numerals}{\xpgpresetvalue{western} (\ie 1234567890), \xpgvalue{eastern}
+% (for which the Oriental Arabic numerals are used: \textarabic{١٢٣٤٥٦٧٨٩٠}), or
+% \xpgvalue{abjad}}
+% \end{itemize}
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\abjadsyriac (see section \ref{abjad})
+% \item \Cmd\aemph (see section \ref{arabic}).
+% \end{itemize}
+%
+% \subsection{thai}\label{thai}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{numerals}{\xpgvalue{thai} or \xpgpresetvalue{arabic}}
+% \end{itemize}
+% ^^A
+% To insert word breaks, you need to use an external processor.
+% See the documentation to \pkg{thai-latex} and the file \file{testthai.tex}
+% that comes with this package.
+%
+% \subsection{tibetan}\label{tibetan}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{numerals}{\xpgvalue{tibetan} or \xpgpresetvalue{arabic}}
+% \end{itemize}
+%
+% \subsection{ukrainian}\label{ukrainian}
+%
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgboolkeyfalse{babelshorthands}
+% If this is turned on, the following shorthands are activated:
+% \begin{shorthands}
+% \item[¦"-¦] adds a hyphenation point that does still allow for hyphenation at the points preset
+% in the hyphenation patterns (as opposed to \cmd\-).
+% \item[\texttt{"\textasciitilde}] for a hyphen sign without a breakpoint. Useful for
+% cases where the hyphen should stick at the following syllable.
+% \item[¦"|¦] disables a ligature at this position.
+% \item[¦""¦] allows for a line break at this position (without hyphenation sign).
+% \item[¦"---¦] Cyrillic emdash in plain text.
+% \item[¦"--~¦] Cyrillic emdash in compound names (surnames).
+% \item[¦"--*¦] Cyrillic emdash for denoting direct speech.
+% ^^A These are commented out in gloss-ukrainian
+% ^^A \item[¦",¦] thinspace for initials with a breakpoint in following surname.
+% ^^A \item[¦"‘¦] for German left double quotes (looks like ,,).
+% ^^A \item[¦"’¦] for German right double quotes (looks like “).
+% ^^A \item[¦"<¦] for French left double quotes (looks like <<).
+% ^^A \item[¦">¦] for French right double quotes (looks like >>).
+% \end{shorthands}
+% \item \xpgchoicekey{numerals}{\xpgpresetvalue{arabic}, \xpgvalue{cyrillic-alph} or \xpgvalue{cyrillic-trad}}
+% Uses either Arabic numerals or Cyrillic alphanumerical numbering. The two Cyrillic variants differ as follows:
+% \begin{itemize}
+% \item \xpgvalue{cyrillic-alph} steps through the Cyrillic alphabet. Thus it can only be used up to 30.
+% \item \xpgvalue{cyrillic-trad} (= \xpgvalue{cyrillic}) uses a traditional Cyrillic alphanumeric system.%
+% \footnote{See \url{https://en.wikipedia.org/wiki/Cyrillic_numerals}.}
+% It supports numbers up to 999\,999.
+% \end{itemize}
+% \end{itemize}
+% ^^A
+% \paragraph*{Commands:}
+% \begin{itemize}
+% \item \Cmd\Asbuk: produces uppercased Cyrillic alphanumerals, for environments such as ¦enumerate¦.
+% It steps through the Cyrillic alphabet and thus it can only be used up to 30.
+% The command takes a counter as argument, \eg ¦\textukrainian{\Asbuk{section}}¦ produces \textrussian{\Asbuk{section}}.
+% \item \Cmd\asbuk: same as \cmd\Asbuk\ but in lowercase.
+% \item \Cmd\AsbukTrad: same as \cmd\Asbuk\ but using the traditional Cyrillic alphanumeric numbering which supports
+% numbers up to 999\,999.\\
+% \Eg ¦\textukrainian{\AsbukTrad{page}}¦ produces \textrussian{\AsbukTrad{page}}.
+% \item \Cmd\asbukTrad: same as \cmd\AsbukTrad\ but in lowercase.
+% \end{itemize}
+%
+% \subsection{welsh}\label{welsh}
+% \paragraph*{Options:}
+% \begin{itemize}
+% \item \xpgchoicekey{date}{\xpgvalue{long} or \xpgpresetvalue{short}}
+% \end{itemize}
+%
+%
+% \section{Modifying or extending captions, date formats and language settings}
+%
+% \pkg{Polyglossia} uses the following macros to define language-specific captions
+% (\ie strings such as ``chapter''), date formats and additional language settings
+% (\meta{lang} is to be replaces with the respective language name):
+%
+% \begin{itemize}
+% \item \Cmd{\captions\meta{lang}} stores definitions of caption strings
+% (such as, in the case of English, ¦\def\chaptername{Chapter}¦)
+% \item \Cmd{\date\meta{lang}} stores definitions of date formats (usually redefinitions
+% of \cmd\today, in some cases also definitions of additional date commands)
+% \item \Cmd{\blockextras\meta{lang}} stores macros that are to be executed when the language
+% \meta{lang} is activated via \cmd\selectlanguage command or the \meta{lang} environment
+% \item \Cmd{\inlineextras\meta{lang}} stores macros that are to be executed when the language
+% \meta{lang} is activated locally via \cmd\text\meta{lang} command
+% \item \Cmd{\noextras\meta{lang}} stores macros that are to be executed when the language
+% \meta{lang} is closed
+% \end{itemize}
+% ^^A
+% In order to redefine internal macros, we recommend to use the command \cmd\gappto.
+% For compatibility with \pkg{babel} the command \cmd\addto\ is also available
+% to the same effect. For instance, to change the \cmd\chaptername\ for language ¦lingua¦,
+% you can do this:
+% \begin{verbatim}
+% \gappto\captionslingua{\def\chaptername{Caput}}
+% \end{verbatim}
+% ^^A
+% Note that this needs to be done after the respective language has been loaded with
+% \cmd\setmainlanguage\ or \cmd\setotherlanguage.
+%
+% Specifically for package authors, analogous commands are provided which are only executed
+% if a specific language \emph{variety} is used. As opposed to the macros above, these refer
+% to babel names. Other than that, the function is identical:
+%
+% \begin{itemize}
+% \item \Cmd{\captions@bbl@\meta{babelname}}
+% \item \Cmd{\date@bbl@\meta{babelname}}
+% \item \Cmd{\blockextras@bbl@\meta{babelname}}
+% \item \Cmd{\inlineextras@bbl@\meta{babelname}}
+% \item \Cmd{\noextras@bbl@\meta{babelname}}
+% \end{itemize}
+% ^^A
+% By default, these macros are undefined. If they are defined (\eg by an external package),
+% they will be executed after their respective \meta{lang} counterpart and thus can be used to
+% overwrite definitions of the former. Again, use \cmd\gappto\ to define\slash modify these macros.
+% For instance, to add a new caption \cmd\footnotename\ to the Swiss variety of German (babel name
+% ¦nswissgerman¦), you can do this:
+% \begin{verbatim}
+% \gappto\captions@bbl@nswissgerman{\def\footnotename{Fussnote}}
+% \end{verbatim}
+% ^^A
+% If you do this in a document preamble rather than in a package, you need to embrace the redefinition
+% by \cmd\makeatletter\ and \cmd\makeatother\ due to the ¦@¦ in the macro names.
+%
+% Finally, as soon as the language has been switched (either inline or as a block), \pkg{polyglossia}
+% executes the (by default empty) hook
+% \begin{itemize}
+% \item \Cmd{\polyglossia@language@switched}
+% \end{itemize}
+% to which you can append arbitrary code (via \cmd\gappto) that should be executed if (a particular)
+% language is being activated. This is done before any of the above
+% macros are issued (so you can still alter them), but at a point where \cmd\languagename, \cmd\babelname\
+% and \cmd\languageid\ are already set, so you can condition on specific languages in your code.
+% This hook is particularly provided for package authors.
+%
+% \section{Script-specific numbering}
+%
+% Languages and scripts have specific numbering conventions. Some use decimal digits
+% (\eg Arabic numerals), some use alphabetic or alphanumerical notation (\eg Roman numbering).
+% In some cases, different conventions are available (\eg Mashriq or Maghrib numbering
+% in Arabic script, Arabic or Hebrew [=~alphanumeric] numbering in Hebrew).
+%
+% If the latter is the case, \pkg{polyglossia} provides language options which allow you to select
+% or switch to the suitable convention. With the appropriate language option set, \pkg{polyglossia}
+% will automatically convert the output of internal \LaTeX\ counters to their
+% localized forms, for instance to display page, chapter and section numbers.
+%
+% For manual input of numbers, macros are provided. These convert Arabic numeric input to the respective
+% local decimal digit (see sec.~\ref{sec:decdigit}), alphanumeric representation (see sec.~\ref{abjad})
+% or whatever is appropriate (see sec.~\ref{sec:localnumber}). The possibilities are described in turn.
+%
+% \subsection{General localization of numbering}\label{sec:localnumber}
+%
+% As of 1.45,\new{1.45} \pkg{polyglossia} provides a generic macro \Cmd\localnumeral\ which converts numbers
+% to the current local form (which might be script-specific decimal digit, an alphabetic numbering or something else).
+% For instance in an Arabic environment
+% ¦\localnumeral{42}¦ yields \textarabic{\localnumeral{42}}, whereas in an Hebrew environment, it
+% results in \texthebrew[numerals=hebrew]{\localnumeral{42}} with ¦numerals=hebrew¦, and \texthebrew{\localnumeral{42}}
+% with ¦numerals=arabic¦. Note that, as opposed to the various ¦digits¦ macros (described in sec.~\ref{sec:decdigit}),
+% the argument of \cmd\localnumeral\ must consist of numbers only.
+%
+% For\new{1.45} the conversion of counters, the starred version \Cmd{\localnumeral*} is provided. This takes a counter as argument.
+% For instance in an Arabic environment ¦\localnumeral*{page}¦ yields \textarabic{\localnumeral*{page}}.
+%
+% For scripts with alphanumeric numbering, the variants \Cmd{\Localnumeral} and \Cmd{\Localnumeral*} provide the uppercased
+% versions.\medskip
+%
+% \noindent All these macros provide the following options:
+%
+% \begin{itemize}
+% \item \DescribeMacro{[lang=]}\xpgchoicekey{lang}{\xpgpresetvalue{local}, \xpgvalue{main},
+% or \xpgvalue{\meta{language}}}
+% Output number in the local form of the currently active language for
+% ¦local¦, the main language of the document for ¦main¦, and any (loaded)
+% language for \meta{language} (\eg ¦\localnumeral[lang=arabic]{42}}¦).
+% \end{itemize}
+%
+% \subsection{Non-Western decimal digits}\label{sec:decdigit}
+%
+% In addition\new{1.1.1} to the generic macros described above, \pkg{polyglossia} provides language-specific conversion macros
+% which can be used if the generic ones do not suit the need.\footnote{%
+% A third method are so-called TECKit fontmappings.
+% Those can be activated with the \pkg{fontspec} ¦Mapping¦ option,
+% using ¦arabicdigits¦, ¦farsidigits¦ or ¦thaidigits¦.
+% For instance if \cmd\arabicfont\ is defined with the option ¦Mapping=arabicdigits¦,
+% typing \cmd{\textarabic\{2010\}} results in \textarabic{٢٠١٠}. Note that this method has some drawbacks, though,
+% for instance when the value of a counter has to be written and read from auxiliary files.
+% So please use this with care.}
+% The macros have the form \cmd{\⟨script⟩digits}. They convert Arabic numerical input and leave every other input untouched.
+% In an Arabic context, for instance, ¦\arabicdigits{9182/738543-X}¦ yields \textarabic{\arabicdigits{9182/738543-X}}.
+%
+% Currently, the following macros are provided:
+%
+% \begin{itemize}
+% \item \Cmd\arabicdigits
+% \item \Cmd\bengalidigits
+% \item \Cmd\devanagaridigits
+% \item \Cmd\farsidigits
+% \item \Cmd\kannadadigits
+% \item \Cmd\khmerdigits
+% \item \Cmd\laodigits
+% \item \Cmd\nkodigits
+% \item \Cmd\thaidigits
+% \item \Cmd\tibetandigits
+% \end{itemize}
+%
+%
+% \subsection{Non-Latin alphabetic numbering}\label{abjad}
+%
+% For languages which use special (non-Latin) alphanumerical notation\footnote{%
+% For instance, see \url{http://en.wikipedia.org/wiki/Greek_numerals},
+% \url{http://en.wikipedia.org/wiki/Abjad_numerals},
+% \url{http://en.wikipedia.org/wiki/Hebrew_numerals},
+% and \url{http://en.wikipedia.org/wiki/Syriac_alphabet}.}, dedicated macros are provided.
+%
+% They work in a similar way than the \cmd{\⟨script⟩digits} macros described above: They take Arabic numerical input
+% and output the respective value in the local alphabetic numbering scheme (most of these macros are equivalent
+% to \cmd\localnumeral\ and \cmd\Localnumeral\ in the respective context).
+%
+% The following macros are provided:
+%
+% \begin{itemize}
+% \item \Cmd\abjad outputs Arabic \textit{abjad} numbers according to the Mashriq varieties.
+% Example: ¦\abjad{1863}¦ yields \textarabic{\abjad{1863}}.
+%
+% \item \Cmd\abjadmaghribi outputs Arabic \textit{abjad} numbers according to the Maghrib varieties.
+% Example: ¦\abjadmaghribi{1863}¦ yields \textarabic{\abjadmaghribi{1863}}.
+%
+% \item \Cmd\abjadsyriac outputs Syriac abjad numerals.\footnote{%
+% A fine guide to numerals in Syriac can be found at \link{http://www.garzo.co.uk/documents/syriac-numerals.pdf}.}\\
+% Example: ¦\abjadsyriac{463}¦ yields \textsyriac{\abjadsyriac{463}}.
+%
+% \item \Cmd\armeniannumeral produces Armenian alphabetic numbering.
+% Example: ¦\armeniannumeral{1863}¦ yields \textarmenian{\armeniannumeral{1863}}.
+%
+% \item \Cmd\belarusiannumeral produces Belarusian numbering, with uppercased variant (for alphanumerical variant) via \Cmd\Belarusiannumeral.
+% Depending on the ¦numerals¦ option in the Belarusian language selection, this is either Arabic digit or Cyrillic
+% alphanumercial output.\\
+% Example: With ¦numerals=latin¦ ¦\belarusiannumeral{19}¦ yields \textrussian{\russiannumeral{19}},
+% with ¦numerals=cyrillic-trad¦ ¦\belarusiannumeral{19}¦ results in \textrussian[numerals=cyrillic-trad]{\russiannumeral{19}},\\
+% with ¦numerals=cyrillic-alph¦ ¦\belarusiannumeral{19}¦ results in \textrussian[numerals=cyrillic-alph]{\russiannumeral{19}}.
+%
+% \item \Cmd\georgiannumeral produces Georgian alphabetic numbering.\\
+% Example: ¦\georgiannumeral{1863}¦ yields \textgeorgian{\georgiannumeral{1863}}.
+%
+% \item \Cmd\greeknumeral produces Greek alphabetic numbering, \Cmd\Greeknumeral outputs uppercased variants.
+% Example: ¦\greeknumeral{1863}¦ yields \textgreek{\greeknumeral{1863}},
+% ¦\Greeknumeral{1863}¦ results in \textgreek{\Greeknumeral{1863}}.
+%
+% \item \Cmd\hebrewnumeral, \Cmd\Hebrewnumeral and \Cmd\Hebrewnumeralfinal generate variants of Hebrew alphanumeric numerals.
+% The commands behave exactly as they do in \pkg{babel}: \cmd\hebrewnumeral\ outputs the numbers without any decoration,
+% \cmd\Hebrewnumeral\ adds \textit{gereshayim} before the last letter, \cmd\Hebrewnumeralfinal\ uses in addition the final forms of Hebrew letters.
+% Examples:
+% ¦\hebrewnumeral{1750}¦ yields \texthebrew{\hebrewnumeral{1750}},
+% ¦\Hebrewnumeral{1750}¦ yields \texthebrew{\Hebrewnumeral{1750}},
+% and ¦\Hebrewnumeralfinal{1750}¦ yields \texthebrew{\Hebrewnumeralfinal{1750}}.
+%
+% \item \Cmd\mongoliannumeral produces Mongolian numbering, with uppercased variant (for alphanumerical variant) via \Cmd\Mongoliannumeral.
+% Depending on the ¦numerals¦ option in the Mongolian language selection, this is either Arabic digit or Cyrillic
+% alphanumercial output.\\
+% Example: With ¦numerals=latin¦ ¦\mongoliannumeral{19}¦ yields \textrussian{\russiannumeral{19}},
+% with ¦numerals=cyrillic-trad¦ ¦\mongoliannumeral{19}¦ results in \textrussian[numerals=cyrillic-trad]{\russiannumeral{19}},\\
+% with ¦numerals=cyrillic-alph¦ ¦\mongoliannumeral{19}¦ results in \textrussian[numerals=cyrillic-alph]{\russiannumeral{19}}.
+%
+% \item \Cmd\russiannumeral produces Russian numbering, with uppercased variant (for alphanumerical variant) via \Cmd\Russiannumeral.
+% Depending on the ¦numerals¦ option in the Russian language selection, this is either Arabic digit or Cyrillic
+% alphanumercial output.\\
+% Example: With ¦numerals=latin¦ ¦\russiannumeral{19}¦ yields \textrussian{\russiannumeral{19}},
+% with ¦numerals=cyrillic-trad¦ ¦\russiannumeral{19}¦ results in \textrussian[numerals=cyrillic-trad]{\russiannumeral{19}},\\
+% with ¦numerals=cyrillic-alph¦ ¦\russiannumeral{19}¦ results in \textrussian[numerals=cyrillic-alph]{\russiannumeral{19}}.
+%
+% \item \Cmd\serbiannumeral produces Serbian numbering, with uppercased variant (for alphanumerical variant) via \Cmd\Serbiannumeral.
+% Depending on the ¦numerals¦ option in the Serbian language selection, this is either Arabic digit or Cyrillic
+% alphanumercial output.\\
+% Example: With ¦numerals=latin¦ ¦\serbiannumeral{19}¦ yields \textrussian{\serbiannumeral{19}},
+% with ¦numerals=cyrillic-trad¦ ¦\serbiannumeral{19}¦ results in \textrussian[numerals=cyrillic-trad]{\serbiannumeral{19}},\\
+% with ¦numerals=cyrillic-alph¦ ¦\serbiannumeral{19}¦ results in \textrussian[numerals=cyrillic-alph]{\serbiannumeral{19}}.
+%
+% \item \Cmd\ukrainiannumeral produces Ukrainian numbering, with uppercased variant (for alphanumerical variant) via \Cmd\Ukrainiannumeral.
+% Depending on the ¦numerals¦ option in the Ukrainian language selection, this is either Arabic digit or Cyrillic
+% alphanumercial output.\\
+% Example: With ¦numerals=latin¦ ¦\ukrainiannumeral{19}¦ yields \textrussian{\russiannumeral{19}},
+% with ¦numerals=cyrillic-trad¦ ¦\ukrainiannumeral{19}¦ results in \textrussian[numerals=cyrillic-trad]{\russiannumeral{19}},\\
+% with ¦numerals=cyrillic-alph¦ ¦\ukrainiannumeral{19}¦ results in \textrussian[numerals=cyrillic-alph]{\russiannumeral{19}}.
+% \end{itemize}
+%
+%
+% \section{Footnotes in right-to-left context}
+%
+% With languages that use right-to-left scripts, footnote apparatuses are usually placed at the right side of the page bottom.
+% Consequently, the footnote rule also is to be placed right. Things get more tricky, though, if right-to-left and left-to-right
+% scripts are mixed. Then you might want to put the footnotes on some pages left, on some right, or even mix positions on a page.
+% Thus, footnote handling in right-to-left context sometimes needs manual intervention. This is described in what follows.
+%
+% \subsection{Horizontal footnote position}
+%
+% When right-to-left languages are used, the \cmd\footnote\ command becomes sensitive to the text directionality. The footnote is
+% always placed on the side that is currently the origin of direction: on the left side of the page in LTR paragraphs and
+% on the right in RTL paragraphs.
+%
+% For cases where this is not desired, two additional footnote commands are provided: \Cmd\RTLfootnote and \Cmd\LTRfootnote.
+% \cmd\LTRfootnote\ always places the footnote on the left side, notwithstanding the current
+% directionality. Likewise, \cmd\RTLfootnote\ always places it on the right side. Like \cmd\footnote, \cmd\RTLfootnote\
+% and \cmd\LTRfootnote\ provide an optional argument to customize the number.
+%
+%
+% \subsection{Footnote rule length and position}
+%
+% The default placement of the footnote rule differs in \XeTeX\ and \LuaTeX\ output (this is due to differences in the \textsf{bidi}
+% and \textsf{luabidi} packages). With \XeTeX, footnote rules are always placed left, which is often wrong in RTL context.
+% With \LuaTeX, by contrast, the rule is placed always right if the main language is a right-to-left language, and always left
+% if the main language is a left-to-right language, which is the right thing in many cases.
+%
+% In both cases, you can change the default behavior as follows:
+% \begin{itemize}
+% \item Put \Cmd\leftfootnoterule in the preamble to have all rules left-aligned.
+% \item Put \Cmd\rightfootnoterule in the preamble to have all rules right-aligned.
+% \item Put \Cmd\autofootnoterule in the preamble to have automatic placement depending on the context (see below for elaboration).
+% \item Put \Cmd\textwidthfootnoterule in the preamble to have a rule that spans the whole text width.
+% \end{itemize}
+% With \cmd\autofootnoterule, the first footnote on the current page determines the placement. Note that this automatic can fail with
+% footnotes at page boundaries that differ in directionality from the first footnote on the page. You can work around such cases by switching to \cmd\rightfootnoterule\ or \cmd\leftfootnoterule\ on these pages.
+%
+% Note also that the rule switches might interfere in bad ways with packages or classes that redefine footnotes themselves. This is also the reason
+% why \cmd\autofootnoterule\ is not used by default.
+%
+% \condbreak{5\baselineskip}
+% \section{Calendars}
+%
+% \subsection{Hebrew calendar (hebrewcal.sty)}
+% The package \file{hebrewcal.sty} is almost a verbatim copy of \file{hebcal.sty}
+% that comes with \pkg{babel}.
+% The command \Cmd\Hebrewtoday\ formats the current date in the Hebrew calendar
+% (depending of the current writing direction this will automatically set either
+% in Hebrew script or in roman transliteration).
+%
+% \subsection{Islamic calendar (hijrical.sty)}
+% This package computes dates in the lunar Islamic (Hijra) calendar.\footnote{ %
+% It makes use of the arithmetical algorithm in chapter 6 of
+% Reingold \& Gershowitz, \textit{Calendrical calculation: the Millenium edition}
+% (Cambridge University Press, 2001).\label{reingold}}
+% It provides two macros for the end-user.
+% The command
+% \displaycmd{\HijriFromGregorian\marg{year}\marg{month}\marg{day}}{\HijriFromGregorian}
+% sets the counters ¦Hijriday¦, ¦Hijrimonth¦ and ¦Hijriyear¦.
+% \Cmd\Hijritoday\ formats the Hijri date for the current day.
+% This command is now locale-aware\new{1.1.1}: its output will differ depending on the
+% currently active language. Presently \pkg{polyglossia}’s language definition files
+% for Arabic, Farsi, Urdu, Turkish and Malay provide a localized version of \cmd\Hijritoday.
+% If the formatting macro for the current language is undefined, the Hijri date will be formatted
+% in Arabic or in roman transliteration, depending of the current writing direction.
+% You can define a new format or redefine one with the command
+% \displaycmd{\DefineHijriDateFormat\marg{lang}\marg{code}.}{\DefineHijriDateFormat}
+%
+% The command \cmd\Hijritoday\ also accepts an optional argument to add or subtract a correction
+% (in days) to the date computed by the arithmetical algorithm.\footnote{ %
+% The Islamic calendar is indeed a purely lunar calendar based on the observation
+% of the first visibility of the lunar crescent at the beginning of the lunar month,
+% so there can be differences between different localities, as well as between
+% civil and religious authorities.}
+% For instance if \cmd\Hijritoday\ yields the date “7 Rajab 1429” (which is the date that was
+% displayed on the front page of \href{http://www.aljazeera.net}{aljazeera.net} on
+% 11th July 2008), ¦\Hijritoday[1]¦ would rather print “8 Rajab 1429” (the date
+% indicated the same day on the site \href{http://www.gulfnews.com}{gulfnews.com}).
+%
+% \subsection{Farsi (jalālī) calendar (farsical.sty)}
+% This package is an almost verbatim copy of ¦Arabiftoday.sty¦ (in the \pkg{Arabi} package),
+% itself a slight modification of ¦ftoday.sty¦ in Farsi\TeX.\footnote{ %
+% One day we may rewrite \pkg{farsical} from scratch using the algorithm in
+% Reingold \& Gershowitz (ref.~n.\,\ref{reingold}).}
+% Here we have renamed the command \cmd\ftoday\ to
+% \Cmd\Jalalitoday.
+% Example: today is \Jalalitoday.
+%
+%
+% \section{Auxiliary commands}
+%
+% The macro \displaycmd{\charifavailable\marg{char code}\marg{substitution}}{\charifavailable}\new{1.47} checks whether
+% the character with the specified \meta{char code} (\ie unicode utf-16 code without preceding ¦0x¦) exists in
+% the current font. If so, the character is printed, if not, the \meta{substitution} is printed.
+%
+% Example: ¦\charifavailable{1E9E}{SS}¦ prints the capital version of the German letter ⟨ß⟩ if available
+% (\ie \charifavailable{1E9E}{SS}), else it prints the substitution digraph SS.
+%
+%
+% \section{Accessing language information}
+%
+% The following is specifically relevant to package authors who need information about the languages in use.
+% In order to get such information, \pkg{polyglossia} provides the following macros:
+%
+% \begin{itemize}
+% \item \Cmd\languagename\ stores the currently active (polyglossia) language name.
+% \item \Cmd\mainlanguagename\ stores the (polyglossia) language name of the main document language.
+% \item \Cmd\languagevariant\ stores the language variant if set. The macro is empty if no variant has been set.
+% \item \Cmd\mainlanguagevariant\ stores the language variant of the main document language if set.
+% The macro is empty if no variant has been set.
+% \item \Cmd\babelname\ stores the corresponding name of the currently active language (variant) in \pkg{babel}.
+% This might not only be useful if you want to support both \pkg{babel} and \pkg{polyglossia}, but also
+% since this name is unique for a given language variety (\eg ngerman, german, swissgerman etc.).
+% Note that this macro is also defined for languages that are not supported in \pkg{babel}. In that
+% case, they are equal to the polyglossia language name.
+% \item \Cmd\mainbabelname\ analogously stores the name of document's main language (variant) in \pkg{babel}.
+% \item \Cmd{\languageid\marg{type}}\new{1.47} stores the identifier tag of the current language. Currently supported \meta{types}:
+% \begin{itemize}
+% \item ¦bcp-47¦ (alias ¦bcp47¦): IETF BCP-47 language identifier
+% \end{itemize}
+% \item \Cmd{\mainlanguageid\marg{type}}\new{1.47} stores identifier tag of the main language. Currently supported \meta{types}:
+% see \cmd\languageid.
+% \end{itemize}
+% \bigskip
+%
+% \noindent If you want to have a full list of loaded languages/variants, use the following macros:
+% \begin{itemize}
+% \item \Cmd{\xpg@loaded}\ stores a comma-separated list of all loaded languages (polyglossia name)
+% \item \Cmd{\xpg@vloaded}\ stores a comma-separated list of all loaded variants
+% \item \Cmd{\xpg@bloaded}\ stores a comma-separated list of \pkg{babel} names of all language variants
+% \item \Cmd{\xpg@bcp@loaded}\new{1.47}\ stores a comma-separated list of the BCP-47 IDs of all language variants
+% \end{itemize}
+% \bigskip
+%
+% \noindent Whether a language is loaded can be tested by
+% \displaycmd{\iflanguageloaded\marg{lang}\marg{true}\marg{false}}{\iflanguageloaded}
+% where \texttt{\meta{lang}} is a \pkg{polyglossia} language name, by
+% \displaycmd{\ifbabellanguageloaded\marg{lang}\marg{true}\marg{false}}{\ifbabellanguageloaded}
+% where \texttt{\meta{lang}} is a \pkg{babel} language name (see table~\ref{tab:bbllang} on p.~\pageref{tab:bbllang}), or by
+% \displaycmd{\iflanguageidloaded\marg{type}\marg{id}\marg{true}\marg{false}}{\iflanguageidloaded}\new{1.47}
+% where \meta{type} is a supported language id type (such as ¦bcp-47¦) and \meta{id} is a language id
+% (such as ¦en-US¦; see table~\ref{tab:BCP47-polyglossia} on p.~\pageref{tab:BCP47-polyglossia}).
+% \bigskip
+%
+% \noindent Finally, if you want to know whether a specific language option has been set, you can use
+% \displaycmd{\iflanguageoption\marg{lang}\marg{opt. key}\marg{opt. value}\marg{true}\marg{false}}{\iflanguageoption}\new{1.47}
+%
+% \section{Acknowledgements (by François Charette)}
+% \pkg{Polyglossia} is notable for being a recycle box of previous contributions
+% by other people. I take this opportunity to thank the following individuals,
+% whose splendid work has made my task almost trivial in comparision: \TA{Johannes
+% Braams} and the numerous contributors to the \pkg{babel} package (in particular
+% \TA{Boris Lavva} and others for its Hebrew support), \TA{Alexej Kryukov} (\pkg{antomega}),
+% \TA{Will Robertson} (\pkg{fontspec}), \TA{Apostolos Syropoulos} (\pkg{xgreek}), \TA{Youssef Jabri}
+% (\pkg{arabi}), and \TA{Vafa Khalighi} (\pkg{xepersian} and \pkg{bidi}).
+% The work of \TA{Mojca Miklavec} and \TA{Arthur Reutenauer} on hyphenation patterns with their package
+% \pkg{hyph-utf8} is of course invaluable. I should also thank other
+% individuals for their assistance in supporting specific languages: \TA{Yves Codet}
+% (Sanskrit), \TA{Zdenĕk Wagner} (Hindi), \TA{Mikhal Oren} (Hebrew), \TA{Sergey Astanin} (Russian),
+% \TA{Khaled Hosny} (Arabic), \TA{Sertaç Ö. Yıldız} (Turkish), \TA{Kamal Abdali} (Urdu),
+% and several other members of the \XeTeX\ user community, notably \TA{Enrico Gregorio}, who
+% has sent me many useful suggestions and corrections and contributed the \cmd\newXeTeXintercharclass\
+% mechanism in xelatex.ini which is now used by polyglossia.
+% More recently, \TA{Kevin Godby} of the \href{http://ubuntu-manual.org}{Ubuntu Manual} project has
+% contributed very useful feedback, bug hunting and, with the help of translators,
+% new language definition files for Asturian, Lithuanian, Occitan, Bengali, Malayalam, Marathi, Tamil, and Telugu.
+% It is particularly heartening to realize that this package is used to typeset a widely-read
+% document in dozens of different languages!
+% Support for Lao was also added thanks to \TA{Brian Wilson}.
+% I also thank \TA{Alan Munn} for kindly proof-reading the penultimate version of this documentation.
+% And of course my gratitude also goes to \TA{Jonathan Kew}, the formidable author of \XeTeX!
+%
+% \section{More acknowledgements (by the current development team)}
+% Many thanks to all the people who have contributed bugfixes and new features to \pkg{polyglossia}
+% since we took over.
+% In alphabetical order: \TA{Ignas Anikevicius}, \TA{Sina Ahmadi}, \TA{Wouter Bolsterlee}, \TA{Christian Buhtz},
+% \TA{Zgarbul Andrey}, \TA{Oleg Domanov}, \TA{Philipp Gesang}, \TA{Kevin Godby}, \TA{Enrico Gregorio},
+% \TA{Khaled Hosny}, \TA{Najib Idrissi}, user \TA{julroy67}, \TA{Dohyun Kim}, \TA{Phil Kime}, \TA{Mike Kroutikov},
+% \TA{Ivan Kokan}, \TA{Caleb Maclennan}, \TA{José Mancera}, \TA{Yevgen Pogribnyi}, \TA{Will Robertson}, \TA{Maïeul Rouquette},
+% \TA{Elie Roux}, \TA{Hugo Roy}, \TA{Guy Rutenberg}, \TA{Philipp Stephani}, \TA{Niranjan Tambe}, \TA{Keno Wehr},
+% \TA{Dominik Wujastyk}, \TA{Sertaç Ö. Yıldız}, \TA{Maksim Zholudev}, \TA{Yan Zhou}, and \TA{Stefan Zlatinov}.
+% Their respective contributions can be identified from the contributor statistics on
+% \href{https://github.com/reutenauer/polyglossia/graphs/contributors}{GitHub}.
+%
+% Among the ones who sent contributions directly to us we would like to especially thank
+% \TA{Claudio Beccari}, the indefatigable champion of Romance languages, and beyond! Furthermore,
+% kudos go to \TA{Moritz Wemheuer} (of \pkg{biblatex}) who has helped a lot to improve \pkg{polyglossia} interaction
+% with \pkg{biblatex} and \pkg{csquotes}.
+%
+% Not at least, we are very grateful for all bug reports and feature enhancement requests we received from
+% the numerous users we cannot list all here (but again, you can find all names on \href{https://github.com/reutenauer/polyglossia/issues?utf8=%E2%9C%93&q=is%3Aissue}{GitHub}).
+% Please go on with that, you are keeping \pkg{polyglossia} running!
+%
+%
+%
+%
+% \StopEventually{}
+% \section{Implementation}
+% \iffalse
+%<*gloss-acadien.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-acadien.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-acadien.ldf}[polyglossia: module for canadian (acadian) french]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{french}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-acadien.ldf>
+%<*gloss-aeb.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-aeb.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-aeb.ldf}[polyglossia: module for aeb (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-aeb.ldf>
+%<*gloss-af.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-af.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-af.ldf}[polyglossia: module for af (afrikaans)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{afrikaans}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-af.ldf>
+%<*gloss-afb.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-afb.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-afb.ldf}[polyglossia: module for afb (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-afb.ldf>
+%<*gloss-afrikaans.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-afrikaans.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-afrikaans.ldf}[polyglossia: module for afrikaans]
+
+\PolyglossiaSetup{afrikaans}{
+ bcp47=af,
+ hyphennames={afrikaans,dutch},
+ hyphenmins={2,2},
+ langtag=AFK,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{afrikaans}{af}
+
+\define@boolkey{afrikaans}[afrikaans@]{babelshorthands}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{afrikaans}{babelshorthands=false}
+
+\ifsystem@babelshorthands
+ \setkeys{afrikaans}{babelshorthands=true}
+\else
+ \setkeys{afrikaans}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\afrikaans@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{afrikaans}%
+ \declare@shorthand{afrikaans}{"-}{\nobreak-\bbl@allowhyphens}
+ \declare@shorthand{afrikaans}{"~}{\textormath{\leavevmode\hbox{-}}{-}}
+ \declare@shorthand{afrikaans}{"|}{%
+ \textormath{\discretionary{-}{}{\kern.03em}}{}}
+ \declare@shorthand{afrikaans}{""}{\hskip\z@skip}
+ \declare@shorthand{afrikaans}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+ \def\-{\bbl@allowhyphens\discretionary{-}{}{}\bbl@allowhyphens}%
+}
+
+\def\noafrikaans@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\def\captionsafrikaans{%
+ \def\prefacename{Voorwoord}%
+ \def\refname{Verwysings}%
+ \def\abstractname{Samevatting}%
+ \def\bibname{Bibliografie}%
+ \def\chaptername{Hoofstuk}%
+ \def\appendixname{Bylae}%
+ \def\contentsname{Inhoudsopgawe}%
+ \def\listfigurename{Lys van figure}%
+ \def\listtablename{Lys van tabelle}%
+ \def\indexname{Inhoud}%
+ \def\figurename{Figuur}%
+ \def\tablename{Tabel}%
+ \def\partname{Deel}%
+ \def\enclname{Bylae(n)}%
+ \def\ccname{a.\,a.}%
+ \def\headtoname{Aan}%
+ \def\pagename{Bladsy}%
+ \def\seename{sien}%
+ \def\alsoname{sien ook}%
+ \def\proofname{Bewys}%
+% \def\glossaryname{}%
+}
+
+\def\dateafrikaans{%
+ \def\today{\number\day~\ifcase\month\or
+ Januarie\or Februarie\or Maart\or April\or Mei\or Junie\or
+ Julie\or Augustus\or September\or Oktober\or November\or
+ Desember\fi
+ \space \number\year}%
+}
+
+\def\noextras@afrikaans{%
+ \noafrikaans@shorthands%
+}
+
+\def\blockextras@afrikaans{%
+ \ifafrikaans@babelshorthands\afrikaans@shorthands\fi%
+}
+
+\def\inlineextras@afrikaans{%
+ \ifafrikaans@babelshorthands\afrikaans@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-afrikaans.ldf>
+%<*gloss-albanian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-albanian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-albanian.ldf}[polyglossia: module for albanian]
+
+\PolyglossiaSetup{albanian}{
+ bcp47=sq,
+ hyphennames={albanian},
+ langtag=SQI,
+ hyphenmins={2,2},
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{albanian}{sq}
+
+\def\captionsalbanian{%
+ \def\refname{Referencat}%
+ \def\abstractname{Përmbledhja}%
+ \def\bibname{Bibliografia}%
+ \def\prefacename{Parathenia}%
+ \def\chaptername{Kapitulli}%
+ \def\appendixname{Shtesa}%
+ \def\contentsname{Përmbajta}%
+ \def\listfigurename{Figurat}%
+ \def\listtablename{Tabelat}%
+ \def\indexname{Indeksi}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabela}%
+ %\def\thepart{}%
+ \def\partname{Pjesa}%
+ \def\pagename{Faqe}%
+ \def\seename{shiko}%
+ \def\alsoname{shiko dhe}%
+ %\def\enclname{}%
+ %\def\ccname{}%
+ %\def\headtoname{}%
+ \def\proofname{Vërtetim}%
+ \def\glossaryname{Përhasja e Fjalëve}%
+ }
+\def\datealbanian{%
+ \def\today{{\number\day~\ifcase\month\or
+ Janar\or Shkurt\or Mars\or Prill\or Maj\or
+ Qershor\or Korrik\or Gusht\or Shtator\or Tetor\or Nëntor\or
+ Dhjetor\fi \space \number\year}}}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-albanian.ldf>
+%<*gloss-am.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-am.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-am.ldf}[polyglossia: module for am (amharic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{amharic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-am.ldf>
+%<*gloss-american.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-american.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-american.ldf}[polyglossia: module for american english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-american.ldf>
+%<*gloss-amharic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-amharic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-amharic.ldf}[polyglossia: module for amharic]
+\PolyglossiaSetup{amharic}{
+ bcp47=am,
+ script=Ethiopic,
+ scripttag=ethi,
+ langtag=AMH,
+ hyphennames={amharic,nohyphenation},
+ %hyphenmins={2,2},
+ fontsetup=true,
+ %TODO localalph=ethnum
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{amharic}{am}
+
+\def\captionsamharic{%
+ \def\refname{የነሥ ጹሁፍ ምንጭ}%
+ \def\abstractname{አኅጽተሮ ጽሁፍ}%
+ \def\bibname{ቢዋ መጽሃፍት}%
+ \def\prefacename{መቅድም}%
+ \def\chaptername{ክፍል}%
+ \def\appendixname{መድበል}%
+ \def\contentsname{ይዘት}%
+ \def\listfigurename{የሥዕችሎ ማውጫ}%
+ \def\listtablename{የሰንጠዥረ ማውጫ}%
+ \def\indexname{ምህጻር ቃል}%
+ \def\figurename{ሥዕል}%
+ \def\tablename{ሰንጠረዥ}%
+ %\def\thepart{}%
+ \def\partname{ንዑስ ክፍል}%
+ \def\pagename{ገጽ}%
+ \def\seename{ይመልከቱ}%
+ \def\alsoname{ይህምን ይመልከቱ}%
+ \def\enclname{አባሪዎች}%
+ \def\ccname{ግልባጭ}%
+ \def\headtoname{ለ}%
+ \def\proofname{ማረጋገጫ}%
+ %\def\glossaryname{<++>}%
+ }
+
+\newcommand{\eth@monthname}[1]{\ifcase#1\or
+ መስከረም\or
+ ጥቅምት\or
+ ህዳር\or
+ ታህሳስ\or
+ ጥር\or
+ የካቲት\or
+ መጋቢት\or
+ ሚያዝያ\or
+ ግንቦት\or
+ ሰኔ\or
+ ሐምሌ\or
+ ነሐሴ\or
+ ጰጉሜን\fi
+}
+\newcount\ethcnt@temp
+\newcount\ethcnt@modtemp
+\newcount\ethcnt@leap
+\newcount\ethcnt@yminone
+\newcount\ethcnt@days
+\newcount\ethcnt@jdn
+\newcount\ethcnt@cycle
+\newcount\ethcnt@ethdays
+\newcount\ethcnt@ethyear
+\newcount\ethcnt@ethmonth
+\newcount\ethcnt@ethday
+\newcommand{\eth@modulo}[2]{%
+ \ethcnt@modtemp=#1%
+ \divide\ethcnt@modtemp by #2%
+ \multiply\ethcnt@modtemp by #2%
+ \advance#1 by -\ethcnt@modtemp
+}
+\def\dateamharic{%
+ \def\today{{%
+ \ethcnt@yminone=\year
+ \advance\ethcnt@yminone by -1
+ \ethcnt@leap=\year
+ \divide\ethcnt@leap by 4
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 4
+ \advance\ethcnt@leap by -\ethcnt@temp
+ \ethcnt@temp=\year
+ \divide\ethcnt@temp by 100
+ \advance\ethcnt@leap by -\ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 100
+ \advance\ethcnt@leap by \ethcnt@temp
+ \ethcnt@temp=\year
+ \divide\ethcnt@temp by 400
+ \advance\ethcnt@leap by \ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 400
+ \advance\ethcnt@leap by -\ethcnt@temp
+ \ifnum\month<3
+ \ethcnt@days=\month
+ \advance\ethcnt@days by -1
+ \multiply\ethcnt@days by 31
+ \advance\ethcnt@days by \day
+ \advance\ethcnt@days by -1
+ \else
+ \ethcnt@days=\month
+ \advance\ethcnt@days by -1
+ \multiply\ethcnt@days by 30
+ \advance\ethcnt@days by \day
+ \advance\ethcnt@days by \ethcnt@leap
+ \advance\ethcnt@days by -3
+ \ethcnt@temp=\month
+ \multiply\ethcnt@temp by 3
+ \advance\ethcnt@temp by -2
+ \divide\ethcnt@temp by 5
+ \advance\ethcnt@days by \ethcnt@temp
+ \fi
+ \ethcnt@jdn=\ethcnt@days
+ \advance\ethcnt@jdn by 1721426
+ \ethcnt@temp=\ethcnt@yminone
+ \multiply\ethcnt@temp by 365
+ \advance\ethcnt@jdn by \ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 4
+ \advance\ethcnt@jdn by \ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 100
+ \advance\ethcnt@jdn by -\ethcnt@temp
+ \ethcnt@temp=\ethcnt@yminone
+ \divide\ethcnt@temp by 400
+ \advance\ethcnt@jdn by \ethcnt@temp
+ \ethcnt@cycle=\ethcnt@jdn
+ \advance\ethcnt@cycle by -1723856
+ \eth@modulo{\ethcnt@cycle}{1461}%
+ \ethcnt@ethdays=\ethcnt@cycle
+ \eth@modulo{\ethcnt@ethdays}{365}%
+ \ethcnt@temp=\ethcnt@cycle
+ \divide\ethcnt@temp by 1460
+ \multiply\ethcnt@temp by 365
+ \advance\ethcnt@ethdays by \ethcnt@temp
+ \ethcnt@ethyear=\ethcnt@jdn
+ \advance\ethcnt@ethyear by -1723856
+ \divide\ethcnt@ethyear by 1461
+ \multiply\ethcnt@ethyear by 4
+ \ethcnt@temp=\ethcnt@cycle
+ \divide\ethcnt@temp by 365
+ \advance\ethcnt@ethyear by \ethcnt@temp
+ \divide\ethcnt@cycle by 1460
+ \advance\ethcnt@ethyear by -\ethcnt@cycle
+ \ethcnt@ethmonth=\ethcnt@ethdays
+ \divide\ethcnt@ethmonth by 30
+ \advance\ethcnt@ethmonth by 1
+ \ethcnt@ethday=\ethcnt@ethdays
+ \eth@modulo{\ethcnt@ethday}{30}%
+ \advance\ethcnt@ethday by 1%
+ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+ \eth@monthname{\ethcnt@ethmonth}\relax\space%
+ \number\ethcnt@ethday\relax\space%
+ \number\ethcnt@ethyear%
+ }}%
+}
+
+\def\ethiop#1{\expandafter\@ethiop\csname c@#1\endcsname}
+\def\@ethiop#1{{%
+ \ifnum#1<1\relax\ethnum@err{#1}%
+ \else\ifnum#1<10\relax\expandafter\ethnum@one\number #1%
+ \else\ifnum#1<100\relax\expandafter\ethnum@two\number #1%
+ \else\ifnum#1<1000\relax\expandafter\ethnum@three\number #1%
+ \else\ifnum#1<10000\relax\expandafter\ethnum@four\number #1%
+ \else\ifnum#1<100000\relax\expandafter\ethnum@five\number #1%
+ \else\ifnum#1<1000000\relax\expandafter\ethnum@six\number #1%
+ \else%
+ \ethnum@err%
+ \number#1%
+ \fi\fi\fi\fi\fi\fi\fi%
+}}
+\let\ethnum\@ethiop
+\newcommand{\ethnum@tens}[1]{%
+ \ifcase#1\or ፲\or ፳\or ፴%
+ \or ፵\or ፶\or ፷%
+ \or ፸\or ፹\or ፺\fi%
+}%
+\newcommand{\ethnum@one}[1]{%
+ \ifcase#1\or ፩\or ፪\or ፫%
+ \or ፬\or ፭\or ፮%
+ \or ፯\or ፰\or ፱\fi%
+}%
+\newcommand{\ethnum@two}[1]{%
+ \ethnum@tens#1%
+ \ethnum@one%
+}
+\newcommand{\ethnum@three}[1]{%
+ \ifnum#1>1\relax\ethnum@one#1\fi%
+ \ifnum#1>0\relax ፻\fi%
+ \ethnum@two%
+}
+\newcommand{\ethnum@four}[1]{%
+ \ethnum@tens#1%
+ \ifnum#1>0\relax ፻\fi%
+ \ethnum@three%
+}
+\newcommand{\ethnum@five}[1]{%
+ \ifnum#1>1\relax\ethnum@one#1\fi%
+ \ifnum#1>0\relax ፼\fi%
+ \ethnum@four%
+}
+\newcommand{\ethnum@six}[1]{%
+ \ethnum@tens#1%
+ \ifnum#1>0\relax ፼\fi%
+ \ethnum@five%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-amharic.ldf>
+%<*gloss-apd.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-apd.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-apd.ldf}[polyglossia: module for apd (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-apd.ldf>
+%<*gloss-ar-IQ.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ar-IQ.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ar-IQ.ldf}[polyglossia: module for ar-IQ (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ar-IQ.ldf>
+%<*gloss-ar-JO.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ar-JO.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ar-JO.ldf}[polyglossia: module for ar-JO (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ar-JO.ldf>
+%<*gloss-ar-LB.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ar-LB.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ar-LB.ldf}[polyglossia: module for ar-LB (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ar-LB.ldf>
+%<*gloss-ar-MR.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ar-MR.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ar-MR.ldf}[polyglossia: module for ar-MR (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ar-MR.ldf>
+%<*gloss-ar-PS.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ar-PS.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ar-PS.ldf}[polyglossia: module for ar-PS (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ar-PS.ldf>
+%<*gloss-ar-SY.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ar-SY.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ar-SY.ldf}[polyglossia: module for ar-SY (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ar-SY.ldf>
+%<*gloss-ar-YE.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ar-YE.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ar-YE.ldf}[polyglossia: module for ar-YE (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ar-YE.ldf>
+%<*gloss-ar.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ar.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ar.ldf}[polyglossia: module for ar (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ar.ldf>
+%<*gloss-arabic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-arabic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-arabic.ldf}[polyglossia: module for arabic]
+\ifluatex
+ \xpg@warning{Arabic is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\RequireBidi
+\RequirePackage{arabicnumbers}
+\RequirePackage{hijrical}
+
+\PolyglossiaSetup{arabic}{
+ bcp47=ar,
+ script=Arabic,
+ direction=RL,
+ langtag=ARA,
+ scripttag=arab,
+ hyphennames={nohyphenation},
+ fontsetup=true,
+ envname=Arabic,
+ localnumeral=arabicnumerals
+ %TODO localalph={abjad,abjad}
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{arabic}{ar}
+\setlanguagealias*[locale=mashriq]{arabic}{ar-IQ}
+\setlanguagealias*[locale=default]{arabic}{ar-YE}
+\setlanguagealias*[locale=mashriq]{arabic}{ar-LB}
+\setlanguagealias*[locale=mashriq]{arabic}{ar-JO}
+\setlanguagealias*[locale=default]{arabic}{afb}
+\setlanguagealias*[locale=mauritania]{arabic}{ar-MR}
+\setlanguagealias*[locale=default]{arabic}{arz}
+\setlanguagealias*[locale=morocco]{arabic}{ary}
+\setlanguagealias*[locale=algeria]{arabic}{arq}
+\setlanguagealias*[locale=tunisia]{arabic}{aeb}
+\setlanguagealias*[locale=mashriq]{arabic}{ar-SY}
+\setlanguagealias*[locale=libya]{arabic}{ayl}
+\setlanguagealias*[locale=default]{arabic}{apd}
+\setlanguagealias*[locale=mashriq]{arabic}{ar-PS}
+
+\newif\ifeastern@numerals
+\def\tmp@mashriq{mashriq}
+\def\tmp@maghrib{maghrib}
+\define@key{arabic}{numerals}[mashriq]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@mashriq%
+ \eastern@numeralstrue%
+ \else
+ \ifx\@tmpa\tmp@maghrib\eastern@numeralsfalse\fi%
+ \fi}
+
+%this is needed for \abjad in arabicnumbers.sty
+\def\tmp@true{true}
+\define@key{arabic}{abjadjimnotail}[true]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@true\abjad@jim@notailtrue%
+ \else
+ \abjad@jim@notailfalse
+ \fi}
+
+\def\tmp@morocco{morocco}
+\def\tmp@algeria{algeria}
+\define@key{arabic}{locale}[default]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@morocco%
+ \eastern@numeralsfalse%
+ \SetLanguageKeys{arabic}{bcp47=ary}%
+ \else
+ \ifx\@tmpa\tmp@algeria%
+ \eastern@numeralsfalse%
+ \SetLanguageKeys{arabic}{bcp47=arq}%
+ \fi%
+ \fi%
+ \gdef\@@arabic@month{\@arabic@month{#1}}}
+
+\newif\if@hijrical
+\def\tmp@hijri{hijri}
+\def\tmp@islamic{islamic}
+\define@key{arabic}{calendar}[gregorian]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@hijri\@hijricaltrue%
+ \else
+ \ifx\@tmpa\tmp@islamic\@hijricaltrue%
+ \else\@hijricalfalse%
+ \fi
+ \fi}
+
+\define@key{arabic}{hijricorrection}[0]{%
+ \gdef\@hijri@correction{#1}}%
+
+% Register default options
+\xpg@initialize@gloss@options{arabic}{locale=default,calendar=gregorian,numerals=mashriq,hijricorrection=0,abjadjimnotail=false}
+% Register alias options
+\xpg@set@alias@values{arabic}{calendar}{islamic}{hijri}
+
+\def\arabicgregmonth@default#1{\ifcase#1%
+ % Egypt, Sudan, Yemen and Golf states
+ \or يناير\or فبراير\or مارس\or أبريل\or مايو\or يونيو\or يوليو\or أغسطس\or سبتمبر\or أكتوبر\or نوفمبر\or ديسمبر\fi}
+\def\arabicgregmonth@mashriq#1{\ifcase#1%
+ % Iraq Syria Jordan Lebanon Palestine
+ \or كانون الثاني\or شباط\or آذار\or نيسان\or أيار\or حزيران\or تموز\or آب\or أيلول\or تشرين الأول\or تشرين الثاني\or كانون الأول\fi}
+\def\arabicgregmonth@libya#1{\ifcase#1%
+ %Lybia «تعرف في ليبيا بأسماء عربية وضعها معمر القذافي ترمز إلى فصول السنة وبعض الشخصيات التاريخية» (ar.wikipedia.org)
+ \or أي النار\or النوار\or الربيع\or الطير\or الماء\or الصيف\or ناصر\or هانيبال\or الفاتح\or التمور\or الحرث\or الكانون\fi}
+\def\arabicgregmonth@morocco#1{\ifcase#1%
+ \or يناير\or فبراير\or مارس\or أبريل\or ماي\or يونيو\or يوليوز\or غشت\or شتنبر\or أكتوبر\or نونبر\or دجنبر\fi}
+\def\arabicgregmonth@algeria#1{\ifcase#1%
+ % Tunisia and Algeria
+ \or جانفي\or فيفري\or مارس\or أفريل\or ماي\or جوان\or جويلية\or أوت\or سبتمبر\or أكتوبر\or نوفمبر\or ديسمبر\fi}
+\let\arabicgregmonth@tunisia\arabicgregmonth@algeria
+\def\arabicgregmonth@mauritania#1{\ifcase#1%
+ \or يناير\or فبراير\or مارس\or إبريل\or مايو\or يونيو\or يوليو\or أغشت\or شتمبر\or أكتوبر\or نوفمبر\or دجمبر\fi}
+
+\def\@arabic@month#1{\ifcsdef{arabicgregmonth@#1}{\expandafter\csname arabicgregmonth@#1\endcsname}%
+{\xpg@warning{Option `locale=#1' is not defined for Arabic: using `default' instead}%
+\arabicgregmonth@default}}
+
+%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{arabic}{\@ensure@RTL{\arabicnumber{\value{Hijriday}}%
+ \space\HijriMonthArabic{\value{Hijrimonth}}\space\arabicnumber{\value{Hijriyear}}}}
+
+\def\captionsarabic{%
+ \def\prefacename{\@ensure@RTL{مدخل}}%
+ \def\refname{\@ensure@RTL{المراجع}}%
+ \def\abstractname{\@ensure@RTL{ملخص}}%
+ \def\bibname{\@ensure@RTL{المصادر}}%
+ \def\chaptername{\@ensure@RTL{باب}}%
+ \def\appendixname{\@ensure@RTL{الملاحق}}%
+ \def\contentsname{\@ensure@RTL{المحتويات}}%
+ %\def\contentsname{\@ensure@RTL{الفهرس}}%
+ \def\listfigurename{\@ensure@RTL{قائمة الأشكال}}%
+ \def\listtablename{\@ensure@RTL{قائمة الجداول}}%
+ \def\indexname{\@ensure@RTL{الفهرس}}%
+ \def\figurename{\@ensure@RTL{شكل}}%
+ \def\tablename{\@ensure@RTL{جدول}}%
+ \def\partname{\@ensure@RTL{القسم}}%
+ \def\enclname{\@ensure@RTL{المرفقات}}%<-- Needs translation
+ \def\ccname{\@ensure@RTL{نسخة ل‬}}% <<
+ \def\headtoname{\@ensure@RTL{إلى}}%<-- Needs translation
+ \def\pagename{\@ensure@RTL{صفحة}}%
+ \def\seename{\@ensure@RTL{راجع}}%\alefhamza\nun\za\ra
+ \def\alsoname{\@ensure@RTL{راجع أيضًا}}%<<\alefhamza\nun\za\ra
+ \def\proofname{\@ensure@RTL{برهان}}%
+ \def\glossaryname{\@ensure@RTL{قاموس}}%<<
+}
+\def\datearabic{%
+ \def\today{%
+ \if@hijrical%
+ \Hijritoday[\@hijri@correction]%
+ \else%
+ \if@RTL%
+ \arabicnumber\day\space\@@arabic@month{\month}%
+ \space\arabicnumber\year%
+ \else% in LR environment we format the gregorian date within \textenglish
+ \ifcsdef{english@loaded}{\textenglish{\today}}%else US format
+ {\normalfontlatin\ifcase\month\or January\or February\or March\or April\or May\or June\or%
+ July\or August\or September\or October\or November\or December\fi%
+ \space\number\day,\space\number\year}%
+ \fi%
+ \fi}}
+
+
+\newcommand{\arabicnumerals}[2]{\arabicnumber{#2}}
+
+\def\arabicnumber#1{%
+ \ifeastern@numerals
+ \@ensure@dir{\arabicdigits{\number#1}}%
+ \else
+ \number#1%
+ \fi}
+
+\def\@ornatebracearabic#1{\RL{\char"FD3F\@arabic#1\char"FD3E}}
+\def\@ornatebracealph#1{\RL{\char"FD3F\@alph#1\char"FD3E}}
+
+\def\abjadmaghribi#1{%
+\ifnum#1>1999\xpg@ill@value{#1}{abjad}%
+\else
+ \ifnum#1<\z@\space\xpg@ill@value{#1}{abjad}%
+ \else
+ \ifnum#1<10\expandafter\abj@num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\abj@maghribi@num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\abj@maghribi@num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\abj@maghribi@num@iv\number#1%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+\fi
+}
+
+%maghribi س -> ص ص -> ض ش -> س ض -> ظ ظ -> غ غ -> ش
+\def\abj@maghribi@num@ii#1{%
+ \ifcase#1\or ي\or ك\or ل\or م\or ن%
+ \or ص\or ع\or ف\or ض\fi
+ \ifnum#1=\z@\abjad@zero\fi\abj@num@i}
+\def\abj@maghribi@num@iii#1{%
+ \ifcase#1\or ق\or ر\or س\or ت\or ث%
+ \or خ\or ذ\or ظ\or غ\fi
+ \ifnum#1=\z@\fi\abj@maghribi@num@ii}
+\def\abj@maghribi@num@iv#1{%
+ \ifcase#1\or ش\fi
+ \ifnum#1=\z@\fi\abj@maghribi@num@iii}
+
+\def\arabic@numbers{%
+ \let\@alph\abjad%
+ \let\@Alph\abjad%
+}
+
+\def\noarabic@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\arabic@globalnumbers{%
+ \let\@arabic\arabicnumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+}
+
+\def\noarabic@globalnumbers{%
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@arabic{%
+ \def\MakeUppercase##1{##1}%
+ % TODO disable \@Roman and \@roman ?
+}
+
+\def\noextras@arabic{%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-arabic.ldf>
+%<*gloss-armenian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-armenian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-armenian.ldf}[polyglossia: module for armenian]
+
+\PolyglossiaSetup{armenian}{
+ bcp47=hy,
+ script=Armenian,
+ scripttag=armn,
+ langtag=HYE,
+ hyphennames={armenian},
+ hyphenmins={2,2},
+ fontsetup=true,
+ localnumeral=armeniannumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{armenian}{hy}
+
+\newif\if@eastern@armenian
+\@eastern@armenianfalse
+\define@choicekey*+{armenian}{variant}[\xpg@val\xpg@nr]{western,eastern}[western]{%
+ \ifcase\xpg@nr\relax
+ % western:
+ \@eastern@armenianfalse%
+ \or
+ % eastern:
+ \@eastern@armeniantrue%
+ \fi
+ \xpg@info{Option: Armenian, variant=\xpg@val}%
+}{\xpg@warning{Unknown Armenian variant `#1'}}
+
+\newif\if@armenian@numerals
+\@armenian@numeralsfalse
+\define@key{armenian}{numerals}[armenian]{%
+ \ifstrequal{#1}{arabic}{\@armenian@numeralsfalse}{\@armenian@numeralstrue}%
+}
+
+% Register default options
+\xpg@initialize@gloss@options{armenian}{numerals=armenian,variant=western}
+
+% Taken from ArmTeX. Audit!
+\def\captionsarmenian{%
+ \def\refname{Հղումներ}%
+ \def\abstractname{Սեղմագիր}%
+ \def\bibname{Գրականություն}%
+ \def\prefacename{Նախաբան}%
+ \def\chaptername{Գլուխ}%
+ \def\appendixname{Հավելված}%
+ \def\contentsname{Բովանդակություն}%
+ \def\listfigurename{Նկարների ցանկ}%
+ \def\listtablename{Աղյուսակների ցանկ}%
+ \def\indexname{Առարկայական ցանկ}%
+ \def\figurename{Նկար}%
+ \def\tablename{Աղյուսակ}%
+ \def\partname{Մաս}%
+ \def\pagename{էջ}%
+ \def\seename{տե՛ս}%
+ \def\alsoname{տե՛ս նաեւ}%
+ \def\enclname{Կից՝}%
+ \def\ccname{Կրկնօրինակը՝}%
+% The \headtoname is empty: the typesetter should use the dative (trakan
+% holov) of the recipient's name.
+ \def\headtoname{}%
+ \def\proofname{Ապացույց}%
+ \def\glossaryname{Տերմինների ցանկ}%
+}
+
+\def\date@western@armenian{%
+ \def\today{\ifcase\month\or
+ Յունուար\or
+ Փետրուար\or
+ Մարտ\or
+ Ապրիլ\or
+ Մայիս\or
+ Յունիս\or
+ Յուլիս\or
+ Օգոստոս\or
+ Սեպտեմբեր\or
+ Հոկտեմբեր\or
+ Նոյեմբեր\or
+ Դեկտեմբեր\fi
+ \number\day,\space\number\year}%
+}
+
+\def\date@eastern@armenian{%
+ \def\today{\ifcase\month\or
+ Հունվար\or
+ Փետրվար\or
+ Մարտ\or
+ Ապրիլ\or
+ Մայիս\or
+ Հունիս\or
+ Հուլիս\or
+ Օգոստոս\or
+ Սեպտեմբեր\or
+ Հոկտեմբեր\or
+ Նոյեմբեր\or
+ Դեկտեմբեր\fi
+ \number\day,\space\number\year}%
+}
+
+\def\datearmenian{%
+ \if@eastern@armenian
+ \date@eastern@armenian%
+ \else
+ \date@western@armenian%
+ \fi
+}
+
+\newcommand{\armeniannumerals}[2]{%
+ \if@armenian@numerals
+ \armeniannumber{#2}%
+ \else
+ #2%
+ \fi%
+}
+
+\def\armenian@numbers{%
+ \if@armenian@numerals
+ \def\armenian@alph##1{\expandafter\armeniannumeral\expandafter{\the##1}}%
+ \let\@alph\armenian@alph%
+ \fi%
+}
+
+\def\noarmenian@numbers{%
+ \let\@alph\latin@alph%
+ \let\armenian@alph\@undefined%
+}
+
+\def\armenian@globalnumbers{%
+ \if@armenian@numerals
+ \let\@arabic\armeniannumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+ \fi
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\noarmenian@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+}
+
+\protected\def\armeniannumber#1{\expandafter\@armeniannumber\expandafter{\number#1}}
+\def\@armeniannumber#1{%
+ \ifnum#1<\@ne\space\arm@ill@value{#1}%
+ \else
+ \ifnum#1<10\expandafter\arm@num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\arm@num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\arm@num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\arm@num@iv\number#1%
+ \else
+ \space\arm@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\let\armeniannumeral=\armeniannumber
+\def\arm@num@i#1{%
+ \ifcase#1\or Ա\or Բ\or Գ\or Դ\or Ե\or Զ\or Է\or Ը\or Թ\fi}
+\def\arm@num@ii#1{%
+ \ifcase#1\or Ժ\or Ի\or Լ\or Խ\or Ծ\or Կ\or Հ\or Ձ\or Ղ\fi
+ \arm@num@i}
+\def\arm@num@iii#1{%
+ \ifcase#1\or Ճ\or Մ\or Յ\or Ն\or Շ\or Ո\or Չ\or Պ\or Ջ\fi
+ \arm@num@ii}
+\def\arm@num@iv#1{%
+ \ifcase#1\or Ռ\or Ս\or Վ\or Տ\or Ր\or Ց\or Ւ\or Փ\or Ք\fi
+ \arm@num@iii}
+\def\arm@ill@value#1{\xpg@warning{Illegal value (#1) for Armenian numeral}[$#1$]}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-armenian.ldf>
+%<*gloss-arq.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-arq.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-arq.ldf}[polyglossia: module for arq (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-arq.ldf>
+%<*gloss-ary.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ary.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ary.ldf}[polyglossia: module for ary (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ary.ldf>
+%<*gloss-arz.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-arz.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-arz.ldf}[polyglossia: module for arz (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-arz.ldf>
+%<*gloss-ast.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ast.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ast.ldf}[polyglossia: module for ast (asturian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{asturian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ast.ldf>
+%<*gloss-asturian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-asturian.ldf}
+% \begin{macrocode}
+% Translated by Xuacu <xuacusk8 at gmail dot com>
+% Contributed by Kevin Godby <godbyk at gmail dot com>
+%
+\ProvidesFile{gloss-asturian.ldf}[polyglossia: module for asturian]
+\PolyglossiaSetup{asturian}{
+ bcp47=ast,
+ hyphennames={asturian,catalan},
+ hyphenmins={2,2},
+ langtag=AST,
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{asturian}{ast}
+
+\def\captionsasturian{%
+ \def\prefacename{Entamu}%
+ \def\refname{Referencies}%
+ \def\abstractname{Sumariu}%
+ \def\bibname{Bibliografía}%
+ \def\chaptername{Capítulu}%
+ \def\appendixname{Apéndiz}%
+ \def\contentsname{Conteníu}%
+ \def\listfigurename{Llista de figures}%
+ \def\listtablename{Llista de tables}%
+ \def\indexname{Índiz}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabla}%
+ \def\partname{Parte}%
+ \def\enclname{incl.}%
+ \def\ccname{cc}%
+ \def\headtoname{Pa}%
+ \def\pagename{Páxina}%
+ \def\seename{ver}%
+ \def\alsoname{ver tamién}%
+ \def\proofname{Demostración}%
+ \def\glossaryname{Glosariu}%
+ }
+\def\dateasturian{%
+ \def\today{\number\day~\ifcase\month\or
+ de~xineru\or de~febreru\or de~marzu\or d'abril\or de~mayu\or de~xunu\or
+ de~xunetu\or d'agostu\or de~setiembre\or d'ochobre\or de~payares\or
+ d'avientu\fi\space de~\number\year}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-asturian.ldf>
+%<*gloss-australian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-australian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-australian.ldf}[polyglossia: module for australian english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-australian.ldf>
+%<*gloss-austrian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-austrian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-austrian.ldf}[polyglossia: module for austrian german (old spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-austrian.ldf>
+%<*gloss-ayl.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ayl.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ayl.ldf}[polyglossia: module for ayl (arabic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{arabic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ayl.ldf>
+%<*gloss-bahasa.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bahasa.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bahasa.ldf}[polyglossia: module for bahasa indonesia]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{malay}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bahasa.ldf>
+%<*gloss-bahasai.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bahasai.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bahasai.ldf}[polyglossia: module for bahasa indonesia]
+
+% We only provide this gloss for babel compatibility. Since bahasai is
+% a malay variety, we use 'malay' with variant 'indonesian' now.
+
+\xpg@load@master@language{malay}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bahasai.ldf>
+%<*gloss-bahasam.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bahasam.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bahasam.ldf}[polyglossia: module for bahasa melayu]
+
+% We only provide this gloss for babel compatibility. Since bahasam is
+% a malay variety, we use 'malay' with variant 'malaysian' now.
+
+\xpg@load@master@language{malay}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bahasam.ldf>
+%<*gloss-basque.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-basque.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-basque.ldf}[polyglossia: module for basque]
+\PolyglossiaSetup{basque}{
+ bcp47=eu,
+ hyphennames={basque},
+ hyphenmins={2,2},
+ langtag=EUQ,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{basque}{eu}
+
+\def\captionsbasque{%
+ \def\refname{Erreferentziak}%
+ \def\abstractname{Laburpena}%
+ \def\bibname{Bibliografia}%
+ \def\prefacename{Hitzaurrea}%
+ \def\chaptername{Kapitulua}%
+ \def\appendixname{Eranskina}%
+ \def\contentsname{Gaien Aurkibidea}%
+ \def\listfigurename{Irudien Zerrenda}%
+ \def\listtablename{Taulen Zerrenda}%
+ \def\indexname{Kontzeptuen Aurkibidea}%
+ \def\figurename{Irudia}%
+ \def\tablename{Taula}%
+ \def\thepart{}%
+ \def\partname{Atala}%
+ \def\pagename{Orria}%
+ \def\seename{Ikusi}%
+ \def\alsoname{Ikusi, halaber}%
+ \def\enclname{Erantsia}%
+ \def\ccname{Kopia}%
+ \def\headtoname{Nori}%
+ \def\proofname{Frogapena}%
+ \def\glossaryname{Glosarioa}%
+ }
+\def\datebasque{%
+ \def\today{\number\year.eko\space\ifcase\month\or
+ urtarrilaren\or otsailaren\or martxoaren\or apirilaren\or
+ maiatzaren\or ekainaren\or uztailaren\or abuztuaren\or
+ irailaren\or urriaren\or azaroaren\or
+ abenduaren\fi~\number\day}}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-basque.ldf>
+%<*gloss-be-tarask.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-be-tarask.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-be-tarask.ldf}[polyglossia: module for be-tarask (belarusian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{belarusian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-be-tarask.ldf>
+%<*gloss-be.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-be.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-be.ldf}[polyglossia: module for be (belarusian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{belarusian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-be.ldf>
+%<*gloss-belarusian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-belarusian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-belarusian.ldf}[polyglossia: module for belarusian]
+
+\RequirePackage{xpg-cyrillicnumbers}
+
+\PolyglossiaSetup{belarusian}{
+ bcp47=be,
+ script=Cyrillic,
+ scripttag=cyrl,
+ langtag=BEL,
+ hyphennames={belarusian},
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup,
+ localnumeral=belarusiannumerals,
+ Localnumeral=Belarusiannumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*[spelling=classic]{belarusian}{be-tarask}
+\setlanguagealias*{belarusian}{be}
+
+\def\belarusian@spelling{modern}
+\define@choicekey*+{belarusian}{spelling}[\xpg@val\xpg@nr]{modern,classic,tarask}[modern]{%
+ \ifcase\xpg@nr\relax
+ % modern:
+ \def\belarusian@spelling{modern}%
+ \SetLanguageKeys{belarusian}{bcp47=be}%
+ \or
+ % classic:
+ \def\belarusian@spelling{tarask}%
+ \SetLanguageKeys{belarusian}{bcp47=be-tarask}%
+ \or
+ % tarask:
+ \def\belarusian@spelling{tarask}%
+ \SetLanguageKeys{belarusian}{bcp47=be-tarask}%
+ \fi
+}{\xpg@warning{Unknown Belarusian spelling `#1'}}
+
+\newif\ifcyrillic@numerals
+\newif\ifcyrillic@asbuk@numerals
+\define@choicekey*+{belarusian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
+ \ifcase\xpg@nr\relax
+ % arabic:
+ \cyrillic@numeralsfalse%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-trad:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-alph:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralstrue%
+ \fi
+ \xpg@info{Option: Belarusian, numerals=\xpg@val}%
+}{\xpg@warning{Unknown Belarusian numerals value `#1'}}
+
+\define@boolkey{belarusian}[belarusian@]{babelshorthands}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{belarusian}{babelshorthands=false,numerals=arabic,spelling=modern}
+% Register alias options
+\xpg@set@alias@values{belarusian}{spelling}{classic}{tarask}
+
+\ifsystem@babelshorthands
+ \setkeys{belarusian}{babelshorthands=true}
+\else
+ \setkeys{belarusian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\belarusian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{belarusian}%
+ \declare@shorthand{belarusian}{"`}{„}%
+ \declare@shorthand{belarusian}{"'}{“}%
+ \declare@shorthand{belarusian}{"<}{«}%
+ \declare@shorthand{belarusian}{">}{»}%
+ \declare@shorthand{belarusian}{""}{\hskip\z@skip}%
+ \declare@shorthand{belarusian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{belarusian}{"=}{\nobreak-\hskip\z@skip}%
+ \declare@shorthand{belarusian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
+ \declare@shorthand{belarusian}{"-}{%
+ \def\belarusian@sh@tmp{%
+ \if\belarusian@sh@next-\expandafter\belarusian@sh@emdash%
+ \else\expandafter\belarusian@sh@hyphen\fi%
+ }%
+ \futurelet\belarusian@sh@next\belarusian@sh@tmp%
+ }%
+ \def\belarusian@sh@hyphen{%
+ \nobreak\-\bbl@allowhyphens}%
+ \def\belarusian@sh@emdash##1##2{\cdash-##1##2}%
+ \def\cdash##1##2##3{\def\tempx@{##3}%
+ \def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
+ \ifx\tempx@\tempa@\@Acdash\else
+ \ifx\tempx@\tempb@\@Bcdash\else
+ \ifx\tempx@\tempc@\@Ccdash\else
+ \errmessage{Wrong usage of cdash}\fi\fi\fi}%
+ \def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
+ \cyrdash\hskip.2em\ignorespaces}%
+ \def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
+ \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
+ \def\@Ccdash{\leavevmode
+ \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
+ \ifx\cyrdash\undefined
+ \def\cyrdash{\hbox to.8em{--\hss--}}%
+ \fi
+ \declare@shorthand{belarusian}{",}{\nobreak\hskip.2em\ignorespaces}%
+}
+
+\def\nobelarusian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+% Taken from babel-belarusian
+\def\captionsbelarusian@modern{%
+ \def\prefacename{Прадмова}%
+ \def\refname{Спіс літаратуры}%
+ \def\abstractname{Анатацыя}%
+ \def\bibname{Літаратура}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Дадатак}%
+ \def\contentsname{Змест}%
+ \def\listfigurename{Спіс ілюстрацый}%
+ \def\listtablename{Спіс табліц}%
+ \def\indexname{Прадметны паказальнік}%
+ \def\authorname{Паказальнік імён}%
+ \def\figurename{Рыс.}%
+ \def\tablename{Табліца}%
+ \def\partname{Частка}%
+ \def\enclname{укл.}%
+ \def\ccname{зых.}%
+ \def\headtoname{вх.}%
+ \def\pagename{с.}%
+ \def\seename{гл.}%
+ \def\alsoname{гл.\ таксама}%
+ \def\proofname{Доказ}%
+ \def\glossaryname{Слоўнік тэрмінаў}%
+ \def\acronymname{Абрэвіятуры}%
+ \def\lstlistingname{Лістынг}%
+ \def\lstlistlistingname{Лістынгі}%
+ \def\notesname{Нататкі}%
+}
+
+\def\captionsbelarusian@tarask{%
+ \def\prefacename{Прадмова}%
+ \def\refname{Сьпіс літаратуры}%
+ \def\abstractname{Анатацыя}%
+ \def\bibname{Літаратура}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Дадатак}%
+ \def\contentsname{Зьмест}%
+ \let\tocname=\contentsname
+ \def\listfigurename{Сьпіс ілюстрацый}%
+ \def\listtablename{Сьпіс табліц}%
+ \def\indexname{Прадметны паказальнік}%
+ \def\authorname{Паказальнік імён}%
+ \def\figurename{Рыс.}%
+ \def\tablename{Табліца}%
+ \def\partname{Частка}%
+ \def\enclname{укл.}%
+ \def\ccname{зых.}%
+ \def\headtoname{вх.}%
+ \def\pagename{с.}%
+ \def\seename{гл.}%
+ \def\alsoname{гл.\ таксама}%
+ \def\proofname{Доказ}%
+ \def\glossaryname{Слоўнік тэрмінаў}%
+ \def\acronymname{Абрэвіятуры}%
+ \def\lstlistingname{Лістынг}%
+ \def\lstlistlistingname{Лістынгі}%
+ \def\nomname{Азначэньні}%
+ \def\notesname{Нататкі}%
+}
+
+\def\captionsbelarusian{%
+ \csuse{captionsbelarusian@\belarusian@spelling}%
+}
+
+\def\datebelarusian@modern{%
+ \def\today{\number\day~\ifcase\month\or
+ студзеня\or
+ лютага\or
+ сакавіка\or
+ красавіка\or
+ мая\or
+ чэрвеня\or
+ ліпеня\or
+ жніўня\or
+ верасня\or
+ кастрычніка\or
+ лістапада\or
+ снежня\fi
+ \space \number\year~г.}%
+}
+
+\def\datebelarusian@tarask{%
+ \def\today{\number\day~\ifcase\month\or%
+ студзеня\or
+ лютага\or
+ сакавіка\or
+ красавіка\or
+ траўня\or
+ чэрвеня\or
+ ліпеня\or
+ жніўня\or
+ верасьня\or
+ кастрычніка\or
+ лістапада\or
+ сьнежня\fi%
+ \space \number\year~г.}%
+}
+
+\def\datebelarusian{%
+ \csuse{datebelarusian@\belarusian@spelling}%
+}
+
+\newcommand{\belarusiannumerals}[2]{\belarusiannumber{#2}}
+\newcommand{\Belarusiannumerals}[2]{\Belarusiannumber{#2}}
+
+\def\belarusiannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \belarusian@asbuk@alph{#1}%
+ \else
+ \cyr@alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\Belarusiannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \belarusian@asbuk@Alph{#1}%
+ \else
+ \cyr@Alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\let\belarusiannumeral=\belarusiannumber
+\let\Belarusiannumeral=\Belarusiannumber
+
+\def\Asbuk#1{\expandafter\belarusian@asbuk@Alph\csname c@#1\endcsname}
+\def\asbuk#1{\expandafter\belarusian@asbuk@alph\csname c@#1\endcsname}
+
+\def\AsbukTrad#1{\expandafter\cyr@Alph\csname c@#1\endcsname}
+\def\asbukTrad#1{\expandafter\cyr@alph\csname c@#1\endcsname}
+
+
+% This is a poor man's cyrillic alphanumeric. It just uses the alphabet and
+% thus ends at 30.
+\def\belarusian@asbuk@Alph#1{\ifcase#1\or
+ А\or Б\or В\or Г\or Д\or Е\or Ж\or
+ З\or И\or К\or Л\or М\or Н\or О\or
+ П\or Р\or С\or Т\or У\or Ф\or Х\or
+ Ц\or Ч\or Ш\or Щ\or Э\or Ю\or Я%
+ \else\xpg@ill@value{#1}{belarusian@asbuk@Alph}\fi%
+}
+
+\def\belarusian@asbuk@alph#1{\ifcase#1\or
+ а\or б\or в\or г\or д\or е\or ж\or
+ з\or и\or к\or л\or м\or н\or о\or
+ п\or р\or с\or т\or у\or ф\or х\or
+ ц\or ч\or ш\or щ\or э\or ю\or я%
+ \else\xpg@ill@value{#1}{belarusian@asbuk@alph}\fi%
+}
+
+\def\belarusian@numbers{%
+ \let\latin@alph\@alph
+ \let\latin@Alph\@Alph
+ \ifcyrillic@numerals%
+ \def\belarusian@alph##1{\expandafter\belarusiannumeral\expandafter{\the##1}}%
+ \def\belarusian@Alph##1{\expandafter\belarusiannumeral\expandafter{\the##1}}%
+ \let\@alph\belarusian@alph%
+ \let\@Alph\belarusian@Alph%
+ \fi
+}
+
+\def\nobelarusian@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\def\noextras@belarusian{%
+ \ifcyrillic@numerals\nobelarusian@numbers\fi%
+ \nobelarusian@shorthands%
+}
+
+\def\blockextras@belarusian{%
+ \ifcyrillic@numerals\belarusian@numbers\fi%
+ \ifbelarusian@babelshorthands\belarusian@shorthands\fi%
+}
+
+\def\inlineextras@belarusian{%
+ \ifbelarusian@babelshorthands\belarusian@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-belarusian.ldf>
+%<*gloss-bengali.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bengali.ldf}
+% \begin{macrocode}
+% Translations provided by সাজেদুর রহিম জোয়ারদার <toshazed@gmail.com>
+% TODO implement Bengali calendar
+
+\ProvidesFile{gloss-bengali.ldf}[polyglossia: module for bengali]
+
+\ifluatex
+ \xpg@warning{Bengali is not supported with LuaTeX.\MessageBreak
+ I will proceed with the compilation, but\MessageBreak
+ the output is not guaranteed to be correct\MessageBreak
+ and may look very wrong.}
+\fi
+
+\RequirePackage{devanagaridigits}
+\RequirePackage{bengalidigits}
+
+\PolyglossiaSetup{bengali}{
+ bcp47=bn,
+ script=Bengali,
+ scripttag=beng,
+ langtag=BEN,
+ hyphennames={bengali},
+ hyphenmins={2,2},%CHECK
+ fontsetup=true,
+ localnumeral=bengalinumerals
+ %TODO nouppercase=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{bengali}{bn}
+
+\newif\ifbengali@devanagari@numerals
+\newif\ifbengali@bengali@numerals
+\define@choicekey*+{bengali}{numerals}[\xpg@val\xpg@nr]{Devanagari,Bengali,Western}[Devanagari]{%
+ \ifcase\xpg@nr\relax
+ % Devanagari:
+ \bengali@bengali@numeralsfalse%
+ \bengali@devanagari@numeralstrue%
+ \or
+ % Bengali:
+ \bengali@bengali@numeralstrue%
+ \bengali@devanagari@numeralsfalse%
+ \or
+ % Western:
+ \bengali@bengali@numeralsfalse%
+ \bengali@devanagari@numeralsfalse%
+ \fi
+ \xpg@info{Option: Bengali, numerals=\xpg@val}%
+}{\xpg@warning{Unknown Bengali numeral `#1'}}
+
+\def\extras@bengali{}
+\def\noextras@bengali{}
+
+\define@boolkey{bengali}[bengali@]{changecounternumbering}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{bengali}{changecounternumbering=false,numerals=Devanagari}
+
+\def\captionsbengali{%
+ \def\refname{তথ্যসূত্রসমূহ}%
+ \def\abstractname{সারসংক্ষেপ}%
+ \def\bibname{তথ্যবিবরণ}%
+ \def\prefacename{পূর্বকথা}%
+ \def\chaptername{অধ্যায়}%
+ \def\appendixname{পরিশিষ্ট}%
+ \def\contentsname{সূচীপত্র}%
+ \def\listfigurename{ছবি/নকশা সমূহের তালিকা}%
+ \def\listtablename{তালিকাসারণী}%
+ \def\indexname{সূচক/নির্দেশক}%
+ \def\figurename{চিত্র}%
+ \def\tablename{সারণী}%
+ %\def\thepart{}% TODO
+ \def\partname{খন্ড}%
+ \def\pagename{পৃষ্ঠা}%
+ \def\seename{দেখুন}%
+ \def\alsoname{আরও দেখুন}%
+ \def\enclname{সংযুক্তি}%
+ \def\ccname{অনুলিপি}%
+ \def\headtoname{প্রতি}%
+ \def\proofname{প্রমাণ}%
+ \def\glossaryname{পরিভাষার শব্দসম্ভার}%
+}
+\def\datebengali{%
+ \def\bengalimonth{%
+ \ifcase\month\or
+ জানুয়ারি\or
+ ফেব্রুয়ারি\or
+ মার্চ\or
+ এপ্রিল\or
+ মে\or
+ জুন\or
+ জুলাই\or
+ আগস্ট\or
+ সেপ্টেম্বর\or
+ অক্টোবর\or
+ নভেম্বর\or
+ ডিসেম্বর\fi}%
+ \def\today{\bengalinumber\day\space\bengalimonth\space\bengalinumber\year}%
+}
+
+\newcommand{\bengalinumerals}[2]{\bengalinumber{#2}}
+
+\def\bengalinumber#1{%
+ \ifbengali@devanagari@numerals
+ \devanagaridigits{\number#1}%
+ \else
+ \ifbengali@bengali@numerals
+ \bengalidigits{\number#1}%
+ \else % Assumed Western
+ \number#1%
+ \fi
+ \fi%
+}
+
+% Backwards compatibility. This command was never documented, but
+% some people might use it nevertheless (see #381).
+% This takes a counter.
+\newcommand\bengalinumeral[1]{\localnumeral*[lang=bengali]{#1}}
+
+\def\bengali@globalnumbers{%
+ \ifbengali@changecounternumbering
+ \let\@arabic\bengalinumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \fi
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nobengali@globalnumbers{%
+ \let\@arabic\xpg@save@arabic%
+}
+
+\def\blockextras@bengali{\extras@bengali}
+\def\inlineextras@bengali{\extras@bengali}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bengali.ldf>
+%<*gloss-bg.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bg.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bg.ldf}[polyglossia: module for bg (bulgarian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{bulgarian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bg.ldf>
+%<*gloss-bn.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bn.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bn.ldf}[polyglossia: module for bn (bengali)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{bengali}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bn.ldf>
+%<*gloss-bo.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bo.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bo.ldf}[polyglossia: module for bo (tibetan)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{tibetan}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bo.ldf>
+%<*gloss-bosnian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bosnian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bosnian.ldf}[polyglossia: module for bosnian]
+
+\PolyglossiaSetup{bosnian}{
+ bcp47=bs,
+ langtag=BOS,
+ hyphennames={bosnian,croatian},
+ hyphenmins={2,2}, % adapted from gloss-croatian
+ frenchspacing=true, % adapted from gloss-croatian
+ indentfirst=false, % adapted from gloss-croatian
+ fontsetup=true
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{bosnian}{bs}
+
+% TODO: Add script=Cyrillic
+
+% from babel-bosnian
+\def\captionsbosnian{%
+ \def\prefacename{Predgovor}%
+ \def\refname{Literatura}%
+ \def\abstractname{Sažetak}%
+ \def\bibname{Bibliografija}%
+ \def\chaptername{Poglavlje}%
+ \def\appendixname{Dodatak}%
+ \def\contentsname{Sadržaj}%
+ \def\listfigurename{Popis slika}%
+ \def\listtablename{Popis tablica}%
+ \def\indexname{Indeks}%
+ \def\figurename{Slika}%
+ \def\tablename{Tablica}%
+ \def\partname{Dio}%
+ \def\enclname{Prilozi}%
+ \def\ccname{Kopija}%
+ \def\headtoname{Prima}%
+ \def\pagename{Stranica}%
+ \def\seename{Vidjeti}%
+ \def\alsoname{Također vidjeti}%
+ \def\proofname{Dokaz}%
+ \def\glossaryname{Rječnik}%
+}
+
+\def\datebosnian{%
+ \def\today{\number\day.~\ifcase\month\or
+ januar\or februar\or mart\or april\or maj\or
+ juni\or juli\or august\or septembar\or oktobar\or novembar\or
+ decembar\fi \space \number\year.~}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bosnian.ldf>
+%<*gloss-br.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-br.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-br.ldf}[polyglossia: module for br (breton)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{breton}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-br.ldf>
+%<*gloss-brazil.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-brazil.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-brazil.ldf}[polyglossia: module for brazilian portuguese]
+
+% We only provide this gloss for backwards compatibility. The name
+% 'brazil' was selected in accordance with babel.
+% Since brazil is a variety of portuguese, we use 'portuguese' now.
+
+\xpg@load@master@language{portuguese}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-brazil.ldf>
+%<*gloss-breton.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-breton.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-breton.ldf}[polyglossia: module for breton]
+\PolyglossiaSetup{breton}{
+ bcp47=br,
+ hyphennames={breton},
+ hyphenmins={2,2},
+ langtag=BRE,
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{breton}{br}
+
+\ifluatex
+ % TODO
+\else
+ \newXeTeXintercharclass\breton@punctthin % ! ? ;
+ \newXeTeXintercharclass\breton@punctthick % :
+\fi
+
+\def\breton@punctthinspace{{\unskip\thinspace}}
+\def\breton@punctthickspace{{\unskip\nobreakspace}}
+
+\def\breton@punctuation{%
+ \ifluatex
+ % TODO
+ \else
+ \XeTeXinterchartokenstate=1%
+ \XeTeXcharclass `\! \breton@punctthin
+ \XeTeXcharclass `\? \breton@punctthin
+ \XeTeXcharclass `\; \breton@punctthin
+ \XeTeXcharclass `\: \breton@punctthick
+ \XeTeXinterchartoks \z@ \breton@punctthin = \breton@punctthinspace
+ \XeTeXinterchartoks \z@ \breton@punctthick = \breton@punctthickspace
+ \fi
+}
+
+\def\nobreton@punctuation{%
+ \ifluatex
+ % TODO
+ \else
+ \XeTeXcharclass `\! \z@
+ \XeTeXcharclass `\? \z@
+ \XeTeXcharclass `\; \z@
+ \XeTeXcharclass `\: \z@
+ \XeTeXinterchartokenstate=0%
+ \fi
+}
+
+
+\def\captionsbreton{%
+ \def\refname{Daveennoù}%
+ \def\abstractname{Dvierrañ}%
+ \def\bibname{Lennadurezh}%
+ \def\prefacename{Rakskrid}%
+ \def\chaptername{Pennad}%
+ \def\appendixname{Stagadenn}%
+ \def\contentsname{Taolenn}%
+ \def\listfigurename{Listenn ar Figurennoù}%
+ \def\listtablename{Listenn an taolennoù}%
+ \def\indexname{Meneger}%
+ \def\figurename{Figurenn}%
+ \def\tablename{Taolenn}%
+ \def\thepart{}%
+ \def\partname{Lodenn}%
+ \def\pagename{Pajenn}%
+ \def\seename{Gwelout}%
+ \def\alsoname{Gwelout ivez}%
+ \def\enclname{Dielloù kevret}%
+ \def\ccname{Eilskrid da}%
+ \def\headtoname{evit}%
+ \def\proofname{Proof}%
+ \def\glossaryname{Glossary}%
+ }
+\def\datebreton{%
+ \def\today{\ifnum\day=1\relax 1\/\textsuperscript{añ}\else
+ \number\day\fi \space a\space viz\space\ifcase\month\or
+ Genver\or C'hwevrer\or Meurzh\or Ebrel\or Mae\or Mezheven\or
+ Gouere\or Eost\or Gwengolo\or Here\or Du\or Kerzu\fi
+ \space\number\year}}
+
+\def\noextras@breton{%
+ \nobreton@punctuation%
+ }
+
+\def\blockextras@breton{%
+ \breton@punctuation%
+ }
+
+\def\inlineextras@breton{%
+ \breton@punctuation%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-breton.ldf>
+%<*gloss-british.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-british.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-british.ldf}[polyglossia: module for british english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-british.ldf>
+%<*gloss-bs.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bs.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bs.ldf}[polyglossia: module for bs (bosnian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{bosnian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bs.ldf>
+%<*gloss-bulgarian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-bulgarian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-bulgarian.ldf}[polyglossia: module for bulgarian]
+\PolyglossiaSetup{bulgarian}{
+ bcp47=bg,
+ script=Cyrillic,
+ scripttag=cyrl,
+ langtag=BGR,
+ hyphennames={bulgarian},
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup
+ %TODO localalph=bulgarian@alph
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{bulgarian}{bg}
+
+\def\bulgarian@Alph#1{%
+ \ifcase#1\or
+ А\or Б\or В\or Г\or Д\or Е\or Ж\or
+ З\or И\or Й\or К\or Л\or М\or Н\or
+ О\or П\or Р\or С\or Т\or У\or Ф\or
+ Х\or Ц\or Ч\or Ш\or Щ\or Ъ\or
+ Ю\or Я\else
+ \xpg@ill@value{#1}{bulgarian@Alph}\fi}%
+
+\def\bulgarian@alph#1{%
+ \ifcase#1\or
+ а\or б\or в\or г\or д\or е\or ж\or
+ з\or и\or й\or к\or л\or м\or н\or
+ о\or п\or р\or с\or т\or у\or ф\or
+ х\or ц\or ч\or ш\or щ\or ъ\or ь\or
+ ю\or я\else
+ \xpg@ill@value{#1}{bulgarian@alph}\fi}%
+
+\def\bulgarian@numbers{%
+ \let\@Alph\bulgarian@Alph%
+ \let\@alph\bulgarian@alph%
+ }
+
+\def\nobulgarian@numbers{%
+ \let\@Alph\latin@Alph%
+ \let\@alph\latin@alph%
+}
+
+\def\captionsbulgarian{%
+ \def\refname{Литература}%
+ \def\abstractname{Абстракт}%
+ \def\bibname{Библиография}%
+ \def\prefacename{Предговор}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Приложение}%
+ \def\contentsname{Съдържание}%
+ \def\listfigurename{Списък на фигурите}%
+ \def\listtablename{Списък на таблиците}%
+ \def\indexname{Азбучен указател}%
+ \def\figurename{Фигура}%
+ \def\tablename{Таблица}%
+ %\def\thepart{}%
+ %\def\partname{}%
+ \def\pagename{Стр.}%
+ \def\seename{вж.}%
+ \def\alsoname{вж.\ също и}%
+ \def\enclname{Приложения}%
+ \def\ccname{копия}%
+ %\def\headtoname{}%
+ \def\proofname{Proof}%
+ \def\glossaryname{Glossary}%
+ }
+\def\datebulgarian{%
+ \def\today{\number\day~\ifcase\month\or
+ януари\or
+ февруари\or
+ март\or
+ април\or
+ май\or
+ юни\or
+ юли\or
+ август\or
+ септември\or
+ октомври\or
+ ноември\or
+ декември\fi%
+ \ \number\year~г.}%
+ \def\month@Roman{\expandafter\@Roman\month}%
+ \def\todayRoman{\number\day.\,\month@Roman.\,\number\year~г.}%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-bulgarian.ldf>
+%<*gloss-ca.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ca.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ca.ldf}[polyglossia: module for ca (catalan)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{catalan}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ca.ldf>
+%<*gloss-canadian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-canadian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-canadian.ldf}[polyglossia: module for canadian english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-canadian.ldf>
+%<*gloss-canadien.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-canadien.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-canadien.ldf}[polyglossia: module for canadian french]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{french}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-canadien.ldf>
+%<*gloss-catalan.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-catalan.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-catalan.ldf}[polyglossia: module for catalan]
+\PolyglossiaSetup{catalan}{
+ bcp47=ca,
+ hyphennames={catalan},
+ hyphenmins={2,2},
+ langtag=CAT,
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{catalan}{ca}
+
+\define@boolkey{catalan}[catalan@]{babelshorthands}[true]{}
+\ifsystem@babelshorthands
+ \setkeys{catalan}{babelshorthands=true}
+\else
+ \setkeys{catalan}{babelshorthands=false}
+\fi
+
+% Register default options
+\xpg@initialize@gloss@options{catalan}{babelshorthands=false}
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+%%% adapted from Babel's catalan.ldf
+\newdimen\leftllkern \newdimen\rightllkern \newdimen\raiselldim
+
+% we check if char · exists, and use it instead of raised dot:
+\def\xpg@raiseddot{%
+ \charifavailable{00B7}{\raise\raiselldim\hbox{.}}%
+}
+
+\def\lgem{%
+ \ifmmode
+ \csname normal@char\string"\endcsname l%
+ \else
+ \leftllkern=0pt\rightllkern=0pt\raiselldim=0pt%
+ \setbox0\hbox{l}\setbox1\hbox{l\/}%
+ \xpg@if@char@available{00B7}%
+ {\setbox2\hbox{\char"00B7}}%
+ {\setbox2\hbox{.}}%
+ \advance\raiselldim by \the\fontdimen5\the\font
+ \advance\raiselldim by -\ht2%
+ \leftllkern=-.25\wd0%
+ \advance\leftllkern by \wd1%
+ \advance\leftllkern by -\wd0%
+ \rightllkern=-.25\wd0%
+ \advance\rightllkern by -\wd1%
+ \advance\rightllkern by \wd0%
+ \allowhyphens\discretionary{l-}{l}%
+ {\hbox{l}\kern\leftllkern\xpg@raiseddot%
+ \kern\rightllkern\hbox{l}}\allowhyphens
+ \fi
+}
+
+\def\Lgem{%
+ \ifmmode
+ \csname normal@char\string"\endcsname L%
+ \else
+ \leftllkern=0pt\rightllkern=0pt\raiselldim=0pt%
+ \setbox0\hbox{L}\setbox1\hbox{L\/}%
+ \xpg@if@char@available{00B7}%
+ {\setbox2\hbox{\char"00B7}}%
+ {\setbox2\hbox{.}}%
+ \advance\raiselldim by .5\ht0%
+ \advance\raiselldim by -.5\ht2%
+ \leftllkern=-.125\wd0%
+ \advance\leftllkern by \wd1%
+ \advance\leftllkern by -\wd0%
+ \rightllkern=-\wd0%
+ \divide\rightllkern by 6%
+ \advance\rightllkern by -\wd1%
+ \advance\rightllkern by \wd0%
+ \allowhyphens\discretionary{L-}{L}%
+ {\hbox{L}\kern\leftllkern\xpg@raiseddot%
+ \kern\rightllkern\hbox{L}}\allowhyphens
+ \fi
+}
+
+\AtBeginDocument{%
+ \let\lslash\l
+ \let\Lslash\L
+ \DeclareRobustCommand\l{\@ifnextchar.\bbl@l{\@ifnextchar·\bbl@l\lslash}}
+ \DeclareRobustCommand\L{\@ifnextchar.\bbl@L{\@ifnextchar·\bbl@L\Lslash}}}
+\def\bbl@l#1#2{\lgem}
+\def\bbl@L#1#2{\Lgem}
+
+\def\catalan@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{catalan}%
+ \declare@shorthand{catalan}{"l}{\lgem{}}
+ \declare@shorthand{catalan}{"L}{\Lgem{}}
+}
+
+\def\nocatalan@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\def\captionscatalan{%
+ \def\refname{Referències}%
+ \def\abstractname{Resum}%
+ \def\bibname{Bibliografia}%
+ \def\prefacename{Pròleg}%
+ \def\chaptername{Capítol}%
+ \def\appendixname{Apèndix}%
+ \def\contentsname{Índex}%
+ \def\listfigurename{Índex de figures}%
+ \def\listtablename{Índex de taules}%
+ \def\indexname{Índex alfabètic}%
+ \def\figurename{Figura}%
+ \def\tablename{Taula}%
+ %\def\thepart{}%
+ \def\partname{Part}%
+ \def\pagename{Pàgina}%
+ \def\seename{Vegeu}%
+ \def\alsoname{Vegeu també}%
+ \def\enclname{Adjunt}%
+ \def\ccname{Còpies a}%
+ \def\headtoname{A}%
+ \def\proofname{Demostració}%
+ \def\glossaryname{Glossari}%
+ }
+\def\datecatalan{%
+ \def\today{\number\day~\ifcase\month\or
+ de gener\or de febrer\or de març\or d'abril\or de maig\or
+ de juny\or de juliol\or d'agost\or de setembre\or d'octubre\or
+ de novembre\or de desembre\fi
+ \space de~\number\year}}
+
+\def\noextras@catalan{%
+ \nocatalan@shorthands%
+}
+
+\def\blockextras@catalan{%
+ \ifcatalan@babelshorthands\catalan@shorthands\fi%
+}
+
+\def\inlineextras@catalan{%
+ \ifcatalan@babelshorthands\catalan@shorthands\fi%
+}
+% \end{macrocode}
+% \iffalse
+%</gloss-catalan.ldf>
+%<*gloss-ckb-Arab.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ckb-Arab.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ckb-Arab.ldf}[polyglossia: module for ckb-Arab (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ckb-Arab.ldf>
+%<*gloss-ckb-Latn.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ckb-Latn.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ckb-Latn.ldf}[polyglossia: module for ckb-Latn (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ckb-Latn.ldf>
+%<*gloss-ckb.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ckb.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ckb.ldf}[polyglossia: module for ckb (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ckb.ldf>
+%<*gloss-cop.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-cop.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-cop.ldf}[polyglossia: module for cop (coptic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{coptic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-cop.ldf>
+%<*gloss-coptic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-coptic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-coptic.ldf}[polyglossia: module for coptic]
+\PolyglossiaSetup{coptic}{
+ bcp47=cop,
+ script=Coptic,
+ scripttag=copt,
+ langtag=COP,
+ hyphennames={coptic},
+ hyphenmins={2,2},
+ fontsetup=true
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{coptic}{cop}
+
+%\def\captionscoptic{%
+% \def\refname{<++>}%
+% \def\abstractname{<++>}%
+% \def\bibname{<++>}%
+% \def\prefacename{<++>}%
+% \def\chaptername{<++>}%
+% \def\appendixname{<++>}%
+% \def\contentsname{<++>}%
+% \def\listfigurename{<++>}%
+% \def\listtablename{<++>}%
+% \def\indexname{<++>}%
+% \def\figurename{<++>}%
+% \def\tablename{<++>}%
+% \def\thepart{}%
+% \def\partname{<++>}%
+% \def\pagename{<++>}%
+% \def\seename{<++>}%
+% \def\alsoname{<++>}%
+% \def\enclname{<++>}%
+% \def\ccname{<++>}%
+% \def\headtoname{<++>}%
+% \def\proofname{<++>}%
+% \def\glossaryname{<++>}%
+% }
+%\def\datecoptic{%
+% \def\today{<++>}%
+% }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-coptic.ldf>
+%<*gloss-croatian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-croatian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-croatian.ldf}[polyglossia: module for croatian]
+\PolyglossiaSetup{croatian}{
+ bcp47=hr,
+ langtag=HRV,
+ hyphennames={croatian},
+ hyphenmins={2,2}, % aligned with https://ctan.org/pkg/hrhyph patterns and http://lebesgue.math.hr/~nenad/Diplomski/Maja_Ribaric_2011.pdf
+ frenchspacing=true, % recommendation from Damir Bralić
+ indentfirst=false, % recommendation from Damir Bralić
+ fontsetup=true
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{croatian}{hr}
+
+\define@boolkey{croatian}[croatian@]{babelshorthands}[true]{}
+
+\define@boolkey{croatian}[croatian@]{disableligatures}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{croatian}{babelshorthands=false,disableligatures=false}
+
+\ifsystem@babelshorthands
+ \setkeys{croatian}{babelshorthands=true}
+\else
+ \setkeys{croatian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\croatian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{croatian}%
+ \declare@shorthand{croatian}{"=}{\penalty\@M-\hskip\z@skip}%
+ \declare@shorthand{croatian}{""}{\hskip\z@skip}%
+ \declare@shorthand{croatian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{croatian}{"-}{\nobreak\-\bbl@allowhyphens}%
+ \declare@shorthand{croatian}{"|}{%
+ \textormath{\penalty\@M\discretionary{-}{}{\kern.03em}%
+ \bbl@allowhyphens}{}%
+ }%
+ \declare@shorthand{croatian}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+ \declare@shorthand{croatian}{"`}{„}%
+ \declare@shorthand{croatian}{"'}{”}%
+ \declare@shorthand{croatian}{"<}{«}%
+ \declare@shorthand{croatian}{">}{»}%
+ \declare@shorthand{croatian}{"D}{\xpg@hr@lig{D}}%
+ \declare@shorthand{croatian}{"d}{\xpg@hr@lig{d}}%
+ \declare@shorthand{croatian}{"L}{\xpg@hr@lig{L}}%
+ \declare@shorthand{croatian}{"l}{\xpg@hr@lig{l}}%
+ \declare@shorthand{croatian}{"N}{\xpg@hr@lig{N}}%
+ \declare@shorthand{croatian}{"n}{\xpg@hr@lig{n}}%
+}
+
+\def\nocroatian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\newcommand*\hr@charifavailable[2]{%
+ \ifcroatian@disableligatures
+ \bgroup#2\egroup%
+ \else
+ \charifavailable{#1}{#2}%
+ \fi%
+}
+
+% Provide croatian ligatures if available in current font
+\def\xpg@hr@lig#1#2{%
+ \bgroup%
+ % 1. DŽ, Dž and dž
+ \ifx#1D%
+ \ifx#2Z\relax%
+ \hr@charifavailable{01C4}{DŽ}%
+ \else%
+ \ifx#2z\relax
+ \hr@charifavailable{01C5}{Dž}%
+ \else
+ D#2%
+ \fi%
+ \fi%
+ \fi%
+ \ifx#1d%
+ \ifx#2z\relax
+ \hr@charifavailable{01C6}{dž}%
+ \else
+ d#2%
+ \fi%
+ \fi%
+ % 2. LJ, Lj and lj
+ \ifx#1L%
+ \ifx#2J\relax%
+ \hr@charifavailable{01C7}{LJ}%
+ \else%
+ \ifx#2j\relax
+ \hr@charifavailable{01C8}{Lj}%
+ \else
+ L#2%
+ \fi%
+ \fi%
+ \fi%
+ \ifx#1l%
+ \ifx#2j\relax
+ \hr@charifavailable{01C9}{lj}%
+ \else
+ l#2%
+ \fi%
+ \fi%
+ % 2. NJ, Nj and nj
+ \ifx#1N%
+ \ifx#2J\relax%
+ \hr@charifavailable{01CA}{NJ}%
+ \else%
+ \ifx#2j\relax
+ \hr@charifavailable{01CB}{Nj}%
+ \else
+ N#2%
+ \fi%
+ \fi%
+ \fi%
+ \ifx#1n%
+ \ifx#2j\relax
+ \hr@charifavailable{01CC}{nj}%
+ \else
+ n#2%
+ \fi%
+ \fi%
+ \egroup%
+}
+
+\def\captionscroatian{%
+ \def\prefacename{Predgovor}%
+ \def\refname{Literatura}%
+ \def\abstractname{Sažetak}%
+ \def\bibname{Bibliografija}%
+ \def\chaptername{Poglav\hr@charifavailable{01C9}{lj}e}%
+ \def\appendixname{Dodatak}%
+ \def\contentsname{Sadržaj}%
+ \def\listfigurename{Popis slika}%
+ \def\listtablename{Popis tablica}%
+ \def\indexname{Kazalo}%
+ \def\figurename{Slika}%
+ \def\tablename{Tablica}%
+ \def\partname{Dio}%
+ \def\enclname{Prilozi}%
+ \def\ccname{Kopija}%
+ \def\headtoname{Prima}%
+ \def\pagename{Stranica}%
+ \def\seename{Vidjeti}%
+ \def\alsoname{Također vidjeti}%
+ \def\proofname{Dokaz}%
+ \def\glossaryname{Pojmovnik}%
+}
+
+\def\datecroatian{%
+ \def\today{\number\day.~\ifcase\month\or
+ siječnja\or veljače\or ožujka\or travnja\or svibnja\or
+ lipnja\or srpnja\or kolovoza\or rujna\or listopada\or studenoga\or
+ prosinca\fi \space \number\year.}%
+}
+
+\def\noextras@croatian{%
+ \nocroatian@shorthands%
+}
+
+\def\blockextras@croatian{%
+ \ifcroatian@babelshorthands\croatian@shorthands\fi%
+}
+
+\def\inlineextras@croatian{%
+ \ifcroatian@babelshorthands\croatian@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-croatian.ldf>
+%<*gloss-cy.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-cy.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-cy.ldf}[polyglossia: module for cy (welsh)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{welsh}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-cy.ldf>
+%<*gloss-cz.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-cz.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-cz.ldf}[polyglossia: module for cz (czech)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{czech}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-cz.ldf>
+%<*gloss-czech.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-czech.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-czech.ldf}[polyglossia: module for czech]
+
+\PolyglossiaSetup{czech}{
+ bcp47=cz,
+ hyphennames={czech},
+ hyphenmins={2,2},
+ langtag=CSY,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{czech}{cz}
+
+\ifluatex
+ \RequirePackage{luavlna}
+\fi
+
+\define@boolkey{czech}[czech@]{babelshorthands}[true]{}
+
+\define@boolkey{czech}[czech@]{splithyphens}[true]{}
+
+\define@boolkey{czech}[czech@]{vlna}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{czech}{babelshorthands=false,splithyphens=true,vlna=true}
+
+\ifsystem@babelshorthands
+ \setkeys{czech}{babelshorthands=true}
+\else
+ \setkeys{czech}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\cs@@splithyphen#1{%
+ \ifnum\hyphenchar \font>0%
+ \kern\z@\discretionary{-}{\char\hyphenchar\the\font}{#1}%
+ \nobreak\hskip\z@%
+ \else%
+ #1%
+ \fi%
+}
+
+\def\cs@splithyphen{%
+ \cs@@splithyphen{-}%
+}
+
+\def\czech@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{czech}%
+ \declare@shorthand{czech}{"=}{\cs@splithyphen}%
+ \declare@shorthand{czech}{"`}{„}%
+ \declare@shorthand{czech}{"'}{“}%
+ \declare@shorthand{czech}{"<}{«}%
+ \declare@shorthand{czech}{">}{»}%
+}
+
+\def\noczech@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\ifxetex
+ % splithyphens
+ \newXeTeXintercharclass\czech@hyphen % -
+ % vlna
+ \newXeTeXintercharclass\czech@openpunctuation
+ \newXeTeXintercharclass\czech@nonsyllabicpreposition
+ \ifdefined\e@alloc@intercharclass@top
+ \chardef\czech@boundary=\e@alloc@intercharclass@top
+ \else
+ \ifdefined\XeTeXinterwordspaceshaping
+ \chardef\czech@boundary=4095 %
+ \def\newXeTeXintercharclass{%
+ \e@alloc\XeTeXcharclass\chardef
+ \xe@alloc@intercharclass\m@ne\@ucharclass@boundary}
+ \else
+ \chardef\czech@boundary=255
+ \fi
+ \fi
+\fi
+
+\def\czech@hyphens{%
+ \ifluatex
+ \AfterPreamble{\enablesplithyphens{czech}}%
+ \else
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\- \czech@hyphen
+ \XeTeXinterchartoks \z@ \czech@hyphen = {\cs@@splithyphen}% "-" -> "\cs@@splithyphen-"
+ % necessary if used together with vlna:
+ \XeTeXinterchartoks \czech@nonsyllabicpreposition \czech@hyphen = {\cs@@splithyphen}% "-" -> "\cs@@splithyphen-"
+ \fi%
+}
+
+\def\noczech@hyphens{%
+ \ifluatex
+ \AfterPreamble{\disablesplithyphens{czech}}%
+ \else
+ \XeTeXcharclass `\- \z@
+ \fi%
+}
+
+% Add nonbreakable space after single-letter word to
+% prevent them to land at the end of a line
+\def\czech@vlna{%
+ \ifluatex
+ \preventsingleon
+ \else
+ % Code taken and adapted from xevlna.sty
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\( \czech@openpunctuation
+ \XeTeXcharclass `\[ \czech@openpunctuation
+ \XeTeXcharclass `\„ \czech@openpunctuation
+ \XeTeXcharclass `\» \czech@openpunctuation
+ \XeTeXcharclass `\K \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\k \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\S \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\s \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\V \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\v \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\Z \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\z \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\O \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\o \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\U \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\u \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\A \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\a \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\I \czech@nonsyllabicpreposition
+ \XeTeXcharclass `\i \czech@nonsyllabicpreposition
+ \XeTeXinterchartoks \czech@boundary \czech@nonsyllabicpreposition {\czech@interchartoks}
+ \XeTeXinterchartoks \czech@openpunctuation \czech@nonsyllabicpreposition {\czech@interchartoks}
+ \def\czech@nointerchartoks{\let\czech@interchartoks\czech@PreCSpreposition}
+ \def\czech@PreCSpreposition{\def\next{}%
+ \ifnum\catcode`\ =10 % nothing will be done in verbatim
+ \ifmmode % nothing in math
+ \else
+ \let\czech@interchartoks\czech@nointerchartoks
+ \let\next\czech@ExamineCSpreposition
+ \fi \fi
+ \next%
+ }
+ \def\czech@ExamineCSpreposition ##1{##1\futurelet\next\czech@ProcessCSpreposition}
+ \def\czech@ProcessCSpreposition{\ifx\next\czech@XeTeXspace\nobreak\fi}
+ \futurelet\czech@XeTeXspace{ }\czech@nointerchartoks
+ \fi
+}
+
+\def\noczech@vlna{%
+ \ifluatex
+ \preventsingleoff
+ \else
+ \XeTeXcharclass`\(\z@
+ \XeTeXcharclass`\[\z@
+ \XeTeXcharclass`\„\z@
+ \XeTeXcharclass`\»\z@
+ \XeTeXcharclass`\K\z@
+ \XeTeXcharclass`\k\z@
+ \XeTeXcharclass`\S\z@
+ \XeTeXcharclass`\s\z@
+ \XeTeXcharclass`\V\z@
+ \XeTeXcharclass`\v\z@
+ \XeTeXcharclass`\Z\z@
+ \XeTeXcharclass`\z\z@
+ \XeTeXcharclass`\O\z@
+ \XeTeXcharclass`\o\z@
+ \XeTeXcharclass`\U\z@
+ \XeTeXcharclass`\u\z@
+ \XeTeXcharclass`\A\z@
+ \XeTeXcharclass`\a\z@
+ \XeTeXcharclass`\I\z@
+ \XeTeXcharclass`\i\z@
+ \fi
+}
+
+
+\def\captionsczech{%
+ \def\refname{Reference}%
+ \def\abstractname{Abstrakt}%
+ \def\bibname{Literatura}%
+ \def\prefacename{Předmluva}%
+ \def\chaptername{Kapitola}%
+ \def\appendixname{Dodatek}%
+ \def\contentsname{Obsah}%
+ \def\listfigurename{Seznam obrázků}%
+ \def\listtablename{Seznam tabulek}%
+ \def\indexname{Index}%
+ \def\figurename{Obrázek}%
+ \def\tablename{Tabulka}%
+ %\def\thepart{}%
+ \def\partname{Část}%
+ \def\pagename{Strana}%
+ \def\seename{viz}%
+ \def\alsoname{viz}%
+ \def\enclname{Příloha}%
+ \def\ccname{Na vědomí:}%
+ \def\headtoname{Komu}%
+ \def\proofname{Důkaz}%
+ \def\glossaryname{Slovník}%was Glosář
+}
+
+\def\dateczech{%
+ \def\today{\number\day.~\ifcase\month\or
+ ledna\or února\or března\or dubna\or května\or
+ června\or července\or srpna\or září\or
+ října\or listopadu\or prosince\fi
+ \space \number\year}%
+}
+
+\def\noextras@czech{%
+ \noczech@shorthands%
+ \noczech@hyphens%
+ \noczech@vlna%
+ \ifxetex\XeTeXinterchartokenstate=0\fi%
+}
+
+\def\blockextras@czech{%
+ \ifczech@babelshorthands\czech@shorthands\fi%
+ \ifczech@vlna\czech@vlna\else\noczech@vlna\fi%
+ \ifczech@splithyphens\czech@hyphens\else\noczech@hyphens\fi%
+}
+
+\def\inlineextras@czech{%
+ \ifczech@babelshorthands\czech@shorthands\fi%
+ \ifczech@vlna\czech@vlna\else\noczech@vlna\fi%
+ \ifczech@splithyphens\czech@hyphens\else\noczech@hyphens\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-czech.ldf>
+%<*gloss-da.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-da.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-da.ldf}[polyglossia: module for da (danish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{danish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-da.ldf>
+%<*gloss-danish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-danish.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-danish.ldf}[polyglossia: module for danish]
+\PolyglossiaSetup{danish}{
+ bcp47=da,
+ hyphennames={danish},
+ hyphenmins={2,3},
+ langtag=DAN,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{danish}{da}
+
+\def\captionsdanish{%
+ \def\prefacename{Forord}%
+ \def\refname{Litteratur}%
+ \def\abstractname{Resumé}%
+ \def\bibname{Litteratur}%
+ \def\chaptername{Kapitel}%
+ \def\appendixname{Bilag}%
+ \def\contentsname{Indhold}%
+ \def\listfigurename{Figurer}%
+ \def\listtablename{Tabeller}%
+ \def\indexname{Indeks}%
+ \def\figurename{Figur}%
+ \def\tablename{Tabel}%
+ \def\partname{Del}%
+ \def\enclname{Vedlagt}%
+ \def\ccname{Kopi til}% or Kopi sendt til
+ \def\headtoname{Til}% in letter
+ \def\pagename{Side}%
+ \def\seename{Se}%
+ \def\alsoname{Se også}%
+ \def\proofname{Bevis}%
+ \def\glossaryname{Gloseliste}%
+}
+\def\datedanish{%
+ \def\today{\number\day.~\ifcase\month\or
+ januar\or februar\or marts\or april\or maj\or juni\or
+ juli\or august\or september\or oktober\or november\or december\fi
+ \space\number\year}
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-danish.ldf>
+%<*gloss-de-AT-1901.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-AT-1901.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-AT-1901.ldf}[polyglossia: module for de-AT-1901 (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-AT-1901.ldf>
+%<*gloss-de-AT-1996.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-AT-1996.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-AT-1996.ldf}[polyglossia: module for de-AT-1996 (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-AT-1996.ldf>
+%<*gloss-de-AT.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-AT.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-AT.ldf}[polyglossia: module for de-AT (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-AT.ldf>
+%<*gloss-de-CH-1901.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-CH-1901.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-CH-1901.ldf}[polyglossia: module for de-CH-1901 (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-CH-1901.ldf>
+%<*gloss-de-CH-1996.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-CH-1996.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-CH-1996.ldf}[polyglossia: module for de-CH-1996 (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-CH-1996.ldf>
+%<*gloss-de-CH.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-CH.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-CH.ldf}[polyglossia: module for de-CH (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-CH.ldf>
+%<*gloss-de-DE-1901.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-DE-1901.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-DE-1901.ldf}[polyglossia: module for de-DE-1901 (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-DE-1901.ldf>
+%<*gloss-de-DE-1996.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-DE-1996.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-DE-1996.ldf}[polyglossia: module for de-DE-1996 (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-DE-1996.ldf>
+%<*gloss-de-DE.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-DE.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-DE.ldf}[polyglossia: module for de-DE (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-DE.ldf>
+%<*gloss-de-Latf-AT-1901.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-AT-1901.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-AT-1901-Latf.ldf}[polyglossia: module for de-AT-1901-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-AT-1901.ldf>
+%<*gloss-de-Latf-AT-1996.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-AT-1996.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-AT-1996-Latf.ldf}[polyglossia: module for de-AT-1996-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-AT-1996.ldf>
+%<*gloss-de-Latf-AT.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-AT.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-AT-Latf.ldf}[polyglossia: module for de-AT-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-AT.ldf>
+%<*gloss-de-Latf-CH-1901.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-CH-1901.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-CH-1901-Latf.ldf}[polyglossia: module for de-CH-1901-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-CH-1901.ldf>
+%<*gloss-de-Latf-CH-1996.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-CH-1996.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-CH-1996-Latf.ldf}[polyglossia: module for de-CH-1996-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-CH-1996.ldf>
+%<*gloss-de-Latf-CH.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-CH.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-CH-Latf.ldf}[polyglossia: module for de-CH-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-CH.ldf>
+%<*gloss-de-Latf-DE-1901.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-DE-1901.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-DE-1901-Latf.ldf}[polyglossia: module for de-DE-1901-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-DE-1901.ldf>
+%<*gloss-de-Latf-DE-1996.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-DE-1996.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-DE-1996-Latf.ldf}[polyglossia: module for de-DE-1996-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-DE-1996.ldf>
+%<*gloss-de-Latf-DE.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf-DE.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-DE-Latf.ldf}[polyglossia: module for de-DE-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf-DE.ldf>
+%<*gloss-de-Latf.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de-Latf.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de-Latf.ldf}[polyglossia: module for de-Latf (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de-Latf.ldf>
+%<*gloss-de.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-de.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-de.ldf}[polyglossia: module for de (german)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-de.ldf>
+%<*gloss-divehi.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-divehi.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-divehi.ldf}[polyglossia: module for divehi]
+\ifluatex
+ \xpg@warning{Divehi is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\RequireBidi
+\PolyglossiaSetup{divehi}{
+ bcp47=dv,
+ script=Thaana,
+ scripttag=thaa,
+ langtag=DIV,% TODO Support DHV as well?
+ direction=RL,
+ hyphennames={nohyphenation},
+ fontsetup=true
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{divehi}{dv}
+
+%\def\captionsdivehi{%
+% \def\refname{<++>}%
+% \def\abstractname{<++>}%
+% \def\bibname{<++>}%
+% \def\prefacename{<++>}%
+% \def\chaptername{<++>}%
+% \def\appendixname{<++>}%
+% \def\contentsname{<++>}%
+% \def\listfigurename{<++>}%
+% \def\listtablename{<++>}%
+% \def\indexname{<++>}%
+% \def\figurename{<++>}%
+% \def\tablename{<++>}%
+% \def\thepart{}%
+% \def\partname{<++>}%
+% \def\pagename{<++>}%
+% \def\seename{<++>}%
+% \def\alsoname{<++>}%
+% \def\enclname{<++>}%
+% \def\ccname{<++>}%
+% \def\headtoname{<++>}%
+% \def\proofname{<++>}%
+% \def\glossaryname{<++>}%
+% }
+%\def\datedivehi{\def\today{<++>}}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@divehi{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@divehi{%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-divehi.ldf>
+%<*gloss-dsb.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-dsb.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-dsb.ldf}[polyglossia: module for dsb (sorbian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{sorbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-dsb.ldf>
+%<*gloss-dutch.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-dutch.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-dutch.ldf}[polyglossia: module for dutch]
+\PolyglossiaSetup{dutch}{
+ bcp47=nl,
+ hyphennames={dutch},
+ hyphenmins={2,2},
+ langtag=NLD,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{dutch}{nl}
+
+\define@boolkey{dutch}[dutch@]{babelshorthands}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{dutch}{babelshorthands=false}
+
+\ifsystem@babelshorthands
+ \setkeys{dutch}{babelshorthands=true}
+\else
+ \setkeys{dutch}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\dutch@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{dutch}%
+ \declare@shorthand{dutch}{"-}{\nobreak-\bbl@allowhyphens}
+ \declare@shorthand{dutch}{"~}{\textormath{\leavevmode\hbox{-}}{-}}
+ \declare@shorthand{dutch}{"|}{%
+ \textormath{\discretionary{-}{}{\kern.03em}}{}}
+ \declare@shorthand{dutch}{""}{\hskip\z@skip}
+ \declare@shorthand{dutch}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+ \def\-{\bbl@allowhyphens\discretionary{-}{}{}\bbl@allowhyphens}%
+}
+
+\def\nodutch@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+ \def\-{\discretionary{-}{}{}}% << original def in latex.ltx
+}
+
+\def\captionsdutch{%
+ \def\prefacename{Voorwoord}%
+ \def\refname{Referenties}%
+ \def\abstractname{Samenvatting}%
+ \def\bibname{Bibliografie}%
+ \def\chaptername{Hoofdstuk}%
+ \def\appendixname{Bijlage}%
+ \def\contentsname{Inhoudsopgave}%
+ \def\listfigurename{Lijst van figuren}%
+ \def\listtablename{Lijst van tabellen}%
+ \def\indexname{Index}%
+ \def\figurename{Figuur}%
+ \def\tablename{Tabel}%
+ \def\partname{Deel}%
+ \def\enclname{Bijlage(n)}%
+ \def\ccname{cc}%
+ \def\headtoname{Aan}%
+ \def\pagename{Pagina}%
+ \def\seename{zie}%
+ \def\alsoname{zie ook}%
+ \def\proofname{Bewijs}%
+ \def\glossaryname{Verklarende woordenlijst}%
+}
+
+\def\datedutch{%
+ \def\today{\number\day~\ifcase\month%
+ \or januari\or februari\or maart\or april\or mei\or juni\or
+ juli\or augustus\or september\or oktober\or november\or
+ december\fi
+ \space \number\year}%
+}
+
+\def\noextras@dutch{%
+ \nodutch@shorthands%
+}
+
+\def\blockextras@dutch{%
+ \ifdutch@babelshorthands\dutch@shorthands\fi%
+}
+
+\def\inlineextras@dutch{%
+ \ifdutch@babelshorthands\dutch@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-dutch.ldf>
+%<*gloss-dv.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-dv.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-dv.ldf}[polyglossia: module for dv (divehi)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{divehi}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-dv.ldf>
+%<*gloss-el-monoton.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-el-monoton.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-el-monoton.ldf}[polyglossia: module for el-monoton (greek)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{greek}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-el-monoton.ldf>
+%<*gloss-el-polyton.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-el-polyton.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-el-polyton.ldf}[polyglossia: module for el-polyton (greek)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{greek}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-el-polyton.ldf>
+%<*gloss-el.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-el.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-el.ldf}[polyglossia: module for el (greek)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{greek}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-el.ldf>
+%<*gloss-en-AU.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-en-AU.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-en-AU.ldf}[polyglossia: module for en-AU (english)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-en-AU.ldf>
+%<*gloss-en-CA.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-en-CA.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-en-CA.ldf}[polyglossia: module for en-CA (english)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-en-CA.ldf>
+%<*gloss-en-GB.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-en-GB.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-en-GB.ldf}[polyglossia: module for en-GB (english)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-en-GB.ldf>
+%<*gloss-en-NZ.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-en-NZ.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-en-NZ.ldf}[polyglossia: module for en-NZ (english)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-en-NZ.ldf>
+%<*gloss-en-US.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-en-US.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-en-US.ldf}[polyglossia: module for en-US (english)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-en-US.ldf>
+%<*gloss-en.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-en.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-en.ldf}[polyglossia: module for en (english)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-en.ldf>
+%<*gloss-english.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-english.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-english.ldf}[polyglossia: module for english]
+
+\PolyglossiaSetup{english}{
+ bcp47=en-US,
+ hyphennames={english,american,usenglish,USenglish},
+ hyphenmins={2,3},
+ langtag=ENG,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{english}{en}
+\setlanguagealias*[variant=australian]{english}{en-AU}
+\setlanguagealias*[variant=newzealand]{english}{en-NZ}
+\setlanguagealias*[variant=us]{english}{en-US}
+\setlanguagealias*[variant=british]{english}{en-GB}
+\setlanguagealias*[variant=canadian]{english}{en-CA}
+
+% Babel aliases
+\setlanguagealias[variant=us]{english}{american}
+\setlanguagealias[variant=australian]{english}{australian}
+\setlanguagealias[variant=british]{english}{british}
+\setlanguagealias[variant=canadian]{english}{canadian}
+\setlanguagealias[variant=newzealand]{english}{newzealand}
+
+\providebool{british@hyphen}
+\providebool{english@ordinalmonthday}
+\providebool{british@dateformat}
+
+% US English (\l@english) is default
+% Initialize its settings
+\def\english@variant{english}
+\british@hyphenfalse
+\english@ordinalmonthdayfalse
+\british@dateformatfalse
+
+% Option ordinalmonthday
+\define@boolkey{english}[english@]{ordinalmonthday}[true]{}
+
+\define@choicekey*+{english}{variant}[\xpg@val\xpg@nr]{uk,british,us,american,usmax,australian,newzealand,canadian}[us]{%
+ \ifcase\xpg@nr\relax
+ % uk:
+ \british@hyphentrue
+ \british@dateformattrue
+ \english@ordinalmonthdaytrue
+ \SetLanguageKeys{english}{babelname=british,bcp47=en-GB}%
+ \xpg@info{Option: English, variant=british}%
+ \or
+ % british:
+ \british@hyphentrue
+ \british@dateformattrue
+ \english@ordinalmonthdaytrue
+ \SetLanguageKeys{english}{babelname=british,bcp47=en-GB}%
+ \xpg@info{Option: english variant=british}%
+ \or
+ % us:
+ \british@hyphenfalse
+ \british@dateformatfalse
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=american,bcp47=en-US}%
+ \xpg@info{Option: English, variant=american}%
+ \or
+ % american:
+ \british@hyphenfalse
+ \british@dateformatfalse
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=american,bcp47=en-US}%
+ \xpg@info{Option: English, variant=american}%
+ \or
+ % usmax:
+ \british@hyphenfalse
+ \british@dateformatfalse
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=american,bcp47=en-US}%
+ \xpg@info{Option: english variant=american (with additional patterns)}%
+ \xpg@ifdefined{usenglishmax}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for "US English Max"\MessageBreak
+ I will use the standard patterns for US English instead}%
+ \adddialect\l@usenglishmax\l@english\relax%
+ }%
+ \def\english@variant{usenglishmax}%
+ \or
+ % australian:
+ % These use the british hyphenation patterns
+ % but date formats without ordinals
+ \british@hyphentrue
+ \british@dateformattrue
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=australian,bcp47=en-AU}%
+ \xpg@info{Option: English, variant=australian}%
+ \adddialect\l@australian\l@english%
+ \or
+ % newzealand:
+ % These use the british hyphenation patterns
+ % but date formats without ordinals
+ \british@hyphentrue
+ \british@dateformattrue
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=newzealand,bcp47=en-NZ}%
+ \xpg@info{Option: English, variant=newzealand}%
+ \adddialect\l@newzealand\l@english%
+ \or
+ % canadian:
+ % This is currently equivalent to usenglish (as in babel)
+ \british@hyphenfalse
+ \british@dateformatfalse
+ \english@ordinalmonthdayfalse
+ \SetLanguageKeys{english}{babelname=canadian,bcp47=en-CA}%
+ \xpg@info{Option: English, variant=american}%
+ \adddialect\l@canadian\l@english%
+ \fi
+ \ifbritish@hyphen
+ \xpg@ifdefined{ukenglish}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for British English\MessageBreak
+ I will use the patterns for US English instead}%
+ \adddialect\l@ukenglish\l@english\relax%
+ }%
+ \def\english@variant{ukenglish}%
+ \fi
+}{\xpg@warning{Unknown English variant `#1'}}
+
+% Register default options
+\xpg@initialize@gloss@options{english}{variant=us,ordinalmonthday=false}
+% Register alias options
+\xpg@set@alias@values{english}{variant}{us}{american}
+\xpg@set@alias@values{english}{variant}{uk}{british}
+
+\ifxetex
+ % Check if \l@english is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{english}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{#1}%
+ {\csletcs{l@english}{l@#1}\listbreak}%
+ {%
+ \xpg@warning{No hyphenation patterns for English found"\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@english0
+ }%
+ }%
+ \docsvlist{british, american, usenglishmax, australian, newzealand}
+ \xpg@ifdefined{english}{}{}
+ }%
+\fi
+
+\def\english@language{%
+ \polyglossia@setup@language@patterns{\english@variant}%
+}%
+
+\def\captionsenglish{%
+ \def\prefacename{Preface}%
+ \def\refname{References}%
+ \def\abstractname{Abstract}%
+ \def\bibname{Bibliography}%
+ \def\chaptername{Chapter}%
+ \def\appendixname{Appendix}%
+ \def\contentsname{Contents}%
+ \def\listfigurename{List of Figures}%
+ \def\listtablename{List of Tables}%
+ \def\indexname{Index}%
+ \def\figurename{Figure}%
+ \def\tablename{Table}%
+ \def\partname{Part}%
+ \def\enclname{encl}%
+ \def\ccname{cc}%
+ \def\headtoname{To}%
+ \def\pagename{Page}%
+ \def\seename{see}%
+ \def\alsoname{see also}%
+ \def\proofname{Proof}%
+}
+\def\dateenglish{%
+ \def\english@day{%
+ \ifenglish@ordinalmonthday
+ \ifcase\day\or
+ 1st\or 2nd\or 3rd\or 4th\or 5th\or
+ 6th\or 7th\or 8th\or 9th\or 10th\or
+ 11th\or 12th\or 13th\or 14th\or 15th\or
+ 16th\or 17th\or 18th\or 19th\or 20th\or
+ 21st\or 22nd\or 23rd\or 24th\or 25th\or
+ 26th\or 27th\or 28th\or 29th\or 30th\or
+ 31st\fi
+ \else\number\day\fi}%
+ \def\english@month{\ifcase\month\or
+ January\or February\or March\or April\or May\or June\or
+ July\or August\or September\or October\or November\or December\fi}%
+ \def\today{%
+ \ifbritish@dateformat
+ \english@day\space\english@month\space\number\year
+ \else
+ \english@month\space\english@day,\space\number\year
+ \fi}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-english.ldf>
+%<*gloss-eo.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-eo.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-eo.ldf}[polyglossia: module for eo (esperanto)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{esperanto}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-eo.ldf>
+%<*gloss-es-ES.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-es-ES.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-es-ES.ldf}[polyglossia: module for es-ES (spanish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{spanish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-es-ES.ldf>
+%<*gloss-es-MX.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-es-MX.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-es-MX.ldf}[polyglossia: module for es-MX (spanish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{spanish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-es-MX.ldf>
+%<*gloss-es.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-es.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-es.ldf}[polyglossia: module for es (spanish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{spanish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-es.ldf>
+%<*gloss-esperanto.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-esperanto.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-esperanto.ldf}[polyglossia: module for esperanto]
+\PolyglossiaSetup{esperanto}{
+ bcp47=eo,
+ hyphennames={esperanto},
+ hyphenmins={2,2},
+ langtag=NTO,
+ fontsetup=true,
+ %TODO localalph={esperanto@alph,esperanto@Alph}
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{esperanto}{eo}
+
+\def\captionsesperanto{%
+ \def\refname{Citaĵoj}%
+ \def\abstractname{Resumo}%
+ \def\bibname{Bibliografio}%
+ \def\prefacename{Antaŭparolo}%
+ \def\chaptername{Ĉapitro}%
+ \def\appendixname{Apendico}%
+ \def\contentsname{Enhavo}%
+ \def\listfigurename{Listo de figuroj}%
+ \def\listtablename{Listo de tabeloj}%
+ \def\indexname{Indekso}%
+ \def\figurename{Figuro}%
+ \def\tablename{Tabelo}%
+ %\def\thepart{}%
+ %\def\partname{}%
+ \def\pagename{Paĝo}%
+ \def\seename{vidu}%
+ \def\alsoname{Parto}%
+ \def\enclname{Aldono(j)}%
+ \def\ccname{Kopie al}%
+ \def\headtoname{Al}%
+ \def\proofname{Pruvo}%
+ \def\glossaryname{Glosaro}%
+ }
+\def\dateesperanto{%
+ \def\today{\number\day{–a}~de~\ifcase\month\or
+ januaro\or februaro\or marto\or aprilo\or majo\or junio\or
+ julio\or aŭgusto\or septembro\or oktobro\or novembro\or
+ decembro\fi,\space \number\year}%
+ \def\hodiau{la \today}%
+ \def\hodiaun{la \number\day{–an}~de~\ifcase\month\or
+ januaro\or februaro\or marto\or aprilo\or majo\or junio\or
+ julio\or aŭgusto\or septembro\or oktobro\or novembro\or
+ decembro\fi, \space \number\year}%
+ }
+\def\esperanto@alph#1{%
+ \ifcase#1\or a\or b\or c\or ĉ\or d\or e\or f\or g\or ĝ\or
+ h\or ĥ\or i\or j\or ĵ\or k\or l\or m\or n\or o\or
+ p\or r\or s\or ŝ\or t\or u\or ŭ\or v\or z\else\xpg@ill@value{#1}{esperanto@alph}\fi}%
+\def\esperanto@Alph#1{%
+ \ifcase#1\or A\or B\or C\or Ĉ\or D\or E\or F\or G\or Ĝ\or
+ H\or Ĥ\or I\or J\or Ĵ\or K\or L\or M\or N\or O\or
+ P\or R\or S\or Ŝ\or T\or U\or Ŭ\or V\or Z\else\xpg@ill@value{#1}{esperanto@Alph}\fi}%
+
+\def\esperanto@numbers{%
+ \let\@Alph\esperanto@Alph%
+ \let\@alph\esperanto@alph%
+ }
+
+\def\noesperanto@numbers{%
+ \let\@Alph\latin@Alph%
+ \let\@alph\latin@alph%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-esperanto.ldf>
+%<*gloss-estonian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-estonian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-estonian.ldf}[polyglossia: module for estonian]
+\PolyglossiaSetup{estonian}{
+ bcp47=et,
+ hyphennames={estonian},
+ hyphenmins={2,2},
+ langtag=ETI,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{estonian}{et}
+
+\def\captionsestonian{%
+ \def\refname{Viited}%
+ \def\abstractname{Kokkuvõte}%
+ \def\bibname{Kirjandus}%
+ \def\prefacename{Sissejuhatus}%
+ \def\chaptername{Peatükk}%
+ \def\appendixname{Lisa}%
+ \def\contentsname{Sisukord}%
+ \def\listfigurename{Joonised}%
+ \def\listtablename{Tabelid}%
+ \def\indexname{Indeks}%
+ \def\figurename{Joonis}%
+ \def\tablename{Tabel}%
+ %\def\thepart{}%
+ \def\partname{Osa}%
+ \def\pagename{Lk.}%
+ \def\seename{vt.}%
+ \def\alsoname{vt. ka}%
+ \def\enclname{Lisa(d)}%
+ \def\ccname{Koopia(d)}%
+ %\def\headtoname{}%
+ \def\proofname{Korrektuur}%
+ \def\glossaryname{Glossary}% <-- need translation
+ }
+\def\dateestonian{%
+ \def\today{\number\day.\space\ifcase\month\or
+ jaanuar\or veebruar\or märts\or aprill\or mai\or juuni\or
+ juuli\or august\or september\or oktoober\or november\or
+ detsember\fi\space\number\year.\space a.}}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-estonian.ldf>
+%<*gloss-et.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-et.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-et.ldf}[polyglossia: module for et (estonian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{estonian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-et.ldf>
+%<*gloss-eu.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-eu.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-eu.ldf}[polyglossia: module for eu (basque)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{basque}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-eu.ldf>
+%<*gloss-fa.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-fa.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-fa.ldf}[polyglossia: module for fa (persian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{persian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-fa.ldf>
+%<*gloss-farsi.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-farsi.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-farsi.ldf}[polyglossia: module for farsi]
+
+% We only provide this gloss for babel compatibility.
+% The proper English language name is Persian.
+
+\xpg@load@master@language{persian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-farsi.ldf>
+%<*gloss-fi.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-fi.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-fi.ldf}[polyglossia: module for fi (finnish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{finnish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-fi.ldf>
+%<*gloss-finnish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-finnish.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-finnish.ldf}[polyglossia: module for finnish]
+\PolyglossiaSetup{finnish}{
+ bcp47=fi,
+ hyphennames={finnish},
+ hyphenmins={2,2},
+ langtag=FIN,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{finnish}{fi}
+
+\define@boolkey{finnish}[finnish@]{babelshorthands}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{finnish}{babelshorthands=false}
+
+\ifsystem@babelshorthands
+ \setkeys{finnish}{babelshorthands=true}
+\else
+ \setkeys{finnish}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\finnish@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{finnish}%
+ \declare@shorthand{finnish}{"-}{\nobreak-\bbl@allowhyphens}
+ \declare@shorthand{finnish}{"|}{\textormath{\penalty@M\discretionary{-}{}{\kern.03em}}{}}%
+ \declare@shorthand{finnish}{""}{\hskip\z@skip}%
+ \declare@shorthand{finnish}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{finnish}{"=}{\penalty@M-\hskip\z@skip}%
+ \declare@shorthand{finnish}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+}
+
+\def\nofinnish@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\def\captionsfinnish{%
+ \def\refname{Viitteet}%
+ \def\abstractname{Tiivistelmä}%
+ \def\bibname{Kirjallisuutta}%
+ \def\prefacename{Esipuhe}%
+ \def\chaptername{Luku}%
+ \def\appendixname{Liite}%
+ \def\contentsname{Sisällys}%
+ \def\listfigurename{Kuvat}%
+ \def\listtablename{Taulukot}%
+ \def\indexname{Hakemisto}%
+ \def\figurename{Kuva}%
+ \def\tablename{Taulukko}%
+ %\def\thepart{}%
+ \def\partname{Osa}%
+ \def\pagename{Sivu}%
+ \def\seename{katso}%
+ \def\alsoname{katso myös}%
+ \def\enclname{Liitteet}%
+ \def\ccname{Jakelu}%
+ \def\headtoname{Vastaanottaja}%
+ \def\proofname{Todistus}%
+ \def\glossaryname{Sanasto}%
+}
+\def\datefinnish{%
+ \def\today{\number\day.~\ifcase\month\or
+ tammikuuta\or helmikuuta\or maaliskuuta\or huhtikuuta\or
+ toukokuuta\or kesäkuuta\or heinäkuuta\or elokuuta\or
+ syyskuuta\or lokakuuta\or marraskuuta\or joulukuuta\fi
+ \space\number\year}}
+
+\def\noextras@finnish{%
+ \nofinnish@shorthands%
+}
+
+\def\blockextras@finnish{%
+ \iffinnish@babelshorthands\finnish@shorthands\fi%
+}
+
+\def\inlineextras@finnish{%
+ \iffinnish@babelshorthands\finnish@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-finnish.ldf>
+%<*gloss-fr-CA.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-fr-CA.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-fr-CA.ldf}[polyglossia: module for fr-CA (french)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{french}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-fr-CA.ldf>
+%<*gloss-fr-CH.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-fr-CH.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-fr-CH.ldf}[polyglossia: module for fr-CH (french)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{french}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-fr-CH.ldf>
+%<*gloss-fr-FR.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-fr-FR.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-fr-FR.ldf}[polyglossia: module for fr-FR (french)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{french}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-fr-FR.ldf>
+%<*gloss-fr.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-fr.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-fr.ldf}[polyglossia: module for fr (french)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{french}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-fr.ldf>
+%<*gloss-french.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-french.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-french.ldf}[polyglossia: module for french]
+
+\PolyglossiaSetup{french}{%
+ bcp47=fr-FR,
+ language=French,
+ script=Latin,
+ langtag=FRA,
+ hyphennames={french,francais},
+ frenchspacing=true,
+ indentfirst=true,
+ hyphenmins={2,2},
+ fontsetup=true}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{french}{fr}
+\setlanguagealias*[variant=french]{french}{fr-FR}
+\setlanguagealias*[variant=canadian]{french}{fr-CA}
+\setlanguagealias*[variant=swiss]{french}{fr-CH}
+
+% Babel aliases
+\setlanguagealias[variant=acadian]{french}{acadien}
+\setlanguagealias[variant=canadian]{french}{canadien}
+
+\def\french@variant{french}
+\define@choicekey*+{french}{variant}[\xpg@val\xpg@nr]{french,canadian,acadian,swiss}[french]{%
+ \ifcase\xpg@nr\relax
+ % french:
+ \def\french@variant{french}%
+ \SetLanguageKeys{french}{babelname=french,bcp47=fr-FR}%
+ \french@thincolonspacefalse
+ \or
+ % canadian:
+ \def\french@variant{canadien}%
+ \SetLanguageKeys{french}{babelname=canadien,bcp47=fr-CA}%
+ \xpg@ifdefined{canadien}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for "French (Canada)"\MessageBreak
+ I will use the standard patterns for French instead}%
+ \adddialect\l@canadien\l@french\relax}%
+ \french@thincolonspacefalse
+ \or
+ % acadian:
+ \def\french@variant{acadian}%
+ \SetLanguageKeys{french}{babelname=canadien,bcp47=fr-CA}%
+ \xpg@ifdefined{acadian}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for "French (Canada)"\MessageBreak
+ I will use the standard patterns for French instead}%
+ \adddialect\l@acadian\l@french\relax}%
+ \french@thincolonspacefalse
+ \or
+ % swiss:
+ \def\french@variant{swissfrench}%
+ \SetLanguageKeys{french}{babelname=french,bcp47=fr-CH}%
+ \adddialect\l@swissfrench\l@french\relax%
+ \french@thincolonspacetrue
+ \fi
+ \xpg@info{Option: French, variant=\xpg@val}%
+}{\xpg@warning{Unknown French variant `#1'}}
+
+
+\def\french@language{%
+ \polyglossia@setup@language@patterns{\french@variant}%
+}%
+
+\ifluatex
+ \directlua{require('polyglossia-french')}%
+\else
+ \newXeTeXintercharclass\french@openbrackets % ( [ {
+ \newXeTeXintercharclass\french@closebrackets % ) ] }
+ \newXeTeXintercharclass\french@questionexclamation % ! ? et autres
+ \newXeTeXintercharclass\french@punctthin % ; (et :)
+ \newXeTeXintercharclass\french@punctthick % :
+ \newXeTeXintercharclass\french@punctguillstart % « ‹
+ \newXeTeXintercharclass\french@punctguillend % » ›
+\fi
+
+\def\xpg@unskip{\ifhmode\ifdim\lastskip>\z@\unskip\fi\fi}
+
+% Save original footnote definition
+% Do this at the end of the preamble to catch other
+% packages' footnote changes (#391)
+\AtEndPreamble{%
+ \let\xpg@orig@makefntext\@makefntext
+}
+
+\define@boolkey{french}[french@]{frenchfootnote}[true]{%
+ \AfterPreamble{%
+ \iffrench@frenchfootnote
+ \ifdefstring{\xpg@main@language}{french}{%
+ \ifx\@makefntext\undefined\else
+ \long\def\french@makefntext##1{%
+ \parindent1em \noindent\quad%
+ \ifx\@thefnmark\empty\else%
+ \@thefnmark.\space\fi ##1%
+ }
+ \let\@makefntext\french@makefntext
+ \fi
+ }{\xpg@warning{Option 'frenchfootnote' only supported if French is main language!}}%
+ \else
+ \let\@makefntext\xpg@orig@makefntext
+ \fi
+ }%
+}
+
+\define@boolkey{french}[french@]{autospacing}[true]{}
+\french@autospacingtrue
+
+\newif\iffrench@autospaceguillemets
+\define@boolkey{french}[french@]{autospaceguillemets}[true]{}
+\french@autospaceguillemetstrue
+
+\newif\iffrench@thincolonspace
+\define@boolkey{french}[french@]{thincolonspace}[true]{}
+\french@thincolonspacefalse
+
+% Backwards compatibility
+\define@boolkey{french}[french@]{automaticspacesaroundguillemets}[true]{%
+ \iffrench@automaticspacesaroundguillemets
+ \setkeys{french}{autospaceguillemets=true}%
+ \else
+ \setkeys{french}{autospaceguillemets=false}%
+ \fi
+}
+
+% name is for compatibility with babel
+\let\french@ttfamilyORI\ttfamily
+\DeclareRobustCommand\french@ttfamilyFB{\nofrench@punctuation\french@ttfamilyORI}
+
+% Allow to switch on autospacing in ttfamily context
+\define@boolkey{french}[french@]{autospacetypewriter}[true]{}
+\french@autospacetypewriterfalse
+
+% This is how babel-french has it
+\define@boolkey{french}[french@]{OriginalTypewriter}[true]{%
+ \iffrench@OriginalTypewriter
+ \setkeys{french}{autospacetypewriter=false}%
+ \else
+ \setkeys{french}{autospacetypewriter=true}%
+ \fi
+}
+
+% Configuration of item labels
+\def\french@itemi{\textemdash}
+\def\french@itemii{\textemdash}
+\def\french@itemiii{\textemdash}
+\def\french@itemiv{\textemdash}
+
+\define@key{french}{itemlabels}[\textemdash]{%
+ \def\french@itemi{#1}
+ \def\french@itemii{#1}
+ \def\french@itemiii{#1}
+ \def\french@itemiv{#1}
+}
+
+\define@key{french}{itemlabeli}[\textemdash]{%
+ \def\french@itemi{#1}
+}
+
+\define@key{french}{itemlabelii}[\textemdash]{%
+ \def\french@itemii{#1}
+}
+
+\define@key{french}{itemlabeliii}[\textemdash]{%
+ \def\french@itemiii{#1}
+}
+
+\define@key{french}{itemlabeliv}[\textemdash]{%
+ \def\french@itemiv{#1}
+}
+
+\define@boolkey{french}[french@]{frenchitemlabels}[true]{%
+ \AfterPreamble{%
+ \iffrench@frenchitemlabels
+ \ifdefstring{\xpg@main@language}{french}{%
+ \renewcommand{\labelitemi}{\french@itemi}%
+ \renewcommand{\labelitemii}{\french@itemii}%
+ \renewcommand{\labelitemiii}{\french@itemiii}%
+ \renewcommand{\labelitemiv}{\french@itemiv}%
+ }{\xpg@warning{Option 'frenchitemlabels' only supported if French is main language!}}%
+ \else
+ \let\@makefntext\xpg@orig@makefntext
+ \fi
+ }%
+}
+
+% Register default options
+\xpg@initialize@gloss@options{french}{variant=french,autospacing=true,thincolonspace=false,
+ autospaceguillemets=true,autospacetypewriter=false,
+ frenchfootnote=false,frenchitemlabels=false,
+ itemlabels=\textemdash,itemlabeli=\textemdash,itemlabelii=\textemdash,
+ itemlabeliii=\textemdash,itemlabeliv=\textemdash}
+% Register alias options
+\xpg@set@alias@values{french}{variant}{canadian}{acadian}
+
+
+\def\french@fontsetup{%
+ \unless\iffrench@autospacetypewriter
+ \let\ttfamily\french@ttfamilyFB
+ \fi
+}
+
+
+\def\nofrench@fontsetup{%
+ \let\ttfamily\french@ttfamilyORI
+}
+
+\def\xpg@french@thinsp{\kern 0.5\fontdimen2\font}
+
+\def\french@punctuation{%
+ \lccode"2019="2019
+ \ifluatex
+ \iffrench@thincolonspace
+ \iffrench@autospaceguillemets
+ \directlua{polyglossia.activate_french_punct(true, true)}%
+ \else
+ \directlua{polyglossia.activate_french_punct(true, false)}%
+ \fi
+ \else
+ \iffrench@autospaceguillemets
+ \directlua{polyglossia.activate_french_punct(false, true)}%
+ \else
+ \directlua{polyglossia.activate_french_punct(false, false)}%
+ \fi
+ \fi
+ \else
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\! \french@questionexclamation
+ \XeTeXcharclass `\? \french@questionexclamation
+ \XeTeXcharclass `\‼ \french@questionexclamation
+ \XeTeXcharclass `\⁇ \french@questionexclamation
+ \XeTeXcharclass `\⁈ \french@questionexclamation
+ \XeTeXcharclass `\⁉ \french@questionexclamation
+ \XeTeXcharclass `\‽ \french@questionexclamation % U+203D (interrobang)
+ \XeTeXcharclass `\; \french@punctthin
+ \iffrench@thincolonspace
+ \XeTeXcharclass `\: \french@punctthin
+ \else
+ \XeTeXcharclass `\: \french@punctthick
+ \fi
+ \XeTeXcharclass `\« \french@punctguillstart
+ \XeTeXcharclass `\» \french@punctguillend
+ \XeTeXcharclass `\‹ \french@punctguillstart
+ \XeTeXcharclass `\› \french@punctguillend
+ \XeTeXcharclass `\( \french@openbrackets
+ \XeTeXcharclass `\) \french@closebrackets
+ \XeTeXcharclass `\[ \french@openbrackets
+ \XeTeXcharclass `\] \french@closebrackets
+ \XeTeXcharclass `\{ \french@openbrackets
+ \XeTeXcharclass `\} \french@closebrackets
+ \XeTeXcharclass `\⟨ \french@openbrackets
+ \XeTeXcharclass `\⟩ \french@closebrackets
+ \XeTeXinterchartoks \z@ \french@questionexclamation = {\xpg@french@thinsp}%
+ \XeTeXinterchartoks \z@ \french@punctthin = {\xpg@french@thinsp}%
+ \XeTeXinterchartoks \z@ \french@punctthick = {\nobreakspace}%
+ \XeTeXinterchartoks \xpg@boundaryclass \french@questionexclamation = {\xpg@unskip\xpg@french@thinsp}%
+ \XeTeXinterchartoks \xpg@boundaryclass \french@punctthin = {\xpg@unskip\xpg@french@thinsp}%
+ \XeTeXinterchartoks \xpg@boundaryclass \french@punctthick = {\xpg@unskip\nobreakspace}%
+ \iffrench@autospaceguillemets
+ \let\xpg@french@guillspace\xpg@french@thinsp%
+ \XeTeXinterchartoks \french@punctguillstart \z@ = {\xpg@french@guillspace}% "«a" -> "«\,a"
+ \XeTeXinterchartoks \french@punctguillstart \french@punctguillstart = {\xpg@french@guillspace}% "«‹" -> "«\,‹"
+ % \XeTeXinterchartoks \z@ \french@punctguillstart = {\nobreakspace}% "a«" unchanged?
+ % \XeTeXinterchartoks \french@punctguillend \z@ = {\nobreakspace}% "»a" unchanged?
+ \XeTeXinterchartoks \z@ \french@punctguillend = {\xpg@french@guillspace}% "a»" -> "a\,»"
+ \XeTeXinterchartoks \french@punctguillstart \xpg@boundaryclass = {\xpg@french@guillspace\ignorespaces}% "« " -> "«\,"
+ \XeTeXinterchartoks \xpg@boundaryclass \french@punctguillend = {\xpg@unskip\xpg@french@guillspace}% " »" -> "\,»"
+ \XeTeXinterchartoks \french@closebrackets \french@punctguillend = {\xpg@french@guillspace}% ")»" -> ")\,»"
+ \XeTeXinterchartoks \french@questionexclamation \french@punctguillend = {\xpg@french@guillspace}% "?»" -> "?\,»"
+ \XeTeXinterchartoks \french@punctthin \french@punctguillend = {\xpg@french@guillspace}% ";»" -> ";\,»"
+ \XeTeXinterchartoks \french@punctguillend \french@punctguillend = {\xpg@french@guillspace}% "›»" -> "›\,»"
+ \else
+ \def\xpg@french@guillspace{}%
+ \fi
+ \XeTeXinterchartoks \french@punctguillend \french@questionexclamation = {\xpg@french@thinsp}% "»?" -> "»\,?"
+ \XeTeXinterchartoks \french@punctguillend \french@punctthin = {\xpg@french@thinsp}% "»;" -> "»\,;"
+ \XeTeXinterchartoks \french@punctguillend \french@punctthick = {\nobreakspace}% "»:" -> "» :"
+ \XeTeXinterchartoks \french@questionexclamation \french@punctthin = {\xpg@french@thinsp}% "?;" -> "?\,;"
+ \XeTeXinterchartoks \french@questionexclamation \french@punctthick = {\xpg@french@thinsp}% "?:" -> "?\,:"
+ \XeTeXinterchartoks \french@openbrackets \french@questionexclamation = {\xpg@unskip}% "(?" -> "(?" and not "( ?"
+ \XeTeXinterchartoks \french@openbrackets \french@punctthin = {\xpg@unskip}% "(;" -> "(;" and not "( ;"
+ \XeTeXinterchartoks \french@punctthin \french@closebrackets = {\xpg@unskip}% "?)" -> "?)" (code not need, just for symetry with previous one)
+ \XeTeXinterchartoks \french@closebrackets \french@punctthin = {\xpg@french@thinsp}% ")?" -> ")\,?"
+ \XeTeXinterchartoks \french@closebrackets \french@punctthick = {\nobreakspace}% "):" -> ") :"
+ \fi
+}
+
+\def\nofrench@punctuation{%
+ \lccode"2019=\z@
+ \ifluatex
+ \directlua{polyglossia.deactivate_french_punct()}%
+ \else
+ \XeTeXcharclass `\! \z@
+ \XeTeXcharclass `\? \z@
+ \XeTeXcharclass `\‼ \z@
+ \XeTeXcharclass `\⁇ \z@
+ \XeTeXcharclass `\⁈ \z@
+ \XeTeXcharclass `\⁉ \z@
+ \XeTeXcharclass `\‽ \z@
+ \XeTeXcharclass `\; \z@
+ \XeTeXcharclass `\: \z@
+ \XeTeXcharclass `\« \z@
+ \XeTeXcharclass `\» \z@
+ \XeTeXcharclass `\‹ \z@
+ \XeTeXcharclass `\› \z@
+ \XeTeXcharclass `\( \z@
+ \XeTeXcharclass `\) \z@
+ \XeTeXcharclass `\[ \z@
+ \XeTeXcharclass `\] \z@
+ \XeTeXcharclass `\{ \z@
+ \XeTeXcharclass `\} \z@
+ \XeTeXcharclass `\⟨ \z@
+ \XeTeXcharclass `\⟩ \z@
+ \XeTeXinterchartokenstate=0
+ \fi
+}
+
+\def\captionsfrench{%
+ \def\refname{Références}%
+ \def\abstractname{Résumé}%
+ \def\bibname{Bibliographie}%
+ \def\prefacename{Préface}%
+ \def\chaptername{Chapitre}%
+ \def\appendixname{Annexe}%
+ \def\contentsname{Table des matières}%
+ \def\listfigurename{Table des figures}%
+ \def\listtablename{Liste des tableaux}%
+ \def\indexname{Index}%
+ \def\figurename{\textsc{Fig.}}%
+ \def\tablename{\textsc{Tab.}}%
+ \def\@Fpt{\ifcase\value{part}\or Première\or Deuxième\or
+ Troisième\or Quatrième\or Cinquième\or Sixième\or
+ Septième\or Huitième\or Neuvième\or Dixième\or Onzième\or
+ Douzième\or Treizième\or Quatorzième\or Quinzième\or
+ Seizième\or Dix-septième\or Dix-huitième\or Dix-neuvième\or
+ Vingtième\fi\space}%
+ \def\thepart{\@Fpt partie}%
+ \def\partname{}%
+ \def\pagename{page}%
+ \def\seename{\emph{voir}}%
+ \def\alsoname{\emph{voir aussi}}%
+ \def\enclname{P.~J. }%
+ \def\ccname{Copie à }%
+ \def\headtoname{}%
+ \def\proofname{Démonstration}%
+}
+
+\def\datefrench{%
+ \def\today{\ifx\ier\undefined\def\ier{er}\fi
+ \ifnum\day=1\relax 1\ier%
+ \else \number\day\fi
+ \space \ifcase\month%
+ \or janvier\or février\or mars\or avril\or mai\or juin\or
+ juillet\or août\or septembre\or octobre\or novembre\or
+ décembre\fi
+ \space \number\year}}
+
+\def\noextras@french{%
+ \nofrench@punctuation%
+ \nofrench@fontsetup%
+}
+
+\def\blockextras@french{%
+ \iffrench@autospacing
+ \french@punctuation%
+ \fi
+ \french@fontsetup%
+}
+
+\def\inlineextras@french{%
+ \iffrench@autospacing
+ \french@punctuation%
+ \fi
+ \french@fontsetup%
+}
+
+\def\NoAutoSpacing{%
+ \nofrench@punctuation%
+}
+
+\def\AutoSpacing{%
+ \french@punctuation%
+}
+
+\def\ier{\textsuperscript{er}}
+\def\iers{\textsuperscript{ers}}
+\def\iere{\textsuperscript{re}}
+\def\ieres{\textsuperscript{res}}
+\def\ieme{\textsuperscript{e}}
+\def\iemes{\textsuperscript{es}}
+\def\nd{\textsuperscript{nd}}
+\def\nds{\textsuperscript{nds}}
+\def\nde{\textsuperscript{nde}}
+\def\ndes{\textsuperscript{ndes}}
+\def\no{\textsuperscript{o}}
+\def\nos{\textsuperscript{os}}
+
+\def\mme{M\textsuperscript{me}\space}
+\def\mmes{M\textsuperscript{mes}\space}
+\def\mr{M.\space}
+\def\mrs{MM.\space}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-french.ldf>
+%<*gloss-friulan.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-friulan.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-friulan.ldf}[polyglossia: module for friulan]
+
+% We only provide this gloss for babel compatibility.
+
+\xpg@load@master@language{friulian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-friulan.ldf>
+%<*gloss-friulian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-friulian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-friulian.ldf}[polyglossia: module for friulian]
+
+\PolyglossiaSetup{friulian}{%
+ bcp47=fur,
+ language=Friulian,
+ babelname=friulan,
+ hyphennames={friulan,furlan},
+ hyphenmins={2,2},
+ langtag=FRL,
+ indentfirst=false,
+ fontsetup=true,
+ frenchspacing=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{friulian}{fur}
+
+% Babel and backwards compat. alias
+\setlanguagealias{friulian}{friulan}
+
+\def\captionsfriulian{%
+ \def\prefacename{Prefazion}%
+ \def\refname{Riferiments}%
+ \def\abstractname{Somari}%
+ \def\bibname{Bibliografie}%
+ \def\chaptername{Cjapitul}%
+ \def\appendixname{Zonte}%
+ \def\contentsname{Tabele gjenerâl}%
+ \def\listfigurename{Liste des figuris}%
+ \def\listtablename{Liste des tabelis}%
+ \def\indexname{Tabele analitiche}%
+ \def\figurename{Figure}%
+ \def\tablename{Tabele}%
+ \def\partname{Part}%
+ \def\enclname{Zonte(is)}%
+ \def\ccname{Cun copie a}%
+ \def\headtoname{Par}%
+ \def\pagename{Pagjine}%
+ \def\seename{cjale}%
+ \def\alsoname{cjale ancje}%
+ \def\proofname{Dimostrazion}%
+ \def\glossaryname{Glossari}%
+ }
+
+\def\datefriulian{%
+ \def\today{\number\day\space di\space\ifcase\month\or
+ Genâr\or Fevrâr\or Març\or Avril\or Mai\or Jugn\or
+ Lui\or Avost\or Setembar\or Otobar\or Novembar\or Dicembar%
+ \fi\space dal\space\number\year}}
+
+\AtEndPreamble{% the user or the class might define different values
+ \edef\xpgfu@savedvalues{%
+ \clubpenalty=\the\clubpenalty\space
+ \@clubpenalty=\the\@clubpenalty\space
+ \widowpenalty=\the\widowpenalty\space
+ \finalhyphendemerits=\the\finalhyphendemerits}
+}
+
+
+\def\noextras@friulian{%
+ \lccode\string"2019=\z@
+}
+
+\def\blockextras@friulian{%
+ \lccode\string"2019=\string"2019
+ \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
+ \finalhyphendemerits=50000000
+}
+
+\def\inlineextras@friulian{%
+ \lccode\string"2019=\string"2019
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-friulian.ldf>
+%<*gloss-fur.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-fur.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-fur.ldf}[polyglossia: module for fur (friulian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{friulian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-fur.ldf>
+%<*gloss-ga.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ga.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ga.ldf}[polyglossia: module for ga (gaelic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{gaelic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ga.ldf>
+%<*gloss-gaelic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-gaelic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-gaelic.ldf}[polyglossia: module for gaelic]
+
+\PolyglossiaSetup{gaelic}{
+ bcp47=ga,
+ language=Irish,
+ babelname=irish,
+ hyphennames={irish},
+ hyphenmins={2,2},
+ langtag=IRI,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*[variant=irish]{gaelic}{ga}
+\setlanguagealias*[variant=scottish]{gaelic}{gd}
+% Babel aliases
+\setlanguagealias[variant=irish]{gaelic}{irish}
+\setlanguagealias[variant=scottish]{gaelic}{scottish}
+
+\def\gaelic@variant{irish}
+\define@choicekey*+{gaelic}{variant}[\xpg@val\xpg@nr]{irish,scottish}[irish]{%
+ \ifcase\xpg@nr\relax
+ % irish:
+ \gdef\gaelic@variant{irish}%
+ \SetLanguageKeys{gaelic}{language=Irish,langtag=IRI,babelname=irish,bcp47=ga}%
+ \xpg@fontsetup@latin{gaelic}%
+ \or
+ % scottish:
+ \gdef\gaelic@variant{scottish}%
+ \SetLanguageKeys{gaelic}{language=Gaelic,langtag=GAE,babelname=scottish,bcp47=gd}%
+ \xpg@fontsetup@latin{gaelic}%
+ \fi
+ \xpg@info{Option: gaelic, variant=\xpg@val}%
+}{\xpg@warning{Unknown gaelic variant `#1'}}
+
+% Register default options
+\xpg@initialize@gloss@options{gaelic}{variant=irish}
+
+\def\captionsgaelic@irish{%
+ \def\refname{Tagairtí}%
+ \def\abstractname{Achoimre}%
+ \def\bibname{Leabharliosta}%
+ \def\prefacename{Réamhrá}% <-- also "Brollach"
+ \def\refname{Tagairtí}%
+ \def\chaptername{Tagairtí}%
+ \def\appendixname{Aguisín}%
+ \def\contentsname{Clár Ábhair}%
+ \def\listfigurename{Léaráidí}%
+ \def\listtablename{Táblaí}%
+ \def\indexname{Innéacs}%
+ \def\figurename{Léaráid}%
+ \def\tablename{Tábla}%
+ %\def\thepart{}%
+ \def\partname{Cuid}%
+ \def\pagename{Leathanach}%
+ \def\seename{féach}%
+ \def\alsoname{féach freisin}%
+ \def\enclname{faoi iamh}%
+ \def\ccname{cc}%
+ \def\headtoname{Go}%
+ \def\proofname{Cruthúnas}%
+ \def\glossaryname{Glossary}%
+}
+
+\def\captionsgaelic@scottish{%
+ \def\refname{Iomraidh}%
+ \def\abstractname{Brìgh}%
+ \def\bibname{Leabhraichean}%
+ \def\prefacename{Preface}% <-- needs translation
+ \def\chaptername{Caibideil}%
+ \def\appendixname{Ath-sgr`ıobhadh}%
+ \def\contentsname{Clàr-obrach}%
+ \def\listfigurename{Liosta Dhealbh}%
+ \def\listtablename{Liosta Chlàr}%
+ \def\indexname{Clàr-innse}%
+ \def\figurename{Dealbh}%
+ \def\tablename{Clàr}%
+ %\def\thepart{}%
+ \def\partname{Cuid}%
+ \def\pagename{t.d.}%
+ \def\seename{see}% <-- needs translation
+ \def\alsoname{see also}% <-- needs translation
+ \def\enclname{a-staigh}%
+ \def\ccname{lethbhreac gu}%
+ \def\headtoname{gu}%
+ \def\proofname{Proof}% <-- needs translation
+ \def\glossaryname{Glossary}% <-- needs translation
+}
+
+\def\captionsgaelic{%
+ \csname captionsgaelic@\gaelic@variant\endcsname%
+}
+
+\def\dategaelic@irish{%
+ \def\today{%
+ \number\day\space \ifcase\month\or
+ Eanáir\or Feabhra\or Márta\or Aibreán\or
+ Bealtaine\or Meitheamh\or Iúil\or Lúnasa\or
+ Meán Fómhair\or Deireadh Fómhair\or
+ Mí na Samhna\or Mí na Nollag\fi
+ \space \number\year}%
+}
+
+\def\dategaelic@scottish{%
+ \def\today{%
+ \number\day\space \ifcase\month\or
+ am Faoilteach\or an Gearran\or am Màrt\or an Giblean\or
+ an Cèitean\or an t-Òg mhios\or an t-Iuchar\or
+ Lùnasdal\or an Sultuine\or an Dàmhar\or
+ an t-Samhainn\or an Dubhlachd\fi
+ \space \number\year}%
+}
+
+\def\dategaelic{%
+ \csname dategaelic@\gaelic@variant\endcsname%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-gaelic.ldf>
+%<*gloss-galician.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-galician.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-galician.ldf}[polyglossia: module for galician]
+\PolyglossiaSetup{galician}{
+ bcp47=gl,
+ hyphennames={galician},
+ hyphenmins={2,2},
+ langtag=GAL,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{galician}{gl}
+
+\def\captionsgalician{%
+ \def\refname{Referencias}%
+ \def\abstractname{Resumo}%
+ \def\bibname{Bibliografía}%
+ \def\prefacename{Prefacio}%
+ \def\chaptername{Capítulo}%
+ \def\appendixname{Apéndice}%
+ \def\contentsname{Índice Xeral}%
+ \def\listfigurename{Índice de Figuras}%
+ \def\listtablename{Índice de Táboas}%
+ \def\indexname{Índice de Materias}%
+ \def\figurename{Figura}%
+ \def\tablename{Táboa}%
+ %\def\thepart{}%
+ \def\partname{Parte}%
+ \def\pagename{Páxina}%
+ \def\seename{véxase}%
+ \def\alsoname{véxase tamén}%
+ \def\enclname{Adxunto}%
+ \def\ccname{Copia a}%
+ \def\headtoname{A}%
+ \def\proofname{Demostración}%
+ \def\glossaryname{Glosario}%
+ }
+\def\dategalician{%
+ \def\today{\number\day~de\space\ifcase\month\or
+ xaneiro\or febreiro\or marzo\or abril\or maio\or xuño\or
+ xullo\or agosto\or setembro\or outubro\or novembro\or decembro\fi
+ \space de~\number\year}}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-galician.ldf>
+%<*gloss-gd.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-gd.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-gd.ldf}[polyglossia: module for gd (gaelic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{gaelic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-gd.ldf>
+%<*gloss-georgian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-georgian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-georgian.ldf}[polyglossia: module for georgian]
+
+\PolyglossiaSetup{georgian}{
+ bcp47=ka,
+ script=Georgian,
+ scripttag=geor,
+ langtag=KAT,
+ hyphennames={georgian},
+ fontsetup=true,
+ localnumeral=georgiannumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{georgian}{ka}
+
+\newif\ifgeorgian@numerals
+\define@key{georgian}{numerals}[arabic]{%
+ \ifstrequal{#1}{georgian}%
+ {\georgian@numeralstrue}%
+ {\georgian@numeralsfalse}%
+}
+
+\define@boolkey{georgian}[georgian@]{babelshorthands}[true]{}
+
+\define@boolkey{georgian}[georgian@]{oldmonthnames}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{georgian}{babelshorthands=false,oldmonthnames=false,numerals=arabic}
+
+\ifsystem@babelshorthands
+ \setkeys{georgian}{babelshorthands=true}
+\else
+ \setkeys{georgian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\georgian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{georgian}%
+ \declare@shorthand{georgian}{"`}{„}%
+ \declare@shorthand{georgian}{"'}{“}%
+ \declare@shorthand{georgian}{"<}{«}%
+ \declare@shorthand{georgian}{">}{»}%
+ \declare@shorthand{georgian}{""}{\hskip\z@skip}%
+ \declare@shorthand{georgian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{georgian}{"=}{\nobreak-\hskip\z@skip}%
+ \declare@shorthand{georgian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
+ \declare@shorthand{georgian}{"-}{%
+ \def\georgian@sh@tmp{%
+ \if\georgian@sh@next-\expandafter\georgian@sh@emdash%
+ \else\expandafter\georgian@sh@hyphen\fi%
+ }%
+ \futurelet\georgian@sh@next\georgian@sh@tmp}%
+ \def\georgian@sh@hyphen{%
+ \nobreak\-\bbl@allowhyphens}%
+ \def\georgian@sh@emdash##1##2{\cdash-##1##2}%
+ \def\cdash##1##2##3{\def\tempx@{##3}%
+ \def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
+ \ifx\tempx@\tempa@\@Acdash\else
+ \ifx\tempx@\tempb@\@Bcdash\else
+ \ifx\tempx@\tempc@\@Ccdash\else
+ \errmessage{Wrong usage of cdash}\fi\fi\fi}%
+ \def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
+ \cyrdash\hskip.2em\ignorespaces}%
+ \def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
+ \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
+ \def\@Ccdash{\leavevmode
+ \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
+ \ifx\cyrdash\undefined
+ \def\cyrdash{\hbox to.8em{--\hss--}}%
+ \fi
+ \declare@shorthand{georgian}{",}{\nobreak\hskip.2em\ignorespaces}%
+}
+
+\def\nogeorgian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\def\captionsgeorgian{%
+ \def\prefacename{წინასიტყვაობა}%
+ \def\refname{ლიტერატურა}%
+ \def\abstractname{ანოტაცია}%
+ \def\bibname{ლიტერატურა}%
+ \def\chaptername{თავი}%
+ \def\appendixname{დანართი}%
+ \@ifundefined{thechapter}
+ {\def\contentsname{შინაარსი}}%
+ {\def\contentsname{შინაარსი}}%
+ \let\tocname=\contentsname
+ \def\listfigurename{სურათი}%
+ \def\listtablename{ცხრილი}%
+ \def\indexname{საძიებელი}%
+ \def\authorname{სახელთა საძიებელი}%
+ \def\figurename{სურ.}%
+ \def\tablename{ცხრ.}%
+ \def\partname{ნაწილი}%
+ \def\enclname{ჩათვ.}%
+ \def\ccname{წყარ.}%
+ \def\headtoname{შ.}%
+ \def\pagename{გვ.}%
+ \def\seename{იხ.}%
+ \def\alsoname{იხ.\ ასევე}%
+ \def\proofname{დამტკიცება}%
+ \def\glossaryname{ტერმინები}%
+}%
+
+\def\dategeorgian{%
+ \def\today{\number\day~\ifcase\month\or
+ იანვარი\or
+ თებერვალი\or
+ მარტი\or
+ აპრილი\or
+ მაისი\or
+ ივნისი\or
+ ივლისი\or
+ აგვისტო\or
+ სექტემბერი\or
+ ოქტომბერი\or
+ ნოემბერი\or
+ დეკემბერი\fi
+ \space \number\year~წ.}%
+ \ifgeorgian@oldmonthnames
+ \dategeorgian@old%
+ \fi
+}
+
+\def\dategeorgian@old{%
+ \def\today{\number\day~\ifcase\month\or
+ აპნისი\or
+ სურწყუნისი\or
+ მირკანი\or
+ იგრიკა\or
+ ვარდობისთვე\or
+ თიბათვე\or
+ მკათათვე\or
+ მარიამობისთვე\or
+ ახალწლისა ენკენისთვე\or
+ ღვინობისთვე\or
+ გიორგობისთვე\or
+ ქრისტეშობისთვე\fi
+ \space \number\year~წ.}%
+}
+
+\def\georgian@numbers{%
+ \ifgeorgian@numerals%
+ \def\georgian@alph##1{\expandafter\georgiannumeral\expandafter{\the##1}}%
+ \let\@alph\georgian@@alph%
+ \fi
+}
+
+\def\nogeorgian@numbers{%
+ \let\@alph\latin@alph%
+ \let\georgian@alph\@undefined%
+}
+
+\def\georgian@globalnumbers{%
+ \ifgeorgian@numerals
+ \let\@arabic\georgiannumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+ \fi
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nogeorgian@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+}
+
+\newcommand{\georgiannumerals}[2]{%
+ \ifgeorgian@numerals
+ \georgiannumber{#2}%
+ \else
+ #2%
+ \fi%
+}
+
+\protected\def\georgiannumber#1{\expandafter\@georgiannumber\expandafter{\number#1}}
+\def\@georgiannumber#1{%
+ \ifnum#1<\@ne\space\geor@ill@value{#1}%
+ \else
+ \ifnum#1<10\expandafter\geor@num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\geor@num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\geor@num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\geor@num@iv\number#1%
+ \else
+ \space\geor@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+
+\let\georgiannumeral=\georgiannumber
+\def\geor@num@i#1{% 1--9
+ \ifcase#1\or ა\or ბ\or გ\or დ\or ე\or ვ\or ზ\or ჱ\or თ\fi}
+\def\geor@num@ii#1{% 10--90
+ \ifcase#1\or ი\or კ\or ლ\or მ\or ნ\or ჲ\or ო\or პ\or ჟ\fi
+ \geor@num@i}
+\def\geor@num@iii#1{% 100--900
+ \ifcase#1\or რ\or ს\or ტ\or ჳ\or ფ\or ქ\or ღ\or ყ\or შ\fi
+ \geor@num@ii}
+\def\geor@num@iv#1{% 1000--9000
+ \ifcase#1\or ჩ\or ც\or ძ\or წ\or ჭ\or ხ\or ჴ\or ჯ\or ჰ\fi
+ \geor@num@iii}
+\def\geor@ill@value#1{\xpg@warning{Illegal value (#1) for Georgian numeral}[$#1$]}
+
+\def\noextras@georgian{%
+ \ifgeorgian@numerals\nogeorgian@numbers\fi%
+ \nogeorgian@shorthands%
+}
+
+\def\blockextras@georgian{%
+ \ifgeorgian@numerals\georgian@numbers\fi%
+ \ifgeorgian@babelshorthands\georgian@shorthands\fi%
+}
+
+\def\inlineextras@georgian{%
+ \ifgeorgian@babelshorthands\georgian@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-georgian.ldf>
+%<*gloss-german.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-german.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-german.ldf}[polyglossia: module for german]
+
+\PolyglossiaSetup{german}{
+ bcp47=de-DE,
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup=true,
+ langtag=DEU,
+ babelname=ngerman
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{german}{de}
+\setlanguagealias*[variant=swiss,spelling=new]{german}{de-CH}
+\setlanguagealias*[variant=austrian,spelling=new]{german}{de-AT}
+\setlanguagealias*[variant=german,spelling=new]{german}{de-DE}
+\setlanguagealias*[variant=swiss,spelling=new,script=blackletter]{german}{de-Latf-CH}
+\setlanguagealias*[variant=german,spelling=new,script=blackletter]{german}{de-Latf-DE}
+\setlanguagealias*[variant=austrian,spelling=new,script=blackletter]{german}{de-Latf-AT}
+\setlanguagealias*[variant=austrian,spelling=old]{german}{de-AT-1901}
+\setlanguagealias*[variant=swiss,spelling=new]{german}{de-CH-1996}
+\setlanguagealias*[variant=austrian,spelling=new]{german}{de-AT-1996}
+\setlanguagealias*[variant=german,spelling=old]{german}{de-DE-1901}
+\setlanguagealias*[variant=swiss,spelling=old,script=blackletter]{german}{de-Latf-CH-1901}
+\setlanguagealias*[variant=swiss,spelling=old]{german}{de-CH-1901}
+\setlanguagealias*[variant=austrian,spelling=old,script=blackletter]{german}{de-Latf-AT-1901}
+\setlanguagealias*[variant=swiss,spelling=new,script=blackletter]{german}{de-Latf-CH-1996}
+\setlanguagealias*[script=blackletter]{german}{de-Latf}
+\setlanguagealias*[variant=german,spelling=new]{german}{de-DE-1996}
+\setlanguagealias*[variant=german,spelling=old,script=blackletter]{german}{de-Latf-DE-1901}
+\setlanguagealias*[variant=german,spelling=new,script=blackletter]{german}{de-Latf-DE-1996}
+\setlanguagealias*[variant=austrian,spelling=new,script=blackletter]{german}{de-Latf-AT-1996}
+
+% Babel aliases
+\setlanguagealias[variant=austrian,spelling=old]{german}{austrian}
+\setlanguagealias[variant=austrian,spelling=new]{german}{naustrian}
+\setlanguagealias[variant=german,spelling=old]{german}{germanb}
+\setlanguagealias[variant=german,spelling=new]{german}{ngerman}
+\setlanguagealias[variant=swiss,spelling=old]{german}{swissgerman}
+\setlanguagealias[variant=swiss,spelling=new]{german}{nswissgerman}
+
+\newif\if@german@oldspelling
+\@german@oldspellingfalse
+\define@choicekey*+{german}{spelling}[\xpg@val\xpg@nr]{new,old,1901,1996}[new]{%
+ \ifcase\xpg@nr\relax
+ % new:
+ \@german@oldspellingfalse
+ \or
+ % old:
+ \@german@oldspellingtrue
+ \or
+ % 1901:
+ \@german@oldspellingtrue
+ \or
+ % 1996:
+ \@german@oldspellingfalse
+ \fi
+ \german@set@babelname%
+ \xpg@info{Option: German, spelling=\xpg@val}%
+}{\xpg@warning{Unknown German spelling `#1'}}
+
+\newif\if@austrian@locale
+\@austrian@localefalse
+\newif\if@swiss@locale
+\@swiss@localefalse
+\define@choicekey*+{german}{variant}[\xpg@val\xpg@nr]{german,austrian,swiss}[german]{%
+ \ifcase\xpg@nr\relax
+ % german:
+ \@swiss@localefalse%
+ \@austrian@localefalse%
+ \or
+ % austrian:
+ \@austrian@localetrue%
+ \@swiss@localefalse%
+ \or
+ % swiss:
+ \@swiss@localetrue%
+ \@austrian@localefalse%
+ \xpg@ifdefined{swissgerman}{}%
+ {%
+ \xpg@warning{No hyphenation patterns were loaded for "Swiss German (Old Spelling)"\MessageBreak
+ I will use the standard patterns for German (old spelling) instead}%
+ \adddialect\l@swissgerman\l@german\relax%
+ }%
+ \fi
+ \german@set@babelname%
+ \xpg@info{Option: German, variant=\xpg@val}%
+}{\xpg@warning{Unknown German variant `#1'}}
+
+\def\german@set@babelname{%
+ \if@german@oldspelling
+ \if@swiss@locale
+ \if@german@blackletter
+ \SetLanguageKeys{german}{babelname=swissgerman,bcp47=de-Latf-CH-1901}%
+ \else
+ \SetLanguageKeys{german}{babelname=swissgerman,bcp47=de-CH-1901}%
+ \fi
+ \else
+ \if@austrian@locale
+ \if@german@blackletter
+ \SetLanguageKeys{german}{babelname=austrian,bcp47=de-Latf-AT-1901}%
+ \else
+ \SetLanguageKeys{german}{babelname=austrian,bcp47=de-AT-1901}%
+ \fi
+ \else
+ \if@german@blackletter
+ \SetLanguageKeys{german}{babelname=german,bcp47=de-Latf-DE-1901}%
+ \else
+ \SetLanguageKeys{german}{babelname=german,bcp47=de-DE-1901}%
+ \fi
+ \fi\fi
+ \else
+ \if@swiss@locale
+ \if@german@blackletter
+ \SetLanguageKeys{german}{babelname=nswissgerman,bcp47=de-Latf-CH}%
+ \else
+ \SetLanguageKeys{german}{babelname=nswissgerman,bcp47=de-CH}%
+ \fi
+ \else
+ \if@austrian@locale
+ \if@german@blackletter
+ \SetLanguageKeys{german}{babelname=naustrian,bcp47=de-Latf-AT}%
+ \else
+ \SetLanguageKeys{german}{babelname=naustrian,bcp47=de-AT}%
+ \fi
+ \else
+ \if@german@blackletter
+ \SetLanguageKeys{german}{babelname=ngerman,bcp47=de-Latf-DE}%
+ \else
+ \SetLanguageKeys{german}{babelname=ngerman,bcp47=de-DE}%
+ \fi
+ \fi\fi
+ \fi
+}
+
+\newif\if@german@blackletter
+\define@choicekey*+{german}{script}[\xpg@val\xpg@nr]{latin,blackletter,fraktur}[latin]{%
+ \ifcase\xpg@nr\relax
+ % latin:
+ \@german@blackletterfalse%
+ \or
+ % blackletter:
+ \@german@blacklettertrue%
+ \or
+ % fraktur:
+ \@german@blacklettertrue%
+ \fi
+ \german@set@babelname%
+ \xpg@info{Option: German, script=\xpg@val}%
+}{\xpg@warning{Unknown German script `#1'}}
+
+% Option defunc'ed, as bot XeTeX and LuaTeX meanwhile
+% use the experimental German hyphenation patterns by default.
+\define@boolkey{german}[german@]{latesthyphen}[true]{}
+
+\define@boolkey{german}[german@]{babelshorthands}[true]{}
+
+\setkeys{german}{spelling,script,variant}
+
+% Register default options
+\xpg@initialize@gloss@options{german}{variant=german,spelling=new,script=latin,latesthyphen=false,babelshorthands=false}
+% Register alias options
+\xpg@set@alias@values{german}{spelling}{new}{1996}
+\xpg@set@alias@values{german}{spelling}{old}{1901}
+\xpg@set@alias@values{german}{script}{blackletter}{fraktur}
+
+\ifsystem@babelshorthands
+ \setkeys{german}{babelshorthands=true}
+\else
+ \setkeys{german}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\german@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{german}%
+ \declare@shorthand{german}{"`}{„}%
+ \declare@shorthand{german}{"'}{“}%
+ \declare@shorthand{german}{"<}{«}%
+ \declare@shorthand{german}{">}{»}%
+ \declare@shorthand{german}{"c}{\textormath{\bbl@disc@german ck}{c}}%
+ \declare@shorthand{german}{"C}{\textormath{\bbl@disc@german CK}{C}}%
+ \declare@shorthand{german}{"F}{\textormath{\bbl@disc@german F{FF}}{F}}%
+ \declare@shorthand{german}{"l}{\textormath{\bbl@disc@german l{ll}}{l}}%
+ \declare@shorthand{german}{"L}{\textormath{\bbl@disc@german L{LL}}{L}}%
+ \declare@shorthand{german}{"m}{\textormath{\bbl@disc@german m{mm}}{m}}%
+ \declare@shorthand{german}{"M}{\textormath{\bbl@disc@german M{MM}}{M}}%
+ \declare@shorthand{german}{"n}{\textormath{\bbl@disc@german n{nn}}{n}}%
+ \declare@shorthand{german}{"N}{\textormath{\bbl@disc@german N{NN}}{N}}%
+ \declare@shorthand{german}{"p}{\textormath{\bbl@disc@german p{pp}}{p}}%
+ \declare@shorthand{german}{"P}{\textormath{\bbl@disc@german P{PP}}{P}}%
+ \declare@shorthand{german}{"r}{\textormath{\bbl@disc@german r{rr}}{r}}%
+ \declare@shorthand{german}{"R}{\textormath{\bbl@disc@german R{RR}}{R}}%
+ \declare@shorthand{german}{"t}{\textormath{\bbl@disc@german t{tt}}{t}}%
+ \declare@shorthand{german}{"T}{\textormath{\bbl@disc@german T{TT}}{T}}%
+ \declare@shorthand{german}{"f}{\textormath{\bbl@discff}{f}}%
+ \def\bbl@discff{\penalty\@M
+ \afterassignment\bbl@insertff \let\bbl@nextff= }%
+ \def\bbl@insertff{%
+ \if f\bbl@nextff
+ \expandafter\@firstoftwo\else\expandafter\@secondoftwo\fi
+ {\relax\discretionary{ff-}{f}{ff}\allowhyphens}{f\bbl@nextff}}%
+ \let\bbl@nextff=f%
+ \declare@shorthand{german}{"-}{\nobreak\-\nobreak\hskip\z@skip}%
+ \declare@shorthand{german}{"|}{\textormath{\penalty\@M\discretionary{-}{}{\kern.03em}}{}}%
+ \declare@shorthand{german}{""}{\hskip\z@skip}%
+ \declare@shorthand{german}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{german}{"=}{\penalty\@M-\hskip\z@skip}%
+ \declare@shorthand{german}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+ \def\ck{\allowhyphens\discretionary{k-}{k}{ck}\allowhyphens}%
+}
+
+\def\nogerman@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\def\captions@german{%
+ \def\prefacename{Vorwort}%
+ \def\refname{Literatur}%
+ \def\abstractname{Zusammenfassung}%
+ \def\bibname{Literaturverzeichnis}%
+ \def\chaptername{Kapitel}%
+ \def\appendixname{Anhang}%
+ \def\contentsname{Inhaltsverzeichnis}%
+ \def\listfigurename{Abbildungsverzeichnis}%
+ \def\listtablename{Tabellenverzeichnis}%
+ \def\indexname{Index}%
+ \def\figurename{Abbildung}%
+ \def\tablename{Tabelle}%
+ \def\partname{Teil}%
+ \def\enclname{Anlage(n)}%
+ \def\ccname{Verteiler}%
+ \def\headtoname{An}%
+ \def\pagename{Seite}%
+ \def\seename{siehe}%
+ \def\alsoname{siehe auch}%
+ \def\proofname{Beweis}%
+ \def\glossaryname{Glossar}%
+}
+\def\date@german{%
+ \def\today{\number\day.%
+ \space \ifcase\month%
+ \or\if@austrian@locale Jänner\else Januar\fi\or Februar\or März\or%
+ April\or Mai\or Juni\or Juli\or August\or September\or Oktober\or%
+ November\or Dezember\fi
+ \space \number\year}%
+}
+
+\def\captions@german@austrian{%
+ \def\enclname{Beilage(n)}%
+}
+
+\def\captions@german@swiss{%
+ \def\enclname{Beilage(n)}%
+}
+
+%%Strings for Fraktur contributed by Gerrit <z0idberg . gmx . de>
+\def\captions@german@blackletter{%
+ \captions@german%
+ \def\abstractname{Zuſammenfaſſung}%
+ \def\seename{ſiehe}%
+ \def\alsoname{ſiehe auch}%
+ \def\glossaryname{Gloſſar}%
+}
+
+\def\date@german@blackletter{%
+ \def\today{\number\day.%
+ \space \ifcase\month%
+ \or\if@austrian@locale Jänner\else Januar\fi\or Februar\or März\or%
+ April\or Mai\or Juni\or Juli\or Auguſt\or September\or Oktober\or%
+ November\or Dezember\fi
+ \space \number\year}%
+}
+
+\def\captionsgerman{%
+ \if@german@blackletter\captions@german@blackletter\else\captions@german\fi
+ \if@austrian@locale\captions@german@austrian\fi
+ \if@swiss@locale\captions@german@swiss\fi
+}
+
+\def\dategerman{%
+ \if@german@blackletter\date@german@blackletter\else\date@german\fi
+}
+
+\def\german@language{%
+ \if@german@oldspelling
+ \if@swiss@locale
+ \polyglossia@setup@language@patterns{swissgerman}%
+ \else
+ \polyglossia@setup@language@patterns{german}%
+ \fi
+ \if@austrian@locale
+ \adddialect\l@austrian\l@german%
+ \fi
+ \else
+ \polyglossia@setup@language@patterns{ngerman}%
+ \if@austrian@locale
+ \adddialect\l@naustrian\l@ngerman%
+ \fi
+ \if@swiss@locale
+ \adddialect\l@nswissgerman\l@ngerman%
+ \fi
+ \fi
+}
+
+\def\noextras@german{%
+ \nogerman@shorthands%
+}
+
+\def\blockextras@german{%
+ \ifgerman@babelshorthands\german@shorthands\fi
+}
+
+\def\inlineextras@german{%
+ \ifgerman@babelshorthands\german@shorthands\fi
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-german.ldf>
+%<*gloss-germanb.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-germanb.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-germanb.ldf}[polyglossia: module for german (old spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-germanb.ldf>
+%<*gloss-gl.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-gl.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-gl.ldf}[polyglossia: module for gl (galician)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{galician}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-gl.ldf>
+%<*gloss-grc.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-grc.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-grc.ldf}[polyglossia: module for grc (greek)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{greek}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-grc.ldf>
+%<*gloss-greek.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-greek.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-greek.ldf}[polyglossia: module for greek]
+
+\PolyglossiaSetup{greek}{
+ bcp47=el-monoton,
+ script=Greek,
+ scripttag=grek,
+ langtag=ELL,
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup=true,
+ localnumeral=greeknumerals,
+ Localnumeral=Greeknumerals
+ %TODO localalph={greek@alph,greek@Alph}
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*[variant=ancient]{greek}{grc}
+\setlanguagealias*[varant=polytonic]{greek}{el-polyton}
+\setlanguagealias*[variant=monotonic]{greek}{el-monoton}
+\setlanguagealias*{greek}{el}
+
+% Babel aliases
+\setlanguagealias[variant=polytonic]{greek}{polutonikogreek}
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% The code in this file was initially adapted from the antomega
+%% module for greek. Currently large parts of it derive from the
+%% package xgreek.sty (c) Apostolos Syropoulos
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+% this file imported from xgreek fixes the \lccode and \uccode of Greek letters:
+\input{xgreek-fixes.def}
+
+\def\tmp@mono{mono}
+\def\tmp@monotonic{monotonic}
+\def\tmp@poly{poly}
+\def\tmp@polytonic{polytonic}
+\def\tmp@ancient{ancient}
+\def\tmp@ancientgreek{ancientgreek}
+
+\def\greek@variant{monogreek}
+
+\define@key{greek}{variant}[monotonic]{%
+ \def\@tmpa{#1}%
+ \xpg@ifdefined{greek}{}{%
+ \xpg@nopatterns{greek}%
+ \adddialect\l@greek\l@nohyphenation
+ }%
+ \ifx\@tmpa\tmp@poly\def\@tmpa{polytonic}\fi
+ \ifx\@tmpa\tmp@ancientgreek\def\@tmpa{ancient}\fi
+ \ifx\@tmpa\tmp@polytonic%
+ \xpg@ifdefined{polygreek}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for Polytonic Greek\MessageBreak
+ I will use the patterns loaded for \string\l@greek\space instead}%
+ \adddialect\l@polygreek\l@greek\relax}%
+ \def\greek@variant{polygreek}%
+ \def\captionsgreek{\polygreekcaptions}%
+ \def\dategreek{\datepolygreek}%
+ \SetLanguageKeys{greek}{babelname=polutonikogreek,bcp47=el-polyton}%
+ \xpg@info{Option: Polytonic Greek}%
+ \else
+ \ifx\@tmpa\tmp@ancient
+ \xpg@ifdefined{ancientgreek}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for Ancient Greek\MessageBreak
+ I will use the patterns loaded for \string\l@greek\space instead}%
+ \adddialect\l@ancientgreek\l@greek\relax}%
+ \def\greek@variant{ancientgreek}%
+ \def\captionsgreek{\ancientgreekcaptions}%
+ \def\dategreek{\dateancientgreek}%
+ \SetLanguageKeys{greek}{babelname=greek,bcp47=grc}%
+ \xpg@info{Option: Ancient Greek}%
+ \else %monotonic
+ \xpg@ifdefined{monogreek}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for Monotonic Greek\MessageBreak
+ I will use the patterns loaded for \string\l@greek\space instead}%
+ \adddialect\l@monogreek\l@greek\relax}%
+ \def\greek@variant{monogreek}% monotonic
+ \def\captionsgreek{\monogreekcaptions}%
+ \def\dategreek{\datemonogreek}%
+ \SetLanguageKeys{greek}{babelname=greek,bcp47=el-monoton}%
+ \xpg@info{Option: Monotonic Greek}%
+ \fi
+ \fi}
+
+\def\greek@language{%
+ \polyglossia@setup@language@patterns{\greek@variant}%
+}
+
+
+\newif\if@greek@numerals
+\define@key{greek}{numerals}[greek]{%
+ \ifstrequal{#1}{arabic}{\@greek@numeralsfalse}{\@greek@numeralstrue}%
+}
+
+\define@boolkey{greek}{attic}[true]{\xpg@warning{Greek option `attic' is no longer required.}}
+
+% Register default options
+\xpg@initialize@gloss@options{greek}{variant=monotonic,numerals=greek}
+% Register alias options
+\xpg@set@alias@values{greek}{variant}{monotonic}{mono}
+\xpg@set@alias@values{greek}{variant}{polytonic}{poly}
+
+\def\monogreekcaptions{%
+ \def\refname{Αναφορές}%
+ \def\abstractname{Περίληψη}%
+ \def\bibname{Βιβλιογραφία}%
+ \def\prefacename{Πρόλογος}%
+ \def\chaptername{Κεφάλαιο}%
+ \def\appendixname{Παράρτημα}%
+ \def\contentsname{Περιεχόμενα}%
+ \def\listfigurename{Κατάλογος σχημάτων}%
+ \def\listtablename{Κατάλογος πινάκων}%
+ \def\indexname{Ευρετήριο}%
+ \def\figurename{Σχήμα}%
+ \def\tablename{Πίνακας}%
+ \def\partname{Μέρος}%
+ \def\pagename{Σελίδα}%
+ \def\seename{βλέπε}%
+ \def\alsoname{βλέπε επίσης}%
+ \def\enclname{Συνημμένα}%
+ \def\ccname{Κοινοποίηση}%
+ \def\headtoname{Προς}%
+ \def\proofname{Απόδειξη}%
+ \def\glossaryname{Γλωσσάρι}}%
+
+\def\datemonogreek{%
+ \def\today{\number\day\space%
+ \greek@month%
+ \space\number\year}%
+ \def\greektoday{\greeknumber\day\space%
+ \greek@month%
+ \space\greeknumber\year}%
+ \def\Greektoday{\Greeknumber\day\space%
+ \greek@month%
+ \space\Greeknumber\year}%
+ \def\greek@month{\ifcase\month\or%
+ Ιανουαρίου\or
+ Φεβρουαρίου\or
+ Μαρτίου\or
+ Απριλίου\or
+ Μαΐου\or
+ Ιουνίου\or
+ Ιουλίου\or
+ Αυγούστου\or
+ Σεπτεμβρίου\or
+ Οκτωβρίου\or
+ Νοεμβρίου\or
+ Δεκεμβρίου\fi}}%
+
+\def\polygreekcaptions{%
+ \def\refname{Ἀναφορές}%
+ \def\abstractname{Περίληψη}%
+ \def\bibname{Βιβλιογραφία}%
+ \def\prefacename{Πρόλογος}%
+ \def\chaptername{Κεφάλαιο}%
+ \def\appendixname{Παράρτημα}%
+ \def\contentsname{Περιεχόμενα}%
+ \def\listfigurename{Κατάλογος σχημάτων}%
+ \def\listtablename{Κατάλογος πινάκων}%
+ \def\indexname{Εὑρετήριο}%
+ \def\figurename{Σχῆμα}%
+ \def\tablename{Πίνακας}%
+ \def\partname{Μέρος}%
+ \def\pagename{Σελίδα}%
+ \def\seename{βλέπε}%
+ \def\alsoname{βλέπε ἐπίσης}%
+ \def\enclname{Συνημμένα}%
+ \def\ccname{Κοινοποίηση}%
+ \def\headtoname{Πρὸς}%
+ \def\proofname{Ἀπόδειξη}}%
+
+\def\datepolygreek{%
+ \def\today{\number\day\space%
+ \greek@month%
+ \space\number\year}%
+ \def\greektoday{\greeknumber\day\space%
+ \greek@month%
+ \space\greeknumber\year}%
+ \def\Greektoday{\Greeknumber\day\space%
+ \greek@month%
+ \space\Greeknumber\year}%
+ \def\greek@month{\ifcase\month\or%
+ Ἰανουαρίου\or
+ Φεβρουαρίου\or
+ Μαρτίου\or
+ Ἀπριλίου\or
+ Μαΐου\or
+ Ἰουνίου\or
+ Ἰουλίου\or
+ Αὐγούστου\or
+ Σεπτεμβρίου\or
+ Ὀκτωβρίου\or
+ Νοεμβρίου\or
+ Δεκεμβρίου\fi}}%
+
+% this is copied verbatim from xgreek.sty:
+\def\ancientgreekcaptions{%
+ \def\prefacename{Προοίμιον}%
+ \def\refname{Αναφοραί}%
+ \def\abstractname{Περίληψις}%
+ \def\bibname{Βιβλιογραφία}%
+ \def\chaptername{Κεφάλαιον}%
+ \def\appendixname{Παράρτημα}%
+ \def\contentsname{Περιεχόμενα}%
+ \def\listfigurename{Κατάλογος σχημάτων}%
+ \def\listtablename{Κατάλογος πινάκων}%
+ \def\indexname{Εὑρετήριον}%
+ \def\figurename{Σχήμα}%
+ \def\tablename{Πίναξ}%
+ \def\partname{Μέρος}%
+ \def\enclname{Συνημμένως}%
+ \def\ccname{Κοινοποίησις}%
+ \def\headtoname{Πρὸς}%
+ \def\pagename{Σελὶς}%
+ \def\seename{ὅρα}%
+ \def\alsoname{ὅρα ὡσαύτως}%
+ \def\proofname{Ἀπόδειξις}%
+ \def\glossaryname{Γλωσσάριον}%
+ \def\refname{Ἀναφοραὶ}%
+ \def\indexname{Εὑρετήριο}%
+ \def\figurename{Σχῆμα}%
+ \def\headtoname{Πρὸς}}%
+
+\def\dateancientgreek{%
+ \def\today{\number\day\space%
+ \greek@month%
+ \space\number\year}%
+ \def\greektoday{\greeknumber\day\space%
+ \greek@month%
+ \space\greeknumber\year}%
+ \def\Greektoday{\Greeknumber\day\space%
+ \greek@month%
+ \space\Greeknumber\year}%
+ \def\greek@month{\ifcase\month\or%
+ Ἰανουαρίου\or
+ Φεβρουαρίου\or
+ Μαρτίου\or
+ Ἀπριλίου\or
+ Μαΐου\or
+ Ἰουνίου\or
+ Ἰουλίου\or
+ Αὐγούστου\or
+ Σεπτεμβρίου\or
+ Ὀκτωβρίου\or
+ Νοεμβρίου\or
+ Δεκεμβρίου\fi}}
+
+% the code for alphabetic numbers and attic numerals
+\newrobustcmd\anw@print{}
+\newrobustcmd\anw@false{%
+ \renewrobustcmd\anw@print{}}
+\newrobustcmd\anw@true{%
+ \renewrobustcmd\anw@print{ʹ}}
+\anw@true
+
+\newcommand{\greeknumerals}[2]{\greeknumber{#2}}
+\newcommand{\Greeknumerals}[2]{\Greeknumber{#2}}
+
+\protected\def\greeknumber#1{\expandafter\@greeknumber\expandafter{\number#1}}
+\def\@greeknumber#1{%
+ \ifnum#1<\@ne\space\gr@ill@value{#1}%
+ \else
+ \ifnum#1<10\expandafter\gr@num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\gr@num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\gr@num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\gr@num@iv\number#1%
+ \else
+ \ifnum#1<100000\expandafter\gr@num@v\number#1%
+ \else
+ \ifnum#1<1000000\expandafter\gr@num@vi\number#1%
+ \else
+ \space\gr@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\protected\def\Greeknumber#1{\expandafter\@Greeknumber\expandafter{\number#1}}
+\def\@Greeknumber#1{%
+ \ifnum#1<\@ne\space\gr@ill@value{#1}%
+ \else
+ \ifnum#1<10\expandafter\gr@Num@i\number#1%
+ \else
+ \ifnum#1<100\expandafter\gr@Num@ii\number#1%
+ \else
+ \ifnum#1<\@m\expandafter\gr@Num@iii\number#1%
+ \else
+ \ifnum#1<\@M\expandafter\gr@Num@iv\number#1%
+ \else
+ \ifnum#1<100000\expandafter\gr@Num@v\number#1%
+ \else
+ \ifnum#1<1000000\expandafter\gr@Num@vi\number#1%
+ \else
+ \space\gr@ill@value{#1}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+}
+\let\greeknumeral=\greeknumber
+\let\Greeknumeral=\Greeknumber
+\def\gr@num@i#1{%
+ \ifcase#1\or α\or β\or γ\or δ\or ε\or Ϛ\or ζ\or η\or θ\fi
+ \ifnum#1=\z@\else\anw@true\fi\anw@print}
+\def\gr@num@ii#1{%
+ \ifcase#1\or ι\or κ\or λ\or μ\or ν\or ξ\or ο\or π\or ϟ\fi
+ \ifnum#1=\z@\else\anw@true\fi\gr@num@i}
+\def\gr@num@iii#1{%
+ \ifcase#1\or ρ\or σ\or τ\or υ\or φ\or χ\or ψ\or ω\or ϡ\fi
+ \ifnum#1=\z@\anw@false\else\anw@true\fi\gr@num@ii}
+\def\gr@num@iv#1{%
+ \ifnum#1=\z@\else ͵\fi
+ \ifcase#1\or α\or β\or γ\or δ\or ε\or Ϛ\or ζ\or η\or θ\fi
+ \gr@num@iii}
+\def\gr@num@v#1{%
+ \ifnum#1=\z@\else ͵\fi
+ \ifcase#1\or ι\or κ\or λ\or μ\or ν\or ξ\or ο\or π\or ϟ\fi
+ \gr@num@iv}
+\def\gr@num@vi#1{%
+ ͵\ifcase#1\or ρ\or σ\or τ\or υ\or φ\or χ\or ψ\or ω\or ϡ\fi
+ \gr@num@v}
+\def\gr@Num@i#1{%
+ \ifcase#1 \or Α\or Β\or Γ\or Δ\or Ε\or \MakeUppercase{Ϛ}\or Ζ\or Η\or θ\fi
+ \ifnum#1=\z@\else\anw@true\fi\anw@print}
+\def\gr@Num@ii#1{%
+ \ifcase#1 \or Ι\or Κ\or Λ\or Μ\or Ν\or Ξ\or Ο\or Π\or \MakeUppercase{ϟ}\fi
+ \ifnum#1=\z@\else\anw@true\fi\gr@Num@i}
+\def\gr@Num@iii#1{%
+ \ifcase#1 \or Ρ\or Σ\or Τ\or Υ\or Φ\or Χ\or Ψ\or Ω\or \MakeUppercase{ϡ}\fi
+ \ifnum#1=\z@\anw@false\else\anw@true\fi\gr@Num@ii}
+\def\gr@Num@iv#1{%
+ \ifnum#1=\z@\else ͵\fi
+ \ifcase#1 \or Α\or Β\or Γ\or Δ\or Ε\or \MakeUppercase{Ϛ}\or Ζ\or Η\or θ\fi
+ \gr@Num@iii}
+\def\gr@Num@v#1{%
+ \ifnum#1=\z@\else ͵\fi
+ \ifcase#1 \or Ι\or Κ\or Λ\or Μ\or Ν\or Ξ\or Ο\or Π\or \MakeUppercase{ϟ}\fi
+\gr@Num@iv}
+ \def\gr@Num@vi#1{%
+͵ \ifcase#1 \or Ρ\or Σ\or Τ\or Υ\or Φ\or Χ\or Ψ\or Ω\or \MakeUppercase{ϡ}\fi
+ \gr@Num@v}
+\def\gr@ill@value#1{\xpg@warning{Illegal value (#1) for Greek numeral}[$#1$]}
+
+%%%% Attic numerals (no longer optional)
+\newcount\@attic@num
+\DeclareRobustCommand*{\@@atticnum}[1]{%
+ \@attic@num#1\relax
+ \ifnum\@attic@num<\@ne%
+ \space%
+ \xpg@warning{Illegal value (\the\@attic@num) for acrophonic Attic numeral}%
+ \else\ifnum\@attic@num>249999%
+ \space%
+ \xpg@warning{Illegal value (\the\@attic@num) for acrophonic Attic numeral}%
+ \else
+ \@whilenum\@attic@num>49999\do{%
+ \char"10147\advance\@attic@num-50000}%
+ \@whilenum\@attic@num>9999\do{%
+ M\advance\@attic@num-\@M}%
+ \ifnum\@attic@num>4999%
+ \char"10146\advance\@attic@num-5000%
+ \fi\relax
+ \@whilenum\@attic@num>999\do{%
+ Χ\advance\@attic@num-\@m}%
+ \ifnum\@attic@num>499%
+ \char"10145\advance\@attic@num-500%
+ \fi\relax
+ \@whilenum\@attic@num>99\do{%
+ Η\advance\@attic@num-100}%
+ \ifnum\@attic@num>49%
+ \char"10144\advance\@attic@num-50%
+ \fi\relax
+ \@whilenum\@attic@num>9\do{%
+ Δ\advance\@attic@num by-10}%
+ \@whilenum\@attic@num>4\do{%
+ Π\advance\@attic@num-5}%
+ \ifcase\@attic@num\or Ι\or ΙΙ\or ΙΙΙ\or ΙΙΙΙ\fi%
+ \fi\fi}
+\def\@atticnum#1{%
+ \expandafter\@@atticnum\expandafter{\the#1}}
+\def\atticnumeral#1{%
+ \@attic@num#1\relax
+ \@atticnum{\@attic@num}}
+\let\atticnum=\atticnumeral
+
+\def\greek@numbers{%
+ \if@greek@numerals
+ \def\greek@alph##1{\expandafter\greeknumeral\expandafter{\the##1}}%
+ \def\greek@Alph##1{\expandafter\Greeknumeral\expandafter{\the##1}}%
+ \let\@alph\greek@alph%
+ \let\@Alph\greek@Alph%
+ \fi}
+
+\def\nogreek@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+ \let\greek@alph\@undefined%
+ \let\greek@Alph\@undefined%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-greek.ldf>
+%<*gloss-he.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-he.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-he.ldf}[polyglossia: module for he (hebrew)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{hebrew}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-he.ldf>
+%<*gloss-hebrew.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-hebrew.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-hebrew.ldf}[polyglossia: module for hebrew]
+\ifluatex
+ \xpg@warning{Hebrew is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\RequireBidi
+\RequirePackage{hebrewcal}
+
+\PolyglossiaSetup{hebrew}{
+ bcp47=he,
+ script=Hebrew,
+ direction=RL,
+ scripttag=hebr,
+ langtag=IWR,
+ hyphennames={nohyphenation},
+ fontsetup=true,
+ localnumeral=hebrewnumerals
+ %TODO localalph={hebrewnumeral,Hebrewnumeral}
+ %digits = hebrewnumber
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{hebrew}{he}
+
+\newif\if@calendar@hebrew
+\def\tmp@hebrew{hebrew}
+\define@key{hebrew}{calendar}[gregorian]{%
+ \message{Setting \string\if@calendar@hebrew}
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@hebrew%
+ \@calendar@hebrewtrue%
+ \else%
+ \@calendar@hebrewfalse%
+ \fi}
+
+\newif\if@xpg@hebrew@marcheshvan
+\@xpg@hebrew@marcheshvanfalse
+
+\define@boolkey{hebrew}[@xpg@hebrew@]{marcheshvan}[true]{}
+
+% hebrewcal.sty also defines the boolean key fullyear (default=false)
+
+\newif\if@hebrew@numerals
+\def\tmp@hebrew{hebrew}
+\define@key{hebrew}{numerals}[arabic]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@hebrew%
+ \@hebrew@numeralstrue%
+ \else%
+ \@hebrew@numeralsfalse%
+ \fi}
+
+\setkeys{hebrew}{numerals}
+
+% Register default options
+\xpg@initialize@gloss@options{hebrew}{numerals=arabic,calendar=gregorian,marcheshvan=false}
+
+\def\captionshebrew{%
+ \def\prefacename{מבוא}%
+ \def\refname{מקורות}%
+ \def\abstractname{תקציר}%
+ \def\bibname{ביבליוגרפיה}%
+ \def\chaptername{פרק}%
+ \def\appendixname{נספח}%
+ \def\contentsname{תוכן העניינים}%
+ \def\listfigurename{רשימת האיורים}%
+ \def\listtablename{רשימת הטבלאות}%
+ \def\indexname{מפתח}%
+ \def\figurename{איור}%
+ \def\tablename{טבלה}%
+ \def\partname{חלק}%
+ \def\enclname{רצ"ב}%
+ \def\ccname{העתקים}%
+ \def\headtoname{אל}%
+ \def\pagename{עמוד}%
+ \def\psname{נ.ב.}%
+ \def\seename{ראה}%
+ \def\alsoname{ראה גם}% check
+ \def\proofname{הוכחה}
+ \def\glossaryname{מילון מונחים}% check
+}
+\def\datehebrew{%
+ \def\today{%
+ \if@calendar@hebrew%
+ \hebrewtoday%
+ \else%
+ \hebrewnumber\day%
+ \space ב\hebrewgregmonth{\month}\space%
+ \hebrewnumber\year%
+ \fi}%
+}
+
+\def\hebrewgregmonth#1{\ifcase#1%
+ \or ינואר% יאנואר
+ \or פברואר\or מרץ% מרס / מארס
+ \or אפריל\or מאי% מי
+ \or יוני\or יולי\or אוגוסט %אבגוסט
+ \or ספטמבר\or אוקטובר\or נובמבר\or דצמבר\fi}
+
+\input{babel-hebrewalph.def}
+
+\newcommand{\hebrewnumerals}[2]{\hebrewnumber{#2}}
+
+\def\hebrewnumber#1{%
+ \if@hebrew@numerals
+ \hebrewnumeral{#1}%
+ \else
+ \number#1%
+ \fi
+}
+
+% Bidi inserts an RTL mark (0x200f) before any number, forcing numbers to
+% RTL. Hebrew uses LTR numbers, though. So we insert an LTR mark to revert
+% the directionality
+\ifxetex
+ \newcommand\xpg@hebrew@DigitsDotDashInterCharToks{\ifbool{@nonlatin}{\char"200E }{}}
+\fi
+
+\def\hebrew@ltr@numbers{%
+ \ifxetex
+ \XeTeXinterchartoks \bidi@sepmark@charclass \bidi@digits@charclass = {\xpg@hebrew@DigitsDotDashInterCharToks}%
+ \fi%
+}
+
+\def\nohebrew@ltr@numbers{%
+ \ifxetex
+ % This is bidi's original intervention
+ \XeTeXinterchartoks \bidi@sepmark@charclass \bidi@digits@charclass = {\DigitsDotDashInterCharToks}%
+ \fi%
+}
+
+\def\hebrew@numbers{%
+ \let\@alph\hebrewnumeral%
+ \let\@Alph\Hebrewnumeral%
+ % Prevent bidi from setting the numbers RTL
+ \hebrew@ltr@numbers%
+}
+
+\def\nohebrew@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+ % Restore previous bidi numbers definition
+ \nohebrew@ltr@numbers
+}
+
+\def\hebrew@globalnumbers{%
+ \let\@arabic\hebrewnumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ % Prevent bidi from setting the numbers RTL
+ \hebrew@ltr@numbers%
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nohebrew@globalnumbers{%
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@hebrew{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@hebrew{%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-hebrew.ldf>
+%<*gloss-hi.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-hi.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-hi.ldf}[polyglossia: module for hi (hindi)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{hindi}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-hi.ldf>
+%<*gloss-hindi.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-hindi.ldf}
+% \begin{macrocode}
+% UTF-8 strings kindly provided by Zdenĕk Wagner, 10-03-2008
+% with corrections and additional contributions by Anshuman Pandey
+% TODO: add option for velthuis transliteration with link to
+% Velthuis Devanagari project.
+
+\ProvidesFile{gloss-hindi.ldf}[polyglossia: module for hindi]
+\RequirePackage{devanagaridigits}
+\PolyglossiaSetup{hindi}{
+ bcp47=hi,
+ script=Devanagari,
+ scripttag=deva,
+ langtag=HIN,
+%% hyphennames={hindi,!sanskrit}, TODO: implement fallback patterns (with ! prefix)
+ fontsetup=true,
+ localnumeral=hindinumerals
+ %TODO nouppercase=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{hindi}{hi}
+
+\ifx\l@hindi\@undefined%
+ \ifx\l@sanskrit\@undefined%
+ \xpg@nopatterns{Hindi}%
+ \adddialect\l@hindi\l@nohyphenation%
+ \else
+ \xpg@warning{No hyphenation patterns were loaded for Hindi\MessageBreak
+ I will use the patterns for Sanskrit instead}
+ \adddialect\l@hindi\l@sanskrit%
+ \fi
+\fi
+
+\def\hindi@language{%
+ \polyglossia@setup@language@patterns{hindi}%
+}
+
+\def\tmp@western{Western}
+\newif\ifhindi@devanagari@numerals
+\hindi@devanagari@numeralstrue
+
+\define@key{hindi}{numerals}[Devanagari]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@western
+ \hindi@devanagari@numeralsfalse
+ \fi%
+}
+
+% Register default options
+\xpg@initialize@gloss@options{hindi}{numerals=Devanagari}
+
+\newcommand{\hindinumerals}[2]{\hindinumber{#2}}
+
+\def\hindinumber#1{%
+ \ifhindi@devanagari@numerals
+ \devanagaridigits{\number#1}%
+ \else
+ \number#1%
+ \fi}
+
+\def\captionshindi{%
+ \def\abstractname{सारांश}%
+ \def\appendixname{परिशिष्ट}%
+ \def\bibname{संदर्भ ग्रंथ}%
+ \def\ccname{}%
+ \def\chaptername{अध्याय}%
+ \def\contentsname{विषय सूची}%
+ \def\enclname{}%
+ \def\figurename{चित्र}% रेखाचित्र
+ \def\headpagename{पृष्ठ}%
+ \def\headtoname{}%
+ \def\indexname{सूची}%
+ % सूचक
+ % अनुक्रमणिका
+ % अनुक्रमणि
+ \def\listfigurename{चित्रों की सूची}%
+ \def\listtablename{तालिकाओं की सूची}%
+ \def\pagename{पृष्ठ}%
+ \def\partname{खणड}%
+ \def\prefacename{प्रस्तावना}% प्राक्कथन
+ \def\refname{हवाले}%
+ \def\tablename{तालिका}%
+ \def\seename{देखिए}%
+ \def\alsoname{और देखिए}%
+ \def\alsoseename{और देखिए}%
+}
+\def\datehindi{%
+ \def\today{\hindinumber\day\space\ifcase\month\or
+ जनवरी\or
+ फ़रवरी\or
+ मार्च\or
+ अपरैल\or
+ मई\or
+ जून\or
+ जलाई\or
+ अगस्त\or
+ सितम्बर\or
+ अक्तूबर\or
+ नवम्बर\or
+ दिसम्बर\fi
+ \space\hindinumber\year}%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@hindi{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@hindi{%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-hindi.ldf>
+%<*gloss-hr.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-hr.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-hr.ldf}[polyglossia: module for hr (croatian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{croatian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-hr.ldf>
+%<*gloss-hsb.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-hsb.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-hsb.ldf}[polyglossia: module for hsb (sorbian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{sorbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-hsb.ldf>
+%<*gloss-hu.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-hu.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-hu.ldf}[polyglossia: module for hu (hungarian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{hungarian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-hu.ldf>
+%<*gloss-hungarian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-hungarian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-hungarian.ldf}[polyglossia: module for hungarian]
+
+\PolyglossiaSetup{hungarian}{
+ bcp47=hu,
+ babelname=magyar,
+ hyphennames={hungarian,magyar},
+ langtag=HUN,
+ hyphenmins={2,2},
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{hungarian}{hu}
+
+\frenchspacing
+
+% Babel and backwards compat. alias
+\setlanguagealias{hungarian}{magyar}
+
+\newif\if@hungarian@swapcaptions
+\newif\if@hungarian@swapheadings
+\newif\if@hungarian@swapheaders
+\define@choicekey*+{hungarian}{swapstrings}[\xpg@val\xpg@nr]{all,captions,headings,headers,hheaders,none}[all]{%
+ \ifcase\xpg@nr\relax
+ % all:
+ \@hungarian@swapcaptionstrue%
+ \@hungarian@swapheadingstrue%
+ \@hungarian@swapheaderstrue%
+ \or
+ % captions:
+ \@hungarian@swapcaptionstrue%
+ \@hungarian@swapheadingsfalse%
+ \@hungarian@swapheadersfalse%
+ \or
+ % headings:
+ \@hungarian@swapcaptionsfalse%
+ \@hungarian@swapheadingstrue%
+ \@hungarian@swapheadersfalse%
+ \or
+ % headers:
+ \@hungarian@swapcaptionsfalse%
+ \@hungarian@swapheadingsfalse%
+ \@hungarian@swapheaderstrue%
+ \or
+ % hheaders:
+ \@hungarian@swapcaptionsfalse%
+ \@hungarian@swapheadingstrue%
+ \@hungarian@swapheaderstrue%
+ \or
+ % none:
+ \@hungarian@swapcaptionsfalse%
+ \@hungarian@swapheadingsfalse%
+ \@hungarian@swapheadersfalse%
+ \fi
+ \xpg@info{Option: Hungarian, swapstrings=\xpg@val}%
+}{\xpg@warning{Unknown Hungarian swapstrings value `#1'}}
+
+% Register default options
+\xpg@initialize@gloss@options{hungarian}{swapstrings=all}
+
+\def\hungarian@language{%
+ \polyglossia@setup@language@patterns{hungarian}%
+ \xpg@ifdefined{hungarian}{\adddialect\l@magyar\l@hungarian}{}%
+}%
+
+\def\captionshungarian{%
+ \def\refname{Hivatkozások}%
+ \def\abstractname{Kivonat}%
+ \def\bibname{Irodalomjegyzék}%
+ \def\prefacename{Előszó}%
+ \def\chaptername{fejezet}%
+ \def\appendixname{Függelék}%
+ \def\contentsname{Tartalomjegyzék}%
+ \def\listfigurename{Ábrák jegyzéke}%
+ \def\listtablename{Táblázatok jegyzéke}%
+ \def\indexname{Tárgymutató}%
+ \def\figurename{ábra}%
+ \def\tablename{táblázat}%
+ %\def\thepart{}%
+ \def\partname{rész}%
+ \def\pagename{oldal}%
+ \def\seename{lásd}%
+ \def\alsoname{lásd még}%
+ \def\enclname{Melléklet}%
+ \def\ccname{Körlevél–címzettek}%
+ \def\headtoname{Címzett}%
+ \def\proofname{Bizonyítás}%
+ \def\glossaryname{Szójegyzék}%
+}
+
+\def\datehungarian{%
+ \def\today{%
+ \number\year.\nobreakspace\ifcase\month\or
+ január\or február\or március\or
+ április\or május\or június\or
+ július\or augusztus\or szeptember\or
+ október\or november\or december\fi
+ \space\number\day.}%
+ \def\ondatehungarian{%
+ \number\year.\nobreakspace\ifcase\month\or
+ január\or február\or március\or
+ április\or május\or június\or
+ július\or augusztus\or szeptember\or
+ október\or november\or december\fi
+ \space\ifcase\day\or
+ 1-jén\or 2-án\or 3-án\or 4-én\or 5-én\or
+ 6-án\or 7-én\or 8-án\or 9-én\or 10-én\or
+ 11-én\or 12-én\or 13-án\or 14-én\or 15-én\or
+ 16-án\or 17-én\or 18-án\or 19-én\or 20-án\or
+ 21-én\or 22-én\or 23-án\or 24-én\or 25-én\or
+ 26-án\or 27-én\or 28-án\or 29-én\or 30-án\or
+ 31-én\fi}%
+ \let\ontoday\ondatehungarian%
+ \let\ondatemagyar\ondatehungarian%
+}
+
+% Save original capsformats
+\let\xpg@save@fnum@table\fnum@table
+\let\xpg@save@fnum@figure\fnum@figure
+
+\def\hungarian@capsformat{%
+ %
+ % Change captions
+ \if@hungarian@swapcaptions
+ % change 'ábra x.x' to 'x.x. ábra'
+ \def\fnum@figure{\thefigure.~\figurename}
+ %
+ % change 'táblázat x.x' to 'x.x. táblázat'
+ \def\fnum@table{\thetable.~\tablename}
+ \fi
+ %
+ % change chapter and part headings
+ \if@hungarian@swapheadings
+ % With titlesec
+ \ifcsdef{titleformat}{%
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\thepart.\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ }{}%
+ \ifcsdef{chapter}{%
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
+ {\thechapter.\space\@chapapp}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
+ }{}%
+ }{% (not \ifdefined\titleformat)
+ % With KOMA
+ \ifcsdef{sectionformat}{%
+ \ifcsdef{partformat}{%
+ \let\xpg@save@part@format\partformat%
+ \renewcommand{\partformat}{\thepart.~\partname}%
+ }{}%
+ \ifcsdef{chapterformat}{%
+ \let\xpg@save@chap@format\chapterformat%
+ \renewcommand{\chapterformat}{\mbox{\thechapter\autodot%
+ \IfUsePrefixLine{\nobreakspace\chapapp}{\enskip}}}%
+ }{}%
+ }{% (not \ifdefined\sectionformat)
+ % With memoir
+ \ifcsdef{@memptsize}{%
+ \ifcsdef{@makechapterhead}{%
+ \let\xpg@save@chap@format\@makechapterhead%
+ \patchcmd{\@makechapterhead}{\printchaptername \chapternamenum \printchapternum}%
+ {\printchapternum.\chapternamenum\printchaptername}%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Hungarian}}%
+ }{}%
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}{\printpartname \partnamenum \printpartnum}%
+ {\printpartnum.\partnamenum\printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ }{}%
+ }{% (not \ifdefined\@memptsize)
+ % With standard classes
+ \ifcsdef{@makechapterhead}{%
+ \let\xpg@save@chap@format\@makechapterhead%
+ \patchcmd{\@makechapterhead}%
+ {\@chapapp\space \thechapter}%
+ {\thechapter.\space \@chapapp}%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Hungarian}}%
+ }{}%
+ \ifcsdef{@part}{%
+ \let\xpg@save@part@format\@part%
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\thepart.\nobreakspace\partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Hungarian}}%
+ }{}% (end \ifdefined\@part)
+ }% (end \ifdefined\@memptsize)
+ }% (end \ifdefined\sectionformat)
+ }% (end \ifdefined\titleformat)
+ \fi% (end \if@hungarian@swapheadings)
+ %
+ % Change running headers
+ \if@hungarian@swapheaders
+ \ifcsdef{chapterformat}{%
+ % With KOMA
+ \let\xpg@save@chaptermark@format\chaptermarkformat%
+ \renewcommand*\chaptermarkformat{%
+ \thechapter\autodot\ \IfChapterUsesPrefixLine{\chapapp\enskip}{}}
+ }{% (not \ifdefined\chapterformat)
+ \ifcsdef{@memptsize}{%
+ % With memoir
+ \let\xpg@save@chaptermark@format\chaptermark%
+ \renewcommand*\chaptermark[1]{%
+ \markboth{\memUChead{%
+ \ifnum \c@secnumdepth >\m@ne
+ \ifbool{@mainmatter}{%
+ \thechapter.\ \@chapapp\ %
+ }{}%
+ \fi
+ ##1}}{}}%
+ }{% (not \ifdefined\@memptsize)
+ % With standard classes
+ \ifcsdef{chaptermark}{%
+ \ifpatchable{\chaptermark}%
+ {\@chapapp\ \thechapter.}%
+ {\let\xpg@save@chaptermark@format\chaptermark%
+ \patchcmd{\chaptermark}%
+ {\@chapapp\ \thechapter.}%
+ {\thechapter.\ \@chapapp}%
+ {}%
+ {\xpg@warning{Failed to patch chaptermark for Hungarian}}}%
+ {}%
+ }{}% (end \ifdefined\chaptermark)
+ }% (end \ifdefined\@memptsize)
+ }% (end \ifdefined\chapterformat)
+ \fi% (end \if@hungarian@swapheaders)
+}
+
+\def\nohungarian@capsformat{%
+ %
+ % Reset changes of \hungarian@capsformat
+ \let\fnum@table\xpg@save@fnum@table%
+ \let\fnum@figure\xpg@save@fnum@figure%
+ %
+ % Reset chapter and part heading
+ \ifcsdef{titleformat}{%
+ % With titlesec
+ \ifcsdef{xpg@save@part@format}{%
+ \let\@part\xpg@save@part@format
+ }{}%
+ \ifcsdef{chapter}{%
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}
+ {\@chapapp\space\thechapter}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}
+ }{}%
+ }{% (not \ifdefined\titleformat)
+ \ifcsdef{sectionformat}{%
+ % With KOMA
+ \ifcsdef{xpg@save@part@format}{%
+ \let\partformat\xpg@save@part@format
+ }{}%
+ \ifcsdef{xpg@save@chap@format}{%
+ \let\chapterformat\xpg@save@chap@format
+ }{}%
+ }{%
+ % With memoir and standard classes
+ \ifcsdef{xpg@save@part@format}{%
+ \let\@part\xpg@save@part@format
+ }{}%
+ \ifcsdef{xpg@save@chap@format}{%
+ \let\@makechapterhead\xpg@save@chap@format
+ }{}%
+ }% (end \ifdefined\sectionformat)
+ }% (end \ifdefined\titleformat)
+ %
+ % Reset headers
+ \ifcsdef{chaptermarkformat}{%
+ % With KOMA
+ \ifcsdef{xpg@save@chaptermark@format}{%
+ \let\chaptermarkformat\xpg@save@chaptermark@format%
+ }{}%
+ }{%
+ \ifcsdef{chaptermark}{%
+ % With memoir and standard classes
+ \ifcsdef{xpg@save@chaptermark@format}{%
+ \let\chaptermark\xpg@save@chaptermark@format%
+ }{}%
+ }{}% (end \ifdefined\chaptermark)
+ }% (end \ifdefined\chapterformat)
+}
+
+\def\blockextras@hungarian{%
+ \hungarian@capsformat%
+}
+
+\def\noextras@hungarian{%
+ \nohungarian@capsformat%
+ \let\ontoday\@undefined%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-hungarian.ldf>
+%<*gloss-hy.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-hy.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-hy.ldf}[polyglossia: module for hy (armenian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{armenian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-hy.ldf>
+%<*gloss-ia.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ia.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ia.ldf}[polyglossia: module for ia (interlingua)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{interlingua}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ia.ldf>
+%<*gloss-icelandic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-icelandic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-icelandic.ldf}[polyglossia: module for icelandic]
+\PolyglossiaSetup{icelandic}{
+ bcp47=is,
+ hyphennames={icelandic},
+ hyphenmins={2,2},
+ langtag=ISL,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{icelandic}{is}
+
+\def\captionsicelandic{%
+ \def\refname{Heimildir}%
+ \def\abstractname{Útdráttur}%
+ \def\bibname{Heimildir}%
+ \def\prefacename{Formáli}%
+ \def\chaptername{Kafli}%
+ \def\appendixname{Viðauki}%
+ \def\contentsname{Efnisyfirlit}%
+ \def\listfigurename{Myndaskrá}%
+ \def\listtablename{Töfluskrá}%
+ \def\indexname{Atriðisorðaskrá}%
+ \def\figurename{Mynd}%
+ \def\tablename{Tafla}%
+ %\def\thepart{}%
+ \def\partname{Hluti}%
+ \def\pagename{Blaðsíða}%
+ \def\seename{Sjá}%
+ \def\alsoname{Sjá einnig}%
+ \def\enclname{Hjálagt}%
+ \def\ccname{Samrit}%
+ \def\headtoname{Til:}%
+ \def\proofname{Sönnun}%
+ \def\glossaryname{Orðalisti}%
+ }
+
+\def\dateicelandic{%
+ \def\today{\number\day.~\ifcase\month\or
+ janúar\or febrúar\or mars\or apríl\or maí\or
+ júní\or júlí\or ágúst\or september\or
+ október\or nóvember\or desember\fi
+ \space\number\year}%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-icelandic.ldf>
+%<*gloss-id.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-id.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-id.ldf}[polyglossia: module for id (malay)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{malay}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-id.ldf>
+%<*gloss-interlingua.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-interlingua.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-interlingua.ldf}[polyglossia: module for interlingua]
+\PolyglossiaSetup{interlingua}{
+ bcp47=ia,
+ hyphennames={interlingua},
+ hyphenmins={2,2},
+ langtag=INA,
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{interlingua}{ia}
+
+\def\captionsinterlingua{%
+ \def\refname{Referentias}%
+ \def\abstractname{Summario}%
+ \def\bibname{Bibliographia}%
+ \def\prefacename{Prefacio}%
+ \def\chaptername{Capitulo}%
+ \def\appendixname{Appendice}%
+ \def\contentsname{Contento}%
+ \def\listfigurename{Lista de figuras}%
+ \def\listtablename{Lista de tabellas}%
+ \def\indexname{Indice}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabella}%
+ \def\partname{Parte}%
+ %\def\thepart{}%
+ \def\pagename{Pagina}%
+ \def\seename{vide}%
+ \def\alsoname{vide etiam}%
+ \def\enclname{Incluso}%
+ \def\ccname{Copia}%
+ \def\headtoname{A}%
+ \def\proofname{Prova}%
+ \def\glossaryname{Glossario}%
+ }
+\def\dateinterlingua{%
+ \def\today{le~\number\day\space de \ifcase\month\or
+ januario\or februario\or martio\or april\or maio\or junio\or
+ julio\or augusto\or septembre\or octobre\or novembre\or
+ decembre\fi
+ \space \number\year}}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-interlingua.ldf>
+%<*gloss-irish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-irish.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-irish.ldf}[polyglossia: module for irish]
+
+% We only provide this gloss for babel compatibility. Since irish is
+% a gaelic variety, we use 'gaelic' with variant 'irish' now.
+
+\xpg@load@master@language{gaelic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-irish.ldf>
+%<*gloss-is.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-is.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-is.ldf}[polyglossia: module for is (icelandic)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{icelandic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-is.ldf>
+%<*gloss-it.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-it.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-it.ldf}[polyglossia: module for it (italian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{italian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-it.ldf>
+%<*gloss-italian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-italian.ldf}
+% \begin{macrocode}
+% !TEX encoding = UTF-8 Unicode
+\ProvidesFile{gloss-italian.ldf}[polyglossia: module for italian]
+\PolyglossiaSetup{italian}{
+ bcp47=it,
+ hyphennames={italian},
+ hyphenmins={2,2},
+ langtag=ITA,
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{italian}{it}
+
+
+%%% CHANGES START %%% by Enrico Gregorio
+\define@boolkey{italian}[italian@]{babelshorthands}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{italian}{babelshorthands=false}
+
+\ifsystem@babelshorthands
+ \setkeys{italian}{babelshorthands=true}
+\else
+ \setkeys{italian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\italian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{italian}%
+ \declare@shorthand{italian}{"}{%
+ \relax\ifmmode
+ \def\xpgit@next{''}%
+ \else
+ \def\xpgit@next{\futurelet\xpgit@temp\xpgit@cwm}%
+ \fi
+ \xpgit@next}%
+}
+
+%%% By Enrico Gregorio and Claudio Beccari %%%
+\def\xpgit@@cwm{\nobreak\discretionary{-}{}{}\nobreak\hskip\z@skip}
+\def\xpgit@cwm{\let\xpgit@@next\relax
+ \ifcat\noexpand\xpgit@temp a%
+ \def\xpgit@@next{\xpgit@@cwm}%
+ \else
+ \if\noexpand\xpgit@temp \string|%
+ \def\xpgit@@next##1{\xpgit@@cwm}%
+ \else
+ \if\noexpand\xpgit@temp \string<%
+ \def\xpgit@@next##1{«\ignorespaces}%
+ \else
+ \if\noexpand\xpgit@temp \string>%
+ \def\xpgit@@next##1{\unskip »}%
+ \else
+ \if\noexpand\xpgit@temp\string/%
+ \def\xpgit@@next##1{\slash}%
+ \else
+ \ifx\xpgit@temp"%
+ \def\xpgit@@next##1{?}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \xpgit@@next}
+
+\def\noitalian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+%%% CHANGES END %%%
+
+%%% ORIGINAL %%% by Claudio Beccari
+\def\captionsitalian{%
+ \def\prefacename{Prefazione}%
+ \def\refname{Riferimenti bibliografici}%
+ \def\abstractname{Sommario}%
+ \def\bibname{Bibliografia}%
+ \def\chaptername{Capitolo}%
+ \def\appendixname{Appendice}%
+ \def\contentsname{Indice}%
+ \def\listfigurename{Elenco delle figure}%
+ \def\listtablename{Elenco delle tabelle}%
+ \def\indexname{Indice analitico}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabella}%
+ \def\partname{Parte}%
+ \def\enclname{Allegati}%
+ \def\ccname{e~p.~c.}%
+ \def\headtoname{Per}%
+ \def\pagename{Pag.}% % in Italian the abbreviation is preferred
+ \def\seename{vedi}%
+ \def\alsoname{vedi anche}%
+ \def\proofname{Dimostrazione}%
+ \def\glossaryname{Glossario}%
+ }
+\def\dateitalian{%
+ \def\today{\number\day~\ifcase\month\or
+ gennaio\or febbraio\or marzo\or aprile\or maggio\or giugno\or
+ luglio\or agosto\or settembre\or ottobre\or novembre\or
+ dicembre\fi\space \number\year}}
+%%% ORIGINAL END %%%
+
+%%% CHANGES START %%% by Enrico Gregorio
+\let\xpgit@savedvalues\empty
+\AtEndPreamble{% the user or the class might define different values
+ \edef\xpgit@savedvalues{%
+ \clubpenalty=\the\clubpenalty\space
+ \@clubpenalty=\the\@clubpenalty\space
+ \widowpenalty=\the\widowpenalty\space
+ \finalhyphendemerits=\the\finalhyphendemerits}
+}
+
+
+\def\noextras@italian{%
+ \lccode\string"2019=\z@
+ \noitalian@shorthands
+ \xpgit@savedvalues
+}
+
+\def\blockextras@italian{%
+ \lccode\string"2019=\string"2019
+ \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
+ \finalhyphendemerits=50000000
+ \ifitalian@babelshorthands\italian@shorthands\fi
+}
+
+\def\inlineextras@italian{%
+ \lccode\string"2019=\string"2019
+ \ifitalian@babelshorthands\italian@shorthands\fi
+}
+%%% CHANGES END %%%
+% \end{macrocode}
+% \iffalse
+%</gloss-italian.ldf>
+%<*gloss-ja.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ja.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ja.ldf}[polyglossia: module for ja (japanese)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{japanese}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ja.ldf>
+%<*gloss-japanese.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-japanese.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-japanese.ldf}[polyglossia: module for japanese]
+
+\PolyglossiaSetup{japanese}{
+ bcp47=ja,
+ script=CJK,
+ language=Japanese,
+ langtag=JAN,
+ hyphennames={nohyphenation},
+ frenchspacing=false,
+ fontsetup=true,
+ localnumeral=japanesenumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{japanese}{ja}
+
+\def\japanese@capsformat{%
+ \def\@seccntformat##1{%
+ \csname pre##1\endcsname%
+ \csname the##1\endcsname%
+ \csname post##1\endcsname%
+ }%
+ \def\postsection{節\space}%
+ \def\postsubsection{節\space}%
+ \def\postsubsubsection{節\space}%
+ \def\presection{第}%
+ \def\presubsection{第}%
+ \def\presubsubsection{第}%
+}
+
+\def\captionsjapanese{%
+ \def\refname{参考文献}%
+ \def\abstractname{概要}%
+ \def\bibname{文献目録}%
+ \def\prefacename{端書き}%
+ \def\chaptername##1##2{第##1##2 章}%
+ \def\appendixname{付録}%
+ \def\contentsname{目次}%
+ \def\listfigurename{図目次}%
+ \def\listtablename{表目次}%
+ \def\indexname{索引}%
+ \def\figurename{図}%
+ \def\tablename{表}%
+ \def\partname##1##2{第##1##2 部}%
+ \def\pagename##1##2{第##1##2 頁}%
+ \def\seename{参照}%
+ \def\alsoname{参照}%
+ \def\enclname{添付}%
+ \def\ccname{同報}%
+ \def\headtoname{宛先}%
+ \def\proofname{証明}%
+ \def\glossaryname{用語集}%
+ }
+
+\newif\if@WameiReki \@WameiRekifalse%
+\newif\if@WameiTosi \@WameiTosifalse%
+\newif\if@WameiTuki \@WameiTukifalse%
+\newif\if@WameiHi \@WameiHifalse%
+\newif\if@IzumoTuki \@IzumoTukifalse%
+\newcount\c@TempJNum%
+
+\def\@JapaneseDigit#1{%
+ \ifcase#1\or 一\or 二\or 三\or 四\or 五\or%
+ 六\or 七\or 八\or 九\or 十\or%
+ 十一\or 十二\or 十三\or 十四\or 十五\or%
+ 十六\or 十七\or 十八\or 十九\or 廿\or%
+ 廿一\or 廿二\or 廿三\or 廿四\or 廿五\or%
+ 廿六\or 廿七\or 廿八\or 廿九\or 丗\or%
+ 丗一\or 丗二\or 丗三\or 丗四\or 丗五\or%
+ 丗六\or 丗七\or 丗八\or 丗九\or 四十\or%
+ 四十一\or 四十二\or 四十三\or 四十四\or 四十五\or%
+ 四十六\or 四十七\or 四十八\or 四十九\or 五十\or%
+ 五十一\or 五十二\or 五十三\or 五十四\or 五十五\or%
+ 五十六\or 五十七\or 五十八\or 五十九\or 六十\or%
+ 六十一\or 六十二\or 六十三\or 六十四\or 六十五\or%
+ 六十六\or 六十七\or 六十八\or 六十九\or 七十\or%
+ 七十一\or 七十二\or 七十三\or 七十四\or 七十五\or%
+ 七十六\or 七十七\or 七十八\or 七十九\or 八十\or%
+ 八十一\or 八十二\or 八十三\or 八十四\or 八十五\or%
+ 八十六\or 八十七\or 八十八\or 八十九\or 九十\or%
+ 九十一\or 九十二\or 九十三\or 九十四\or 九十五\or%
+ 九十六\or 九十七\or 九十八\or 九十九%
+ \else
+ \@ctrerr%
+ \fi\relax%
+}
+
+\def\@JapaneseNum#1{%
+ \c@TempJNum=#1\divide\c@TempJNum by 1000\relax%
+ \ifnum\c@TempJNum=\z@\c@TempJNum=#1%
+ \divide\c@TempJNum by 100\relax%
+ \ifnum\c@TempJNum=\z@\@JapaneseDigit{#1}\relax%
+ \else
+ \ifcase\c@TempJNum\or 百\or 二百\or 三百\or 四百\or 五百\or
+ 六百\or 七百\or 八百\or 九百%
+ \fi
+ \c@TempJNum=#1\divide\c@TempJNum by 100\multiply\c@TempJNum by -100\advance\c@TempJNum#1\@JapaneseDigit\c@TempJNum\relax%
+ \fi%
+ \else
+ \ifcase\c@TempJNum\or 千\or 二千\or 三千\or 四千\or 五千\or
+ 六千\or 七千\or 八千\or 九千%
+ \fi
+ \c@TempJNum=#1\divide\c@TempJNum by 1000\multiply\c@TempJNum by -1000\advance\c@TempJNum#1\divide\c@TempJNum by 100\relax%
+ \ifnum\c@TempJNum=\z@\c@TempJNum=#1%
+ \divide\c@TempJNum by 100\multiply\c@TempJNum by -100\advance\c@TempJNum#1\@JapaneseDigit\c@TempJNum\relax%
+ \else
+ \ifcase\c@TempJNum\or 百\or 二百\or 三百\or 四百\or 五百\or
+ 六百\or 七百\or 八百\or 九百%
+ \fi
+ \c@TempJNum=#1\divide\c@TempJNum by 100\multiply\c@TempJNum by -100\advance\c@TempJNum#1\@JapaneseDigit\c@TempJNum\relax%
+ \fi
+ \fi
+}
+
+\def\@japanesenumber#1{%
+ \@tempcnta=#1%
+ \ifnum\@tempcnta=\z@{〇}%
+ \else
+ \ifnum\@tempcnta<\z@{負}%
+ \multiply\@tempcnta by -1%
+ \fi
+ \@tempcntb=\@tempcnta\divide\@tempcntb by 10000\relax%
+ \ifnum\@tempcntb=\z@\@JapaneseNum%
+ \@tempcnta%
+ \else
+ \@tempcntb=\@tempcnta\divide\@tempcntb by 100000000\relax%
+ \ifnum\@tempcntb=\z@\@tempcntb=\@tempcnta%
+ \divide\@tempcntb by 10000%
+ \@JapaneseNum\@tempcntb{万}\@tempcntb=\@tempcnta%
+ \divide\@tempcntb by 10000\multiply\@tempcntb by -10000%
+ \advance\@tempcntb\@tempcnta\relax\@JapaneseNum\@tempcntb%
+ \else
+ \@JapaneseNum\@tempcntb{億}\@tempcntb=\@tempcnta%
+ \divide\@tempcntb by 100000000\multiply\@tempcntb by -100000000%
+ \advance\@tempcntb\@tempcnta\divide\@tempcntb by 10000\relax%
+ \ifnum\@tempcntb=\z@%
+ \else
+ \@JapaneseNum\@tempcntb{万}%
+ \fi
+ \@tempcntb=\@tempcnta\divide\@tempcntb by 10000%
+ \multiply\@tempcntb by -10000\advance\@tempcntb\@tempcnta%
+ \@JapaneseNum\@tempcntb%
+ \fi
+ \fi
+ \fi
+}
+
+\def\japanesenumber#1{%
+ \expandafter\@japanesenumber\csname c@#1\endcsname%
+}
+
+\newcommand{\japanesenumerals}[2]{\@japanesenumber{#2}}
+
+\def\datejapanese{%
+ {%
+ \ifnum\year<1868%
+ \xdef\the@WarekiCur{}%
+ \else
+ \ifnum\year<1912%
+ \xdef\the@WarekiCur{明治}\advance\year-1867\relax%
+ \else
+ \ifnum\year<1926%
+ \xdef\the@WarekiCur{大正}\advance\year-1911\relax%
+ \else
+ \ifnum\year<1989%
+ \xdef\the@WarekiCur{昭和}\advance\year-1925\relax%
+ \else
+ \xdef\the@WarekiCur{平成}\advance\year-1988\relax%
+ \fi
+ \fi
+ \fi
+ \fi
+ \xdef\the@WameiTosi{\the\year}%
+ }%
+ \def\西暦{\@WameiRekifalse \@WameiTukifalse \@WameiHifalse}%
+ \def\和暦{\@WameiRekitrue \@WameiTosifalse \@WameiTukifalse \@WameiHifalse}%
+ \def\和名暦{\@WameiTositrue \@WameiTukitrue \@WameiHitrue}%
+ \def\数字暦{\@WameiTosifalse \@WameiTukifalse \@WameiHifalse}%
+ \def\出雲月{\@IzumoTukitrue}%
+ \def\大和月{\@IzumoTukifalse}%
+ \def\today{%
+ \if@WameiReki%
+ \the@WarekiCur%
+ \if@WameiTosi%
+ \@JapaneseNum\the@WameiTosi%
+ \else
+ \,\the@WameiTosi%
+ \fi
+ \else
+ \number\year\,%
+ \fi
+ {年}%
+ \if@WameiTuki%
+ \ifcase\month\or 睦月\or 如月\or 弥生\or 卯月\or 皐月\or
+ 水無月\or 文月\or 葉月\or 長月\or
+ \if@IzumoTuki 神在月\else 神無月\fi
+ \or 霜月\or 師走%
+ \fi
+ \else
+ \,\number\month\,%
+ {月}%
+ \fi
+ \if@WameiHi%
+ \@JapaneseNum\day%
+ \else
+ \,\number\day\,%
+ \fi
+ {日}%
+ }%
+}
+
+\def\noextras@japanese{%
+ \japanese@capsformat%
+}
+
+\def\blockextras@japanese{%
+ \japanese@capsformat%
+}
+
+\def\inlineextras@japanese{%
+ \japanese@capsformat%
+}
+% Based on contributions of Toru Inagaki, Norio Iwase, François Charette
+
+% \end{macrocode}
+% \iffalse
+%</gloss-japanese.ldf>
+%<*gloss-ka.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ka.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ka.ldf}[polyglossia: module for ka (georgian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{georgian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ka.ldf>
+%<*gloss-kannada.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-kannada.ldf}
+% \begin{macrocode}
+%% gloss-kannada.ldf
+%% Copyright 2011 Aravinda VK <hallimanearavind AT gmail.com>,
+%% Shankar Prasad <prasad.mvs AT gmail.com>,
+%% Team Sanchaya <dev AT lists.sanchaya.net>
+%
+% This work may be distributed and/or modified under the
+% conditions of the LaTeX Project Public License, either version 1.3
+% of this license or (at your option) any later version.
+% The latest version of this license is in
+% http://www.latex-project.org/lppl.txt
+% and version 1.3 or later is part of all distributions of LaTeX
+% version 2005/12/01 or later.
+%
+% This work has the LPPL maintenance status `maintained'.
+%
+% The Current Maintainer of this work is Aravinda VK <hallimanearavind AT gmail.com>.
+%
+% This work consists of the file gloss-kannada.ldf
+\ProvidesFile{gloss-kannada.ldf}[polyglossia: module for kannada]
+\ifluatex
+ \xpg@warning{Kannada is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\PolyglossiaSetup{kannada}{
+ bcp47=kn,
+ script=Kannada,
+ scripttag=knda,
+ langtag=KAN,
+ hyphennames={kannada},
+ hyphenmins={2,2},
+ fontsetup=true,
+ localnumeral=kannadanumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{kannada}{kn}
+
+%% Defining Kannada digits equivalents to english
+\def\kannadadigits#1{\expandafter\@kannada@digits #1@}
+\def\@kannada@digits#1{%
+ \ifx @#1% then terminate
+ \else
+ \ifx0#1೦\else\ifx1#1೧\else\ifx2#1೨\else\ifx3#1೩\else\ifx4#1೪\else\ifx5#1೫\else\ifx6#1೬\else\ifx7#1೭\else\ifx8#1೮\else\ifx9#1೯\else#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \expandafter\@kannada@digits
+ \fi
+}
+
+%% \kannada@numerals variable will be set to true or false depending on the option provided in \setmainlanguage
+%% \kannada@numerals true by default or when we set \setmainlanguage[numerals=Kannada]{kannada}
+%% \kannada@numerals false when we set \setmainlanguage[numerals=Western]{kannada}
+\def\tmp@western{Western}
+\newif\ifkannada@numerals
+\kannada@numeralstrue
+
+\define@key{kannada}{numerals}[Kannada]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@western
+ \kannada@numeralsfalse
+ \fi}
+
+
+\def\captionskannada{%
+ \def\prefacename{ಮುನ್ನುಡಿ}%
+ \def\refname{ಉಲ್ಲೇಖಗಳು}%
+ \def\abstractname{ಸಾರಾಂಶ}%
+ \def\bibname{ಗ್ರಂಥಸೂಚಿ}%
+ \def\chaptername{ಅಧ್ಯಾಯ}%
+ \def\appendixname{ಅನುಬಂಧ}%
+ \def\contentsname{ವಿಷಯಗಳು}%
+ \def\listfigurename{ಚಿತ್ರಗಳ ಪಟ್ಟಿ}%
+ \def\listtablename{ಕೋಷ್ಟಕಗಳ ಪಟ್ಟಿ}%
+ \def\indexname{ಸೂಚಿ}%
+ \def\figurename{ಚಿತ್ರ}%
+ \def\tablename{ಕೋಷ್ಟಕ}%
+ \def\partname{ಭಾಗ}%
+ \def\enclname{encl}%
+ \def\ccname{cc}%
+ \def\headtoname{ಗೆ}%
+ \def\pagename{ಪುಟ}%
+ \def\seename{ನೋಡು}%
+ \def\alsoname{ಇದನ್ನೂ ಸಹ ನೋಡು}%
+ \def\proofname{ಕರಡುಪ್ರತಿ}%
+}
+
+\def\datekannada{%
+ \def\kannadamonth{%
+ \ifcase\month\or
+ ಜನವರಿ\or
+ ಫೆಬ್ರವರಿ\or
+ ಮಾರ್ಚ್\or
+ ಏಪ್ರಿಲ್\or
+ ಮೇ\or
+ ಜೂನ್\or
+ ಜುಲೈ\or
+ ಆಗಷ್ಟ್\or
+ ಸೆಪ್ಟೆಂಬರ್\or
+ ಅಕ್ಟೋಬರ್\or
+ ನವಂಬರ್\or
+ ಡಿಸಂಬರ್\fi}%
+ \def\today{\kannadanumber\day\space\kannadamonth\space\kannadanumber\year}%
+}
+
+\newcommand{\kannadanumerals}[2]{\kannadanumber{#2}}
+
+%% Based on the settings displays respective numbers
+\def\kannadanumber#1{%
+ \ifkannada@numerals
+ \kannadadigits{\number#1}%
+ \else
+ \number#1%
+ \fi
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-kannada.ldf>
+%<*gloss-khmer.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-khmer.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-khmer.ldf}[polyglossia: module for Khmer]
+\PolyglossiaSetup{khmer}{
+ bcp47=km,
+ script=Khmer,%
+ scripttag=khmr,%
+ langtag=KHM,%
+ hyphennames={nohyphenation},%
+ fontsetup=true,%
+ localnumeral=khmernumerals%
+}
+\newif\if@khmer@numerals
+\def\tmp@khmer{khmer}
+\define@key{khmer}{numerals}[arabic]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@khmer\@khmer@numeralstrue%
+ \else\@khmer@numeralsfalse\fi%
+}
+\setkeys{khmer}{numerals}
+\def\captionskhmer{%
+ \def\prefacename{អារម្ភកថា}%
+ \def\refname{ឯកសារយោង}%
+ \def\abstractname{សង្ខេប}%
+ \def\bibname{គន្ថនិទ្ទេស}%
+ \def\chaptername{ជំពូក}%
+ \def\appendixname{សេចក្ដីបន្ថែម}%
+ \def\contentsname{មាតិការ}%
+ \def\listfigurename{បញ្ជីរូបភាព}%
+ \def\listtablename{បញ្ជីតារាង}%
+ \def\indexname{សន្ទស្សន៍}%
+ \def\figurename{រូប}%
+ \def\tablename{តារាង}%
+ \def\partname{ផ្នែក}%
+ \def\pagename{ទំព័រ}%
+ \def\seename{មើល}%
+ \def\alsoname{មើលបន្ថែម}%
+ \def\enclname{ឯកសារភ្ជាប់}%
+ \def\ccname{ចម្លងជួន}%
+ \def\headtoname{ផ្ញើរទៅ}%
+ \def\proofname{សម្រាយ}%
+ \def\glossaryname{សទានុក្រម}%
+}
+\def\datekhmer{%
+ \def\khmer@month{%
+ \ifcase\month\or%
+ មករា\or%
+ កុម្ភៈ\or%
+ មិនា\or%
+ មេសា\or%
+ ឧសភា\or%
+ មិថុនា\or%
+ កក្កដា\or%
+ សីហា\or%
+ កញ្ញា\or%
+ តុលា\or%
+ វិច្ឆិកា\or%
+ ធ្នូ\fi}%
+ \def\today{\khmernumber\day\space\khmer@month\space\khmernumber\year}%
+}
+\def\khmerdigits#1{\expandafter\@khmer@digits #1@}
+\def\@khmer@digits#1{%
+ \ifx @#1% then terminate
+ \else\ifx0#1០%
+ \else\ifx1#1១%
+ \else\ifx2#1២%
+ \else\ifx3#1៣%
+ \else\ifx4#1៤%
+ \else\ifx5#1៥%
+ \else\ifx6#1៦%
+ \else\ifx7#1៧%
+ \else\ifx8#1៨%
+ \else\ifx9#1៩%
+ \else#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \expandafter\@khmer@digits%
+ \fi
+}
+
+\newcommand{\khmernumerals}[2]{\khmernumber{#2}}
+
+\def\khmernumber#1{%
+ \if@khmer@numerals%
+ \khmerdigits{\number#1}%
+ \else%
+ \number#1%
+ \fi}
+\def\khmer@globalnumbers{%
+ \let\orig@arabic\@arabic%
+ \let\@arabic\khmernumber%
+ \renewcommand{\thefootnote}{\localnumeral*{footnote}}%
+}
+\def\nokhmer@globalnumbers{%
+ \let\@arabic\orig@arabic%
+}
+\def\thepart{\arabic{part}}
+\def\@khmeralph#1{%
+\ifcase#1%
+\or ក\or ខ\or គ\or ឃ\or ង%
+\or ច\or ឆ\or ជ\or ឈ\or ញ%
+\or ដ\or ឋ\or ឌ\or ឍ\or ណ%
+\or ត\or ថ\or ទ\or ធ\or ន%
+\or ប\or ផ\or ព\or ភ\or ម%
+\or យ\or រ\or ល\or វ\or ស\or ហ\or ឡ\or អ%
+\else\xpg@ill@value{#1}{@khmeralph}\fi}
+\def\khmerAlph#1{\expandafter\@khmerAlph\csname c@#1\endcsname}
+\def\@khmerAlph#1{%
+\ifcase#1%
+\or ក\or ខ\or គ\or ឃ\or ង%
+\or ច\or ឆ\or ជ\or ឈ\or ញ%
+\or ដ\or ឋ\or ឌ\or ឍ\or ណ%
+\or ត\or ថ\or ទ\or ធ\or ន%
+\or ប\or ផ\or ព\or ភ\or ម%
+\or យ\or រ\or ល\or វ\or ស\or ហ\or ឡ\or អ%
+\else\xpg@ill@value{#1}{@khmeralph}\fi}
+\def\khmer@numbers{%
+ \if@khmer@numerals
+ \let\@alph\@khmeralph%
+ \let\@Alph\@khmerAlph%
+ \fi%
+}
+\def\nokhmer@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+\def\blockextras@khmer{%
+ \XeTeXlinebreaklocale "kh" %
+ \XeTeXlinebreakskip = 0pt plus 1pt minus 1pt
+% \let\orig@baselinestretch\baselinestretch%
+% \renewcommand{\baselinestretch}{1.2}% not work
+}
+\def\noblockextras@khmer{%
+ \XeTeXlinebreaklocale "en"%
+% \let\baselinestretch\orig@baselinestretch%
+}
+\@ifclassloaded{beamer}{%
+ \usefonttheme{professionalfonts}%
+ \def\factname{ស្វ័យសត្យ}%
+ \def\lemmaname{បទគន្លិះ}%
+ \def\theoremname{ទ្រឹស្ដីបទ}%
+ \def\corollaryname{អនុសាធ្យ}%
+ \def\problemname{ចំណោទ}%
+ \def\solutionname{ដំណោះស្រាយ}%
+ \def\definitionname{និយមន័យ}%
+ \def\examplename{ឧទាហរណ៏}%
+ \uselanguage{khmer}%
+ \languagepath{khmer}%
+ \deftranslation[to=khmer]{Fact}{\factname}%
+ \deftranslation[to=khmer]{Lemma}{\lemmaname}%
+ \deftranslation[to=khmer]{Theorem}{\theoremname}%
+ \deftranslation[to=khmer]{Corollary}{\corollaryname}%
+ \deftranslation[to=khmer]{Problem}{\problemname}%
+ \deftranslation[to=khmer]{Solution}{\solutionname}%
+ \deftranslation[to=khmer]{Definition}{\definitionname}%
+ \deftranslation[to=khmer]{Definitions}{\definitionname}%
+ \deftranslation[to=khmer]{Example}{\examplename}%
+ \deftranslation[to=khmer]{Examples}{\examplename}%
+ \AtEndDocument{\immediate\write\@auxout{\string\@writefile{nav}%
+ {\noexpand\headcommand{\noexpand\def\noexpand%
+ \inserttotalframenumber{\localnumeral*{framenumber}}}}}}%
+}{}
+% \end{macrocode}
+% \iffalse
+%</gloss-khmer.ldf>
+%<*gloss-km.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-km.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-km.ldf}[polyglossia: module for km (khmer)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{khmer}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-km.ldf>
+%<*gloss-kmr-Arab.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-kmr-Arab.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-kmr-Arab.ldf}[polyglossia: module for kmr-Arab (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-kmr-Arab.ldf>
+%<*gloss-kmr-Latn.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-kmr-Latn.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-kmr-Latn.ldf}[polyglossia: module for kmr-Latn (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-kmr-Latn.ldf>
+%<*gloss-kmr.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-kmr.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-kmr.ldf}[polyglossia: module for kmr (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-kmr.ldf>
+%<*gloss-kn.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-kn.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-kn.ldf}[polyglossia: module for kn (kannada)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kannada}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-kn.ldf>
+%<*gloss-ko.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ko.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ko.ldf}[polyglossia: module for ko (korean)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{korean}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ko.ldf>
+%<*gloss-korean.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-korean.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-korean.ldf}[polyglossia: module for Korean]
+
+\PolyglossiaSetup{korean}{
+ bcp47=ko,
+ script=Hangul,
+ scripttag=hang,
+ language=Korean,
+ langtag=KOR,
+ hyphennames={nohyphenation},
+ frenchspacing=true,
+ fontsetup=true
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{korean}{ko}
+
+% variant : plain (0), classic (1), or modern (2)
+\define@choicekey{korean}{variant}[\xpg@val\xpg@nr]{plain,classic,modern}[plain]{%
+ \let\xpg@korean@variant\xpg@nr
+}
+% captions : hangul (0) or hanja (1)
+\define@choicekey{korean}{captions}[\xpg@val\xpg@nr]{hangul,hanja}[hangul]{%
+ \let\xpg@korean@captions\xpg@nr
+}
+% swapstrings: all (0), headings (1), headers (2), or none (3)
+\newif\if@korean@swapheadings
+\newif\if@korean@swapheaders
+\define@choicekey*+{korean}{swapstrings}[\xpg@val\xpg@nr]{all,headings,headers,none}[all]{%
+ \ifcase\xpg@nr\relax
+ % all:
+ \@korean@swapheadingstrue%
+ \@korean@swapheaderstrue%
+ \or
+ % headings:
+ \@korean@swapheadingstrue%
+ \@korean@swapheadersfalse%
+ \or
+ % headers:
+ \@korean@swapheadingsfalse%
+ \@korean@swapheaderstrue%
+ \or
+ % none:
+ \@korean@swapheadingsfalse%
+ \@korean@swapheadersfalse%
+ \fi
+ \xpg@info{Option: Korean, swapstrings=\xpg@val}%
+}{\xpg@warning{Unknown Korean swapstrings value `#1'}}
+
+% Register default options
+\xpg@initialize@gloss@options{korean}{variant=plain,swapstrings=all,captions=hangul}
+
+\def\captionskorean{%
+ \ifcase\xpg@korean@captions\relax
+ \captions@korean@hangul
+ \else
+ \captions@korean@hanja
+ \fi
+ \def\seename{$\rightarrow$}%
+ \def\alsoname{$\Rightarrow$}%
+}
+\def\captions@korean@hangul{%
+ \def\koreanTHEname{제}%
+ \def\partname{편}%
+ \def\chaptername{장}%
+ \def\refname{참고문헌}%
+ \def\abstractname{요약}%
+ \def\bibname{참고문헌}%
+ \def\prefacename{서문}%
+ \def\appendixname{부록}%
+ \def\contentsname{차례}%
+ \def\listfigurename{그림 차례}%
+ \def\listtablename{표 차례}%
+ \def\indexname{찾아보기}%
+ \def\figurename{그림}%
+ \def\tablename{표}%
+ \def\pagename{페이지}%
+ \def\enclname{동봉}%
+ \def\proofname{증명}%
+ \def\headtoname{수신:}%
+ \def\ccname{사본}%
+ \def\glossaryname{용어집}%
+}
+\def\captions@korean@hanja{%
+ \def\koreanTHEname{第}%
+ \def\partname{篇}%
+ \def\chaptername{章}%
+ \def\refname{參考文獻}%
+ \def\abstractname{要約}%
+ \def\bibname{參考文獻}%
+ \def\prefacename{序文}%
+ \def\appendixname{附錄}%
+ \def\contentsname{目次}%
+ \def\listfigurename{圖版 目次}%
+ \def\listtablename{表 目次}%
+ \def\indexname{索引}%
+ \def\figurename{圖版}%
+ \def\tablename{表}%
+ \def\pagename{面}%
+ \def\enclname{同封}%
+ \def\proofname{證明}%
+ \def\headtoname{受信:}%
+ \def\ccname{寫本}%
+ \def\glossaryname{用語集}%
+}
+
+\def\korean@appendix@chapapp{\appendixname}% to exclude appendix
+
+\def\korean@headingsformat{%
+ % change chapter and part headings
+ \if@korean@swapheadings
+ % With titlesec
+ \ifdefined\titleformat
+ \ifdefined\@part
+ \let\xpg@save@part@format\@part
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Korean}}%
+ \fi
+ \ifdefined\chapter
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}%
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \appendixname\space \thechapter
+ \else
+ \koreanTHEname\space \thechapter\space \@chapapp
+ \fi
+ }{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}%
+ \fi
+ \else % (not \ifdefined\titleformat)
+ % With KOMA
+ \ifdefined\sectionformat
+ \ifdefined\partformat
+ \let\xpg@save@part@format\partformat
+ \renewcommand*{\partformat}{\koreanTHEname~\thepart~\partname}%
+ \fi
+ \ifdefined\chapterformat
+ \let\xpg@save@chap@format\chapterformat
+ \renewcommand*{\chapterformat}{\mbox{%
+ \IfChapterUsesPrefixLine
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \chapappifchapterprefix\nobreakspace \thechapter\autodot
+ \else
+ \koreanTHEname\nobreakspace \thechapter\nobreakspace \chapappifchapterprefix{}%
+ \fi
+ }%
+ {\thechapter\autodot\enskip}%
+ }}%
+ \fi
+ \else % (not \ifdefined\sectionformat)
+ % With memoir
+ \ifdefined\@memptsize
+ \ifdefined\@makechapterhead
+ \let\xpg@save@chap@format\@makechapterhead
+ \patchcmd{\@makechapterhead}%
+ {\printchaptername \chapternamenum \printchapternum}%
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \printchaptername\relax\chapternamenum \printchapternum
+ \else
+ \printkoreanchapterthe \printchapternum\chapternamenum \printchaptername
+ \fi
+ }%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Korean}}%
+ \ifdefined\printkoreanchapterthe\else
+ \def\printkoreanchapterthe{%
+ \ifpatchable\printchaptername\@chapapp
+ {\chapnamefont\koreanTHEname\chapternamenum}{}}%
+ \fi
+ \fi
+ \ifdefined\@part
+ \let\xpg@save@part@format\@part
+ \patchcmd{\@part}%
+ {\printpartname \partnamenum \printpartnum}%
+ {\printkoreanpartthe \printpartnum\partnamenum \printpartname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Korean}}%
+ \ifdefined\printkoreanpartthe\else
+ \def\printkoreanpartthe{\partnamefont\koreanTHEname\partnamenum}%
+ \fi
+ \fi
+ \else % (not \ifdefined\@memptsize)
+ % With standard classes
+ \ifdefined\@makechapterhead
+ \let\xpg@save@chap@format\@makechapterhead
+ \patchcmd{\@makechapterhead}%
+ {\@chapapp\space \thechapter}%
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \appendixname\space \thechapter
+ \else
+ \koreanTHEname\space \thechapter\space \@chapapp
+ \fi
+ }%
+ {}%
+ {\xpg@warning{Failed to patch chapter for Korean}}%
+ \fi
+ \ifdefined\@part
+ \let\xpg@save@part@format\@part
+ \patchcmd{\@part}%
+ {\partname\nobreakspace\thepart}%
+ {\koreanTHEname\nobreakspace \thepart\nobreakspace \partname}%
+ {}%
+ {\xpg@warning{Failed to patch part for Korean}}%
+ \fi % (end \ifdefined\@part)
+ \fi % (end \ifdefined\@memptsize)
+ \fi % (end \ifdefined\sectionformat)
+ \fi % (end \ifdefined\titleformat)
+ \fi % (end \if@korean@swapheadings)
+ %
+ % Change running headers
+ \if@korean@swapheaders
+ \ifdefined\chapterformat
+ % With KOMA
+ \let\xpg@save@chaptermark@format\chaptermarkformat
+ \renewcommand*\chaptermarkformat{%
+ \IfChapterUsesPrefixLine
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \chapappifchapterprefix\ \thechapter\autodot
+ \else
+ \koreanTHEname\ \thechapter\ \chapappifchapterprefix{}%
+ \fi
+ }%
+ {\thechapter\autodot}%
+ \enskip
+ }%
+ \else % (not \ifdefined\chapterformat)
+ \ifdefined\@memptsize
+ % With memoir
+ \let\xpg@save@chaptermark@format\chaptermark
+ \patchcmd{\chaptermark}%
+ {\@chapapp\ \@nameuse{thechapter}}%
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \appendixname\ \@nameuse{thechapter}%
+ \else
+ \koreanTHEname\ \@nameuse{thechapter}\ \@chapapp
+ \fi
+ }%
+ {}%
+ {}%
+ \else % (not \ifdefined\@memptsize)
+ % With standard classes
+ \ifdefined\chaptermark
+ \let\xpg@save@chaptermark@format\chaptermark
+ \patchcmd{\chaptermark}%
+ {\@chapapp\ \thechapter}%
+ {%
+ \ifx\@chapapp\korean@appendix@chapapp
+ \appendixname\ \thechapter
+ \else
+ \koreanTHEname\ \thechapter\ \@chapapp
+ \fi
+ }%
+ {}%
+ {}%
+ \fi % (end \ifdefined\chaptermark)
+ \fi % (end \ifdefined\@memptsize)
+ \fi % (end \ifdefined\chapterformat)
+ \fi % (end \if@korean@swapheaders)
+}
+
+\def\nokorean@headingsformat{%
+ % Reset chapter and part heading
+ \ifdefined\titleformat
+ % With titlesec
+ \ifdefined\xpg@save@part@format
+ \let\@part\xpg@save@part@format
+ \fi
+ \ifdefined\chapter
+ \titleformat\chapter[display]%
+ {\@ifundefined{ttl@fil}{\raggedright}{\ttl@fil}\ttl@fonts\ttl@sizes6}%
+ {\@chapapp\space\thechapter}{.8\baselineskip}{\ttl@sizes\z@\ttl@passexplicit}%
+ \fi
+ \else % (not \ifdefined\titleformat)
+ \ifdefined\sectionformat
+ % With KOMA
+ \ifdefined\xpg@save@part@format
+ \let\partformat\xpg@save@part@format
+ \fi
+ \ifdefined\xpg@save@chap@format
+ \let\chapterformat\xpg@save@chap@format
+ \fi
+ \else
+ % With memoir and standard classes
+ \ifdefined\xpg@save@part@format
+ \let\@part\xpg@save@part@format
+ \fi
+ \ifdefined\xpg@save@chap@format
+ \let\@makechapterhead\xpg@save@chap@format
+ \fi
+ \fi % (end \ifdefined\sectionformat)
+ \fi % (end \ifdefined\titleformat)
+ %
+ % Reset headers
+ \ifdefined\chaptermarkformat
+ % With KOMA
+ \ifdefined\xpg@save@chaptermark@format
+ \let\chaptermarkformat\xpg@save@chaptermark@format
+ \fi
+ \else
+ \ifdefined\chaptermark
+ % With memoir and standard classes
+ \ifdefined\xpg@save@chaptermark@format
+ \let\chaptermark\xpg@save@chaptermark@format
+ \fi
+ \fi % (end \ifdefined\chaptermark)
+ \fi % (end \ifdefined\chapterformat)
+}
+
+\def\datekorean{%
+ \ifcase\xpg@korean@captions\relax
+ \def\today{\the\year 년 \the\month 월 \the\day 일}%
+ \else
+ \def\today{\the\year 年 \the\month 月 \the\day 日}%
+ \fi
+}
+
+\def\koreanAlph#1{\expandafter\@koreanAlph\csname c@#1\endcsname}
+\def\@koreanAlph#1{%
+ \ifcase#1\or 가\or 나\or 다\or 라\or 마\or 바\or 사\or 아\or 자\or
+ 차\or 카\or 타\or 파\or 하\else\xpg@ill@value{#1}{@koreanAlph}\fi
+}
+
+\def\koreanalph#1{\expandafter\@koreanalph\csname c@#1\endcsname}
+\def\@koreanalph#1{%
+ \ifcase#1\or ㄱ\or ㄴ\or ㄷ\or ㄹ\or ㅁ\or ㅂ\or ㅅ\or ㅇ\or ㅈ\or
+ ㅊ\or ㅋ\or ㅌ\or ㅍ\or ㅎ\else\xpg@ill@value{#1}{@koreanalph}\fi
+}
+
+\def\korean@numbers{%
+ \let\@alph\@koreanalph
+ \let\@Alph\@koreanAlph
+}
+\def\nokorean@numbers{%
+ \let\@alph\latin@alph
+ \let\@Alph\latin@Alph
+}
+\let\nokorean@globalnumbers\nokorean@numbers
+
+\ifxetex
+ \def\inlineextras@korean{%
+ \ifcase\xpg@korean@variant\relax
+ \XeTeXinterchartokenstate\z@
+ \XeTeXlinebreakpenalty 50
+ \or
+ \setvariantkoreaninterchartoks
+ \setvariantkoreancharclasses
+ \def\XPGKOhalfdim{\dimexpr.5em\relax}%
+ \XeTeXinterchartokenstate\@ne
+ \XeTeXlinebreakpenalty \z@
+ \else
+ \setvariantkoreaninterchartoks
+ \setvariantkoreancharclasses
+ \def\XPGKOhalfdim{\dimexpr.5\fontdimen\tw@\font\relax}%
+ \XeTeXinterchartokenstate\@ne
+ \XeTeXlinebreakpenalty 50
+ \fi
+ \XeTeXlinebreakskip 0pt plus.05em minus .01em
+ \XeTeXlinebreaklocale "ko"
+ }
+ \def\noextras@korean{%
+ \ifcase\xpg@korean@variant\relax
+ \else
+ \unsetvariantkoreaninterchartoks
+ \unsetvariantkoreancharclasses
+ \fi
+ \XeTeXinterchartokenstate\z@
+ \XeTeXlinebreakpenalty\z@
+ \XeTeXlinebreakskip\z@skip
+ \XeTeXlinebreaklocale "en"
+ \noextras@korean@common
+ }
+\else % luatex
+ \def\inlineextras@korean{\xpg@attr@korean\xpg@korean@variant\relax}
+ \def\noextras@korean{%
+ \unsetattribute\xpg@attr@korean
+ \noextras@korean@common
+ }
+\fi
+
+\def\blockextras@korean{%
+ \inlineextras@korean
+ \korean@headingsformat
+}
+
+\def\noextras@korean@common{%
+ \nokorean@headingsformat
+}
+
+\ifluatex % luatex
+\protected\def\inhibitglue{\hskip\z@skip}
+\ifdefined\newattribute\else
+ \let\newattribute\newluatexattribute
+ \let\unsetattribute\unsetluatexattribute
+\fi
+\newattribute\xpg@attr@korean
+\newattribute\xpg@attr@autojosa
+% user commands for Josa
+% Josa : particles in Korean grammar that immediately follow a noun or pronoun.
+% Josa might vary depending on previous character.
+\protected\def\rieul{\global\let\xpg@josa@zwang\@ne}
+\protected\def\jung {\global\let\xpg@josa@zwang\tw@}
+\protected\def\jong {\global\let\xpg@josa@zwang\thr@@}
+\protected\def\은{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 은\endgroup\xpg@reset@josa}
+\let\는\은
+\protected\def\을{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 을\endgroup\xpg@reset@josa}
+\let\를\을
+\protected\def\와{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 와\endgroup\xpg@reset@josa}
+\let\과\와
+\protected\def\가{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 가\endgroup\xpg@reset@josa}
+\protected\def\이{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 이\endgroup\xpg@reset@josa}
+\protected\def\라{\이 라}
+\protected\def\으{\begingroup\xpg@attr@autojosa\xpg@josa@zwang 으\endgroup\xpg@reset@josa}
+\protected\def\로{\으 로}
+\def\xpg@reset@josa {\global\let\xpg@josa@zwang\z@}\xpg@reset@josa
+% load lua file for korean
+\directlua{ require "polyglossia-korean" }
+% \end{macrocode}
+% \iffalse
+%</gloss-korean.ldf>
+%<*gloss-ku-Arab.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ku-Arab.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ku-Arab.ldf}[polyglossia: module for ku-Arab (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ku-Arab.ldf>
+%<*gloss-ku-Latn.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ku-Latn.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ku-Latn.ldf}[polyglossia: module for ku-Latn (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ku-Latn.ldf>
+%<*gloss-ku.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ku.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ku.ldf}[polyglossia: module for ku (kurdish)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ku.ldf>
+%<*gloss-kurdish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-kurdish.ldf}
+% \begin{macrocode}
+% Created on September 1, 2019
+% Sina Ahmadi (https://sinaahmadi.github.io/)
+\ProvidesFile{gloss-kurdish.ldf}[polyglossia: module for Kurdish]
+
+\RequireBidi
+\RequirePackage{arabicnumbers}
+\RequirePackage{farsical}
+\RequirePackage{hijrical}
+
+\PolyglossiaSetup{kurdish}{
+ bcp47=ckb,
+ script=Arabic,
+ direction=RL,
+ scripttag=arab,
+ langtag=KUR,
+ hyphennames={nohyphenation},
+ fontsetup=true,
+ localnumeral=kurdishnumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{kurdish}{ku}
+\setlanguagealias*[variant=kurmanji,script=Latin]{kurdish}{kmr-Latn}
+\setlanguagealias*[variant=sorani]{kurdish}{ckb}
+\setlanguagealias*[variant=kurmanji,script=Arabic]{kurdish}{kmr-Arab}
+\setlanguagealias*[script=Latin]{kurdish}{ku-Latn}
+\setlanguagealias*[variant=sorani,script=Arabic]{kurdish}{ckb-Arab}
+\setlanguagealias*[variant=sorani,script=Latin]{kurdish}{ckb-Latn}
+\setlanguagealias*[script=Arabic]{kurdish}{ku-Arab}
+\setlanguagealias*[variant=kurmanji]{kurdish}{kmr}
+
+% Babel aliases
+\setlanguagealias[variant=kurmanji]{kurdish}{kurmanji}
+
+\newif\if@kurdish@kurmanji
+\def\kurdish@variant{sorani}
+\define@choicekey*+{kurdish}{variant}[\xpg@val\xpg@nr]{sorani,kurmanji}[sorani]{%
+ \ifcase\xpg@nr\relax
+ % sorani:
+ \def\kurdish@variant{sorani}%
+ \@kurdish@kurmanjifalse%
+ \or
+ % kurmanji:
+ \def\kurdish@variant{kurmanji}%
+ \@kurdish@kurmanjitrue%
+ \fi
+ \kurdish@set@variety%
+ \xpg@info{Option: kurdish, variant=\xpg@val}%
+}{\xpg@warning{Unknown Kurdish variant `#1'}}
+
+\newif\if@kurdish@latin
+\newif\if@kurdish@arabic
+\define@choicekey*+{kurdish}{script}[\xpg@val\xpg@nr]{Arabic,Latin}{%
+ \ifcase\xpg@nr\relax
+ % Arabic:
+ \@kurdish@latinfalse%
+ \@kurdish@arabictrue%
+ \or
+ % Latin:
+ \@kurdish@latintrue%
+ \@kurdish@arabicfalse%
+ \fi
+ \kurdish@set@variety%
+ \xpg@info{Option: kurdish, script=\xpg@val}%
+}{\xpg@warning{Unknown Kurdish script `#1'}}
+
+
+\newif\if@western@numerals
+\newif\if@force@western@numerals
+\def\kurdish@script{arabic}
+\def\kurdish@pattern{nohyphenation}
+
+\def\kurdish@set@variety{%
+ \if@kurdish@latin% Latin explicitly set
+ \@western@numeralstrue%
+ \if@kurdish@kurmanji
+ \def\kurdish@pattern{kurmanji}%
+ \SetLanguageKeys{kurdish}{script=Latin,direction=LR,scripttag=latn,babelname=kurmanji,bcp47=kmr-Latn}%
+ \else
+ \SetLanguageKeys{kurdish}{script=Latin,direction=LR,scripttag=latn,babelname=kurdish,bcp47=ckb-Arab}%
+ \fi
+ \def\kurdish@script{latin}
+ \xpg@fontsetup@latin{kurdish}%
+ \else
+ \if@kurdish@arabic% Arabic explicitly set
+ \if@kurdish@kurmanji
+ \if@force@western@numerals\else\@western@numeralsfalse\fi%
+ \SetLanguageKeys{kurdish}{script=Arabic,direction=RL,scripttag=arab,babelname=kurmanji,bcp47=kmr-Arab}%
+ \def\kurdish@script{arabic}%
+ \else
+ \SetLanguageKeys{kurdish}{script=Arabic,direction=RL,scripttag=arab,babelname=kurdish,bcp47=ckb-Arab}%
+ \fi
+ \xpg@fontsetup@nonlatin{kurdish}%
+ \else% sorani=Arabic, kurmanji=Latin
+ \if@kurdish@kurmanji
+ \@western@numeralstrue%
+ \SetLanguageKeys{kurdish}{script=Latin,direction=LR,scripttag=latn,babelname=kurmanji,bcp47=kmr-Latn}%
+ \xpg@fontsetup@latin{kurdish}%
+ \def\kurdish@script{latin}
+ \else
+ \SetLanguageKeys{kurdish}{script=Arabic,direction=RL,scripttag=arab,babelname=kurdish,bcp47=ckb-Arab}%
+ \xpg@fontsetup@nonlatin{kurdish}%
+ \fi
+ \fi
+ \fi
+}
+
+\def\tmp@western{western}
+\define@key{kurdish}{numerals}[eastern]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@western\@western@numeralstrue\@force@western@numeralstrue\else%
+ \@western@numeralsfalse%
+ \fi%
+}
+
+%this is needed for \abjad in arabicnumbers.sty
+\def\tmp@true{true}
+\define@key{kurdish}{abjadjimnotail}[true]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@true\abjad@jim@notailtrue%
+ \else
+ \abjad@jim@notailfalse
+ \fi%
+}
+
+% NOT YET USED
+\define@key{kurdish}{locale}[default]{%
+ \def\@kurdish@locale{#1}}
+
+
+%TODO add option for CALENDAR
+
+% Register default options
+\xpg@initialize@gloss@options{kurdish}{variant=sorani,locale=default,script=Arabic,abjadjimnotail=false,numerals=eastern}
+
+\def\kurdish@language{%
+ \polyglossia@setup@language@patterns{\kurdish@pattern}%
+}%
+
+\def\kurdishNativemonth#1{\ifcase#1%
+ \or رێبه‌ندان\or ره‌شه‌مێ\or خاكه‌لێوه‌\or گوڵان\or جۆزه‌ردان\or پووشپه‌ڕ\or خه‌رمانان\or گه‌لاوێژ\or ره‌زبه‌ر\or گه‌ڵارێزان\or سه‌رماوه‌ز\or به‌فرانبار\fi}
+\def\kurdishmonth#1{\ifcase#1%
+ \or کانونی دووەم\or شوبات\or ئازار\or نیسان\or ئایار\or حوزه‌یران\or ته‌ممووز\or ئاب\or ئه‌یلوول\or تشرینی یه‌كه‌م\or تشرینی دووهه‌م\or كانوونی یه‌كه‌م\fi}
+
+%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{kurdish}{%
+ \@ensure@RTL{%
+ \kurdishnumber{\value{Hijriday}}\space\HijriMonthArabic{\value{Hijrimonth}}\space\kurdishnumber{\value{Hijriyear}}%
+ }%
+}
+
+\def\captionskurdish@sorani@arabic{%
+ \def\prefacename{\@ensure@RTL{پێشه‌كی}}%
+ \def\refname{\@ensure@RTL{سه‌رچاوه‌کان}}%
+ \def\abstractname{\@ensure@RTL{پوخته‌}}%
+ \def\bibname{\@ensure@RTL{کتێبنامه‌}}%
+ \def\chaptername{\@ensure@RTL{به‌ندی}}%
+ \def\appendixname{\@ensure@RTL{پاشکۆ}}%
+ \def\contentsname{\@ensure@RTL{نێوه‌ڕۆک}}%
+ \def\listfigurename{\@ensure@RTL{لیستی وێنه‌کان}}%
+ \def\listtablename{\@ensure@RTL{لیستی خشته‌کان}}%
+ \def\indexname{\@ensure@RTL{پێنوێن}}%
+ \def\figurename{\@ensure@RTL{وێنه‌}}%
+ \def\tablename{\@ensure@RTL{خشتە}}%
+ \def\partname{\@ensure@RTL{به‌شی}}%
+ \def\enclname{\@ensure@RTL{هاوپێچ}}%
+ \def\ccname{\@ensure@RTL{روونووس}}%
+ \def\headtoname{\@ensure@RTL{بۆ}}%
+ \def\pagename{\@ensure@RTL{لاپه‌ڕه‌}}%
+ \def\seename{\@ensure@RTL{چاو لێکه‌ن}}%
+ \def\alsoname{\@ensure@RTL{هه‌روه‌ها چاو لێکه‌ن}}%
+ \def\proofname{\@ensure@RTL{سەلماندن}}%
+ \def\glossaryname{\@ensure@RTL{فه‌رهه‌نگۆک}}%
+}
+
+\def\captionskurdish@sorani@latin{%
+ \def\prefacename{Pêşekî}%
+ \def\refname{Serçawekan}%
+ \def\abstractname{Puxte}%
+ \def\bibname{Kitêbname}%
+ \def\chaptername{Bendî}%
+ \def\appendixname{Paşko}%
+ \def\contentsname{Nêwerrok}%
+ \def\listfigurename{Lîstî Wênekan}%
+ \def\listtablename{Lîstî Xiştekan}%
+ \def\indexname{Pêrrist}%
+ \def\figurename{Wêney}%
+ \def\tablename{Xiştey}%
+ \def\partname{Beşî}%
+ \def\enclname{Hawpêç}%
+ \def\ccname{Rûnûs}%
+ \def\headtoname{Bo}%
+ \def\pagename{Laperre}%
+ \def\seename{Çaw lêken}%
+ \def\alsoname{Herweha çaw lêken}%
+ \def\proofname{Selmandin}%
+ \def\glossaryname{Ferhengok}%
+}
+
+\def\captionskurdish@kurmanji@latin{%
+ \def\prefacename{Peşgotin}%
+ \def\refname{Pirtuken bijartî}%
+ \def\abstractname{Kurtebîr}%
+ \def\bibname{Çavkanîya Pirtukan}%
+ \def\chaptername{Serê}%
+ \def\appendixname{Tebînîya}%
+ \def\contentsname{Navêrok}%
+ \def\listfigurename{Hejmara Dimena}%
+ \def\listtablename{Hejmara Kevalen}%
+ \def\indexname{Endeks}%
+ \def\figurename{Dimenê}%
+ \def\tablename{Kevala}%
+ \def\partname{Bêşa}%
+ \def\enclname{Dumahik}%
+ \def\ccname{Belavker}%
+ \def\headtoname{Ji bo}%
+ \def\pagename{Rûpelê}%
+ \def\seename{binêra}%
+ \def\alsoname{le vêya ji binêra}%
+ \def\proofname{Delîl}%
+ \def\glossaryname{Çavkanîya lêkolînê}%
+}
+
+\def\captionskurdish@kurmanji@arabic{%
+ \def\prefacename{\@ensure@RTL{پێشگۆتن}}%
+ \def\refname{\@ensure@RTL{پرتووکێن بژارتی}}%
+ \def\abstractname{\@ensure@RTL{کورتەبیر}}%
+ \def\bibname{\@ensure@RTL{چاڤکانییا پرتووکان}}%
+ \def\chaptername{\@ensure@RTL{سەرێ}}%
+ \def\appendixname{\@ensure@RTL{پاشکۆ}}%
+ \def\contentsname{\@ensure@RTL{ناڤێرۆک}}%
+ \def\listfigurename{\@ensure@RTL{هەژمارا دیمەنا}}%
+ \def\listtablename{\@ensure@RTL{هەژمارا کەڤالێن}}%
+ \def\indexname{\@ensure@RTL{پێرست}}%
+ \def\figurename{\@ensure@RTL{دیمەنێ}}%
+ \def\tablename{\@ensure@RTL{کەڤالا}}%
+ \def\partname{\@ensure@RTL{بەشا}}%
+ \def\enclname{\@ensure@RTL{دوماهک}}%
+ \def\ccname{\@ensure@RTL{بەلاڤکەر}}%
+ \def\headtoname{\@ensure@RTL{ژ بۆ}}%
+ \def\pagename{\@ensure@RTL{رووپەلێ}}%
+ \def\seename{\@ensure@RTL{بنێرا}}%
+ \def\alsoname{\@ensure@RTL{لە ڤێیا ژ بنێرا}}%
+ \def\proofname{\@ensure@RTL{دەلیل}}%
+ \def\glossaryname{\@ensure@RTL{چاڤکانییا لێکۆلینێ}}%
+}
+
+\def\captionskurdish{%
+ \csname captionskurdish@\kurdish@variant @\kurdish@script\endcsname%
+}
+
+\def\datekurdish@sorani@arabic{%
+ \def\today{\@ensure@RTL{\kurdishnumber\day{ی}\space\kurdishmonth{\month}{ی}\space\kurdishnumber\year}}%
+}
+
+\def\datekurdish@sorani@latin{%
+ \def\today{%
+ \number\day.~\ifcase\month\or
+ \januaryname\or \februaryname\or \marchname\or \aprilname\or
+ \mayname\or \junename\or \julyname\or \augustname\or
+ \septembername\or \octobername\or \novembername\or
+ \decembername\or \@ctrerr\fi~\number\year}%
+ \def\ontoday{%
+ \number\day’ê~\ifcase\month\or
+ \januaryname\or \februaryname\or \marchname\or \aprilname\or
+ \mayname\or \junename\or \julyname\or \augustname\or
+ \septembername\or \octobername\or \novembername\or
+ \decembername\or \@ctrerr\fi ê~\number\year}%
+ \def\januaryname{Kanûnî Yekem}%
+ \def\februaryname{Şubat}%
+ \def\marchname{Azar}%
+ \def\aprilname{Nîsan}%
+ \def\mayname{Ayar}%
+ \def\junename{Huzeyran}%
+ \def\julyname{Temmûz}%
+ \def\augustname{Ab}%
+ \def\septembername{Eylûl}%
+ \def\octobername{Tişrînî Yekem}%
+ \def\novembername{Tişrînî Dûhem}%
+ \def\decembername{Kanûnî Dûhem}%
+}
+
+\def\datekurdish@kurmanji@latin{%
+ \def\today{%
+ \number\day.~\ifcase\month\or
+ \januaryname\or \februaryname\or \marchname\or \aprilname\or
+ \mayname\or \junename\or \julyname\or \augustname\or
+ \septembername\or \octobername\or \novembername\or
+ \decembername\or \@ctrerr\fi~\number\year}%
+ \def\ontoday{%
+ \number\day’ê~\ifcase\month\or
+ \januaryname\or \februaryname\or \marchname\or \aprilname\or
+ \mayname\or \junename\or \julyname\or \augustname\or
+ \septembername\or \octobername\or \novembername\or
+ \decembername\or \@ctrerr\fi ê~\number\year}%
+ \def\januaryname{Çileya Paşîn}%
+ \def\februaryname{Sibat}%
+ \def\marchname{Adar}%
+ \def\aprilname{Nîsan}%
+ \def\mayname{Gulan}%
+ \def\junename{Hezîran}%
+ \def\julyname{Tîrmeh}%
+ \def\augustname{Tebax}%
+ \def\septembername{Îlon}%
+ \def\octobername{Çiriya Pêşîn}%
+ \def\novembername{Çiriya Paşîn}%
+ \def\decembername{Çileya Pêşîn}%
+}
+
+\def\datekurdish@kurmanji@arabic{%
+ \datekurdish@sorani@arabic% FIXME: correct?
+}
+
+% TODO: babel-kurmanji has these "alternative" month names
+% How to integrate them ("montnames=alternative" is not really good)?
+% It seems the month name question is all but straightforward:
+% https://en.wikipedia.org/wiki/Kurdish_calendar#Names
+%\def\datekurdish@kurmanji@alternate{%
+% \datekurdish@kurmanji
+% \def\januaryname{Rêbendan}%
+% \def\februaryname{Reşemih}%
+% \def\aprilname{Cotan}% % Avrêl
+% \def\junename{Pûşper}%
+% \def\augustname{Gelavêj}%
+% \def\septembername{Gelarezan}% % Rezber
+% \def\octobername{Kewçêr}%
+% \def\novembername{Sermawez}%
+% \def\decembername{Berfandar}%
+%}
+
+\def\datekurdish{%
+ \csname datekurdish@\kurdish@variant @\kurdish@script\endcsname%
+}
+
+\newcommand{\kurdishnumerals}[2]{\kurdishnumber{#2}}
+
+\def\kurdishnumber#1{%
+ \if@western@numerals
+ \number#1%
+ \else
+ \xpg@if@char@available{06F0}%
+ {\farsidigits{\number#1}}%
+ {\arabicdigits{\number#1}}%
+ \fi
+}
+
+%\def\kurdishnum#1{\expandafter\kurdishnumber\csname c@#1\endcsname}
+%\def\kurdishbracenum#1{(\expandafter\kurdishnumber\csname c@#1\endcsname)}
+%\def\kurdishornatebracenum#1{\char"FD3E\expandafter\kurdishnumber\csname c@#1\endcsname\char"FD3F}
+%\def\kurdishalph#1{\expandafter\@farsialph\csname c@#1\endcsname}
+
+\def\kurdish@numbers{%
+ \if@western@numerals%
+ \else%
+ \let\@alph\abjad%
+ \let\@Alph\abjad%
+ \fi%
+}
+
+\def\nokurdish@numbers{%
+ \let\@alph\@latinalph%
+ \let\@Alph\@latinAlph%
+}
+
+\def\kurdish@globalnumbers{%
+ \let\@arabic\kurdishnumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nokurdish@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+ \renewcommand\thefootnote{\protect\number{\c@footnote}}%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@kurdish{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@kurdish{%
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-kurdish.ldf>
+%<*gloss-kurmanji.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-kurmanji.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-kurmanji.ldf}[polyglossia: module for kurmanji kurdish]
+
+% We provide this gloss for babel compatibility.
+
+\xpg@load@master@language{kurdish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-kurmanji.ldf>
+%<*gloss-la-x-classic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-la-x-classic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-la-xclassic.ldf}[polyglossia: module for la-xclassic (latin)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-la-x-classic.ldf>
+%<*gloss-la-x-ecclesia.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-la-x-ecclesia.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-la-xecclesiastic.ldf}[polyglossia: module for la-xecclesiastic (latin)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-la-x-ecclesia.ldf>
+%<*gloss-la-x-medieval.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-la-x-medieval.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-la-xmedieval.ldf}[polyglossia: module for la-xmedieval (latin)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-la-x-medieval.ldf>
+%<*gloss-la.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-la.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-la.ldf}[polyglossia: module for la (latin)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-la.ldf>
+%<*gloss-lao.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-lao.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-lao.ldf}[polyglossia: module for Lao]
+\ifluatex
+ \xpg@warning{Lao is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\PolyglossiaSetup{lao}{
+ bcp47=lo,
+ script=Lao,
+ scripttag=lao,
+ langtag=LAO,
+ hyphennames={lao},
+ hyphenmins={1,1},
+ fontsetup=true,
+ localnumeral=laonumerals
+ %TODO localalph={xxx@alph,xxx@Alph}
+ %TODO localdigits=laonumber
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{lao}{lo}
+
+\newif\if@lao@numerals
+\def\tmp@lao{lao}
+\define@key{lao}{numerals}[arabic]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@lao\@lao@numeralstrue\else
+ \@lao@numeralsfalse\fi
+}
+
+% Register default options
+\xpg@initialize@gloss@options{lao}{numerals=arabic}
+
+% Translations provided by Brian Wilson <bountonw at gmail.com>
+\def\captionslao{%
+ \def\prefacename{ຄໍານໍາ}%
+ \def\refname{ໜັງສືອ້າງອີງ}%
+ \def\abstractname{ບົດຫຍໍ້ຄວາມ}%
+ \def\bibname{ເອກະສານອ້າງອີງ}%
+ \def\chaptername{ບົດທີ}%
+ \def\appendixname{ພາກຄັດຕິດ}%
+ \def\contentsname{ສາລະບານ}%
+ \def\listfigurename{ສາລະບານຮູບ}%
+ \def\listtablename{ສາລະບານຕາຕະລາງ}%
+ \def\indexname{ດັດຊະນີ}%
+ \def\figurename{ຮູບທີ}%
+ \def\tablename{ຕາຕະລາງທີ}%
+ \def\partname{ພາກ}%
+ \def\pagename{ໜ້າ}%
+ \def\seename{ອ່ານ}%
+ \def\alsoname{ອ່ານເພີ່ມ}%
+ \def\enclname{ເອກະສານປະກອບ}%
+ \def\ccname{ສໍາເນົາເຖິງ}%
+ \def\headtoname{ຮຽນ}%
+ \def\proofname{ຂໍ້ພິສູດ}%
+ \def\glossaryname{ປະມວນສັບ}%
+}
+\def\datelao{%
+ \def\lao@month{%
+ \ifcase\month\or
+ ມັງກອນ\or
+ ກຸມພາ\or
+ ມີນາ\or
+ ເມສາ\or
+ ພຶດສະພາ\or
+ ມິຖຸນາ\or
+ ກໍລະກົດ\or
+ ສິງຫາ\or
+ ກັນຍາ\or
+ ຕຸລາ\or
+ ພະຈິກ\or
+ ທັນວາ\fi}%
+ \def\today{\laonumber\day \space \lao@month \space \laonumber\year}%
+}
+
+\def\laodigits#1{\expandafter\@lao@digits #1@}
+\def\@lao@digits#1{%
+ \ifx @#1% then terminate
+ \else
+ \ifx0#1໐\else\ifx1#1໑\else\ifx2#1໒\else\ifx3#1໓\else\ifx4#1໔\else\ifx5#1໕\else\ifx6#1໖\else\ifx7#1໗\else\ifx8#1໘\else\ifx9#1໙\else#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \expandafter\@lao@digits
+ \fi
+}
+
+\newcommand{\laonumerals}[2]{\laonumber{#2}}
+
+\def\laonumber#1{%
+ \if@lao@numerals
+ \laodigits{\number#1}%
+ \else
+ \number#1%
+ \fi}
+
+\def\lao@globalnumbers{%
+ \let\orig@arabic\@arabic%
+ \let\@arabic\laonumber%
+ \renewcommand{\thefootnote}{\localnumeral*{footnote}}%
+}
+\def\nolao@globalnumbers{%
+ \let\@arabic\orig@arabic%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-lao.ldf>
+%<*gloss-latex.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latex.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latex.ldf}[polyglossia: module for default language]
+
+\PolyglossiaSetup{latex}{
+ hyphennames={english},
+ hyphenmins={2,3},
+ langtag=ENG,
+ fontsetup=true,
+}
+
+\def\captionslatex{%
+ \def\prefacename{Preface}%
+ \def\refname{References}%
+ \def\abstractname{Abstract}%
+ \def\bibname{Bibliography}%
+ \def\chaptername{Chapter}%
+ \def\appendixname{Appendix}%
+ \def\contentsname{Contents}%
+ \def\listfigurename{List of Figures}%
+ \def\listtablename{List of Tables}%
+ \def\indexname{Index}%
+ \def\figurename{Figure}%
+ \def\tablename{Table}%
+ \def\partname{Part}%
+ \def\enclname{encl}%
+ \def\ccname{cc}%
+ \def\headtoname{To}%
+ \def\pagename{Page}%
+ \def\seename{see}%
+ \def\alsoname{see also}%
+ \def\proofname{Proof}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-latex.ldf>
+%<*gloss-latin.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latin.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latin.ldf}[polyglossia: module for Latin v.2.3 2020-03-08]
+
+\ExplSyntaxOn
+
+\PolyglossiaSetup {latin}
+ {
+ bcp47 = la,
+ hyphenmins = {2,2},
+ frenchspacing = true,
+ fontsetup = true,
+ langtag = LAT
+ }
+
+% BCP-47 compliant aliases
+\setlanguagealias*{latin}{la}
+\setlanguagealias*[variant=classic]{latin}{la-x-classic}
+\setlanguagealias*[variant=ecclesiastic]{latin}{la-x-ecclesia}
+\setlanguagealias*[variant=medieval]{latin}{la-x-medieval}
+
+% Babel aliases
+\setlanguagealias[variant=classic]{latin}{classiclatin}
+\setlanguagealias[variant=ecclesiastic]{latin}{ecclesiasticlatin}
+\setlanguagealias[variant=medieval]{latin}{medievallatin}
+
+
+%%%%% Variables and commands concerning spelling
+
+\bool_new:N \l_polyglossia_latin_use_j_bool
+\bool_new:N \l_polyglossia_latin_use_v_bool
+\bool_new:N \l_polyglossia_latin_use_digraphs_bool
+\bool_new:N \l_polyglossia_latin_capitalize_month_bool
+
+\cs_new:Npn \polyglossia_latin_classical_character_codes:
+ {
+ \char_set_lccode:nn {`\V} {`\u}
+ \char_set_uccode:nn {`\u} {`\V}
+ \char_set_uccode:nn {`\ú} {`\V}
+ \char_set_uccode:nn {`\ū} {`\V}
+ \char_set_uccode:nn {`\ŭ} {`\V}
+ }
+
+\cs_new:Npn \polyglossia_latin_modern_character_codes:
+ {
+ \char_set_lccode:nn {`\V} {`\v}
+ \char_set_uccode:nn {`\u} {`\U}
+ \char_set_uccode:nn {`\ú} {`\Ú}
+ \char_set_uccode:nn {`\ū} {`\Ū}
+ \char_set_uccode:nn {`\ŭ} {`\Ŭ}
+ }
+
+
+%%%%% Messages and commands concerning hyphenation
+
+\msg_new:nnn {polyglossia} {latin / missing modern patterns}
+ {
+ The~hyphenation~patterns~for~modern~Latin~were~not~found~\msg_line_context:.
+ }
+
+\msg_new:nnn {polyglossia} {latin / missing patterns}
+ {
+ The~"#1"~hyphenation~patterns~were~not~found~\msg_line_context:.~
+ I~will~use~the~patterns~for~modern~Latin~instead.
+ }
+
+\cs_new:Npn \polyglossia_latin_use_modern_patterns:
+ {
+ \xpg@ifdefined {latin}
+ {
+ \def \latin@language
+ {
+ \polyglossia@setup@language@patterns {latin}
+ \str_case:Vn \l_polyglossia_latin_variant_str
+ {
+ {classic} { \adddialect \l@classiclatin \l@latin }
+ {medieval} { \adddialect \l@medievallatin \l@latin }
+ {ecclesiastic} { \adddialect \l@ecclesiasticlatin \l@latin }
+ }
+ }
+ }
+ {
+ \msg_warning:nn {polyglossia} {latin / missing modern patterns}
+ \str_case:Vn \l_polyglossia_latin_variant_str
+ {
+ {classic} { \adddialect \l@classiclatin \l@nohyphenation }
+ {medieval} { \adddialect \l@medievallatin \l@nohyphenation }
+ {modern} { \adddialect \l@latin \l@nohyphenation }
+ {ecclesiastic} { \adddialect \l@ecclesiasticlatin \l@nohyphenation }
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_set_patterns:n #1
+% #1 may be "classiclatin" or "liturgicallatin"
+ {
+ \xpg@ifdefined {#1}
+ {
+ \def \latin@language
+ {
+ \polyglossia@setup@language@patterns {#1}
+ \str_case:Vn \l_polyglossia_latin_variant_str
+ {
+ {classic} {
+ \str_if_eq:nnF {#1} {classiclatin}
+ {
+ \adddialect \l@classiclatin { \use:c {l@#1} }
+ }
+ }
+ {medieval} { \adddialect \l@medievallatin { \use:c {l@#1} } }
+ {modern} { \adddialect \l@latin { \use:c {l@#1} } }
+ {ecclesiastic} { \adddialect \l@ecclesiasticlatin { \use:c {l@#1} } }
+ }
+ }
+ }
+ {
+ \msg_warning:nnn {polyglossia} {latin / missing patterns} {#1}
+ \polyglossia_latin_use_modern_patterns:
+ }
+ }
+
+
+%%%%% Settings for the spacing of the punctuation for ecclesiastical Latin
+
+\bool_new:N \g_polyglossia_latin_punctuation_spacing_bool
+
+\sys_if_engine_luatex:TF
+ {
+ \directlua { require('polyglossia-latin') }
+ }
+ {
+ \newXeTeXintercharclass \g_polyglossia_latin_question_exclamation_class
+ \newXeTeXintercharclass \g_polyglossia_latin_colon_semicolon_class
+ \newXeTeXintercharclass \g_polyglossia_latin_opening_guillemet_class
+ \newXeTeXintercharclass \g_polyglossia_latin_closing_guillemet_class
+ \newXeTeXintercharclass \g_polyglossia_latin_opening_bracket_class
+ \newXeTeXintercharclass \g_polyglossia_latin_closing_bracket_class
+
+ \cs_new:Npn \polyglossia_latin_insert_punctuation_space:
+ {
+ \nobreak
+ \skip_horizontal:n { 0.08333 \fontdimen6 \font } % 1/12 quad
+ }
+ \cs_new:Npn \polyglossia_latin_replace_preceding_space:
+ {
+ \dim_compare:nNnT {\lastskip} > {\c_zero_dim} {\unskip}
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ \cs_new:Npn \polyglossia_latin_replace_following_space:
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ \ignorespaces
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_punctuation_spacing:
+ {
+ \sys_if_engine_luatex:TF
+ {
+ \directlua { polyglossia.activate_latin_punct() }
+ }
+ {
+ \XeTeXinterchartokenstate = 1
+ \XeTeXcharclass `\! \g_polyglossia_latin_question_exclamation_class
+ \XeTeXcharclass `\? \g_polyglossia_latin_question_exclamation_class
+ \XeTeXcharclass `\‼ \g_polyglossia_latin_question_exclamation_class
+ \XeTeXcharclass `\⁇ \g_polyglossia_latin_question_exclamation_class
+ \XeTeXcharclass `\⁈ \g_polyglossia_latin_question_exclamation_class
+ \XeTeXcharclass `\⁉ \g_polyglossia_latin_question_exclamation_class
+ \XeTeXcharclass `\‽ \g_polyglossia_latin_question_exclamation_class
+ \XeTeXcharclass `\; \g_polyglossia_latin_colon_semicolon_class
+ \XeTeXcharclass `\: \g_polyglossia_latin_colon_semicolon_class
+ \XeTeXcharclass `\« \g_polyglossia_latin_opening_guillemet_class
+ \XeTeXcharclass `\» \g_polyglossia_latin_closing_guillemet_class
+ \XeTeXcharclass `\‹ \g_polyglossia_latin_opening_guillemet_class
+ \XeTeXcharclass `\› \g_polyglossia_latin_closing_guillemet_class
+ \XeTeXcharclass `\( \g_polyglossia_latin_opening_bracket_class
+ \XeTeXcharclass `\) \g_polyglossia_latin_closing_bracket_class
+ \XeTeXcharclass `\[ \g_polyglossia_latin_opening_bracket_class
+ \XeTeXcharclass `\] \g_polyglossia_latin_closing_bracket_class
+ \XeTeXcharclass `\{ \g_polyglossia_latin_opening_bracket_class
+ \XeTeXcharclass `\} \g_polyglossia_latin_closing_bracket_class
+ \XeTeXcharclass `\⟨ \g_polyglossia_latin_opening_bracket_class
+ \XeTeXcharclass `\⟩ \g_polyglossia_latin_closing_bracket_class
+
+ % question or exclamation mark followed by a closing guillemet
+ \XeTeXinterchartoks \g_polyglossia_latin_question_exclamation_class \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % question or exclamation mark followed by a colon or semicolon
+ \XeTeXinterchartoks \g_polyglossia_latin_question_exclamation_class \g_polyglossia_latin_colon_semicolon_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % colon or semicolon followed by a closing guillemet
+ \XeTeXinterchartoks \g_polyglossia_latin_colon_semicolon_class \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing bracket followed by a question or exclamation mark
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_bracket_class \g_polyglossia_latin_question_exclamation_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing bracket followed by a colon or semicolon
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_bracket_class \g_polyglossia_latin_colon_semicolon_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing bracket followed by a closing guillemet
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_bracket_class \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % opening guillemet followed by a space
+ \XeTeXinterchartoks \g_polyglossia_latin_opening_guillemet_class \xpg@boundaryclass =
+ {
+ \polyglossia_latin_replace_following_space:
+ }
+ % opening guillemet followed by an opening guillemet
+ \XeTeXinterchartoks \g_polyglossia_latin_opening_guillemet_class \g_polyglossia_latin_opening_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % opening guillemet followed by an ordinary character
+ \XeTeXinterchartoks \g_polyglossia_latin_opening_guillemet_class \z@ =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing guillemet followed by a closing guillemet
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_guillemet_class \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing guillemet followed by a question or exclamation mark
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_guillemet_class \g_polyglossia_latin_question_exclamation_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % closing guillemet followed by a colon or semicolon
+ \XeTeXinterchartoks \g_polyglossia_latin_closing_guillemet_class \g_polyglossia_latin_colon_semicolon_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % space followed by a question or exclamation mark
+ \XeTeXinterchartoks \xpg@boundaryclass \g_polyglossia_latin_question_exclamation_class =
+ {
+ \polyglossia_latin_replace_preceding_space:
+ }
+ % space followed by a colon or semicolon
+ \XeTeXinterchartoks \xpg@boundaryclass \g_polyglossia_latin_colon_semicolon_class =
+ {
+ \polyglossia_latin_replace_preceding_space:
+ }
+ % space followed by closing guillemet
+ \XeTeXinterchartoks \xpg@boundaryclass \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_replace_preceding_space:
+ }
+ % ordinary character followed by a question or exclamation mark
+ \XeTeXinterchartoks \z@ \g_polyglossia_latin_question_exclamation_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % ordinary character followed by a colon or semicolon
+ \XeTeXinterchartoks \z@ \g_polyglossia_latin_colon_semicolon_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ % ordinary character followed by closing guillemet
+ \XeTeXinterchartoks \z@ \g_polyglossia_latin_closing_guillemet_class =
+ {
+ \polyglossia_latin_insert_punctuation_space:
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_no_punctuation_spacing:
+ {
+ \sys_if_engine_luatex:TF
+ {
+ \directlua { polyglossia.deactivate_latin_punct() }
+ }
+ {
+ \XeTeXcharclass `\! \z@
+ \XeTeXcharclass `\? \z@
+ \XeTeXcharclass `\‼ \z@
+ \XeTeXcharclass `\⁇ \z@
+ \XeTeXcharclass `\⁈ \z@
+ \XeTeXcharclass `\⁉ \z@
+ \XeTeXcharclass `\‽ \z@
+ \XeTeXcharclass `\; \z@
+ \XeTeXcharclass `\: \z@
+ \XeTeXcharclass `\« \z@
+ \XeTeXcharclass `\» \z@
+ \XeTeXcharclass `\‹ \z@
+ \XeTeXcharclass `\› \z@
+ \XeTeXcharclass `\( \z@
+ \XeTeXcharclass `\) \z@
+ \XeTeXcharclass `\[ \z@
+ \XeTeXcharclass `\] \z@
+ \XeTeXcharclass `\{ \z@
+ \XeTeXcharclass `\} \z@
+ \XeTeXcharclass `\⟨ \z@
+ \XeTeXcharclass `\⟩ \z@
+ \XeTeXinterchartokenstate = 0
+ }
+ }
+
+
+%%%%% Messages and commands concerning footnotes
+
+% Save original footnote definition
+% Do this at the end of the preamble to catch other
+% packages' footnote changes (#391)
+\AtEndPreamble{%
+ \cs_if_exist:NT \@makefntext
+ {
+ \cs_set_eq:NN \polyglossia_latin_original_footnote:n \@makefntext
+ }
+}
+
+% This is the footnote style as defined by the "ecclesiastic" package.
+\cs_new:Npn \polyglossia_latin_variant_footnote:n #1
+ {
+ \parindent 1em
+ \noindent
+ \hbox { \normalfont \@thefnmark . }
+ \enspace #1
+ }
+
+\msg_new:nnn {polyglossia} {latin / ineffective footnote option}
+ {
+ The~option~"ecclesiasticfootnotes"~is~ineffective~\msg_line_context:
+ \c_space_tl as~Latin~is~not~the~main~language.
+ }
+
+\cs_new:Npn \polyglossia_latin_apply_footnote_option:
+ {
+ \str_if_eq:VnTF \xpg@main@language {latin}
+ {
+ \cs_if_exist:NT \@makefntext
+ {
+ \iflatin@ecclesiasticfootnotes
+ \let \@makefntext \polyglossia_latin_variant_footnote:n
+ \else
+ \let \@makefntext \polyglossia_latin_original_footnote:n
+ \fi
+ }
+ }
+ {
+ \iflatin@ecclesiasticfootnotes
+ \msg_warning:nn {polyglossia} {latin / ineffective footnote option}
+ \fi
+ }
+ }
+
+\define@boolkey {latin} [latin@] {ecclesiasticfootnotes} [true]
+ {
+ \token_if_eq_meaning:NNTF \@onlypreamble \@notprerr
+ {
+ % within the document
+ \polyglossia_latin_apply_footnote_option:
+ }
+ {
+ % within the preamble
+ % The application of the option has to be postponed as the main
+ % language may be undefined when the option is called.
+ \AtBeginDocument { \polyglossia_latin_apply_footnote_option: }
+ }
+ }
+
+
+%%%%% Language variants: classic, medieval, modern, and ecclesiastic
+
+\str_new:N \l_polyglossia_latin_variant_str
+
+\msg_new:nnn {polyglossia} {latin / language variant}
+ {
+ Activating~Latin~language~variant~"#1"~\msg_line_context:.
+ }
+
+\msg_new:nnn {polyglossia} {latin / illegal language variant}
+ {
+ The~Latin~language~variant~"#1"~is~undefined~\msg_line_context:.
+ }
+
+\cs_new:Npn \polyglossia_latin_classic_settings:
+ {
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \bool_set_false:N \l_polyglossia_latin_use_v_bool
+ \bool_set_false:N \l_polyglossia_latin_use_digraphs_bool
+ \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
+ \bool_set_false:N \l_polyglossia_latin_punctuation_spacing_bool
+ \str_set:Nn \l_polyglossia_latin_variant_str {classic}
+ \SetLanguageKeys {latin} { babelname = classiclatin, bcp47 = la-x-classic }
+ \polyglossia_latin_set_patterns:n {classiclatin}
+ }
+
+\cs_new:Npn \polyglossia_latin_medieval_settings:
+ {
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \bool_set_false:N \l_polyglossia_latin_use_v_bool
+ \bool_set_true:N \l_polyglossia_latin_use_digraphs_bool
+ \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
+ \bool_set_false:N \l_polyglossia_latin_punctuation_spacing_bool
+ \str_set:Nn \l_polyglossia_latin_variant_str {medieval}
+ \SetLanguageKeys {latin} { babelname = medievallatin, bcp47 = la-x-medieval }
+ \polyglossia_latin_use_modern_patterns:
+ }
+
+\cs_new:Npn \polyglossia_latin_modern_settings:
+ {
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \bool_set_true:N \l_polyglossia_latin_use_v_bool
+ \bool_set_false:N \l_polyglossia_latin_use_digraphs_bool
+ \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
+ \bool_set_false:N \l_polyglossia_latin_punctuation_spacing_bool
+ \str_set:Nn \l_polyglossia_latin_variant_str {modern}
+ \SetLanguageKeys {latin} { babelname = latin, bcp47 = la }
+ \polyglossia_latin_use_modern_patterns:
+ }
+
+\cs_new:Npn \polyglossia_latin_ecclesiastic_settings:
+ {
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \bool_set_true:N \l_polyglossia_latin_use_v_bool
+ \bool_set_true:N \l_polyglossia_latin_use_digraphs_bool
+ \bool_set_false:N \l_polyglossia_latin_capitalize_month_bool
+ \bool_set_true:N \l_polyglossia_latin_punctuation_spacing_bool
+ \str_set:Nn \l_polyglossia_latin_variant_str {ecclesiastic}
+ \SetLanguageKeys {latin} { babelname = ecclesiasticlatin, bcp47 = la-x-ecclesia }
+ \polyglossia_latin_use_modern_patterns:
+ }
+
+\define@key{latin}{variant}
+ {
+ \str_case:nnF {#1}
+ {
+ {classic}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {classic}
+ \polyglossia_latin_classic_settings:
+ }
+ {medieval}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {medieval}
+ \polyglossia_latin_medieval_settings:
+ }
+ {modern}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {modern}
+ \polyglossia_latin_modern_settings:
+ }
+ {ecclesiastic}
+ {
+ \msg_info:nnn {polyglossia} {latin / language variant} {ecclesiastic}
+ \polyglossia_latin_ecclesiastic_settings:
+ }
+ }
+ {
+ \msg_warning:nnn {polyglossia} {latin / illegal language variant} {#1}
+ }
+ }
+
+
+%%%%% Boolean options concerning spelling
+
+\define@boolkey{latin}[latin@]{usej}[true]
+ {
+ \iflatin@usej
+ \bool_set_true:N \l_polyglossia_latin_use_j_bool
+ \else
+ \bool_set_false:N \l_polyglossia_latin_use_j_bool
+ \fi
+ }
+
+\define@boolkey{latin}[latin@]{capitalizemonth}[true]
+ {
+ \iflatin@capitalizemonth
+ \bool_set_true:N \l_polyglossia_latin_capitalize_month_bool
+ \else
+ \bool_set_false:N \l_polyglossia_latin_capitalize_month_bool
+ \fi
+ }
+
+
+%%%%% Hyphenation variants: classic, liturgical, and modern
+
+\msg_new:nnn {polyglossia} {latin / hyphenation variant}
+ {
+ Activating~hyphenation~patterns~for~#1~Latin~\msg_line_context:.
+ }
+
+\msg_new:nnn {polyglossia} {latin / illegal hyphenation variant}
+ {
+ The~Latin~hyphenation~variant~"#1"~is~undefined~\msg_line_context:.
+ }
+
+\define@key {latin} {hyphenation}
+ {
+ \str_case:nnTF {#1}
+ {
+ {classic} { \polyglossia_latin_set_patterns:n {classiclatin} }
+ {liturgical} { \polyglossia_latin_set_patterns:n {liturgicallatin} }
+ {modern} { \polyglossia_latin_use_modern_patterns: }
+ }
+ {
+ \msg_info:nnn {polyglossia} {latin / hyphenation variant} {#1}
+ }
+ {
+ \msg_warning:nnn {polyglossia} {latin / illegal hyphenation variant} {#1}
+ }
+ }
+
+
+%%%%% Latin captions and date
+
+\def \captionslatin
+ {
+ \def \prefacename
+ {
+ \bool_if:NTF \l_polyglossia_latin_use_digraphs_bool {Præfatio} {Praefatio}
+ }
+ \def \refname {Conspectus~librorum}
+ \def \abstractname {Summarium}
+ \def \bibname {Conspectus~librorum}
+ \def \chaptername {Caput}
+ \def \appendixname {Additamentum}
+ \def \contentsname {Index}
+ \def \listfigurename {Conspectus~descriptionum}
+ \def \listtablename {Conspectus~tabularum}
+ \def \indexname {Index~rerum~notabilium}
+ \def \figurename {Descriptio}
+ \def \tablename {Tabula}
+ \def \partname {Pars}
+ \def \enclname {Additur}
+ \def \ccname {Exemplar}
+ \def \headtoname {\ignorespaces}
+ \def \pagename {charta}
+ \def \seename {cfr.}
+ \def \alsoname {cfr.}
+ \def \proofname {Demonstratio}
+ \def \glossaryname {Glossarium}
+ }
+
+\cs_new:Npn \polyglossia_latin_month_name:
+ {
+ \str_set:Nx \l_tmpa_str
+ {
+ \int_case:nn { \month }
+ {
+ {1} { \bool_if:NTF \l_polyglossia_latin_use_j_bool {januarii} {ianuarii} }
+ {2} {februarii}
+ {3} {martii}
+ {4} {aprilis}
+ {5} { \bool_if:NTF \l_polyglossia_latin_use_j_bool {maji} {maii} }
+ {6} { \bool_if:NTF \l_polyglossia_latin_use_j_bool {junii} {iunii} }
+ {7} { \bool_if:NTF \l_polyglossia_latin_use_j_bool {julii} {iulii} }
+ {8} {augusti}
+ {9} {septembris}
+ {10} {octobris}
+ {11} { \bool_if:NTF \l_polyglossia_latin_use_v_bool {novembris} {nouembris} }
+ {12} {decembris}
+ }
+ }
+ \bool_if:NTF \l_polyglossia_latin_capitalize_month_bool
+ {
+ \tl_mixed_case:n { \l_tmpa_str }
+ }
+ {
+ \str_use:N \l_tmpa_str
+ }
+ }
+
+\def \datelatin
+ {
+ \def \today
+ {
+ \int_to_Roman:n { \day }
+ \c_space_tl
+ \polyglossia_latin_month_name:
+ \c_space_tl
+ \int_to_Roman:n { \year }
+ }
+ }
+
+
+%%%%% Latin shorthands
+
+\define@boolkey{latin}[latin@]{babelshorthands}[true]
+ {
+ }
+
+\define@boolkey{latin}[latin@]{prosodicshorthands}[true]
+ {
+ }
+
+% Register default options
+\xpg@initialize@gloss@options{latin}{variant=modern,hyphenation=modern,babelshorthands=false,
+ prosodicshorthands=false,ecclesiasticfootnotes=false,
+ usej=false,capitalizemonth=true}
+
+\ifsystem@babelshorthands
+ \setkeys{latin}{babelshorthands=true}
+\else
+ \setkeys{latin}{babelshorthands=false}
+\fi
+
+\ExplSyntaxOff % babelsh.def does not support expl3 syntax
+\ifcsundef{initiate@active@char}{\input{babelsh.def}}{}
+\ExplSyntaxOn
+
+\initiate@active@char {"}
+\initiate@active@char {'}
+\initiate@active@char {^}
+\initiate@active@char {=}
+
+\shorthandoff {"}
+\shorthandoff {'}
+\shorthandoff {^}
+\shorthandoff {=}
+
+% The active = character may cause problems with key=value interfaces.
+% We have to make sure here that no problems can occur outside a Latin
+% prosodic shorthand environment.
+% The active ' character may cause problems with the unicode-math package
+% (in case Latin is used as a secondary language, see #394). We have to
+% turn it of if Latin is not the main language.
+
+\protected@write \@auxout { } { \shorthandoff {=} } % for the aux file
+
+\AtBeginDocument
+ {
+ \str_if_eq:VnTF \xpg@main@language {latin}
+ {
+ \iflatin@prosodicshorthands
+ \else
+ \shorthandoff {=}
+ \fi
+ }
+ {
+ % The following command should not be called if the main language
+ % defines a = shorthand. However, there are no languages besides
+ % Latin defining such a shorthand in polyglossia.
+ \shorthandoff {=}
+ % The following command should not be called if the main language
+ % defines a ' shorthand. However, there are no languages besides
+ % Latin defining such a shorthand in polyglossia.
+ \shorthandoff {'}
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_shorthands:
+ {
+ \def \language@group {latin}
+ \bbl@activate {"}
+ \declare@shorthand {latin} {"}
+ {
+ \mode_if_math:TF
+ {
+ \token_to_str:N "
+ }
+ {
+ \polyglossia_latin_apply_quotemark:N
+ }
+ }
+ % The ' shorthand is normally turned off to avoid problems with the unicode-math
+ % package. We have to turn it on here.
+ \shorthandon {'}
+ \bbl@activate {'}
+ \declare@shorthand {latin} {'}
+ {
+ \mode_if_math:TF
+ {
+ \active@math@prime % defined in "latex.ltx"
+ % This definition is differing from the primes of the unicode-math package.
+ % TO DO: Make sure that the appearance of primes is the same as with the
+ % unicode-math package if this package is loaded.
+ }
+ {
+ \polyglossia_latin_put_acute:N
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_prosodic_shorthands:
+ {
+ \def \language@group {latin}
+ % The '=' shorthand is normally turned off to avoid problems with key=value
+ % interfaces. We turn it on here to enable prosodic shorthands.
+ \shorthandon {=}
+ \bbl@activate {=}
+ \declare@shorthand {latin} {=}
+ {
+ \mode_if_math:TF
+ {
+ \token_to_str:N =
+ }
+ {
+ \polyglossia_latin_put_macron:N
+ }
+ }
+ \bbl@activate {^}
+ \declare@shorthand {latin} {^}
+ {
+ \mode_if_math:TF
+ {
+ \token_to_str:N ^
+ }
+ {
+ \polyglossia_latin_put_breve:N
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_apply_quotemark:N #1
+ {
+ \str_case:nnF {#1}
+ {
+ {A} { \polyglossia_latin_digraph_shorthand:Nnn E { Æ }
+ {
+ \polyglossia_latin_digraph_shorthand:Nnn e { Æ }
+ {
+ \polyglossia_latin_allow_hyphens: A
+ }
+ }
+ }
+ {a} { \polyglossia_latin_digraph_shorthand:Nnn e { æ }
+ {
+ \polyglossia_latin_allow_hyphens: a
+ }
+ }
+ {O} { \polyglossia_latin_digraph_shorthand:Nnn E { Π}
+ {
+ \polyglossia_latin_digraph_shorthand:Nnn e { Π}
+ {
+ \polyglossia_latin_allow_hyphens: O
+ }
+ }
+ }
+ {o} { \polyglossia_latin_digraph_shorthand:Nnn e { œ }
+ {
+ \polyglossia_latin_allow_hyphens: o
+ }
+ }
+ {|} { \polyglossia_latin_allow_hyphens: }
+ {<} { « }
+ {>} { » }
+ }
+ {
+ \token_if_letter:NTF #1 { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_if_eq_meaning:NNTF #1 \AE { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_if_eq_meaning:NNTF #1 \ae { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_if_eq_meaning:NNTF #1 \OE { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_if_eq_meaning:NNTF #1 \oe { \polyglossia_latin_allow_hyphens: #1 }
+ {
+ \token_to_str:N "
+ #1
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_put_acute:N #1
+ {
+ \str_case:nnF {#1}
+ {
+ {A} { \polyglossia_latin_digraph_shorthand:Nnn E { Ǽ }
+ {
+ \polyglossia_latin_digraph_shorthand:Nnn e { Ǽ } { Á }
+ }
+ }
+ {a} { \polyglossia_latin_digraph_shorthand:Nnn e { ǽ } { á } }
+ {E} { É }
+ {e} { é }
+ {I} { Í }
+ {i} { í }
+ {O} { \polyglossia_latin_digraph_shorthand:Nnn E { \'Π}
+ {
+ \polyglossia_latin_digraph_shorthand:Nnn e { \'Œ } { Ó }
+ }
+ }
+ {o} { \polyglossia_latin_digraph_shorthand:Nnn e { \'œ } { ó } }
+ {U} { Ú }
+ {u} { ú }
+ {V} { \' V } % V may be a vowel, but lowercase v is never used as a vowel.
+ {Y} { Ý }
+ {y} { ý }
+ {Æ} { Ǽ }
+ {æ} { ǽ }
+ {Œ} { \'Œ }
+ {œ} { \'œ }
+ }
+ {
+ \token_if_eq_meaning:NNTF #1 \AE { Ǽ }
+ {
+ \token_if_eq_meaning:NNTF #1 \ae { ǽ }
+ {
+ \token_if_eq_meaning:NNTF #1 \OE { \'Π}
+ {
+ \token_if_eq_meaning:NNTF #1 \oe { \'œ }
+ {
+ \token_to_str:N '
+ #1
+ }
+ }
+ }
+ }
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_put_macron:N #1
+ {
+ \str_case:nnF {#1}
+ {
+ {A} { \polyglossia_latin_diphthong_macron:NNn AE
+ {
+ \polyglossia_latin_diphthong_macron:NNn Ae
+ {
+ \polyglossia_latin_diphthong_macron:NNn AU
+ {
+ \polyglossia_latin_diphthong_macron:NNn Au { Ā }
+ }
+ }
+ }
+ }
+ {a} { \polyglossia_latin_diphthong_macron:NNn ae
+ {
+ \polyglossia_latin_diphthong_macron:NNn au { ā }
+ }
+ }
+ {E} { \polyglossia_latin_diphthong_macron:NNn EU
+ {
+ \polyglossia_latin_diphthong_macron:NNn Eu { Ē }
+ }
+ }
+ {e} { \polyglossia_latin_diphthong_macron:NNn eu { ē } }
+ {I} { Ī }
+ {i} { ī }
+ {O} { \polyglossia_latin_diphthong_macron:NNn OE
+ {
+ \polyglossia_latin_diphthong_macron:NNn Oe { Ō }
+ }
+ }
+ {o} { \polyglossia_latin_diphthong_macron:NNn oe { ō } }
+ {U} { Ū }
+ {u} { ū }
+ {V} { \= V } % V may be a vowel, but lowercase v is never used as a vowel.
+ {Y} { Ȳ }
+ {y} { ȳ }
+ }
+ {
+ \token_to_str:N =
+ #1
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_put_breve:N #1
+ {
+ \str_case:nnF {#1}
+ {
+ {A} { Ă }
+ {a} { ă }
+ {E} { Ĕ }
+ {e} { ĕ }
+ {I} { Ĭ }
+ {i} { ĭ }
+ {O} { Ŏ }
+ {o} { ŏ }
+ {U} { Ŭ }
+ {u} { ŭ }
+ {V} { \u{V} } % V may be a vowel, but lowercase v is never used as a vowel.
+ {Y} { \u{Y} }
+ {y} { \u{y} }
+ }
+ {
+ \token_to_str:N ^
+ #1
+ }
+ }
+
+
+\cs_new:Npn \polyglossia_latin_allow_hyphens:
+ {
+ \bbl@allowhyphens
+ \discretionary {-} {} {}
+ \bbl@allowhyphens
+ }
+
+\cs_new:Npn \polyglossia_latin_digraph_shorthand:Nnn #1#2#3
+% #1: second letter of digraph (E or e)
+% #2: digraph character
+% #3: non-digraph code
+ {
+ \bool_if:NTF \l_polyglossia_latin_use_digraphs_bool
+ {
+ \peek_meaning_remove:NTF #1 {#2} {#3}
+ }
+ {
+ #3
+ }
+ }
+
+\cs_new:Npn \polyglossia_latin_diphthong_macron:NNn #1#2#3
+% #1: first character of diphthong
+% #2: second character of diphthong
+% #3: non-diphthong code
+ {
+ \peek_meaning:NTF #2 { #1 \char "35E \relax } {#3} % U+35E: combining double macron
+ }
+
+\cs_new:Npn \polyglossia_latin_no_shorthands:
+ {
+ \bbl@deactivate {"}
+ \bbl@deactivate {'}
+ \bbl@deactivate {=}
+ \bbl@deactivate {^}
+ % The active '=' character may cause problems with key=value interfaces.
+ % We have to make sure here that no problems can occur outside a Latin
+ % prosodic shorthand environment.
+ \shorthandoff {=}
+ }
+
+
+%%%%% Further settings
+
+\let \xpgla@savedvalues \empty
+
+\AtEndPreamble
+ {
+ \edef \xpgla@savedvalues
+ {
+ \clubpenalty = \the \clubpenalty \space
+ \@clubpenalty = \the \@clubpenalty \space
+ \widowpenalty = \the \widowpenalty \space
+ \finalhyphendemerits = \the \finalhyphendemerits
+ }
+ }
+
+\def \noextras@latin
+ {
+ \iflatin@babelshorthands
+ \polyglossia_latin_no_shorthands:
+ \fi
+ \xpgla@savedvalues
+ \polyglossia_latin_no_punctuation_spacing:
+ \polyglossia_latin_modern_character_codes:
+ }
+
+\cs_new:Npn \polyglossia_latin_inline_extras:
+ {
+ \bool_if:NF \l_polyglossia_latin_use_v_bool
+ {
+ \polyglossia_latin_classical_character_codes:
+ }
+ \bool_if:NT \l_polyglossia_latin_punctuation_spacing_bool
+ {
+ \polyglossia_latin_punctuation_spacing:
+ }
+ \iflatin@babelshorthands
+ \polyglossia_latin_shorthands:
+ \fi
+ \iflatin@prosodicshorthands
+ \polyglossia_latin_prosodic_shorthands:
+ \fi
+ }
+
+\def \blockextras@latin
+ {
+ % The following four values were overtaken from the Italian language module.
+ % It is unclear why they were chosen.
+ \clubpenalty = 3000
+ \@clubpenalty = 3000
+ \widowpenalty = 3000
+ \finalhyphendemerits = 50000000
+ \polyglossia_latin_inline_extras:
+ }
+
+\def \inlineextras@latin
+ {
+ \polyglossia_latin_inline_extras:
+ }
+
+
+%% Default settings
+
+\polyglossia_latin_modern_settings:
+
+\ExplSyntaxOff
+
+%% Copyright (C) Claudio Beccari 2013-2016
+%% Copyright (C) Élie Roux 2016-2019
+%% Copyright (C) Keno Wehr 2019-2020
+%%
+%% Permission is hereby granted, free of charge, to any person obtaining
+%% a copy of this software and associated documentation files
+%% (the "Software"), to deal in the Software without restriction, including
+%% without limitation the rights to use, copy, modify, merge, publish,
+%% distribute, sublicense, and/or sell copies of the Software, and to permit
+%% persons to whom the Software is furnished to do so, subject to the following
+%% conditions:
+%%
+%% The above copyright notice and this permission notice shall be included in
+%% all copies or substantial portions of the Software.
+%%
+%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+%% THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
+%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+%% IN THE SOFTWARE.
+%%
+%% End of file `gloss-latin.ldf'.
+% \end{macrocode}
+% \iffalse
+%</gloss-latin.ldf>
+%<*gloss-latinclassic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latinclassic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latinclassic.ldf}[polyglossia: module for classic latin]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-latinclassic.ldf>
+%<*gloss-latinecclesiastic.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latinecclesiastic.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latinecclesiastic.ldf}[polyglossia: module for ecclesiastic latin]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-latinecclesiastic.ldf>
+%<*gloss-latinmedieval.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latinmedieval.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latinmedieval.ldf}[polyglossia: module for medieval latin]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{latin}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-latinmedieval.ldf>
+%<*gloss-latvian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-latvian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-latvian.ldf}[polyglossia: module for latvian]
+\PolyglossiaSetup{latvian}{
+ bcp47=lv,
+ hyphennames={latvian},
+ hyphenmins={2,2},
+ langtag=LVI,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{latvian}{lv}
+
+\def\captionslatvian{%
+ \def\prefacename{Priekšvārds}%
+ \def\refname{Literatūras saraksts}%
+ \def\abstractname{Anotācija}%
+ \def\bibname{Literatūra}%
+ \def\chaptername{Nodaļa}%
+ \def\appendixname{Pielikums}%
+ \def\contentsname{Saturs}%
+ \def\listfigurename{Attēlu saraksts}%
+ \def\listtablename{Tabulu saraksts}%
+ \def\indexname{Index}%
+ \def\figurename{Att.}%
+ \def\tablename{Tabula}%
+ \def\partname{Daļa}%
+ \def\enclname{encl}%
+ \def\ccname{cc}%
+ \def\headtoname{To}%
+ \def\pagename{lpp.}%
+ \def\seename{sk.}%
+ \def\alsoname{sk. arī}%
+ \def\proofname{Pierādījums}%
+ }
+\def\datelatvian{%
+ \def\today{%
+ \number\year.\thinspace gada%
+ \space\number\day.\thinspace%
+ \ifcase\month\or%
+ janvārī\or februārī\or martā\or%
+ aprīlī\or maijā\or jūnijā\or%
+ jūlijā\or augustā\or septembrī\or%
+ oktobrī\or novembrī\or decembrī\fi}}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-latvian.ldf>
+%<*gloss-lithuanian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-lithuanian.ldf}
+% \begin{macrocode}
+% Translated by Paulius Sladkevičius <komsas@gmail.com>
+
+\ProvidesFile{gloss-lithuanian.ldf}[polyglossia: module for lithuanian]
+\PolyglossiaSetup{lithuanian}{
+ bcp47=lt,
+ hyphennames={lithuanian},
+ hyphenmins={2,2},
+ langtag=LTH,
+ indentfirst=true, % TODO Dokumentų rengimo taisyklių, patvirtintų Lietuvos vyriausiojo archyvaro 2011 m. liepos 4 d. įsakymu Nr. V-117, 29.1 punktą
+ fontsetup=true
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{lithuanian}{lt}
+
+\def\captionslithuanian{%
+ \def\prefacename{Pratarmė}%
+ \def\refname{Literatūra}%
+ \def\abstractname{Santrauka}%
+ \def\bibname{Literatūra}%
+ \def\chaptername{Skyrius}% TODO letter case
+ \def\appendixname{Priedas}%
+ \def\contentsname{Turinys}%
+ \def\listfigurename{Iliustracijų sąrašas}%
+ \def\listtablename{Lentelių sąrašas}%
+ \def\indexname{Rodyklė}%
+ \def\figurename{pav.}%
+ \def\tablename{lentelė}% TODO any special reason for \protect in babel?
+ \def\partname{Dalis}%
+ \def\enclname{Įdėta}%
+ \def\ccname{Kopijos}%
+ \def\headtoname{Kam}% TODO empty in babel?
+ \def\pagename{puslapis}%
+ \def\seename{žiūrėk}%
+ \def\alsoname{taip pat}% TODO some other variants are considered in babel?
+ \def\proofname{Įrodymas}%
+ \def\glossaryname{Terminų žodynas}% TODO some other variants are considered in babel?
+}
+
+\def\datelithuanian{%
+ \def\lithuanianmonth{\ifcase\month\or
+ sausio\or
+ vasario\or
+ kovo\or
+ balandžio\or
+ gegužės\or
+ birželio\or
+ liepos\or
+ rugpjūčio\or
+ rugsėjo\or
+ spalio\or
+ lapkričio\or
+ gruodžio\fi}%
+ \def\today{\number\year~m.~\lithuanianmonth~\number\day~d.}%
+}
+
+\def\blockextras@lithuanian{%
+ \let\fnum@figure@orig\fnum@figure
+ \def\fnum@figure{\thefigure\nobreakspace\figurename}%
+ \let\fnum@table@orig\fnum@table
+ \def\fnum@table{\thetable\nobreakspace\tablename}%
+}
+
+\def\noextras@lithuanian{%
+ \let\fnum@figure\fnum@figure@orig
+ \let\fnum@table\fnum@table@orig
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-lithuanian.ldf>
+%<*gloss-lo.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-lo.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-lo.ldf}[polyglossia: module for lo (lao)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{lao}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-lo.ldf>
+%<*gloss-lowersorbian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-lowersorbian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-lowersorbian.ldf}[polyglossia: module for lower sorbian]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{sorbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-lowersorbian.ldf>
+%<*gloss-lsorbian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-lsorbian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-lsorbian.ldf}[polyglossia: module for lower sorbian]
+
+% We only provide this gloss for babel compatibility. Since lsorbian is
+% a sorbian variety, we use 'sorbian' with variant 'lower' now.
+
+\xpg@load@master@language{sorbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-lsorbian.ldf>
+%<*gloss-lt.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-lt.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-lt.ldf}[polyglossia: module for lt (lithuanian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{lithuanian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-lt.ldf>
+%<*gloss-lv.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-lv.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-lv.ldf}[polyglossia: module for lv (latvian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{latvian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-lv.ldf>
+%<*gloss-macedonian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-macedonian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-macedonian.ldf}[polyglossia: module for macedonian]
+\PolyglossiaSetup{macedonian}{
+ bcp47=mk,
+ script=Cyrillic,
+ scripttag=cyrl,
+ langtag=MKD,
+ hyphennames={macedonian},
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{macedonian}{mk}
+
+\def\macedonian@Alph#1{%
+ \ifcase#1\or
+ А\or Б\or В\or Г\or Д\or Ѓ\or Е\or
+ Ж\or З\or Ѕ\or И\or Ј\or К\or Л\or
+ Љ\or М\or Н\or Њ\or О\or П\or Р\or
+ С\or Т\or Ќ\or У\or Ф\or Х\or Ц\or
+ Ч\or Џ\or Ш\else
+ \xpg@ill@value{#1}{macedonian@Alph}\fi}%
+
+\def\macedonian@alph#1{%
+ \ifcase#1\or
+ а\or б\or в\or г\or д\or ѓ\or е\or
+ ж\or з\or ѕ\or и\or ј\or к\or л\or
+ љ\or м\or н\or њ\or о\or п\or р\or
+ с\or т\or ќ\or у\or ф\or х\or ц\or
+ ч\or џ\or ш\else
+ \xpg@ill@value{#1}{macedonian@alph}\fi}%
+
+\def\macedonian@numbers{%
+ \let\@Alph\macedonian@Alph%
+ \let\@alph\macedonian@alph%
+ }
+
+\def\nomacedonian@numbers{%
+ \let\@Alph\latin@Alph%
+ \let\@alph\latin@alph%
+}
+
+\def\captionsmacedonian{%
+ \def\refname{Литература}%
+ \def\abstractname{Апстракт}%
+ \def\bibname{Библиографија}%
+ \def\prefacename{Предговор}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Прилог}%
+ \def\contentsname{Содржина}%
+ \def\listfigurename{Листа на слики}%
+ \def\listtablename{Листа на табели}%
+ \def\indexname{Индекс}%
+ \def\figurename{Слика}%
+ \def\tablename{Табела}%
+ %\def\thepart{}%
+ \def\partname{Поглавје}%
+ \def\pagename{стр.}%
+ \def\seename{види}%
+ \def\alsoname{види исто така}%
+ \def\enclname{Прилог}%
+ %\def\ccname{cc}%
+ %\def\headtoname{}%
+ \def\proofname{Доказ}%
+ \def\glossaryname{Терминолошки речник}%
+ }
+\def\datemacedonian{%
+ \def\today{\number\day~\ifcase\month\or
+ јануари\or
+ февруари\or
+ март\or
+ април\or
+ мај\or
+ јуни\or
+ јули\or
+ август\or
+ септември\or
+ октомври\or
+ ноември\or
+ декември\fi%
+ \ \number\year~г.}%
+ \def\month@Roman{\expandafter\@Roman\month}%
+ \def\todayRoman{\number\day.\,\month@Roman.\,\number\year~г.}%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-macedonian.ldf>
+%<*gloss-magyar.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-magyar.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-magyar.ldf}[polyglossia: module for magyar]
+
+% We only provide this gloss for babel compatibility.
+
+\xpg@load@master@language{hungarian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-magyar.ldf>
+%<*gloss-malay.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-malay.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-malay.ldf}[polyglossia: module for malay]
+
+\RequirePackage{hijrical}
+
+\PolyglossiaSetup{malay}{%
+ bcp47=id,
+ language=Malay,
+ langtag=MLY,
+ hyphennames={malay,melayu,bahasam,bahasai,indonesian,indon,bahasa},
+ hyphenmins={2,2},
+ fontsetup=true
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*[variant=malaysian]{malay}{zsm}
+\setlanguagealias*[variant=indonesian]{malay}{id}
+
+% Babel aliases
+\setlanguagealias[variant=indonesian]{malay}{bahasai}
+\setlanguagealias[variant=malaysian]{malay}{bahasa}
+
+% Backwards compat. alias
+\setlanguagealias[variant=malaysian]{malay}{bahasam}
+
+\providebool{malay@melayu}
+\malay@melayufalse
+\def\malay@variant{malay}
+\define@choicekey*+{malay}{variant}[\xpg@val\xpg@nr]{indonesian,malaysian}[malaysian]{%
+ \ifcase\xpg@nr\relax
+ % indonesian:
+ \def\malay@variant{indonesian}%
+ \malay@melayufalse
+ \or
+ % malaysian:
+ \def\malay@variant{malay}%
+ \malay@melayutrue
+ \fi
+ \ifmalay@melayu
+ \SetLanguageKeys{malay}{language=Malay,langtag=MLY,babelname=bahasam,bcp47=zsm}%
+ \xpg@fontsetup@latin{malay}%
+ % Check if \l@malay is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{malay}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{##1}%
+ {\csletcs{l@malay}{l@##1}\listbreak}%
+ {}%
+ }%
+ \docsvlist{melayu,bahasam,bahasai,indonesian,indon,bahasa}
+ \xpg@ifdefined{malay}{}{%
+ \xpg@warning{No hyphenation patterns for Malay (Malaysian) found\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@malay0%
+ }%
+ }%
+ \else
+ \SetLanguageKeys{malay}{language=Indonesian,langtag=IND,babelname=bahasa,bcp47=id}%
+ \xpg@fontsetup@latin{malay}%
+ % Check if \l@indonesian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{indonesian}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{##1}%
+ {\csletcs{l@indonesian}{l@##1}\listbreak}%
+ {}%
+ }%
+ \docsvlist{indon,bahasai,bahasam,malay,melayu,bahasa}
+ \xpg@ifdefined{indonesian}{}{%
+ \xpg@warning{No hyphenation patterns for Malay (Indonesian) found\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@indonesian0
+ }%
+ }%
+ \fi
+ \xpg@info{Option: malay, variant=\xpg@val}%
+}{\xpg@warning{Unknown malay variant `#1'}}
+
+% Register default options
+\xpg@initialize@gloss@options{malay}{variant=malaysian}
+
+
+\def\malay@language{%
+ \polyglossia@setup@language@patterns{\malay@variant}%
+}%
+
+
+\def\captionsmalay@indonesian{%
+ \def\refname{Pustaka}%
+ \def\abstractname{Ringkasan}%
+ \def\bibname{Bibliografi}%
+ \def\prefacename{Pendahuluan}%
+ \def\chaptername{Bab}%
+ \def\appendixname{Lampiran}%
+ \def\contentsname{Daftar Isi}%
+ \def\listfigurename{Daftar Gambar}%
+ \def\listtablename{Daftar Tabel}%
+ \def\indexname{Indeks}%
+ \def\figurename{Gambar}%
+ \def\tablename{Tabel}%
+ %\def\thepart{}%
+ \def\partname{Bagian}%
+ \def\pagename{Halaman}%
+ \def\seename{lihat}%
+ \def\alsoname{lihat juga}%
+ \def\enclname{Lampiran}%
+ \def\ccname{cc}%
+ \def\headtoname{Kepada}%
+ \def\proofname{Bukti}%
+ \def\glossaryname{Daftar Istilah}%
+}
+
+\def\captionsmalay@malay{%
+ \def\refname{Rujukan}%
+ \def\abstractname{Abstrak}%
+ \def\bibname{Bibliografi}%
+ \def\prefacename{Pendahuluan}%
+ \def\chaptername{Bab}%
+ \def\appendixname{Lampiran}%
+ \def\contentsname{Kandungan}%
+ \def\listfigurename{Senarai Rajah}%
+ \def\listtablename{Senarai Jadual}%
+ \def\indexname{Indeks}%
+ \def\figurename{Rajah}%
+ \def\tablename{Jadual}%
+ \def\thepart{}%
+ \def\partname{Bahagian}%
+ \def\pagename{Halaman}%
+ \def\seename{lihat}%
+ \def\alsoname{lihat juga}%
+ \def\enclname{Lampiran}%
+ \def\ccname{salinan kpd}%
+ \def\headtoname{Kepada}%
+ \def\proofname{Bukti}%
+ \def\glossaryname{Senarai Istilah}%
+}
+
+\def\captionsmalay{%
+ \csname captionsmalay@\malay@variant\endcsname%
+}
+
+\def\datemalay@indonesian{%
+ \def\today{\number\day~\ifcase\month\or
+ Januari\or Pebruari\or Maret\or April\or Mei\or Juni\or
+ Juli\or Agustus\or September\or Oktober\or Nopember\or Desember\fi
+ \space \number\year}}
+
+\def\datemalay@malay{%
+ \def\bahasam@day{%
+ \ifcase\day\or%
+ 1hb\or 2hb\or 3hb\or 4hb\or 5hb\or%
+ 6hb\or 7hb\or 8hb\or 9hb\or 10hb\or%
+ 11hb\or 12hb\or 13hb\or 14hb\or 15hb\or%
+ 16hb\or 17hb\or 18hb\or 19hb\or 20hb\or%
+ 21hb\or 22hb\or 23hb\or 24hb\or 25hb\or%
+ 26hb\or 27hb\or 28hb\or 29hb\or 30hb\or%
+ 31hb\fi}%
+ \def\today{\bahasam@day~\ifcase\month\or
+ Januari\or Februari\or Mac\or April\or Mei\or Jun\or
+ Julai\or Ogos\or September\or Oktober\or November\or Disember\fi
+ \space \number\year}}
+
+\def\datemalay{%
+ \csname datemalay@\malay@variant\endcsname%
+}
+
+% Hijri calendar localizations
+\def\hijrimonthmalay@indonesian#1{%
+ \ifcase#1%
+ \or Muharram\or Safar\or Rabiul awal\or Rabiul akhir\or Jumadil awal\or Jumadil akhir\or Rajab%
+ \or Sya'ban\or Ramadhan\or Syawal\or Dzulkaidah\or Dzulhijjah\fi%
+}
+
+\def\hijrimonthmalay@malay#1{%
+ \ifcase#1%
+ \or Muharram\or Safar\or Rabiulawal\or Rabiulakhir\or Jamadilawal\or Jamadilakhir\or Rejab%
+ \or Syaaban\or Ramadan\or Syawal\or Zulkaedah\or Zulhijah\fi%
+}
+
+\def\hijrimonthmalay{%
+ \csname hijrimonthmalay@\malay@variant\endcsname%
+}
+
+%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{malay}{%
+ \number\value{Hijriday}\space\hijrimonthmalay{\value{Hijrimonth}}\space\number\value{Hijriyear}}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-malay.ldf>
+%<*gloss-malayalam.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-malayalam.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-malayalam.ldf}[polyglossia: module for malayalam]
+\ifluatex
+ \xpg@warning{Malayalam is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+% Translations provided by Kevin & Siji, 01-11-2009
+
+\PolyglossiaSetup{malayalam}{
+ bcp47=ml,
+ script=Malayalam,
+ scripttag=mlym,
+ langtag=MAL, %FIXME there is also MLR for "Malayalam Reformed"
+ hyphennames={malayalam},
+ hyphenmins={2,2}, %FIXME
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{malayalam}{ml}
+
+\def\captionsmalayalam{%
+ \def\abstractname{സാരാംശം}%
+ \def\appendixname{ശിഷ്ടം}%
+ \def\bibname{}% (?)
+ \def\ccname{}%
+ \def\chaptername{അദ്ധ്യായം}%
+ \def\contentsname{ഉള്ളടക്കം}%
+ \def\enclname{}%
+ \def\figurename{ചിത്രം}% रेखाचित्र
+ \def\headpagename{}%
+ \def\headtoname{}%
+ \def\indexname{സൂചിക}%
+ \def\listfigurename{ചിത്രസൂചിക}%
+ \def\listtablename{പട്ടികകളുടെ സൂചിക}%
+ \def\pagename{}%
+ \def\partname{ഭാഗം}%
+ \def\prefacename{}%
+ \def\refname{}%
+ \def\tablename{പട്ടിക}%
+ \def\seename{കാണുക}%
+ \def\alsoname{ഇതും കാണുക}%
+ \def\alsoseename{ഇതും കാണുക}%
+}
+\def\datemalayalam{%
+ \def\today{\number\year\space\ifcase\month\or
+ ജനുവരി\or
+ ഫിബ്രുവരി\or
+ മാർച്ച്\or
+ ഏപ്രിൽ\or
+ മെയ്\or
+ ജൂൺ\or
+ ജൂലായ്\or
+ ആഗസ്ത്\or
+ സെപ്തംബർ\or
+ ഒക്ടോബർ\or
+ നവംബർ\or
+ ഡിസംബർ\fi
+ \space\number\day}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-malayalam.ldf>
+%<*gloss-marathi.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-marathi.ldf}
+% \begin{macrocode}
+% Translations provided by Abhijit Navale <abhi_navale@live.in>
+% Ordinals (1-100) added by Niranjan Tambe <niranjanvikastambe@gmail.com> on 14th December, 2019
+% TODO implement Hindu calendar (not used in day-to-day practice)
+
+\ProvidesFile{gloss-marathi.ldf}[polyglossia: module for marathi]
+\ifluatex
+ \xpg@warning{Marathi is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\RequirePackage{devanagaridigits}
+
+\PolyglossiaSetup{marathi}{
+ bcp47=mr,
+ script=Devanagari,
+ scripttag=deva,
+ langtag=MAR,
+ hyphennames={marathi},
+ hyphenmins={2,2},%CHECK
+ fontsetup=true,
+ localnumeral=marathinumerals
+ %TODO nouppercase=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{marathi}{mr}
+
+\newif\ifmarathi@devanagari@numerals
+\marathi@devanagari@numeralstrue
+
+\define@choicekey*+{marathi}{numerals}[\xpg@val\xpg@nr]{Western,Devanagari}[Devanagari]{%
+ \ifcase\xpg@nr\relax
+ % Western:
+ \marathi@devanagari@numeralsfalse%
+ \or
+ % Devanagari:
+ \marathi@devanagari@numeralstrue%
+ \fi
+ \xpg@info{Option: Marathi, numerals=\xpg@val}%
+}{\xpg@warning{Unknown Marathi numerals value `#1'}}
+
+% Register default options
+\xpg@initialize@gloss@options{marathi}{numerals=Devanagari}
+
+\newcommand{\marathinumerals}[2]{\marathinumber{#2}}
+
+\def\marathinumber#1{%
+ \ifmarathi@devanagari@numerals
+ \devanagaridigits{\number#1}%
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\captionsmarathi{%
+ \def\refname{संदर्भ}%
+ \def\abstractname{सारांश}%
+ \def\bibname{संदर्भसूची}%
+ \def\prefacename{प्रस्तावना}%
+ \def\chaptername{प्रकरण}%
+ \def\appendixname{परिशिष्ट}%
+ \def\contentsname{अनुक्रमणिका}%
+ \def\listfigurename{आकृत्यांची सूची}%
+ \def\listtablename{कोष्टक सूची}%
+ \def\indexname{सूची}%
+ \def\figurename{आकृती}%
+ \def\tablename{कोष्टक}%
+ \def\partname{खंड}%
+ \def\pagename{पृष्ठ}%
+ \def\seename{पाहा}%
+ \def\alsoname{हेदेखील पाहा}%
+ \def\enclname{समाविष्ट}%
+ \def\ccname{सी.सी.}%
+ \def\headtoname{प्रति}%
+ \def\proofname{सिद्धता}%
+ \def\glossaryname{संक्षेपसूची}%
+ \def\authorsand{आणि}%
+}
+
+\def\datemarathi{%
+ \def\marathimonth{%
+ \ifcase\month\or
+ जानेवारी\or
+ फेब्रुवारी\or
+ मार्च\or
+ एप्रिल\or
+ मे\or
+ जून\or
+ जुलै\or
+ ऑगस्ट\or
+ सप्टेंबर\or
+ ऑक्टोबर\or
+ नोव्हेंबर\or
+ डिसेंबर%
+ \fi%
+ }%
+ \def\today{%
+ \marathinumber\day\space\marathimonth\space\marathinumber\year%
+ }%
+}
+
+\def\devanagari@akshar#1{\ifcase#1\or अ\or आ\or इ\or ई\or उ\or ऊ\or ए\or ऐ\or ओ\or औ\or अं\or अः\else\@ctrerr\fi}
+
+\def\devanagari@alph#1{%
+ \ifcase#1\or क\or ख\or ग\or घ\or ङ\or च\or छ\or ज\or झ\or ञ\or ट\or ठ\or ड\or ढ\or ण\or त\or थ\or द%
+ \or ध\or न\or प\or फ\or ब\or भ\or म\or य\or र\or ल\or व\or श\or ष\or स\or ह\or ळ\else\@ctrerr%
+ \fi%
+}
+
+\def\devanagari@letter#1{%
+ \ifcase#1\or एक\or दोन\or तीन\or चार\or पाच\or सहा\or सात\or आठ\or नऊ\or दहा\or अकरा\or बारा\or तेरा\or चौदा%
+ \or पंधरा\or सोळा\or सतरा\or अठरा\or एकोणीस\or वीसएकवीस\or बावीस\or तेवीस\or चोवीस\or पंचवीस\or सव्वीस\or सत्तावीस\or अठाव्वीस%
+ \or एकोणतीस\or तीस\or एकतीस\or बत्तीस\or तेहेत्तीस \or चौतीस \or पस्तीस \or छत्तीस \or सतदिस \or अडतीस \or एकोणचाळीस \or चाळीस %
+ \or एक्केचाळीस \or बेचाळीस \or त्रेचाळीस \or चौवेचाळीस\or पंचेचाळीस \or सेहेचाळीस \or सत्तेचाळीस \or अठ्ठेचाळीस \or एकोणपन्नास \or पन्नास %
+ \or एक्कावन्न \or बावन्न \or त्रेपन्न \or चोपन्न \or पंचावन्न \or छपन्न\or सत्तावन्न \or अठ्ठावन्न \or एकोणसाठ \or साठ \or एकसष्ठ \or बासष्ठ \or त्रेसष्ट %
+ \or चौसष्ठ \or पासष्ठ \or सहासष्ठ \or सदुष्ठ \or अडुसष्ठ \or एकोणसत्तर\or सत्तर \or एकाहत्तर \or बहात्तर \or त्र्याहत्तर \or चौऱ्याहत्तर \or पंच्याहत्तर %
+ \or शहात्तर \or सत्याहत्तर \or अठ्याहत्तर \or एकोणऐशी \or ऐंशी\or एक्याऐंशी \or ब्याऐंशी \or त्र्याऐंशी \or चौऱ्याऐंशी \or पंच्याऐंशी \or शह्यांशी \or सत्यांऐंशी %
+ \or अठ्ठ्याऐंशी \or एकोणनव्वद \or नव्वद \or एक्याण्णव\or ब्याण्णव \or त्र्याण्णव \or चौऱ्याण्णव \or पंच्याण्णव \or शहाण्णव \or सत्याण्णव \or अठ्याण्णव %
+ \or नव्याण्णव \or शंभर\else\@ctrerr%
+ \fi%
+}
+
+\let\xpg@save@roman\@roman
+\let\xpg@save@Roman\@Roman
+
+\def\marathi@numbers{%
+ \let\@alph\devanagari@akshar
+ \let\@Alph\devanagari@letter
+ \let\@roman\devanagari@alph
+ \let\@Roman\devanagari@letter
+}
+
+\def\nomarathi@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+ \let\@roman\xpg@save@roman
+ \let\@Roman\xpg@save@Roman
+}
+
+\def\blockextras@marathi{%
+ \let\xpg@orig@baselinestretch\baselinestrech%
+ \renewcommand{\baselinestretch}{1.2}%
+ \renewcommand{\labelitemii}{$\rightarrow$}%
+}
+
+\let\xpg@orig@labelitemii\labelitemii
+
+\def\noextras@marathi{%
+ \let\baselinestrech\xpg@orig@baselinestretch%
+ \let\labelitemii\xpg@orig@labelitemii%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-marathi.ldf>
+%<*gloss-mk.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-mk.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-mk.ldf}[polyglossia: module for mk (macedonian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{macedonian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-mk.ldf>
+%<*gloss-ml.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ml.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ml.ldf}[polyglossia: module for ml (malayalam)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{malayalam}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ml.ldf>
+%<*gloss-mn.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-mn.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-mn.ldf}[polyglossia: module for mn (mongolian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{mongolian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-mn.ldf>
+%<*gloss-mongolian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-mongolian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-mongolian.ldf}[polyglossia: module for mongolian]
+
+\RequirePackage{xpg-cyrillicnumbers}
+
+\PolyglossiaSetup{mongolian}{
+ bcp47=mn,
+ script=Cyrillic,
+ scripttag=cyrl,
+ langtag=MNG,
+ hyphennames={mongolian},
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup,
+ localnumeral=mongoliannumerals,
+ Localnumeral=Mongoliannumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{mongolian}{mn}
+
+% This file is derived from mongolian-babel. which
+% provides support for Mongolian (Khalkha variety)
+% with Cyrillic script
+% TODO: Implement script=mongolian and maybe other
+% variants of Mongolian
+
+\newif\ifcyrillic@numerals
+\newif\ifcyrillic@asbuk@numerals
+\define@choicekey*+{mongolian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
+ \ifcase\xpg@nr\relax
+ % arabic:
+ \cyrillic@numeralsfalse%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-trad:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-alph:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralstrue%
+ \fi
+ \xpg@info{Option: Mongolian, numerals=\xpg@val}%
+}{\xpg@warning{Unknown Mongolian numerals value `#1'}}
+
+\define@boolkey{mongolian}[mongolian@]{babelshorthands}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{mongolian}{babelshorthands=false,numerals=arabic}
+
+\ifsystem@babelshorthands
+ \setkeys{mongolian}{babelshorthands=true}
+\else
+ \setkeys{mongolian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\mongolian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{mongolian}%
+ \declare@shorthand{mongolian}{"`}{„}%
+ \declare@shorthand{mongolian}{"'}{“}%
+ \declare@shorthand{mongolian}{"<}{«}%
+ \declare@shorthand{mongolian}{">}{»}%
+ \declare@shorthand{mongolian}{""}{\hskip\z@skip}%
+ \declare@shorthand{mongolian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{mongolian}{"=}{\nobreak-\hskip\z@skip}%
+ \declare@shorthand{mongolian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
+ \declare@shorthand{mongolian}{"-}{%
+ \def\mongolian@sh@tmp{%
+ \if\mongolian@sh@next-\expandafter\mongolian@sh@emdash%
+ \else\expandafter\mongolian@sh@hyphen\fi%
+ }%
+ \futurelet\mongolian@sh@next\mongolian@sh@tmp%
+ }%
+ \def\mongolian@sh@hyphen{%
+ \nobreak\-\bbl@allowhyphens}%
+ \def\mongolian@sh@emdash##1##2{\cdash-##1##2}%
+ \def\cdash##1##2##3{\def\tempx@{##3}%
+ \def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
+ \ifx\tempx@\tempa@\@Acdash\else
+ \ifx\tempx@\tempb@\@Bcdash\else
+ \ifx\tempx@\tempc@\@Ccdash\else
+ \errmessage{Wrong usage of cdash}\fi\fi\fi}%
+ \def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
+ \cyrdash\hskip.2em\ignorespaces}%
+ \def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
+ \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
+ \def\@Ccdash{\leavevmode
+ \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
+ \ifx\cyrdash\undefined
+ \def\cyrdash{\hbox to.8em{--\hss--}}%
+ \fi
+ \declare@shorthand{mongolian}{",}{\nobreak\hskip.2em\ignorespaces}%
+}
+
+\def\nomongolian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+% Taken from babel-mongolian
+\def\captionsmongolian{%
+ \def\prefacename{Өмнөх үг}%
+ \def\refname{Ашигласан ном}%
+ \def\abstractname{Удиртгал}%
+ \def\bibname{Номзүй}%
+ \def\chaptername{Бүлэг}%
+ \def\appendixname{Хавсралт}%
+ \ifcsundef{thechapter}%
+ {\def\contentsname{Агуулга}}%
+ {\def\contentsname{Гарчиг}}%
+ \def\listfigurename{Зургийн жагсаалт}%
+ \def\listtablename{Хүснэгтийн жагсаалт}%
+ \def\indexname{Товъёг}%
+ \def\authorname{Нэрийн хэлхээ}%
+ \def\figurename{Зураг}%
+ \def\tablename{Хүснэгт}%
+ \def\partname{Хэсэг}%
+ \def\enclname{Ишлэл}%
+ \def\ccname{э.с.}%
+ \def\headtoname{}%
+ \def\pagename{тал}%
+ \def\seename{талд үз}%
+ \def\alsoname{мөн талд үз}%
+ \def\proofname{Баталгаа}%
+}
+
+\def\datemongolian{%
+ \def\today{\number\year~оны \ifcase\month\or
+ 1-р\or 2-р\or 3-р\or 4-р\or 5-р\or 6-р\or
+ 7-р\or 8-р\or 9-р\or 10-р\or 11-р\or 12-р\fi
+ ~сарын \number\day}}
+
+\newcommand{\mongoliannumerals}[2]{\mongoliannumber{#2}}
+\newcommand{\Mongoliannumerals}[2]{\Mongoliannumber{#2}}
+
+\def\mongoliannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \mongolian@asbuk@alph{#1}%
+ \else
+ \cyr@alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\Mongoliannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \mongolian@asbuk@Alph{#1}%
+ \else
+ \cyr@Alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\let\mongoliannumeral=\mongoliannumber
+\let\Mongoliannumeral=\Mongoliannumber
+
+\def\Asbuk#1{\expandafter\mongolian@asbuk@Alph\csname c@#1\endcsname}
+\def\asbuk#1{\expandafter\mongolian@asbuk@alph\csname c@#1\endcsname}
+
+\def\AsbukTrad#1{\expandafter\cyr@Alph\csname c@#1\endcsname}
+\def\asbukTrad#1{\expandafter\cyr@alph\csname c@#1\endcsname}
+
+% This is a poor man's cyrillic alphanumeric. It just uses the alphabet and
+% thus ends at 30.
+\def\mongolian@asbuk@Alph#1{\ifcase#1\or
+ А\or Б\or В\or Г\or Д\or Е\or Ж\or
+ З\or И\or К\or Л\or М\or Н\or О\or
+ П\or Р\or С\or Т\or У\or Ф\or Х\or
+ Ц\or Ч\or Ш\or Щ\or Э\or Ю\or Я%
+ \else\xpg@ill@value{#1}{mongolian@asbuk@Alph}\fi%
+}
+
+\def\mongolian@asbuk@alph#1{\ifcase#1\or
+ а\or б\or в\or г\or д\or е\or ж\or
+ з\or и\or к\or л\or м\or н\or о\or
+ п\or р\or с\or т\or у\or ф\or х\or
+ ц\or ч\or ш\or щ\or э\or ю\or я%
+ \else\xpg@ill@value{#1}{mongolian@asbuk@alph}\fi%
+}
+
+\def\mongolian@numbers{%
+ \let\latin@alph\@alph
+ \let\latin@Alph\@Alph
+ \ifcyrillic@numerals%
+ \def\mongolian@alph##1{\expandafter\mongoliannumeral\expandafter{\the##1}}%
+ \def\mongolian@Alph##1{\expandafter\Mongoliannumeral\expandafter{\the##1}}%
+ \let\@alph\mongolian@alph%
+ \let\@Alph\mongolian@Alph%
+ \fi
+}
+
+\def\nomongolian@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\def\noextras@mongolian{%
+ \ifcyrillic@numerals\nomongolian@numbers\fi%
+ \nomongolian@shorthands%
+}
+
+\def\blockextras@mongolian{%
+ \ifcyrillic@numerals\mongolian@numbers\fi%
+ \ifmongolian@babelshorthands\mongolian@shorthands\fi%
+}
+
+\def\inlineextras@mongolian{%
+ \ifmongolian@babelshorthands\mongolian@shorthands\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-mongolian.ldf>
+%<*gloss-mr.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-mr.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-mr.ldf}[polyglossia: module for mr (marathi)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{marathi}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-mr.ldf>
+%<*gloss-naustrian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-naustrian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-naustrian.ldf}[polyglossia: module for austrian german (current spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-naustrian.ldf>
+%<*gloss-nb.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-nb.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-nb.ldf}[polyglossia: module for nb (norwegian)]
+
+% We provide this as a bcp47-compliant alias
+
+\xpg@load@master@language{norwegian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-nb.ldf>
+%<*gloss-newzealand.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-newzealand.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-newzealand.ldf}[polyglossia: module for newzealand english]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{english}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-newzealand.ldf>
+%<*gloss-ngerman.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ngerman.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ngerman.ldf}[polyglossia: module for german (current spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ngerman.ldf>
+%<*gloss-nko.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-nko.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-nko.ldf}[Polyglossia: module for N’Ko v0.1 2013/05/19]
+\PolyglossiaSetup{nko}{%
+ bcp47=nko,
+ script=N'ko,
+ scripttag=nko~,
+ langtag=NKO,
+ fontsetup=true,
+ hyphennames={nohyphenation},
+ direction=RL,
+ localnumeral=nkonumerals
+}
+
+\RequirePackage{nkonumbers}%
+
+\newcommand{\nkonumerals}[2]{\nkonumber{#2}}
+
+\def\captionsnko{%
+ \def\prefacename{ߢߍߛߓߍ}%
+ \def\refname{ߞߐߡߊߛߙߋ}%
+ \def\abstractname{ߓߊߕߐߡߐ߲}%
+ \def\bibname{ߟߍߙߊߥߙߍߟߐ߲߲}%
+ \def\chaptername{ߛߌ߰ߘߊ}%
+ \def\appendixname{ߘߋ߬ߙߋ}%
+ \def\contentsname{ߞߣߐߘߐ}%
+ \def\listfigurename{ߢߊ ߟߎ߬ ߛߙߍߘߍ}%
+ \def\listtablename{ߦߌ߬ߘߊ߬ߥߟߊ ߟߎ߬ ߛߙߍߘߍ}%
+ \def\indexname{ߛߙߍߘߍ}%
+ \def\figurename{ߢߊ}%
+ \def\tablename{ߦߌ߬ߘߊ߬ߥߟߊ}%
+ \def\partname{ߛߌ߰ߘߊ߬ߙߋ߲}%
+ \def\enclname{ߝߍ߬ߕߊ}%
+ \def\ccname{ߓߊ ߘߏ߫ ߘߌ߫}%
+ \def\headtoname{ߞߊߕߙߍ߬}%
+ \def\pagename{ߞߐߜߍ}%
+ \def\seename{ߡߊߝߟߍ߫}%
+ \def\alsoname{ߝߟߍߡߊߛߊ߬ߦߌ߬}%
+ \def\proofname{ߦߌ߬ߘߊ߬ߞߏ}%
+ \def\glossaryname{ߞߘߐߝߐߟߊ߲}%
+}%
+
+% In n'ko, this is an example of date :
+% ߂߀߁߃ ߞߏ߲ߞߏߜߍ ߕߟߋ߬ ߁߈ (RTL)
+% ( 18 February 2013 )
+% The word "ߕߟߋ߬" is mandatory between month name and day number.
+% Replace "ߕߟߋ߬" by "ߕߋ߬ߟߋ߫" if and only if day = 2 or day = 3 or day = 9
+% or (day >= 20 and day <= 29).
+
+\newcommand*\nkodayprefix[1]{%
+ \ifnum\numexpr#1=2 ߕߋ߬ߟߋ߫\else%
+ \ifnum\numexpr#1=3 ߕߋ߬ߟߋ߫\else%
+ \ifnum\numexpr#1=9 ߕߋ߬ߟߋ߫\else%
+ \ifnum\numexpr#1>19\ifnum\numexpr#1<30 ߕߋ߬ߟߋ߫\else ߕߟߋ߬\fi\else ߕߟߋ߬\fi%
+ \fi%
+ \fi%
+ \fi%
+}
+
+\newcommand*\nkoday[1]{%
+ % If day = 1, put above "߁", NKO_COMBINING_SHORT_RISING_TONE
+ \ifnum\numexpr#1=1 ߁߭\else%
+ \nkonumber{#1}
+ \fi
+}
+
+\def\datenko{%
+ \def\today{%
+ \nkonumber{\year}\space
+ \ifcase\month
+ \or ߓߌ߲ߠߊߥߎߟߋ߲%
+ \or ߞߏ߲ߞߏߜߍ%
+ \or ߕߙߊߓߊ%
+ \or ߞߏ߲ߞߏߘߌ߬ߓߌ%
+ \or ߘߓߊ߬ߕߊ%
+ \or ߥߊ߬ߛߌߥߊ߬ߙߊ%
+ \or ߞߊ߬ߙߌߝߐ߭%
+ \or ߘߓߊ߬ߓߌߟߊ%
+ \or ߕߎߟߊߝߌ߲%
+ \or ߞߏ߲ߓߌߕߌ߮%
+ \or ߣߍߣߍߓߊ%
+ \or ߞߏ߬ߟߌ߲߬ߞߏߟߌ߲\fi
+ \space\nkodayprefix{\number\day}
+ \space\nkoday{\day}
+ }%
+}%
+
+% \end{macrocode}
+% \iffalse
+%</gloss-nko.ldf>
+%<*gloss-norsk.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-norsk.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-norsk.ldf}[polyglossia: module for norwegian (bokmal)]
+
+% We only provide this gloss for babel compatibility. Since norsk is
+% actually norwegian bokmal, we use 'norwegian' with variant 'bokmal' now.
+
+\xpg@load@master@language{norwegian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-norsk.ldf>
+%<*gloss-norwegian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-norwegian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-norwegian.ldf}[polyglossia: module for norwegian]
+\PolyglossiaSetup{norwegian}{
+ bcp47=nn,
+ hyphennames={nynorsk},
+ langtag=NYN,
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup=false,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*[variant=bokmal]{norwegian}{nb}
+\setlanguagealias*[variant=nynorsk]{norwegian}{nn}
+% Babel and backwards compat. aliases
+\setlanguagealias[variant=bokmal]{norwegian}{norsk}
+\setlanguagealias[variant=nynorsk]{norwegian}{nynorsk}
+
+\def\norwegian@variant{nynorsk}
+\define@choicekey*+{norwegian}{variant}[\xpg@val\xpg@nr]{nynorsk,bokmal}[nynorsk]{%
+ \ifcase\xpg@nr\relax
+ % nynorsk:
+ \def\norwegian@variant{nynorsk}%
+ \SetLanguageKeys{norwegian}{langtag=NYN,babelname=nynorsk,bcp47=nn}%
+ \xpg@fontsetup@latin{norwegian}%
+ \or
+ % bokmal:
+ \def\norwegian@variant{norsk}%
+ \SetLanguageKeys{norwegian}{langtag=NOR,babelname=norsk,bcp47=nb}%
+ \xpg@fontsetup@latin{norwegian}%
+ \fi
+ \xpg@info{Option: norwegian, variant=\xpg@val}%
+}{\xpg@warning{Unknown norwegian variant `#1'}}
+
+
+% Register default options
+\xpg@initialize@gloss@options{norwegian}{variant=nynorsk}
+
+
+\def\norwegian@language{%
+ \polyglossia@setup@language@patterns{\norwegian@variant}%
+}%
+
+\def\captionsnorwegian@nynorsk{%
+ \def\refname{Referansar}%
+ \def\abstractname{Sammendrag}%
+ \def\bibname{Litteratur}%
+ \def\prefacename{Forord}%
+ \def\chaptername{Kapittel}%
+ \def\appendixname{Tillegg}%
+ \def\contentsname{Innhald}%
+ \def\listfigurename{Figurar}%
+ \def\listtablename{Tabellar}%
+ \def\indexname{Register}%
+ \def\figurename{Figur}%
+ \def\tablename{Tabell}%
+ %\def\thepart{}% <<<
+ \def\partname{Del}%
+ \def\pagename{Side}%
+ \def\seename{Sjå}%
+ \def\alsoname{Sjå òg}%
+ \def\enclname{Vedlegg}%
+ \def\ccname{Kopi til}%
+ \def\headtoname{Til}%
+ \def\proofname{Bevis}%
+ \def\glossaryname{Ordliste}%
+}
+
+\def\captionsnorwegian@norsk{%
+ \def\refname{Referanser}%
+ \def\abstractname{Sammendrag}%
+ \def\bibname{Bibliografi}%
+ \def\prefacename{Forord}%
+ \def\chaptername{Kapittel}%
+ \def\appendixname{Tillegg}%
+ \def\contentsname{Innhold}%
+ \def\listfigurename{Figurer}%
+ \def\listtablename{Tabeller}%
+ \def\indexname{Register}%
+ \def\figurename{Figur}%
+ \def\tablename{Tabell}%
+ %\def\thepart{}% <<<
+ \def\partname{Del}%
+ \def\pagename{Side}%
+ \def\seename{Se}%
+ \def\alsoname{Se også}%
+ \def\enclname{Vedlegg}%
+ \def\ccname{Kopi sendt}%
+ \def\headtoname{Til}%
+ \def\proofname{Bevis}%
+ \def\glossaryname{Ordliste}%
+}
+
+\def\captionsnorwegian{%
+ \csname captionsnorwegian@\norwegian@variant\endcsname%
+}
+
+\def\datenorwegian@nynorsk{%
+ \def\today{\number\day.~\ifcase\month\or
+ januar\or februar\or mars\or april\or mai\or juni\or
+ juli\or august\or september\or oktober\or november\or desember
+ \fi\space\number\year}%
+}
+
+\def\datenorwegian@norsk{%
+ \def\today{\number\day.~\ifcase\month\or
+ januar\or februar\or mars\or april\or mai\or juni\or
+ juli\or august\or september\or oktober\or november\or
+ desember\fi\space\number\year}%
+}
+
+\def\datenorwegian{%
+ \csname datenorwegian@\norwegian@variant\endcsname%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-norwegian.ldf>
+%<*gloss-nswissgerman.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-nswissgerman.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-nswissgerman.ldf}[polyglossia: module for swiss german (current spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-nswissgerman.ldf>
+%<*gloss-nynorsk.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-nynorsk.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-nynorsk.ldf}[polyglossia: module for norwegian (Nynorsk)]
+
+% We only provide this gloss for babel compatibility. Since nynorsk is
+% a norwegian variety, we use 'norwegian' with variant 'nynorsk' now.
+
+\xpg@load@master@language{norwegian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-nynorsk.ldf>
+%<*gloss-occitan.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-occitan.ldf}
+% \begin{macrocode}
+%%
+%% This is file `gloss-occitan.ldf',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% gloss-occitan.dtx (with options: `ldf')
+%% ------------------------------------------------------------------
+%% The gloss-occitan module for polyglossia
+%% Copyright (C) 2016 Cédric Valmary
+%% All rights reserved
+%%
+%% Licence information appended
+%%
+%% Created by Cédric Valmary: cvalmary at yahoo dot fr
+%% of Tot en òc <http://www.totenoc.eu/>
+%%
+\ProvidesFile{gloss-occitan.ldf}[2016/02/04 v0.3 polyglossia:
+ module for Occitan]
+\PolyglossiaSetup{occitan}{
+ bcp47=oc,
+ hyphennames={occitan},
+ langtag=OCI,
+ hyphenmins={2,2},
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{occitan}{oc}
+
+\define@boolkey{occitan}[occitan@]{babelshorthands}[true]{}
+
+\ifsystem@babelshorthands
+ \setkeys{occitan}{babelshorthands=true}
+\else
+ \setkeys{occitan}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\occitan@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{occitan}%
+ \declare@shorthand{occitan}{"}{%
+ \relax\ifmmode
+ \def\xpgoc@next{''}%
+ \else
+ \def\xpgoc@next{\futurelet\xpgoc@temp\xpgoc@cwm}%
+ \fi
+ \xpgoc@next}%
+}
+\def\xpgoc@@cwm{\nobreak\discretionary{-}{}{}\nobreak\hskip\z@skip}
+\def\xpgoc@ponchinterior{%
+ \nobreak\discretionary{-}{}{\mbox{$\cdot$}}\nobreak\hskip\z@skip}
+\def\xpgoc@cwm{\let\xpgoc@@next\relax
+ \ifcat\noexpand\xpgoc@temp a%
+ \def\xpgoc@@next{\xpgoc@@cwm}%
+ \else
+ \if\noexpand\xpgoc@temp \string|%
+ \def\xpgoc@@next##1{\xpgoc@@cwm}%
+ \else
+ \if\noexpand\xpgoc@temp \string<%
+ \def\xpgoc@@next##1{«\ignorespaces}%
+ \else
+ \if\noexpand\xpgoc@temp \string>%
+ \def\xpgoc@@next##1{\unskip»}%
+ \else
+ \if\noexpand\xpgoc@temp\string/%
+ \def\xpgoc@@next##1{\slash}%
+ \else
+ \if\noexpand\xpgoc@temp\string.%
+ \def\xpgoc@@next##1{\xpgoc@ponchinterior}%
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \fi
+ \xpgoc@@next}
+\def\nooccitan@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+\def\captionsoccitan{%
+ \def\refname{Referéncias}%
+ \def\abstractname{Resumit}%
+ \def\bibname{Bibliografia}%
+ \def\prefacename{Prefaci}%
+ \def\chaptername{Capítol}%
+ \def\appendixname{Annèx}%
+ \def\contentsname{Ensenhador}%
+ \def\listfigurename{Taula de las figuras}%
+ \def\listtablename{Taula dels tablèus}%
+ \def\indexname{Indèx}%
+ \def\figurename{Figura}%
+ \def\tablename{Tablèu}%
+ %\def\thepart{}%
+ \def\partname{Partida}%
+ \def\pagename{Pagina}%
+ \def\seename{vejatz}%
+ \def\alsoname{vejatz tanben}%
+ \def\enclname{Pèça junta}%
+ \def\ccname{còpia a}%
+ \def\headtoname{A}%
+ \def\proofname{Demostracion}%
+ \def\glossaryname{Glossari}%
+}
+\def\dateoccitan{%
+ \def\occitanmonth{\ifcase\month\or
+ de~genièr\or
+ de~febrièr\or
+ de~març\or
+ d'abril\or
+ de~mai\or
+ de~junh\or
+ de~julhet\or
+ d'agost\or
+ de~setembre\or
+ d'octobre\or
+ de~novembre\or
+ de~decembre\fi
+ }%
+ \def\occitanday{\ifcase\day\or
+ 1èr\else% primièr
+ \number\day\fi% all other numbers
+ }%
+ \def\today{\occitanday\space \occitanmonth\space de~\number\year}%
+}
+\let\xpgoc@savedvalues\empty
+\AtEndPreamble{% the user or the class might define different values
+ \edef\xpgoc@savedvalues{%
+ \clubpenalty=\the\clubpenalty\space
+ \@clubpenalty=\the\@clubpenalty\space
+ \widowpenalty=\the\widowpenalty\space
+ \finalhyphendemerits=\the\finalhyphendemerits}
+}
+\def\noextras@occitan{%
+ \lccode\string"2019=\z@
+ \nooccitan@shorthands
+ \xpgoc@savedvalues
+}
+\def\blockextras@occitan{%
+ \lccode\string"2019=\string"2019
+ \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
+ \finalhyphendemerits=50000000
+ \ifoccitan@babelshorthands\occitan@shorthands\fi
+}
+
+\def\inlineextras@occitan{%
+ \lccode\string"2019=\string"2019
+ \ifoccitan@babelshorthands\occitan@shorthands\fi
+}
+%% Distributable under the LaTeX Project Public License,
+%% version 1.3c or higher (your choice). The latest version of
+%% this license is at: http://www.latex-project.org/lppl.txt
+%%
+%% This work is "author-maintained"
+%% The maintainer is Cédric Valmary
+%%
+%%
+%% End of file `gloss-occitan.ldf'.
+% \end{macrocode}
+% \iffalse
+%</gloss-occitan.ldf>
+%<*gloss-persian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-persian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-persian.ldf}[polyglossia: module for persian]
+\ifluatex
+ \xpg@warning{Persian is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\RequireBidi
+\RequirePackage{arabicnumbers}
+\RequirePackage{farsical}
+\RequirePackage{hijrical}
+\PolyglossiaSetup{persian}{
+ bcp47=fa,
+ babelname=farsi,
+ script=Arabic,
+ direction=RL,
+ scripttag=arab,
+ langtag=FAR,
+ hyphennames={nohyphenation},
+ fontsetup=true,
+ localnumeral=farsinumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{persian}{fa}
+
+% Babel and backwards compat. alias
+\setlanguagealias{persian}{farsi}
+
+\newif\if@western@numerals
+\def\tmp@western{western}
+\define@key{persian}{numerals}[eastern]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@western\@western@numeralstrue\else%
+ \@western@numeralsfalse%
+ \fi}
+
+%this is needed for \abjad in arabicnumbers.sty
+\def\tmp@true{true}
+\define@key{persian}{abjadjimnotail}[true]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@true\abjad@jim@notailtrue%
+ \else
+ \abjad@jim@notailfalse
+ \fi}
+
+% NOT YET USED
+\define@key{persian}{locale}[default]{%
+ \def\@persian@locale{#1}}
+
+%TODO add option for CALENDAR
+
+% Register default options
+\xpg@initialize@gloss@options{persian}{locale=default,numerals=eastern,abjadjimnotail=false}
+
+\def\farsigregmonth#1{\ifcase#1%
+ \or ژانویه\or فوریه\or مارس\or آوریل\or مه\or ژوئن\or ژوئیه\or اوت\or سپتامبر\or اکتبر\or نوامبر\or دسامبر\fi}
+\def\farsimonth#1{\ifcase#1%
+ \or کانون ثانی\or شباط\or اذار%%or ادار
+ \or نیسان\or ایار\or حزیران\or تموز\or آب\or ایلول\or تشرین اول\or تشرین ثانی\or کانون اول\fi}
+
+%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{persian}{\@ensure@RTL{%
+\farsinumber{\value{Hijriday}}\space\HijriMonthArabic{\value{Hijrimonth}}\space\farsinumber{\value{Hijriyear}}}}
+
+\def\captionspersian{%
+\def\prefacename{\@ensure@RTL{پیشگفتار}}%
+\def\refname{\@ensure@RTL{مراجع}}%
+\def\abstractname{\@ensure@RTL{چکیده}}%
+\def\bibname{\@ensure@RTL{کتاب‌نامه}}%
+\def\chaptername{\@ensure@RTL{فصل}}%
+\def\appendixname{\@ensure@RTL{پیوست}}%
+\def\contentsname{\@ensure@RTL{فهرست مطالب}}%
+\def\listfigurename{\@ensure@RTL{لیست تصاویر}}%
+\def\listtablename{\@ensure@RTL{لیست جداول}}%
+\def\indexname{\@ensure@RTL{نمایه}}%
+\def\figurename{\@ensure@RTL{شكل}}%
+\def\tablename{\@ensure@RTL{جدول}}%
+\def\partname{\@ensure@RTL{بخش}}%
+\def\enclname{\@ensure@RTL{پیوست}}%
+\def\ccname{\@ensure@RTL{رونوشت}}%
+\def\headtoname{\@ensure@RTL{به}}%
+\def\pagename{\@ensure@RTL{صفحة}}%
+\def\seename{\@ensure@RTL{ببینید}}%
+\def\alsoname{\@ensure@RTL{نیز ببینید}}%
+\def\proofname{\@ensure@RTL{برهان}}%
+\def\glossaryname{\@ensure@RTL{دانش‌نامه}}%
+}
+\def\datepersian{%
+ \def\today{\@ensure@RTL{\farsinumber\day\space\farsigregmonth{\month}\space\farsinumber\year}}%
+}
+
+\newcommand{\farsinumerals}[2]{\farsinumber{#2}}
+
+\def\farsinumber#1{%
+ \if@western@numerals
+ \number#1%
+ \else
+ \xpg@if@char@available{06F0}%
+ {\farsidigits{\number#1}}%
+ {\arabicdigits{\number#1}}%
+ \fi
+}
+
+%\def\farsinum#1{\expandafter\farsinumber\csname c@#1\endcsname}
+%\def\farsibracenum#1{(\expandafter\farsinumber\csname c@#1\endcsname)}
+%\def\farsiornatebracenum#1{\char"FD3E\expandafter\farsinumber\csname c@#1\endcsname\char"FD3F}
+%\def\farsialph#1{\expandafter\@farsialph\csname c@#1\endcsname}
+
+\def\persian@numbers{%
+ \let\@alph\abjad%
+ \let\@Alph\abjad%
+}
+
+\def\nopersian@numbers{%
+ \let\@alph\@latinalph%
+ \let\@Alph\@latinAlph%
+}
+
+\def\persian@globalnumbers{%
+ \let\@arabic\farsinumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+ \renewcommand\theequation{\localnumeral*{equation}}%
+}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\nopersian@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@persian{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@persian{%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase
+}
+% \end{macrocode}
+% \iffalse
+%</gloss-persian.ldf>
+%<*gloss-piedmontese.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-piedmontese.ldf}
+% \begin{macrocode}
+% !TEX encoding = UTF-8 Unicode
+\ProvidesFile{gloss-piedmontese.ldf}[2013/02/12 v1.0 polyglossia: module for piedmontese]
+\makeatletter
+\PolyglossiaSetup{piedmontese}{
+ bcp47=pms,
+ hyphennames={piedmontese},
+ hyphenmins={2,2},
+ langtag=PMS,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{piedmontese}{pms}
+
+\define@boolkey{piedmontese}[piedmontese@]{babelshorthands}[true]{}
+
+\ifsystem@babelshorthands
+ \setkeys{piedmontese}{babelshorthands=true}
+\else
+ \setkeys{piedmontese}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\piedmontese@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{piedmontese}%
+ \declare@shorthand{piedmontese}{"}{%
+ \relax\ifmmode
+ \def\xpgpms@next{''}%
+ \else
+ \def\xpgpms@next{\futurelet\xpgpms@temp\xpgpms@cwm}%
+ \fi
+ \xpgpms@next}%
+}
+
+\def\xpgpms@@cwm{\nobreak\discretionary{-}{}{}\nobreak\hskip\z@skip}
+\def\xpgpms@cwm{\let\xpgpms@@next\relax
+\ifcat\noexpand\xpgpms@temp a%
+ \def\xpgpms@@next{\pms@@cwm}%
+\else
+ \ifx\xpgpms@temp/%
+ \def\xpgpms@@next{\bbl@allowhyphens/\bbl@allowhyphens\@gobble}%
+ \else
+ \ifx\xpgpms@temp-%
+ \def\xpgpms@@next{\bbl@allowhyphens-\bbl@allowhyphens\@gobble}%
+ \else
+ \ifx\xpgpms@temp"%
+ \def\xpgpms@@next{``\expandafter\@gobble\string}%
+ \fi
+ \fi
+ \fi
+\xpgpms@@next}
+
+\def\nopiedmontese@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+\@namedef{captions\CurrentOption}{%
+ \def\prefacename{Prefassion}%
+ \def\refname{Riferiment}%
+ \def\abstractname{Somari}%
+ \def\bibname{Bibliografìa}%
+ \def\chaptername{Capìtol}%
+ \def\appendixname{Gionta}%
+ \def\contentsname{Tàula}%
+ \def\listfigurename{Lista dle figure}%
+ \def\listtablename{Lista dle tabele}%
+ \def\indexname{Tàula analìtica}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabela}%
+ \def\partname{Part}%
+ \def\enclname{Gionta/e}%
+ \def\ccname{Con còpia a}%
+ \def\headtoname{Për}%
+ \def\pagename{Pàgina}%
+ \def\seename{vëd}%
+ \def\alsoname{vëd anche}%
+ \def\proofname{Dimostrassion}%
+ \def\glossaryname{Glossari}%
+}
+\@namedef{date\CurrentOption}{%
+ \def\today{\number\day\space\ifcase\month\or
+ ëd gené\or ëd fevré\or ëd mars\or d'avril\or ëd maj\or ëd giugn\or
+ ëd luj\or d'agost\or dë stèmber\or d'otóber\or ëd novèmber\or dë dzèmber%
+ \fi\space dal\space\number\year}}
+
+\AtEndPreamble{%
+ \edef\xpgpms@savedvalues{%
+ \clubpenalty=\the\clubpenalty\space
+ \@clubpenalty=\the\@clubpenalty\space
+ \widowpenalty=\the\widowpenalty\space
+ \finalhyphendemerits=\the\finalhyphendemerits}
+}
+
+
+\def\noextras@piedmontese{%
+ \lccode\string"2019=\z@
+ \nopiedmontese@shorthands
+ \xpgpms@savedvalues
+}
+
+\def\blockextras@piedmontese{%
+ \lccode\string"2019=\string"2019
+ \clubpenalty=3000 \@clubpenalty=3000 \widowpenalty=3000
+ \finalhyphendemerits=50000000
+ \ifpiedmontese@babelshorthands\piedmontese@shorthands\fi
+}
+
+\def\inlineextras@piedmontese{%
+ \lccode\string"2019=\string"2019
+ \ifpiedmontese@babelshorthands\piedmontese@shorthands\fi
+}
+%%% CHANGES END %%%
+% \end{macrocode}
+% \iffalse
+%</gloss-piedmontese.ldf>
+%<*gloss-polish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-polish.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-polish.ldf}[polyglossia: module for polish]
+\PolyglossiaSetup{polish}{
+ bcp47=pl,
+ hyphennames={polish},
+ hyphenmins={2,2},
+ langtag=PLK,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{polish}{pl}
+
+\def\captionspolish{%
+ \def\prefacename{Przedmowa}%
+ \def\refname{Literatura}%
+ \def\abstractname{Streszczenie}%
+ \def\bibname{Bibliografia}%
+ \def\chaptername{Rozdział}%
+ \def\appendixname{Dodatek}%
+ \def\contentsname{Spis treści}%
+ \def\listfigurename{Spis rysunków}%
+ \def\listtablename{Spis tabel}%
+ \def\indexname{Indeks}%
+ \def\figurename{Rysunek}%
+ \def\tablename{Tabela}%
+ \def\partname{Część}%
+ \def\enclname{Załącznik}%
+ \def\ccname{Kopie:}%
+ \def\headtoname{Do}%
+ \def\pagename{Strona}%
+ \def\seename{Zobacz}%
+ \def\alsoname{Zobacz też}%
+ \def\proofname{Dowód}%
+ \def\glossaryname{Glossary}% <-- Needs translation
+ }
+
+\def\datepolish{%
+ \def\today{\number\day\space\ifcase\month\or
+ stycznia\or lutego\or marca\or kwietnia\or maja\or czerwca\or
+ lipca\or sierpnia\or września\or października\or
+ listopada\or grudnia\fi\space
+ \number\year}%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-polish.ldf>
+%<*gloss-polutonikogreek.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-polutonikogreek.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-polutonikogreek.ldf}[polyglossia: module for polytonic greek]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{greek}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-polutonikogreek.ldf>
+%<*gloss-portuges.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-portuges.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-portuges.ldf}[polyglossia: module for portuguese]
+
+% We only provide this gloss for backwards compatibility. The name
+% 'portuges' was selected in accordance with babel (which probably
+% introduced it in 8.3 filename times). Since polyglossia uses full
+% English language names, we use 'portuguese' now.
+
+\xpg@load@master@language{portuguese}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-portuges.ldf>
+%<*gloss-portuguese.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-portuguese.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-portuguese.ldf}[polyglossia: module for portuguese]
+
+\PolyglossiaSetup{portuguese}{
+ bcp47=pt-PT,
+ babelname=portuges,
+ hyphennames={portuges,portuguese},
+ hyphenmins={2,3},
+ langtag=PTG,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*[variant=portuguese]{portuguese}{pt-PT}
+\setlanguagealias*[variant=brazilian]{portuguese}{pt-BR}
+\setlanguagealias*{portuguese}{pt}
+
+% Babel aliases
+\setlanguagealias[variant=portuguese]{portuguese}{portuges}
+\setlanguagealias[variant=brazilian]{portuguese}{brazil}
+
+\def\portuguese@variant{portuges}
+\define@choicekey*+{portuguese}{variant}[\xpg@val\xpg@nr]{portuguese,brazilian}[portuguese]{%
+ \ifcase\xpg@nr\relax
+ % portuguese:
+ \def\portuguese@variant{portuges}%
+ \SetLanguageKeys{portuguese}{babelname=portuges,bcp47=pt-PT}%
+ \or
+ % brazilian:
+ \def\portuguese@variant{brazil}%
+ \SetLanguageKeys{portuguese}{babelname=brazil,bcp47=pt-BR}%
+ \xpg@ifdefined{brazil}{}%
+ {\xpg@warning{No hyphenation patterns were loaded for "Portuguese (Brazil)"\MessageBreak
+ I will use the standard patterns for Portuguese instead}%
+ \adddialect\l@brazil\l@portuges\relax}%
+ \fi
+ \xpg@info{Option: portuguese, variant=\xpg@val}%
+}{\xpg@warning{Unknown portuguese variant `#1'}}
+
+
+% Register default options
+\xpg@initialize@gloss@options{portuguese}{variant=portuguese}
+
+
+\def\portuguese@language{%
+ \polyglossia@setup@language@patterns{\portuguese@variant}%
+}%
+
+\def\captionsportuguese@portuges{%
+ \def\refname{Referências}%
+ \def\abstractname{Resumo}%
+ \def\bibname{Bibliografia}%
+ \def\prefacename{Prefácio}%
+ \def\chaptername{Capítulo}%
+ \def\appendixname{Apêndice}%
+ \def\contentsname{Conteúdo}%
+ \def\listfigurename{Lista de Figuras}%
+ \def\listtablename{Lista de Tabelas}%
+ \def\indexname{Índice}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabela}%
+ \def\partname{Parte}%
+ \def\pagename{Página}%
+ \def\seename{ver}%
+ \def\alsoname{ver também}%
+ \def\enclname{Anexo}%
+ \def\ccname{Com cópia a}%
+ \def\headtoname{Para}%
+ \def\proofname{Demonstração}%
+ \def\glossaryname{Glossário}%
+}
+
+\def\captionsportuguese@brazil{%
+ \def\refname{Referências}%
+ \def\abstractname{Resumo}%
+ \def\bibname{Referências Bibliográficas}%
+ \def\prefacename{Prefácio}%
+ \def\chaptername{Capítulo}%
+ \def\appendixname{Apêndice}%
+ \def\contentsname{Sumário}%
+ \def\listfigurename{Lista de Figuras}%
+ \def\listtablename{Lista de Tabelas}%
+ \def\indexname{Índice Remissivo}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabela}%
+ \def\partname{Parte}%
+ \def\pagename{Página}%
+ \def\seename{veja}%
+ \def\alsoname{veja também}%
+ \def\enclname{Anexo}%
+ \def\ccname{Cópia para}%
+ \def\headtoname{Para}%
+ \def\proofname{Demonstração}%
+ \def\glossaryname{Glossário}%
+}
+
+\def\captionsportuguese{%
+ \csname captionsportuguese@\portuguese@variant\endcsname%
+}
+
+\def\dateportuguese@portuges{%
+ \def\today{\number\day\space de\space\ifcase\month\or
+ Janeiro\or Fevereiro\or Março\or Abril\or Maio\or Junho\or
+ Julho\or Agosto\or Setembro\or Outubro\or Novembro\or Dezembro\fi
+ \space de\space\number\year}%
+}
+
+
+\def\dateportuguese@brazil{%
+ \def\today{\number\day\space de\space\ifcase\month\or
+ janeiro\or fevereiro\or março\or abril\or maio\or junho\or
+ julho\or agosto\or setembro\or outubro\or novembro\or dezembro%
+ \fi\space de\space\number\year}%
+}
+
+\def\dateportuguese{%
+ \csname dateportuguese@\portuguese@variant\endcsname%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-portuguese.ldf>
+%<*gloss-romanian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-romanian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-romanian.ldf}[polyglossia: module for romanian]
+
+\PolyglossiaSetup{romanian}{
+ bcp47=ro,
+ hyphennames={romanian},
+ hyphenmins={2,2},
+ langtag=ROM,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{romanian}{ro}
+
+\def\captionsromanian{%
+ \def\refname{Bibliografie}%
+ \def\abstractname{Rezumat}%
+ \def\bibname{Bibliografie}%
+ \def\prefacename{Prefață}%
+ \def\chaptername{Capitolul}%
+ \def\appendixname{Anexa}%
+ \def\contentsname{Cuprins}%
+ \def\listfigurename{Listă de figuri}%
+ \def\listtablename{Listă de tabele}%
+ \def\indexname{Glosar}%
+ \def\figurename{Figura}%
+ \def\tablename{Tabela}%
+ %\def\thepart{}%
+ \def\partname{Partea}%
+ \def\pagename{Pagina}%
+ \def\seename{Vezi}%
+ \def\alsoname{Vezi de asemenea}%
+ \def\enclname{Anexă}%
+ \def\ccname{Copie}%
+ \def\headtoname{Pentru}%
+ \def\proofname{Demonstrație}%
+ \def\glossaryname{Glosar}%
+ }
+
+\def\dateromanian{%
+ \def\today{\number\day~\ifcase\month\or
+ ianuarie\or februarie\or martie\or aprilie\or mai\or
+ iunie\or iulie\or august\or septembrie\or octombrie\or
+ noiembrie\or decembrie\fi
+ \space \number\year}%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-romanian.ldf>
+%<*gloss-romansh.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-romansh.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-romansh.ldf}[polyglossia: module for romansh]
+\makeatletter
+\PolyglossiaSetup{romansh}{%
+ bcp47=rm,
+ hyphennames={romansh},
+ hyphenmins={2,2},
+ langtag=RMS,
+ indentfirst=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{romansh}{rm}
+
+\def\captionsromansh{%
+ \def\prefacename{Prefaziun}%
+ \def\refname{Bibliografia}%
+ \def\abstractname{Recapitulaziun}%
+ \def\bibname{Index bibliografic}%
+ \def\chaptername{Chapitel}%
+ \def\appendixname{Appendix}%
+ \def\contentsname{Tavla dal cuntegn}%
+ \def\listfigurename{Tavla da las figuras}%
+ \def\listtablename{Tavla da las tabellas}%
+ \def\indexname{Register da materias}% Index?
+ \def\figurename{Figura}%
+ \def\tablename{Tabella}%
+ \def\partname{Part}%
+ \def\enclname{Agiunta(s)}%
+ \def\ccname{Copia a}%
+ \def\headtoname{A}%
+ \def\pagename{pagina}%
+ \def\seename{vesair }%
+ \def\alsoname{vesair era}%
+ \def\proofname{Demonstraziun}%
+ \def\glossaryname{Glossari}%
+ }
+
+\def\dateromansh{%
+ \def\today{\ifcase\day\or1.\else ils~\number\day\fi~da~%
+ \ifcase\month\or
+ schaner\or favrer\or mars\or avrigl\or matg\or zercladur\or
+ fanadur\or avust\or settember\or october\or november\or
+ december\fi\space \number\year}}
+\makeatother
+% \end{macrocode}
+% \iffalse
+%</gloss-romansh.ldf>
+%<*gloss-russian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-russian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-russian.ldf}[polyglossia: module for russian]
+
+\RequirePackage{xpg-cyrillicnumbers}
+
+\PolyglossiaSetup{russian}{
+ bcp47=ru,
+ script=Cyrillic,
+ scripttag=cyrl,
+ langtag=RUS,
+ hyphennames={russian},
+ hyphenmins={2,2},
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup,
+ localnumeral=russiannumerals,
+ Localnumeral=Russiannumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{russian}{ru}
+\setlanguagealias*[spelling=modern]{russian}{ru-luna1918}
+\setlanguagealias*[spelling=old]{russian}{ru-petr1708}
+
+\newif\if@russian@modern
+\define@key{russian}{spelling}[modern]{%
+ \ifstrequal{#1}{old}%
+ {\@russian@modernfalse\SetLanguageKeys{russian}{bcp47=ru-petr1708}}%
+ {\@russian@moderntrue\SetLanguageKeys{russian}{bcp47=ru}}%
+}
+
+\def\captionsrussian{%
+ \if@russian@modern\captionsrussian@modern\else\captionsrussian@old\fi%
+}%
+
+\def\daterussian{%
+ \if@russian@modern\daterussian@modern\else\daterussian@old\fi%
+}%
+
+\newif\ifcyrillic@numerals
+\newif\ifcyrillic@asbuk@numerals
+\define@choicekey*+{russian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
+ \ifcase\xpg@nr\relax
+ % arabic:
+ \cyrillic@numeralsfalse%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-trad:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-alph:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralstrue%
+ \fi
+ \xpg@info{Option: Russian, numerals=\xpg@val}%
+}{\xpg@warning{Unknown Russian numerals value `#1'}}
+
+\define@boolkey{russian}[russian@]{indentfirst}[true]{
+ \ifrussian@indentfirst
+ \SetLanguageKeys{russian}{indentfirst=true}
+ \else
+ \SetLanguageKeys{russian}{indentfirst=false}
+ \fi
+}
+
+\define@boolkey{russian}[russian@]{babelshorthands}[true]{}
+
+
+% Register default options
+\xpg@initialize@gloss@options{russian}{babelshorthands=false,spelling=modern,numerals=arabic,indentfirst=false}
+
+
+\ifsystem@babelshorthands
+ \setkeys{russian}{babelshorthands=true}
+\else
+ \setkeys{russian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\russian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{russian}%
+% \declare@shorthand{russian}{"`}{„}%
+% \declare@shorthand{russian}{"'}{“}%
+% \declare@shorthand{russian}{"<}{«}%
+% \declare@shorthand{russian}{">}{»}%
+ \declare@shorthand{russian}{""}{\hskip\z@skip}%
+ \declare@shorthand{russian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{russian}{"=}{\nobreak-\hskip\z@skip}%
+ \declare@shorthand{russian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
+ \declare@shorthand{russian}{"-}{%
+ \def\russian@sh@tmp{%
+ \if\russian@sh@next-\expandafter\russian@sh@emdash%
+ \else\expandafter\russian@sh@hyphen\fi%
+ }%
+ \futurelet\russian@sh@next\russian@sh@tmp}%
+ \def\russian@sh@hyphen{%
+ \nobreak\-\bbl@allowhyphens}%
+ \def\russian@sh@emdash##1##2{\cdash-##1##2}%
+ \def\cdash##1##2##3{\def\tempx@{##3}%
+ \def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
+ \ifx\tempx@\tempa@\@Acdash\else
+ \ifx\tempx@\tempb@\@Bcdash\else
+ \ifx\tempx@\tempc@\@Ccdash\else
+ \errmessage{Wrong usage of cdash}\fi\fi\fi}%
+ \def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
+ \cyrdash\hskip.2em\ignorespaces}%
+ \def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
+ \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
+ \def\@Ccdash{\leavevmode
+ \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
+ \ifx\cyrdash\undefined
+ \def\cyrdash{\hbox to.8em{--\hss--}}%
+ \fi
+ \declare@shorthand{russian}{",}{\nobreak\hskip.2em\ignorespaces}%
+}
+
+\def\norussian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+
+\def\captionsrussian@modern{%
+ \def\prefacename{Предисловие}%
+ \def\refname{Список литературы}%
+ \def\abstractname{Аннотация}%
+ \def\bibname{Литература}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Приложение}%
+ \ifcsundef{thechapter}%
+ {\def\contentsname{Содержание}}%
+ {\def\contentsname{Оглавление}}%
+ \def\listfigurename{Список иллюстраций}%
+ \def\listtablename{Список таблиц}%
+ \def\indexname{Предметный указатель}%
+ \def\authorname{Именной указатель}%
+ \def\figurename{Рис.}%
+ \def\tablename{Таблица}%
+ \def\partname{Часть}%
+ \def\enclname{вкл.}%
+ \def\ccname{исх.}%
+ \def\headtoname{вх.}%
+ \def\pagename{с.}%
+ \def\seename{см.}%
+ \def\alsoname{см.~также}%
+ \def\proofname{Доказательство}%
+}
+\def\daterussian@modern{%
+ \def\today{\number\day%
+ \space\ifcase\month\or%
+ января\or
+ февраля\or
+ марта\or
+ апреля\or
+ мая\or
+ июня\or
+ июля\or
+ августа\or
+ сентября\or
+ октября\or
+ ноября\or
+ декабря\fi%
+ \space \number\year\space г.}%
+}
+
+\def\captionsrussian@old{%
+ \def\prefacename{Предисловіе}%
+ \def\refname{Примѣчанія}%
+ \def\abstractname{Аннотація}%
+ \def\bibname{Библіографія}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Приложеніе}%
+ \ifcsundef{thechapter}%
+ {\def\contentsname{Содержаніе}}%
+ {\def\contentsname{Оглавленіе}}%
+ \def\listfigurename{Списокъ иллюстрацій}%
+ \def\listtablename{Списокъ таблицъ}%
+ \def\indexname{Предмѣтный указатель}%
+ \def\authorname{Именной указатель}%
+ \def\figurename{Рис.}%
+ \def\tablename{Таблица}%
+ \def\partname{Часть}%
+ \def\enclname{вкл.}%
+ \def\ccname{исх.}%
+ \def\headtoname{вх.}%
+ \def\pagename{с.}%
+ \def\seename{см.}%
+ \def\alsoname{см.~также}%
+ \def\proofname{Доказательство}%
+}
+
+\def\daterussian@old{%
+ \def\today{\number\day%
+ \space\ifcase\month\or%
+ января\or
+ февраля\or
+ марта\or
+ апреля\or
+ мая\or
+ іюня\or
+ іюля\or
+ августа\or
+ сентября\or
+ октября\or
+ ноября\or
+ декабря\fi%
+ \space \number\year\space г.}%
+}
+
+% The following is based on some ideas from ruscor.sty
+\def\russian@capsformat{%
+ \ifdef{\KOMAScript}{%
+ \ifdef{\chapterformat}{%
+ \renewcommand{\chapterformat}{\prechapter\thechapter\postchapter}}{}%
+ \ifdef{\sectionformat}{%
+ \renewcommand{\sectionformat}{\presection\thesection\postsection}}{}%
+ \ifdef{\subsectionformat}{%
+ \renewcommand{\subsectionformat}{\presubsection\thesubsection\postsubsection}}{}%
+ \ifdef{\subsubsectionformat}{%
+ \renewcommand{\subsubsectionformat}{\presubsubsection\thesubsubsection\postsubsubsection}}{}%
+ \ifdef{\paragraphformat}{%
+ \renewcommand{\paragraphformat}{\preparagraph\theparagraph\postparagraph}}{}%
+ \ifdef{\subparagraphformat}{%
+ \renewcommand{\subparagraphformat}{\presubparagraph\thesubparagraph\postsubparagraph}}{}%
+ }{%
+ \def\@seccntformat##1{\csname pre##1\endcsname%
+ \csname the##1\endcsname%
+ \csname post##1\endcsname}%
+ }%
+ \def\@aftersepkern{\hspace{0.5em}}%
+ \def\postchapter{.\@aftersepkern}%
+ \def\postsection{.\@aftersepkern}%
+ \def\postsubsection{.\@aftersepkern}%
+ \def\postsubsubsection{.\@aftersepkern}%
+ \def\postparagraph{.\@aftersepkern}%
+ \def\postsubparagraph{.\@aftersepkern}%
+ \def\prechapter{}%
+ \def\presection{}%
+ \def\presubsection{}%
+ \def\presubsubsection{}%
+ \def\preparagraph{}%
+ \def\presubparagraph{}%
+}
+
+\newcommand{\russiannumerals}[2]{\russiannumber{#2}}
+\newcommand{\Russiannumerals}[2]{\Russiannumber{#2}}
+
+\def\russiannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \russian@asbuk@alph{#1}%
+ \else
+ \cyr@alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\Russiannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \russian@asbuk@Alph{#1}%
+ \else
+ \cyr@Alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\let\russiannumeral=\russiannumber
+\let\Russiannumeral=\Russiannumber
+
+\def\Asbuk#1{\expandafter\russian@asbuk@Alph\csname c@#1\endcsname}
+\def\asbuk#1{\expandafter\russian@asbuk@alph\csname c@#1\endcsname}
+
+\def\AsbukTrad#1{\expandafter\cyr@Alph\csname c@#1\endcsname}
+\def\asbukTrad#1{\expandafter\cyr@alph\csname c@#1\endcsname}
+
+
+% This is a poor man's cyrillic alphanumeric. It just uses the alphabet and
+% thus ends at 30.
+\def\russian@asbuk@Alph#1{\ifcase#1\or
+ А\or Б\or В\or Г\or Д\or Е\or Ж\or
+ З\or И\or К\or Л\or М\or Н\or О\or
+ П\or Р\or С\or Т\or У\or Ф\or Х\or
+ Ц\or Ч\or Ш\or Щ\or Э\or Ю\or Я%
+ \else\xpg@ill@value{#1}{russian@asbuk@Alph}\fi%
+}
+
+\def\russian@asbuk@alph#1{\ifcase#1\or
+ а\or б\or в\or г\or д\or е\or ж\or
+ з\or и\or к\or л\or м\or н\or о\or
+ п\or р\or с\or т\or у\or ф\or х\or
+ ц\or ч\or ш\or щ\or э\or ю\or я%
+ \else\xpg@ill@value{#1}{russian@asbuk@alph}\fi%
+}
+
+\def\russian@numbers{%
+ \let\latin@alph\@alph
+ \let\latin@Alph\@Alph
+ \ifcyrillic@numerals%
+ \def\russian@alph##1{\expandafter\russiannumeral\expandafter{\the##1}}%
+ \def\russian@Alph##1{\expandafter\Russiannumeral\expandafter{\the##1}}%
+ \let\@alph\russian@alph%
+ \let\@Alph\russian@Alph%
+ \fi
+}
+
+\def\norussian@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\def\noextras@russian{%
+ \ifdef{\KOMAScript}{%
+ \ifdef{\chapterformat}{%
+ \renewcommand{\chapterformat}{\thechapter\autodot\enskip}}{}%
+ \ifdef{\sectionformat}{%
+ \renewcommand{\sectionformat}{\thesection\autodot\enskip}}{}%
+ \ifdef{\subsectionformat}{%
+ \renewcommand{\subsectionformat}{\thesubsection\autodot\enskip}}{}%
+ \ifdef{\subsubsectionformat}{%
+ \renewcommand{\subsubsectionformat}{\thesubsubsection\autodot\enskip}}{}%
+ \ifdef{\paragraphformat}{%
+ \renewcommand{\paragraphformat}{\theparagraph\autodot\enskip}}{}%
+ \ifdef{\subparagraphformat}{%
+ \renewcommand{\subparagraphformat}{\thesubparagraph\autodot\enskip}}{}%
+ }{%
+ \def\@seccntformat##1{\csname the##1\endcsname\quad}% = LaTeX kernel
+ }%
+ \ifcyrillic@numerals\norussian@numbers\fi%
+ \norussian@shorthands%
+}
+
+\def\blockextras@russian{%
+ \russian@capsformat%
+ \ifcyrillic@numerals\russian@numbers\fi%
+ \ifrussian@babelshorthands\russian@shorthands\fi%
+}
+
+\def\inlineextras@russian{%
+ \ifrussian@babelshorthands\russian@shorthands\fi%
+}
+
+%%% These lines taken from russianb.ldf, part of babel package.
+% make it optional?
+\def\sh {\mathop{\operator@font sh}\nolimits}
+\def\ch {\mathop{\operator@font ch}\nolimits}
+\def\tg {\mathop{\operator@font tg}\nolimits}
+\def\arctg {\mathop{\operator@font arctg}\nolimits}
+\def\arcctg{\mathop{\operator@font arcctg}\nolimits}
+\def\th {\mathop{\operator@font th}\nolimits}
+\def\ctg {\mathop{\operator@font ctg}\nolimits}
+\def\cth {\mathop{\operator@font cth}\nolimits}
+\def\cosec {\mathop{\operator@font cosec}\nolimits}
+\def\Prob {\mathop{\kern\z@\mathsf{P}}\nolimits}
+\def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits}
+\def\nod {\mathop{\mathrm{н.о.д.}}\nolimits}
+\def\nok {\mathop{\mathrm{н.о.к.}}\nolimits}
+\def\NOD {\mathop{\mathrm{НОД}}\nolimits}
+\def\NOK {\mathop{\mathrm{НОК}}\nolimits}
+\def\Proj {\mathop{\mathrm{Пр}}\nolimits}
+%\DeclareRobustCommand{\No}{№}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-russian.ldf>
+%<*gloss-sami.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-sami.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-sami.ldf}[polyglossia: module for sami]
+
+\PolyglossiaSetup{sami}{
+ bcp47=se,
+ babelname=samin,
+ hyphennames={samin},
+ hyphenmins={2,2},
+ language={Northern Sami},
+ langtag=NSM,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{sami}{se}
+
+% Babel and backwards compat. alias
+\setlanguagealias{sami}{samin}
+%\setlanguagealias[variant=northern]{sami}{samin}
+
+% TODO: Add other Sami varieties
+\def\sami@variant{northern}
+%\define@choicekey*+{sami}{variant}[\xpg@val\xpg@nr]{northern}[nothern]{%
+% \ifcase\xpg@nr\relax
+% % northern:
+% \def\sami@variant{samin}%
+% \SetLanguageKeys{sami}{language=Northern Sami,langtag=NSM}%
+% \xpg@fontsetup@latin{sami}%
+% \or
+% % other:
+% \def\sami@variant{}%
+% \SetLanguageKeys{sami}{language= Sami,langtag=}%
+% \xpg@fontsetup@latin{sami}%
+% \fi
+% \xpg@info{Option: sami, variant=\xpg@val}%
+%}{\xpg@warning{Unknown sami variant `#1'}}
+
+
+%\def\sami@language{%
+% \polyglossia@setup@language@patterns{\sami@variant}%
+%}%
+
+\def\captionssami@northern{%
+ \def\refname{Čujuhusat}%
+ \def\abstractname{Čoahkkáigeassu}%
+ \def\bibname{Girjjálašvuohta}%
+ \def\prefacename{Ovdasátni}%
+ \def\chaptername{Kapihttal}%
+ \def\appendixname{Čuovus}%
+ \def\contentsname{Sisdoallu}%
+ \def\listfigurename{Govvosat}%
+ \def\listtablename{Tabeallat}%
+ \def\indexname{Registtar}%
+ \def\figurename{Govus}%
+ \def\tablename{Tabealla}%
+ \def\thepart{}%
+ \def\partname{Oassi}%
+ \def\pagename{Siidu}%
+ \def\seename{geahča}%
+ \def\alsoname{geahča maiddái}%
+ \def\enclname{Mielddus}%
+ \def\ccname{Kopia sáddejuvvon}%
+ \def\headtoname{Vuostáiváldi}%
+ \def\proofname{Duođaštus}%
+ \def\glossaryname{Sátnelistu}%
+}
+
+\def\captionssami{%
+ \csname captionssami@\sami@variant\endcsname%
+}
+
+\def\datesami@northern{%
+ \def\today{\ifcase\month\or
+ ođđajagemánu\or
+ guovvamánu\or
+ njukčamánu\or
+ cuoŋománu\or
+ miessemánu\or
+ geassemánu\or
+ suoidnemánu\or
+ borgemánu\or
+ čakčamánu\or
+ golggotmánu\or
+ skábmamánu\or
+ juovlamánu\fi
+ \space\number\day.~b.\space\number\year}%
+}
+
+\def\datesami{%
+ \csname datesami@\sami@variant\endcsname%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-sami.ldf>
+%<*gloss-samin.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-samin.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-samin.ldf}[polyglossia: module for samin]
+
+% We only provide this gloss for babel compatibility. Since samin is
+% a sami variety, we use 'sami' with variant 'northern' now.
+
+\xpg@load@master@language{sami}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-samin.ldf>
+%<*gloss-sanskrit.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-sanskrit.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-sanskrit.ldf}[polyglossia: module for sanskrit]
+\ifluatex
+ \xpg@warning{Sanskrit is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+
+\RequirePackage{devanagaridigits}
+
+\PolyglossiaSetup{sanskrit}{
+ bcp47=sa-Deva,
+ langtag=SAN,
+ hyphennames={sanskrit,prakrit},
+ hyphenmins={1,3},
+ frenchspacing=true,
+ fontsetup=false, % will be done below
+ localnumeral=sanskritnumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{sanskrit}{sa}
+\setlanguagealias*[script=Devanagari]{sanskrit}{sa-Deva}
+\setlanguagealias*[script=Malayalam]{sanskrit}{sa-Mlym}
+\setlanguagealias*[script=Telugu]{sanskrit}{sa-Telu}
+\setlanguagealias*[script=Bengali]{sanskrit}{sa-Beng}
+\setlanguagealias*[script=Kannada]{sanskrit}{sa-Knda}
+\setlanguagealias*[script=Gujarati]{sanskrit}{sa-Gujr}
+\setlanguagealias*[script=Latin]{sanskrit}{sa-Latn}
+
+\define@key{sanskrit}{Script}[Devanagari]{%
+ \ifcsdef{fontsetup@sanskrit@#1}%
+ {\csname fontsetup@sanskrit@#1\endcsname}%
+ {\xpg@error{`#1' is not a valid script for Sanskrit}%
+ }%
+}
+
+\define@key{sanskrit}{script}[Devanagari]{\setkeys{sanskrit}{Script=#1}}
+
+\def\fontsetup@sanskrit@Devanagari{%
+ \SetLanguageKeys{sanskrit}{scripttag=deva,script=Devanagari,bcp47=sa-Deva}
+ \xpg@fontsetup@nonlatin{sanskrit}}
+\def\fontsetup@sanskrit@Gujarati{%
+ \SetLanguageKeys{sanskrit}{scripttag=gujr,script=Gujarati,bcp47=sa-Gujr}
+ \xpg@fontsetup@nonlatin{sanskrit}}
+\def\fontsetup@sanskrit@Malayalam{%
+ \SetLanguageKeys{sanskrit}{scripttag=mlym,script=Malayalam,bcp47=sa-Mlym}
+ \xpg@fontsetup@nonlatin{sanskrit}}
+\def\fontsetup@sanskrit@Bengali{%
+ \SetLanguageKeys{sanskrit}{scripttag=beng,script=Bengali,bcp47=sa-Beng}
+ \xpg@fontsetup@nonlatin{sanskrit}}
+\def\fontsetup@sanskrit@Kannada{%
+ \SetLanguageKeys{sanskrit}{scripttag=knda,script=Kannada,bcp47=sa-Knda}
+ \xpg@fontsetup@nonlatin{sanskrit}}
+\def\fontsetup@sanskrit@Telugu{%
+ \SetLanguageKeys{sanskrit}{scripttag=telu,script=Telugu,bcp47=sa-Relu}
+ \xpg@fontsetup@nonlatin{sanskrit}}
+\def\fontsetup@sanskrit@Latin{%
+ \SetLanguageKeys{sanskrit}{scripttag=latn,script=Latin,bcp47=sa-Latn}
+ \xpg@fontsetup@latin{sanskrit}}
+
+
+\newif\ifsanskrit@devanagari@numerals
+\sanskrit@devanagari@numeralstrue
+\define@choicekey*+{sanskrit}{numerals}[\xpg@val\xpg@nr]{Devanagari,Western}[Devanagari]{%
+ \ifcase\xpg@nr\relax
+ % Devanagari:
+ \sanskrit@devanagari@numeralstrue%
+ \or
+ % Western:
+ \sanskrit@devanagari@numeralsfalse%
+ \fi
+ \xpg@info{Option: Sanskrit, numerals=\xpg@val}%
+}{\xpg@warning{Unknown Sanskrit numeral `#1'}}
+
+
+% Register default options
+\xpg@initialize@gloss@options{sanskrit}{script=Devanagari,numerals=Devanagari}
+
+
+\newcommand{\sanskritnumerals}[2]{\sanskritnumber{#2}}
+
+\def\sanskritnumber#1{%
+ \ifsanskrit@devanagari@numerals
+ \devanagaridigits{\number#1}%
+ \else
+ \number#1%
+ \fi%
+}
+
+\ifluatex
+ \directlua{require('polyglossia-sanskrit')}%
+\else
+ \newXeTeXintercharclass\sanskrit@questionexclamation % ! ? ‼ ⁇ ⁈ ⁉ ‽
+ \newXeTeXintercharclass\sanskrit@punctthin % : ; danda double_danda
+\fi
+
+\def\sanskrit@punctthinspace{{\unskip\thinspace}}
+
+\def\sanskrit@punctuation{%
+ \ifluatex
+ \directlua{polyglossia.activate_sanskrit_punct()}%
+ \else
+ \XeTeXinterchartokenstate=1%
+ \XeTeXcharclass `\! \sanskrit@questionexclamation
+ \XeTeXcharclass `\? \sanskrit@questionexclamation
+ \XeTeXcharclass `\‼ \sanskrit@questionexclamation
+ \XeTeXcharclass `\⁇ \sanskrit@questionexclamation
+ \XeTeXcharclass `\⁈ \sanskrit@questionexclamation
+ \XeTeXcharclass `\⁉ \sanskrit@questionexclamation
+ \XeTeXcharclass `\‽ \sanskrit@questionexclamation % interrobang, U+203D
+ \XeTeXcharclass `\: \sanskrit@punctthin
+ \XeTeXcharclass `\; \sanskrit@punctthin
+ \XeTeXcharclass `\। \sanskrit@punctthin % danda, U+0964
+ \XeTeXcharclass `\॥ \sanskrit@punctthin % double danda, U+0965
+ \XeTeXinterchartoks \z@ \sanskrit@questionexclamation = \sanskrit@punctthinspace
+ \XeTeXinterchartoks \z@ \sanskrit@punctthin = \sanskrit@punctthinspace
+ \XeTeXinterchartoks \sanskrit@questionexclamation \sanskrit@punctthin = \sanskrit@punctthinspace
+ \fi
+}
+
+\def\nosanskrit@punctuation{%
+ \ifluatex
+ \directlua{polyglossia.deactivate_sanskrit_punct()}%
+ \else
+ \XeTeXcharclass `\! \z@
+ \XeTeXcharclass `\? \z@
+ \XeTeXcharclass `\‼ \z@
+ \XeTeXcharclass `\⁇ \z@
+ \XeTeXcharclass `\⁈ \z@
+ \XeTeXcharclass `\⁉ \z@
+ \XeTeXcharclass `\‽ \z@
+ \XeTeXcharclass `\: \z@
+ \XeTeXcharclass `\; \z@
+ \XeTeXcharclass `\। \z@
+ \XeTeXcharclass `\॥ \z@
+ \XeTeXinterchartokenstate=0%
+ \fi
+}
+
+\def\noextras@sanskrit{%
+ \nosanskrit@punctuation%
+}
+
+\def\blockextras@sanskrit{%
+ \sanskrit@punctuation%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-sanskrit.ldf>
+%<*gloss-scottish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-scottish.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-scottish.ldf}[polyglossia: module for scottish]
+
+% We only provide this gloss for babel compatibility. Since scottish is
+% a gaelic variety, we use 'gaelic' with variant 'scottish' now.
+
+\xpg@load@master@language{gaelic}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-scottish.ldf>
+%<*gloss-serbian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-serbian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-serbian.ldf}[polyglossia: module for serbian]
+%TODO split into gloss-serbiancyr.ldf and gloss-serbianlat.ldf
+%% load these automatically from polyglossia.sty according to the script option ??
+%% same thing for all languages that have a "script" key !
+%% BETTER APPROACH: see gloss-sanskrit!
+
+\RequirePackage{xpg-cyrillicnumbers}
+
+\PolyglossiaSetup{serbian}{
+ bcp47=sr-Latn,
+ langtag=SRB,
+ hyphennames={serbian},
+ hyphenmins={2,2},
+ indentfirst=true,
+ fontsetup=false,
+ localnumeral=serbiannumerals,
+ Localnumeral=Serbiannumerals
+ %TODO localalph
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{serbian}{sr}
+\setlanguagealias*[script=Cyrillic]{serbian}{sr-Cyrl}
+\setlanguagealias*[script=Latin]{serbian}{sr-Latn}
+
+% Babel aliases
+\setlanguagealias[script=Cyrillic]{serbian}{serbianc}
+
+\newif\if@serbian@cyr
+\define@choicekey*+{serbian}{Script}[\xpg@val\xpg@nr]{cyrillic,latin}[cyrillic]{%
+ \ifcase\xpg@nr\relax
+ % cyrillic:
+ \@serbian@cyrtrue
+ \SetLanguageKeys{serbian}{scripttag=cyrl,script=Cyrillic,babelname=serbianc,bcp47=sr-Cyrl}
+ \xpg@fontsetup@nonlatin{serbian}%
+ \or
+ % latin:
+ \@serbian@cyrfalse
+ \SetLanguageKeys{serbian}{scripttag=latn,script=Latin,bcp47=sr-Latn}
+ \xpg@fontsetup@latin{serbian}%
+ %TODO \def\serbian@language{\language=\l@serbianlat}%
+ % or should we use Croatian patterns as a fallback for the time being???
+ \fi
+ \xpg@info{Option: Serbian, script=\xpg@val}%
+}{\xpg@warning{Unknown Serbian script `#1'}}
+
+\define@key{serbian}{script}[Cyrillic]{\setkeys{serbian}{Script=#1}}
+
+\newif\ifcyrillic@numerals
+\newif\ifcyrillic@asbuk@numerals
+\define@choicekey*+{serbian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
+ \ifcase\xpg@nr\relax
+ % arabic:
+ \cyrillic@numeralsfalse%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-trad:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-alph:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralstrue%
+ \fi
+ \xpg@info{Option: Serbian, numerals=\xpg@val}%
+}{\xpg@warning{Unknown Serbian numerals value `#1'}}
+
+\setkeys{serbian}{Script,numerals}
+
+% Register default options
+\xpg@initialize@gloss@options{serbian}{script=Cyrillic,numerals=arabic}
+
+\def\captionsserbian{%
+ \if@serbian@cyr\captionsserbian@cyr\else\captionsserbian@lat\fi
+}
+
+\def\dateserbian{%
+ \if@serbian@cyr\dateserbian@cyr\else\dateserbian@lat\fi
+}
+
+\def\captionsserbian@lat{%
+ \def\refname{Bibliografija}%
+ \def\abstractname{Sažetak}%
+ \def\bibname{Literatura}%
+ \def\prefacename{Predgovor}%
+ \def\chaptername{Glava}%
+ \def\appendixname{Dodatak}%
+ \def\contentsname{Sadržaj}%
+ \def\listfigurename{Spisak slika}%
+ \def\listtablename{Spisak tabela}%
+ \def\indexname{Registar}%
+ \def\figurename{Slika}%
+ \def\tablename{Tabela}%
+ \def\partname{Deo}%
+ \renewcommand\thepart{\ifcase\value{part}\or Prvi\or Drugi\or
+ Treći\or Čevrti\or Peti\or Šesti\or Sedmi\or Osmi\or
+ Deveti\or Deseti\or Jedanaesti\or Dvanaesti\or Trinaesti\or
+ Četrnaesti\or Petnaesti\or Šesnaesti\or Sedamnaesti\or
+ Osamnaesti\or Devetnaesti\or Dvadeseti\fi}%
+ \def\pagename{Strana}%
+ \def\seename{Vidi}%
+ \def\alsoname{Vidi takođe}%
+ \def\enclname{Prilozi}%
+ \def\ccname{Kopije}%
+ \def\headtoname{Prima}%
+ \def\proofname{Dokaz}%
+ \def\glossaryname{Rečnik nepoznatih reči}%
+}
+
+\def\dateserbian@lat{%
+ \def\today{\number\day .~\ifcase\month\or
+ januar\or februar\or mart\or april\or maj\or
+ jun\or jul\or avgust\or septembar\or oktobar\or novembar\or
+ decembar\fi \space \number\year.}%
+}
+
+\def\captionsserbian@cyr{%
+ \def\refname{Библиографија}%
+ \def\abstractname{Сажетак}%
+ \def\bibname{Литература}%
+ \def\prefacename{Предговор}%
+ \def\chaptername{Глава}%
+ \def\appendixname{Додатак}%
+ \def\contentsname{Садржај}%
+ \def\listfigurename{Списак слика}%
+ \def\listtablename{Списак табела}%
+ \def\indexname{Регистар}%
+ \def\figurename{Слика}%
+ \def\tablename{Табела}%
+ \def\partname{Део}%
+ \renewcommand\thepart{\ifcase\value{part}\or Први\or Други\or Трећи\or
+ Четврти\or Пети\or Шести\or Седми\or Осми\or Девети\or Десети\or
+ Једанаести\or Дванаести\or Тринаести\or Четрнаести\or Петнаести\or
+ Шеснаести\or Седамнаести\or Осамнаести\or Деветнаести\or Двадесети\fi}%
+ \def\pagename{Страна}%
+ \def\seename{Види}%
+ \def\alsoname{Види такође}%
+ \def\enclname{Прилози}%
+ \def\ccname{Копије}%
+ \def\headtoname{Прима}%
+ \def\proofname{Доказ}%
+ \def\glossaryname{Речник непознатих речи}%
+}
+
+\def\dateserbian@cyr{%
+ \def\today{\number\day .~\ifcase\month\or
+ јануар\or фебруар\or март\or април\or мај\or
+ јун\or јул\or август\or септембар\or октобар\or новембар\or
+ децембар\fi \space \number\year.}%
+}
+
+
+\newcommand{\serbiannumerals}[2]{\serbiannumber{#2}}
+\newcommand{\Serbiannumerals}[2]{\Serbiannumber{#2}}
+
+\def\serbiannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \serbian@asbuk@alph{#1}%
+ \else
+ \cyr@alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\Serbiannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \serbian@asbuk@Alph{#1}%
+ \else
+ \cyr@Alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\let\serbiannumeral=\serbiannumber
+\let\Serbiannumeral=\Serbiannumber
+
+\def\serbian@numbers{%
+ \let\latin@alph\@alph
+ \let\latin@Alph\@Alph
+ \ifcyrillic@numerals
+ \def\serbian@alph##1{\expandafter\serbiannumeral\expandafter{\the##1}}%
+ \def\serbian@Alph##1{\expandafter\Serbiannumeral\expandafter{\the##1}}%
+ \let\@alph\serbian@alph%
+ \let\@Alph\serbian@Alph%
+ \fi
+}
+
+\def\noserbian@numbers{%
+ \let\@alph\latin@alph
+ \let\@Alph\latin@Alph
+}
+
+\def\blockextras@serbian{%
+ \ifcyrillic@numerals\serbian@numbers\fi
+}
+
+\def\noextras@serbian{%
+ \ifcyrillic@numerals\noserbian@numbers\fi
+}
+
+\def\Asbuk#1{\expandafter\serbian@asbuk@Alph\csname c@#1\endcsname}
+\def\asbuk#1{\expandafter\serbian@asbuk@alph\csname c@#1\endcsname}
+
+\def\AsbukTrad#1{\expandafter\cyr@Alph\csname c@#1\endcsname}
+\def\asbukTrad#1{\expandafter\cyr@alph\csname c@#1\endcsname}
+
+% This is a poor man's cyrillic alphanumeric. It just uses the alphabet and
+% thus ends at 30.
+\def\serbian@asbuk@Alph#1{\ifcase#1\or
+ А\or Б\or В\or Г\or Д\or Е\or Ж\or
+ З\or И\or К\or Л\or М\or Н\or О\or
+ П\or Р\or С\or Т\or У\or Ф\or Х\or
+ Ц\or Ч\or Ш\or Щ\or Э\or Ю\or Я%
+ \else\xpg@ill@value{#1}{serbian@asbuk@Alph}\fi%
+}
+
+\def\serbian@asbuk@alph#1{\ifcase#1\or
+ а\or б\or в\or г\or д\or е\or ж\or
+ з\or и\or к\or л\or м\or н\or о\or
+ п\or р\or с\or т\or у\or ф\or х\or
+ ц\or ч\or ш\or щ\or э\or ю\or я%
+ \else\xpg@ill@value{#1}{serbian@asbuk@alph}\fi%
+}
+
+
+% \end{macrocode}
+% \iffalse
+%</gloss-serbian.ldf>
+%<*gloss-serbianc.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-serbianc.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-serbianc.ldf}[polyglossia: module for serbian (cyrillic)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{serbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-serbianc.ldf>
+%<*gloss-slovak.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-slovak.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-slovak.ldf}[polyglossia: module for slovak]
+
+\PolyglossiaSetup{slovak}{
+ bcp47=sk,
+ hyphennames={slovak},
+ hyphenmins={2,2},
+ langtag=SKY,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{slovak}{sk}
+
+\ifluatex
+ \RequirePackage{luavlna}
+\fi
+
+\define@boolkey{slovak}[slovak@]{babelshorthands}[true]{}
+
+\define@boolkey{slovak}[slovak@]{splithyphens}[true]{}
+
+\define@boolkey{slovak}[slovak@]{vlna}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{slovak}{babelshorthands=false,splithyphens=true,vlna=true}
+
+\ifsystem@babelshorthands
+ \setkeys{slovak}{babelshorthands=true}
+\else
+ \setkeys{slovak}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\slovak@@splhyphen#1{%
+ \ifnum\hyphenchar \font>0%
+ \kern\z@\discretionary{-}{\char\hyphenchar\the\font}{#1}%
+ \nobreak\hskip\z@%
+ \else%
+ #1%
+ \fi%
+}
+
+\def\slovak@splhyphen{%
+ \slovak@@splhyphen{-}%
+}
+
+\def\slovak@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{slovak}%
+ \declare@shorthand{slovak}{"=}{\slovak@splhyphen}%
+ \declare@shorthand{slovak}{""}{\hskip\z@skip}%
+ \declare@shorthand{slovak}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{slovak}{"-}{\nobreak\-\bbl@allowhyphens}%
+ \declare@shorthand{slovak}{"|}{%
+ \textormath{\penalty\@M\discretionary{-}{}{\kern.03em}%
+ \bbl@allowhyphens}{}%
+ }%
+ \declare@shorthand{slovak}{"/}{\textormath
+ {\bbl@allowhyphens\discretionary{/}{}{/}\bbl@allowhyphens}{}}%
+ \declare@shorthand{slovak}{"`}{„}%
+ \declare@shorthand{slovak}{"'}{“}%
+ \declare@shorthand{slovak}{"<}{«}%
+ \declare@shorthand{slovak}{">}{»}%
+}
+
+\def\noslovak@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\ifxetex
+ % splithyphens
+ \newXeTeXintercharclass\slovak@hyphen % -
+ % vlna
+ \newXeTeXintercharclass\slovak@openpunctuation
+ \newXeTeXintercharclass\slovak@nonsyllabicpreposition
+ \ifdefined\e@alloc@intercharclass@top
+ \chardef\slovak@boundary=\e@alloc@intercharclass@top
+ \else
+ \ifdefined\XeTeXinterwordspaceshaping
+ \chardef\slovak@boundary=4095 %
+ \def\newXeTeXintercharclass{%
+ \e@alloc\XeTeXcharclass\chardef
+ \xe@alloc@intercharclass\m@ne\@ucharclass@boundary}
+ \else
+ \chardef\slovak@boundary=255
+ \fi
+ \fi
+\fi
+
+\def\slovak@hyphens{%
+ \ifluatex
+ \AfterPreamble{\enablesplithyphens{slovak}}%
+ \else
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\- \slovak@hyphen
+ \XeTeXinterchartoks \z@ \slovak@hyphen = {\slovak@@splhyphen}% "-" -> "\slovak@@splhyphen-"
+ % necessary if used together with vlna:
+ \XeTeXinterchartoks \slovak@nonsyllabicpreposition \slovak@hyphen = {\slovak@@splhyphen}% "-" -> "\slovak@@splhyphen-"
+ \fi%
+}
+
+\def\noslovak@hyphens{%
+ \ifluatex
+ \AfterPreamble{\disablesplithyphens{slovak}}%
+ \else
+ \XeTeXcharclass `\- \z@
+ \fi%
+}
+
+% Add nonbreakable space after single-letter word to
+% prevent them to land at the end of a line
+\def\slovak@vlna{%
+ \ifluatex
+ \preventsingleon
+ \else
+ % Code taken and adapted from xevlna.sty
+ \XeTeXinterchartokenstate=1
+ \XeTeXcharclass `\( \slovak@openpunctuation
+ \XeTeXcharclass `\[ \slovak@openpunctuation
+ \XeTeXcharclass `\„ \slovak@openpunctuation
+ \XeTeXcharclass `\» \slovak@openpunctuation
+ \XeTeXcharclass `\K \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\k \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\S \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\s \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\V \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\v \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\Z \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\z \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\O \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\o \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\U \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\u \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\A \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\a \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\I \slovak@nonsyllabicpreposition
+ \XeTeXcharclass `\i \slovak@nonsyllabicpreposition
+ \XeTeXinterchartoks \slovak@boundary \slovak@nonsyllabicpreposition {\slovak@interchartoks}
+ \XeTeXinterchartoks \slovak@openpunctuation \slovak@nonsyllabicpreposition {\slovak@interchartoks}
+ \def\slovak@nointerchartoks{\let\slovak@interchartoks\slovak@PreCSpreposition}
+ \def\slovak@PreCSpreposition{\def\next{}%
+ \ifnum\catcode`\ =10 % nothing will be done in verbatim
+ \ifmmode % nothing in math
+ \else
+ \let\slovak@interchartoks\slovak@nointerchartoks
+ \let\next\slovak@ExamineCSpreposition
+ \fi \fi
+ \next%
+ }
+ \def\slovak@ExamineCSpreposition ##1{##1\futurelet\next\slovak@ProcessCSpreposition}
+ \def\slovak@ProcessCSpreposition{\ifx\next\slovak@XeTeXspace\nobreak\fi}
+ \futurelet\slovak@XeTeXspace{ }\slovak@nointerchartoks
+ \fi
+}
+
+\def\noslovak@vlna{%
+ \ifluatex
+ \preventsingleoff
+ \else
+ \XeTeXcharclass`\(\z@
+ \XeTeXcharclass`\[\z@
+ \XeTeXcharclass`\„\z@
+ \XeTeXcharclass`\»\z@
+ \XeTeXcharclass`\K\z@
+ \XeTeXcharclass`\k\z@
+ \XeTeXcharclass`\S\z@
+ \XeTeXcharclass`\s\z@
+ \XeTeXcharclass`\V\z@
+ \XeTeXcharclass`\v\z@
+ \XeTeXcharclass`\Z\z@
+ \XeTeXcharclass`\z\z@
+ \XeTeXcharclass`\O\z@
+ \XeTeXcharclass`\o\z@
+ \XeTeXcharclass`\U\z@
+ \XeTeXcharclass`\u\z@
+ \XeTeXcharclass`\A\z@
+ \XeTeXcharclass`\a\z@
+ \XeTeXcharclass`\I\z@
+ \XeTeXcharclass`\i\z@
+ \fi
+}
+
+
+\def\captionsslovak{%
+ \def\refname{Referencie}%
+ \def\abstractname{Abstrakt}%
+ \def\bibname{Literatúra}%
+ \def\prefacename{Úvod}%
+ \def\chaptername{Kapitola}%
+ \def\appendixname{Dodatok}%
+ \def\contentsname{Obsah}%
+ \def\listfigurename{Zoznam obrázkov}%
+ \def\listtablename{Zoznam tabuliek}%
+ \def\indexname{Index}%
+ \def\figurename{Obrázok}%
+ \def\tablename{Tabuľka}%
+ %\def\thepart{}%
+ \def\partname{Časť}%
+ \def\pagename{Strana}%
+ \def\seename{viď}%
+ \def\alsoname{viď tiež}%
+ \def\enclname{Prílohy}%
+ \def\ccname{cc.}%
+ \def\headtoname{Pre}% was komu
+ \def\proofname{Dôkaz}%
+ \def\glossaryname{Slovník}%
+}
+
+\def\dateslovak{%
+ \def\today{\number\day.~\ifcase\month\or
+ januára\or februára\or marca\or apríla\or mája\or
+ júna\or júla\or augusta\or septembra\or októbra\or
+ novembra\or decembra\fi
+ \space \number\year}%
+}
+
+\def\noextras@slovak{%
+ \noslovak@shorthands%
+ \noslovak@hyphens%
+ \noslovak@vlna%
+ \ifxetex\XeTeXinterchartokenstate=0\fi%
+}
+
+\def\blockextras@slovak{%
+ \ifslovak@babelshorthands\slovak@shorthands\fi%
+ \ifslovak@vlna\slovak@vlna\else\noslovak@vlna\fi%
+ \ifslovak@splithyphens\slovak@hyphens\else\noslovak@hyphens\fi%
+}
+
+\def\inlineextras@slovak{%
+ \ifslovak@babelshorthands\slovak@shorthands\fi%
+ \ifslovak@vlna\slovak@vlna\else\noslovak@vlna\fi%
+ \ifslovak@splithyphens\slovak@hyphens\else\noslovak@hyphens\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-slovak.ldf>
+%<*gloss-slovene.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-slovene.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-slovene.ldf}[polyglossia: module for slovenian]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{slovenian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-slovene.ldf>
+%<*gloss-slovenian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-slovenian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-slovenian.ldf}[polyglossia: module for slovenian]
+
+\PolyglossiaSetup{slovenian}{
+ bcp47=sl,
+ hyphennames={slovenian,slovene},
+ babelname=slovene,
+ hyphenmins={2,2},
+ langtag=SLV,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{slovenian}{sl}
+
+% Babel aliases
+\setlanguagealias{slovenian}{slovene}
+
+\define@boolkey{slovenian}[slovenian@]{localalph}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{slovenian}{localalph=false}
+
+
+\def\captionsslovenian{%
+ \def\refname{Literatura}%
+ \def\abstractname{Povzetek}%
+ \def\bibname{Literatura}%
+ \def\prefacename{Predgovor}%
+ \def\chaptername{Poglavje}%
+ \def\appendixname{Dodatek}%
+ \def\contentsname{Kazalo}%
+ \def\listfigurename{Slike}%
+ \def\listtablename{Tabele}%
+ \def\indexname{Stvarno kazalo}%
+ \def\figurename{Slika}%
+ \def\tablename{Tabela}%
+ %\def\thepart{}%
+ \def\partname{Del}%
+ \def\pagename{Stran}%
+ \def\seename{glej}%
+ \def\alsoname{glej tudi}%
+ \def\enclname{Priloge}%
+ \def\ccname{Kopije}%
+ \def\headtoname{Prejme}%
+ \def\proofname{Dokaz}%
+ \def\glossaryname{Slovar}%
+}
+
+\def\dateslovenian{%
+ \def\today{\number\day.~\ifcase\month\or
+ januar\or februar\or marec\or april\or maj\or junij\or
+ julij\or avgust\or september\or oktober\or november\or december\fi
+ \space \number\year}%
+}
+
+\def\slovenian@alph#1{%
+ \ifcase#1\or a\or b\or c\or č\or d\or e\or f\or g\or h\or i\or j\or k\or l\or
+ m\or n\or o\or p\or r\or s\or š\or t\or u\or v\or z\or ž\else#1\fi
+}
+\def\slovenian@Alph#1{%
+ \ifcase#1\or A\or B\or C\or Č\or D\or E\or F\or G\or H\or I\or J\or K\or L\or
+ M\or N\or O\or P\or R\or S\or Š\or T\or U\or V\or Z\or Ž\else#1\fi
+}
+
+\def\abeceda#1{\expandafter\slovenian@alph\csname c@#1\endcsname}
+\def\Abeceda#1{\expandafter\slovenian@Alph\csname c@#1\endcsname}
+
+\def\extras@slovenian{%
+ \ifslovenian@localalph\let\alph\abeceda\let\Alph\Abeceda\fi%
+}
+
+\def\blockextras@slovenian{\extras@slovenian}
+
+\def\inlineextras@slovenian{\extras@slovenian}
+
+\def\noextras@slovenian{\let\alph\latinalph\let\Alph\latinAlph}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-slovenian.ldf>
+%<*gloss-sorbian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-sorbian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-sorbian.ldf}[polyglossia: module for sorbian]
+
+\PolyglossiaSetup{sorbian}{
+ bcp47=hsb,
+ language=Upper Sorbian,
+ babelname=uppersorbian,
+ hyphennames={usorbian,uppersorbian},
+ langtag=USB,
+ hyphenmins={2,2},
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*[variant=upper]{sorbian}{hsb}
+\setlanguagealias*[variant=lower]{sorbian}{dsb}
+% Backwards compat. aliases
+\setlanguagealias[variant=lower]{sorbian}{lsorbian}
+\setlanguagealias[variant=upper]{sorbian}{usorbian}
+
+% Babel aliases
+\setlanguagealias[variant=lower]{sorbian}{lowersorbian}
+\setlanguagealias[variant=upper]{sorbian}{uppersorbian}
+
+\def\sorbian@variant{usorbian}
+\define@choicekey*+{sorbian}{variant}[\xpg@val\xpg@nr]{upper,lower}[upper]{%
+ \ifcase\xpg@nr\relax
+ % upper:
+ \def\sorbian@variant{usorbian}%
+ \SetLanguageKeys{sorbian}{language=Upper Sorbian,langtag=USB,babelname=uppersorbian,bcp47=hsb}%
+ \xpg@fontsetup@latin{sorbian}%
+ % Check if \l@usorbian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{usorbian}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{##1}%
+ {\csletcs{l@usorbian}{l@##1}\listbreak}%
+ {}%
+ }%
+ \docsvlist{uppersorbian}
+ \xpg@ifdefined{usorbian}{}{%
+ \xpg@warning{No hyphenation patterns for Upper Sorbian found\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@usorbian0%
+ }
+ }%
+ \or
+ % lower:
+ \def\sorbian@variant{lsorbian}%
+ \SetLanguageKeys{sorbian}{language=Lower Sorbian,langtag=LSB,babelname=lowersorbian,bcp47=dsb}%
+ \xpg@fontsetup@latin{sorbian}%
+ % Check if \l@lsorbian is defined. If not, try to set it to some variety
+ % (specific order as in the csv list below), or null language if everything fails
+ \xpg@ifdefined{lsorbian}{}{%
+ \def\do##1{%
+ \xpg@ifdefined{##1}%
+ {\csletcs{l@lsorbian}{l@##1}\listbreak}%
+ {}%
+ }%
+ \docsvlist{lowersorbian,Lsorbian,usorbian,uppersorbian}
+ \xpg@ifdefined{lsorbian}{}{%
+ \xpg@warning{No hyphenation patterns for Lower Sorbian found\MessageBreak
+ I will use the 'null' language instead}%
+ \adddialect\l@lsorbian0%
+ }
+ }%
+ \fi
+ \xpg@info{Option: sorbian, variant=\xpg@val}%
+}{\xpg@warning{Unknown sorbian variant `#1'}}
+
+
+\define@boolkey{sorbian}[sorbian@]{olddate}[true]{}
+
+% Register default options
+\xpg@initialize@gloss@options{sorbian}{variant=upper,olddate=false}
+
+
+\def\sorbian@language{%
+ \polyglossia@setup@language@patterns{\sorbian@variant}%
+}%
+
+
+\def\captionssorbian@lsorbian{%
+ \def\refname{Referency}%
+ \def\abstractname{Abstrakt}%
+ \def\bibname{Literatura}%
+ \def\prefacename{Zawod}%
+ \def\chaptername{Kapitl}%
+ \def\appendixname{Dodawki}%
+ \def\contentsname{Wopśimjeśe}%
+ \def\listfigurename{Zapis wobrazow}%
+ \def\listtablename{Zapis tabulkow}%
+ \def\indexname{Indeks}%
+ \def\figurename{Wobraz}%
+ \def\tablename{Tabulka}%
+ %\def\thepart{}%
+ \def\partname{Źěl}%
+ \def\pagename{Strona}%
+ \def\seename{gl.}%
+ \def\alsoname{gl.~teke}%
+ \def\enclname{Pśiłoga}%
+ \def\ccname{CC}%
+ \def\headtoname{Komu}%
+ \def\proofname{Proof}%
+ \def\glossaryname{Glossary}%
+}
+
+\def\captionssorbian@usorbian{%
+ \def\refname{Referency}%
+ \def\abstractname{Abstrakt}%
+ \def\bibname{Literatura}%
+ \def\prefacename{Zawod}%
+ \def\chaptername{Kapitl}%
+ \def\appendixname{Dodawki}%
+ \def\contentsname{Wobsah}%
+ \def\listfigurename{Zapis wobrazow}%
+ \def\listtablename{Zapis tabulkow}%
+ \def\indexname{Indeks}%
+ \def\figurename{Wobraz}%
+ \def\tablename{Tabulka}%
+ %\def\thepart{}%
+ \def\partname{Dźěl}%
+ \def\pagename{Strona}%
+ \def\seename{hl.}%
+ \def\alsoname{hl.~tež}%
+ \def\enclname{Přłoha}%
+ \def\ccname{CC}%
+ \def\headtoname{Komu}%
+ \def\proofname{Proof}% <-- needs translation
+ \def\glossaryname{Glossary}% <-- needs translation
+}%
+
+\def\captionssorbian{%
+ \csname captionssorbian@\sorbian@variant\endcsname%
+}
+
+\def\datesorbian@lsorbian{%
+ \def\oldtoday{%
+ \number\day.~\ifcase\month\or
+ wjelikego rožka\or małego rožka\or nalětnika\or
+ jatšownika\or rožownika\or smažnika\or pražnika\or
+ žnjeńca\or požnjeńca\or winowca\or nazymnika\or
+ godownika\fi\space \number\year}%
+ \def\today{%
+ \ifsorbian@olddate
+ \oldtoday%
+ \else
+ \number\day.~\ifcase\month\or
+ januara\or februara\or měrca\or apryla\or maja\or
+ junija\or julija\or awgusta\or septembra\or oktobra\or
+ nowembra\or decembra\fi
+ \space \number\year%
+ \fi
+ }%
+}
+
+\def\datesorbian@usorbian{%
+ \def\oldtoday{\number\day.~\ifcase\month\or
+ wulkeho róžka\or małeho róžka\or nalětnika\or
+ jutrownika\or róžownika\or smažnika\or pražnika\or
+ žnjenca\or požnjenca\or winowca\or nazymnika\or
+ hodownika\fi \space \number\year}%
+ \def\today{%
+ \ifsorbian@olddate
+ \oldtoday%
+ \else
+ \number\day.~\ifcase\month\or
+ januara\or februara\or měrca\or apryla\or meje\or junija\or
+ julija\or awgusta\or septembra\or oktobra\or
+ nowembra\or decembra\fi
+ \space \number\year%
+ \fi
+ }%
+}
+
+\def\datesorbian{%
+ \csname datesorbian@\sorbian@variant\endcsname%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-sorbian.ldf>
+%<*gloss-spanish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-spanish.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-spanish.ldf}[polyglossia: module for spanish]
+
+\PolyglossiaSetup{spanish}{
+ bcp47=es-ES,
+ hyphennames={spanish},
+ hyphenmins={2,2},
+ totalhyphenmin=5,
+ langtag=ESP,
+ frenchspacing=true,
+ indentfirst=true,
+ fontsetup=true,
+ babelname=spanish
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{spanish}{es}
+\setlanguagealias*[variant=mexican]{spanish}{es-MX}
+\setlanguagealias*[variant=spanish]{spanish}{es-ES}
+
+% Babel aliases
+\setlanguagealias[variant=mexican]{spanish}{spanishmx}
+
+\newif\if@spanish@mexico
+\@spanish@mexicofalse
+\define@choicekey*+{spanish}{variant}[\xpg@val\xpg@nr]{spanish,mexican}[spanish]{%
+ \ifcase\xpg@nr\relax
+ % spanish:
+ \@spanish@mexicofalse%
+ \SetLanguageKeys{spanish}{babelname=spanish,bcp47=es-ES}%
+ \or
+ % mexican:
+ \@spanish@mexicotrue%
+ \SetLanguageKeys{spanish}{babelname=spanishmx,bcp47=es-MX}%
+ \fi
+ \xpg@info{Option: spanish, variant=\xpg@val}%
+}{\xpg@warning{Unknown spanish variant `#1'}}
+
+% Localized math operators à la babel
+\newif\ifspanish@accentedoperators
+\newif\ifspanish@spacedoperators
+\newif\ifspanish@locoperators
+
+\define@choicekey*+{spanish}{spanishoperators}[\xpg@val\xpg@nr]{all,accented,spaced,none}[all]{%
+ \ifcase\xpg@nr\relax
+ % all:
+ \spanish@locoperatorstrue%
+ \spanish@accentedoperatorstrue%
+ \spanish@spacedoperatorstrue%
+ \or
+ % accented:
+ \spanish@locoperatorsfalse%
+ \spanish@accentedoperatorstrue%
+ \spanish@spacedoperatorsfalse%
+ \or
+ % spaced:
+ \spanish@locoperatorsfalse%
+ \spanish@accentedoperatorsfalse%
+ \spanish@spacedoperatorstrue%
+ \or
+ % none:
+ \spanish@locoperatorsfalse%
+ \spanish@accentedoperatorsfalse%
+ \spanish@spacedoperatorsfalse%
+ \fi
+ \xpg@info{Option: Spanish, spanishoperators=\xpg@val}%
+}{\xpg@warning{Unknown spanishoperators value `#1'}}
+
+
+% Register default options
+\xpg@initialize@gloss@options{spanish}{variant=spanish,spanishoperators=none}
+
+\let\xpg@save@lim\lim
+\let\xpg@save@limsup\limsup
+\let\xpg@save@liminf\liminf
+\let\xpg@save@max\max
+\let\xpg@save@min\min
+\let\xpg@save@inf\inf
+\let\xpg@save@bmod\bmod
+\let\xpg@save@pmod\pmod
+
+\def\spanish@accentedoperators{%
+ \DeclareRobustCommand\lim{\mathop{\operator@font lím}}%
+ \DeclareRobustCommand\limsup{\mathop{\operator@font lím\,sup}}%
+ \DeclareRobustCommand\liminf{\mathop{\operator@font lím\,inf}}%
+ \DeclareRobustCommand\max{\mathop{\operator@font máx}}%
+ \DeclareRobustCommand\min{\mathop{\operator@font mín}}%
+ \DeclareRobustCommand\inf{\mathop{\operator@font ínf}}%
+ \DeclareRobustCommand\bmod{%
+ \nonscript\mskip-\medmuskip\mkern5mu%
+ \mathbin{\operator@font mód}\penalty900\mkern5mu%
+ \nonscript\mskip-\medmuskip}%
+ \@ifundefined{@amsmath@err}%
+ {\DeclareRobustCommand\pmod[1]{%
+ \allowbreak\mkern18mu({\operator@font mód}\,\,##1)}}%
+ {\let\xpg@save@mod\mod
+ \DeclareRobustCommand\mod[1]{\allowbreak\if@display\mkern18mu
+ \else\mkern12mu\fi{\operator@font mód}\,\,##1}%
+ \DeclareRobustCommand\pmod[1]{\pod{{\operator@font mód}%
+ \mkern6mu##1}}}%
+}
+
+\def\nospanish@accentedoperators{%
+ \let\lim\xpg@save@lim%
+ \let\limsup\xpg@save@limsup%
+ \let\liminf\xpg@save@liminf%
+ \let\max\xpg@save@max%
+ \let\min\xpg@save@min%
+ \let\inf\xpg@save@inf%
+ \let\bmod\xpg@save@bmod%
+ \let\pmod\xpg@save@pmod%
+ \@ifundefined{@amsmath@err}{}{\let\mod\xpg@save@mod}%
+}
+
+\let\xpg@save@arccos\arccos
+\let\xpg@save@arcsin\arcsin
+\let\xpg@save@arctan\arctan
+\let\arcsen\arcsin
+\let\arctg\arctan
+
+
+\def\spanish@spacedoperators{%
+ \DeclareRobustCommand\arccos{\mathop{\operator@font arc\,cos}\nolimits}%
+ \DeclareRobustCommand\arcsin{\mathop{\operator@font arc\,sen}\nolimits}%
+ \DeclareRobustCommand\arctan{\mathop{\operator@font arc\,tg}\nolimits}%
+}
+
+\def\nospanish@spacedoperators{%
+ \let\arccos\xpg@save@arccos%
+ \let\arcsen\arcsin%
+ \let\arctg\arctan%
+}
+
+
+\let\xpg@save@sin\sin
+\let\xpg@save@tan\tan
+\let\xpg@save@sinh\sinh
+\let\xpg@save@tanh\tanh
+\let\sen\sin
+\let\tg\tan
+\let\senh\sinh
+\let\tgh\tanh
+
+\def\spanish@locoperators{%
+ \DeclareRobustCommand\sin{\mathop{\operator@font sen}\nolimits}%
+ \DeclareRobustCommand\tan{\mathop{\operator@font tg}\nolimits}%
+ \DeclareRobustCommand\sinh{\mathop{\operator@font senh}\nolimits}%
+ \DeclareRobustCommand\tanh{\mathop{\operator@font tgh}\nolimits}%
+}
+
+\def\nospanish@locoperators{%
+ \let\sen\xpg@save@sin%
+ \let\tg\xpg@save@tan%
+ \let\sinh\xpg@save@sinh%
+ \let\tanh\xpg@save@tanh%
+ \let\sen\relax%
+ \let\tg\relax%
+ \let\senh\relax%
+ \let\tgh\relax%
+}
+
+\newcommand*\spanishoperator[2][]{%
+ \ifx#1\\\\
+ \protected@csxdef{#2}{\mathop{\operator@font #2}\nolimits}%
+ \else
+ \protected@csxdef{#2}{\mathop{\operator@font #1}\nolimits}%
+ \fi
+}
+
+\def\captionsspanish{%
+ \def\prefacename{Prefacio}%
+ \def\refname{Referencias}%
+ \def\abstractname{Resumen}%
+ \def\bibname{Bibliografía}%
+ \def\chaptername{Capítulo}%
+ \def\appendixname{Apéndice}%
+ \def\contentsname{Índice general}%
+ \def\listfigurename{Índice de figuras}%
+ \def\listtablename{Índice de cuadros}%
+ \def\indexname{Índice alfabético}%
+ \def\figurename{Figura}%
+ \def\tablename{Cuadro}%
+ \def\partname{Parte}%
+ \def\enclname{Adjunto(s)}%
+ \def\ccname{Copia a}%
+ \def\headtoname{A}%
+ \def\pagename{Página}%
+ \def\seename{véase}%
+ \def\alsoname{véase también}%
+ \def\proofname{Prueba}%
+ \def\glossaryname{Glosario}%
+ \if@spanish@mexico
+ \captionsspanish@mexico%
+ \fi%
+}
+
+\def\captionsspanish@mexico{%
+ \def\tablename{Tabla}%
+}
+
+\def\datespanish{%
+ \def\today{\number\day~de~\ifcase\month\or
+ enero\or febrero\or marzo\or abril\or mayo\or junio\or
+ julio\or agosto\or septiembre\or octubre\or noviembre\or
+ diciembre\fi\space de~\number\year}%
+}
+
+\def\noextras@spanish{%
+ \nospanish@accentedoperators%
+ \nospanish@spacedoperators%
+ \nospanish@locoperators%
+}
+
+\def\blockextras@spanish{%
+ \ifspanish@accentedoperators\spanish@accentedoperators\fi%
+ \ifspanish@spacedoperators\spanish@spacedoperators\fi%
+ \ifspanish@locoperators\spanish@locoperators\fi%
+}
+
+\def\inlineextras@spanish{%
+ \ifspanish@accentedoperators\spanish@accentedoperators\fi%
+ \ifspanish@spacedoperators\spanish@spacedoperators\fi%
+ \ifspanish@locoperators\spanish@locoperators\fi%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-spanish.ldf>
+%<*gloss-spanishmx.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-spanishmx.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-spanishmx.ldf}[polyglossia: module for mexican spanish]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{spanish}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-spanishmx.ldf>
+%<*gloss-swedish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-swedish.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-swedish.ldf}[polyglossia: module for swedish]
+
+\PolyglossiaSetup{swedish}{
+ bcp47=sv,
+ hyphennames={swedish},
+ hyphenmins={2,2},
+ langtag=SVE,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{swedish}{sv}
+
+\def\captionsswedish{%
+ \def\refname{Referenser}%
+ \def\abstractname{Sammanfattning}%
+ \def\bibname{Litteraturförteckning}%
+ \def\prefacename{Förord}%
+ \def\chaptername{Kapitel}%
+ \def\appendixname{Bilaga}%
+ \def\contentsname{Innehåll}%
+ \def\listfigurename{Figurer}%
+ \def\listtablename{Tabeller}%
+ \def\indexname{Sakregister}%
+ \def\figurename{Figur}%
+ \def\tablename{Tabell}%
+ %\def\thepart{}%
+ \def\partname{Del}%
+ \def\pagename{Sida}%
+ \def\seename{se}%
+ \def\alsoname{se även}%
+ \def\enclname{Bil.}%
+ \def\ccname{Kopia för kännedom}%
+ \def\headtoname{Till}%
+ \def\proofname{Bevis}%
+ \def\glossaryname{Ordlista}%
+ }
+
+\def\dateswedish{%
+ \def\today{%
+ \number\day~\ifcase\month\or
+ januari\or februari\or mars\or april\or maj\or juni\or
+ juli\or augusti\or september\or oktober\or november\or
+ december\fi
+ \space\number\year}%
+ \def\datesymd{%
+ \def\today{\number\year-\two@digits\month-\two@digits\day}}%
+ \def\datesdmy{%
+ \def\today{\number\day/\number\month\space\number\year}}%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-swedish.ldf>
+%<*gloss-swissgerman.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-swissgerman.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-swissgerman.ldf}[polyglossia: module for swiss german (old spelling)]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{german}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-swissgerman.ldf>
+%<*gloss-syriac.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-syriac.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-syriac.ldf}[polyglossia: module for syriac]
+\ifluatex
+ \xpg@warning{Syriac is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\RequireBidi
+\RequirePackage{arabicnumbers}
+
+\PolyglossiaSetup{syriac}{
+ bcp47=syr,
+ script=Syriac,
+ scripttag=syrc,
+ langtag=SYR,
+ direction=RL,
+ hyphennames={syriac,nohyphenation},
+ fontsetup=true,
+ localnumeral=syriacnumerals
+ %TODO localalph
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{syriac}{syr}
+
+\def\syriacnumber#1{\@syriacnumber{#1}}%
+
+\newif\if@eastern@numerals
+\def\tmp@eastern{eastern}
+\def\tmp@abjad{abjad}
+\define@key{syriac}{numerals}[western]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@abjad
+ \let\syriacnumber\abjadsyriac
+ \else
+ \ifx\@tmpa\tmp@eastern
+ \@eastern@numeralstrue
+ \else
+ \@eastern@numeralsfalse
+ \fi
+ \fi}
+
+% Register default options
+\xpg@initialize@gloss@options{syriac}{numerals=western}
+
+%\define@key{polyglossia}{syriaclocale}[default]{%
+% \def\@syriac@locale{#1}}
+%
+%\def\captionssyriac{%
+%\def\prefacename{\@ensure@RTL{}}%
+%\def\refname{\@ensure@RTL{}}
+%\def\abstractname{\@ensure@RTL{}}%
+%\def\bibname{\@ensure@RTL{}}%
+%\def\chaptername{\@ensure@RTL{}}%
+%\def\appendixname{\@ensure@RTL{}}%
+%\def\contentsname{\@ensure@RTL{}}
+%\def\listfigurename{\@ensure@RTL{}}%
+%\def\listtablename{\@ensure@RTL{}}%
+%\def\indexname{\@ensure@RTL{}}%
+%\def\figurename{\@ensure@RTL{}}%
+%\def\tablename{\@ensure@RTL{}}%
+%\def\partname{\@ensure@RTL{}}%
+%\def\enclname{\@ensure@RTL{}}%
+%\def\ccname{\@ensure@RTL{}}%
+%\def\headtoname{\@ensure@RTL{}}%
+%\def\pagename{\@ensure@RTL{}}%
+%\def\seename{\@ensure@RTL{}}%
+%\def\alsoname{\@ensure@RTL{}}%
+%\def\proofname{\@ensure@RTL{}}%
+%\def\glossaryname{\@ensure@RTL{}}%
+%}
+
+\def\datesyriac{%
+ \def\syriac@month##1{\ifcase##1%
+ \or ܟܢܘܢ ܐܚܪܝ\or ܫܒܛ\or ܐܕܪ\or ܢܝܣܢ\or ܐܝܪ\or ܚܙܝܪܢ\or ܬܡܘܙ\or ܐܒ\or ܐܝܠܘܠ% ܐܠܘܠ
+ \or ܬܫܪܝܢ ܩܕܡ% ܬܫܪܝܢ ܩܕܝܡ
+ \or ܬܫܪܝܢ ܐܚܪܝ\or ܟܢܘܢ ܩܕܡ% ܟܢܘܢ ܩܕܝܡ
+ \fi}%
+ \def\today{\@ensure@RTL{\syriacnumber\day{\space}%
+ \syriac@month{\month}{\space}\syriacnumber\year}}%
+}
+
+\def\syriac@zero{}
+
+\def\abjadsyriac#1{%
+\ifnum#1>9999\xpg@ill@value{#1}{abjadsyriac}%
+\else%
+ \ifnum#1<\z@\space\xpg@ill@value{#1}{abjadsyriac}%
+ \else%
+ \ifnum#1<10\expandafter\abj@syr@num@i\number#1%
+ \else%
+ \ifnum#1<100\expandafter\abj@syr@num@ii\number#1%
+ \else%
+ \ifnum#1<1000\expandafter\abj@syr@num@iii\number#1%
+ \else%
+ \expandafter\abj@syr@num@iv\number#1%
+ \fi%
+ \fi%
+ \fi%
+ \fi%
+\fi%
+}
+\def\abj@syr@num@i#1{%
+ \ifcase#1\or\char"0710\or\char"0712\or\char"0713\or\char"0715%
+ \or\char"0717\or\char"0718\or\char"0719\or\char"071A\or\char"071B\fi
+ \ifnum#1=\z@\syriac@zero\fi}
+\def\abj@syr@num@ii#1{%
+ \ifcase#1\or\char"071D\or\char"071F\or\char"0720\or\char"0721\or\char"0722%
+ \or\char"0723\or\char"0725\or\char"0726\or\char"0728\fi
+ \ifnum#1=\z@\fi\abj@syr@num@i}
+\def\abj@syr@num@iii#1{%
+ \ifcase#1\or\char"0729\or\char"072A\or\char"072B\or\char"072C%
+ \or\char"0722\char"0307\or\char"0723\char"0307\or\char"0725\char"0307%
+ \or\char"0726\char"0307\or\char"0728\char"0307\fi
+ \ifnum#1=\z@\fi\abj@syr@num@ii}
+\def\abj@syr@num@iv#1{%
+ \ifcase#1\or\char"0710\char"0748\or\char"0712\char"0748%
+ \or\char"0713\char"0748\or\char"0715\char"0748%
+ \or\char"0717\char"0748\or\char"0718\char"0748%
+ \or\char"0719\char"0748\or\char"071A\char"0748\or\char"071B\char"0748\fi
+ \ifnum#1=\z@\fi\abj@syr@num@iii}
+
+\def\@syriacnumber#1{%
+ \if@eastern@numerals
+ %%% we test for the presence of one of ١٢٣٤٥٦٧٨٩٠ in the Syriac font,
+ %%% else we try \arabicfont if defined (and give a warning),
+ %%% else we fall back to the Western numerals.
+ \xpg@if@char@available{0661}%
+ {\protect\arabicdigits{\number#1}}%
+ {\arabicdigits{\number#1}
+ \ifcsdef{arabicfont}%
+ {\protect\arabicdigits{\number#1}%
+ \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs:
+ I am using \string\arabicfont instead}}%
+ {\number#1%%% <---changed from \RL{\protect\reset@font\protect\number#1}%
+ \xpg@warning{You have specified the option numerals=eastern for Syriac, but the Syriac font does not contain the appropriate glyphs:
+ since \string\arabicfont is not defined, we'll use Western numerals instead}}%
+ }%
+ \else
+ %%\RL{\protect\reset@font\number#1}%
+ \number#1%
+ \fi%
+}
+
+\def\syriac@numbers{%
+ \let\@alph\abjadsyriac%
+ \let\@Alph\abjadsyriac%
+}
+
+\def\nosyriac@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\newcommand{\syriacnumerals}[2]{\syriacnumber{#2}}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\syriac@globalnumbers{%
+ \let\@arabic\syriacnumber%
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+}
+
+\def\nosyriac@globalnumbers{%
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@syriac{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@syriac{%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-syriac.ldf>
+%<*gloss-tamil.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-tamil.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-tamil.ldf}[polyglossia: module for tamil]
+\ifluatex
+ \xpg@warning{Tamil is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+% Translations provided by Kevin & Siji, 01-11-2009
+
+\PolyglossiaSetup{tamil}{
+ bcp47=ta,
+ script=Tamil,
+ scripttag=taml,
+ langtag=TAM,
+ hyphennames={tamil},
+ hyphenmins={2,2}, %FIXME?
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{tamil}{ta}
+
+\def\captionstamil{%
+ \def\abstractname{சாராம்சம்}%
+ \def\appendixname{பிற்சேர்க்கை}%பின்னிணைப்பு
+ %\def\bibname{}%
+ %\def\ccname{}%
+ \def\chaptername{அத்தியாயம்}%
+ \def\contentsname{உள்ளே}%
+ %\def\enclname{}%
+ \def\figurename{படம்}%
+ %\def\headpagename{}%
+ %\def\headtoname{}%
+ \def\indexname{சுட்டி}%பொருளடக்க அட்டவணை
+ \def\listfigurename{படங்களின் பட்டியல்}%
+ \def\listtablename{அட்டவணை பட்டியல்}%
+ %\def\pagename{}%
+ \def\partname{பகுதி}%
+ %\def\prefacename{}%
+ %\def\refname{}%
+ \def\tablename{அட்டவணை}%
+ \def\seename{பார்க்க}%
+ %\def\alsoname{}%
+ %\def\alsoseename{}%
+}
+\def\datetamil{%
+ \def\today{\number\year\space\ifcase\month\or
+ ஜனவரி\or
+ பிப்ரவரி\or
+ மார்ச்\or
+ ஏப்ரல்\or
+ மே\or
+ ஜூன்\or
+ ஜூலை\or
+ ஆகஸ்ட்\or
+ செப்டம்பர்\or
+ அக்டோபர்\or
+ நவம்பர்\or
+ டிசம்பர்\fi
+ \space\number\day}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-tamil.ldf>
+%<*gloss-telugu.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-telugu.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-telugu.ldf}[polyglossia: module for telugu]
+\ifluatex
+ \xpg@warning{Telugu is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+% Translations provided by Anmol Sharma <unmole.in@gmail.com>
+
+\PolyglossiaSetup{telugu}{
+ bcp47=te,
+ script=Telugu,
+ scripttag=telu,
+ langtag=TEL,
+ hyphennames={telugu},
+ hyphenmins={2,2}, %FIXME
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{telugu}{te}
+
+\def\captionstelugu{%
+ \def\refname{ఆధారాలు}%
+ \def\abstractname{సారాంశం}%
+ \def\bibname{గ్రంథాల జాబితా}%
+ \def\prefacename{ముందుమాట}%
+ \def\chaptername{అధ్యాయము}%
+ \def\appendixname{అదనంగా}%
+ \def\contentsname{విషయాలు}%
+ \def\listfigurename{ఆకృతుల జాబితా}%
+ \def\listtablename{పట్టికల జాబితా}%
+ \def\indexname{విషయ సూచిక}%
+ \def\figurename{ఆకృతి}%
+ \def\tablename{పట్టిక}%
+ %\def\thepart{}%
+ \def\partname{భాగం}%
+ \def\pagename{పేజి}%
+ \def\seename{చూడండి}%
+ \def\alsoname{కూడా చూడండి}%
+ \def\enclname{ఎంక్లోజర్*}%
+ \def\ccname{సిసి}%
+ \def\headtoname{కి}%
+ \def\proofname{రుజువు}%
+ \def\glossaryname{నిఘంటువు}%
+}
+
+\def\datetelugu{%
+ \def\telugu@month{%
+ \ifcase\month\or
+ జనవరి\or
+ ఫిబ్రవరి\or
+ మార్చ్\or
+ ఏప్రిల్\or
+ మే\or
+ జూన్\or
+ జూలై\or
+ ఆగస్ట్\or
+ సెప్టెంబర్\or
+ అక్తోబెర్\or
+ నవంబర్\or
+ డిసంబర్\fi}%
+ \def\today{\telugu@month\space\number\day,\space\number\year}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-telugu.ldf>
+%<*gloss-thai.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-thai.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-thai.ldf}[polyglossia: module for thai]
+%% This is partly based on thai-latex for Babel:
+%%%% Copyright (C) 1999 - 2006
+%%%% by Surapant Meknavin,
+%%%% Theppitak Karoonboonyanan (thep at linux.thai.net),
+%%%% Chanop Silpa-Anan (chanop at debian.org),
+%%%% Poonlap Veerathanabutr (poonlap at linux.thai.net)
+%%%% Thai Linux Working Group
+%%%% http://linux.thai.net/
+%%%%
+\ifluatex
+ \xpg@warning{Thai is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\PolyglossiaSetup{thai}{
+ bcp47=th,
+ script=Thai,
+ scripttag=thai,
+ langtag=THA,
+ hyphennames={nohyphenation},
+ fontsetup=true,
+ localnumeral=thainumerals
+ %TODO localalph={xxx@alph,xxx@Alph}
+ %TODO localdigits=thainumber
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{thai}{th}
+
+\newif\if@thai@numerals
+\def\tmp@thai{thai}
+\define@key{thai}{numerals}[arabic]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@thai\@thai@numeralstrue\else
+ \@thai@numeralsfalse\fi
+}
+
+% Register default options
+\xpg@initialize@gloss@options{thai}{numerals=arabic}
+
+\def\captionsthai{%
+ \def\refname{หนังสืออ้างอิง}%
+ \def\abstractname{บทคัดย่อ}%
+ \def\bibname{บรรณานุกรม}%
+ \def\prefacename{คำนำ}%
+ \def\chaptername{บทที่}%
+ \def\appendixname{ภาคผนวก}%
+ \def\contentsname{สารบัญ}%
+ \def\listfigurename{สารบัญรูป}%
+ \def\listtablename{สารบัญตาราง}%
+ \def\indexname{ดรรชนี}%
+ \def\figurename{รูปที่}%
+ \def\tablename{ตารางที่}%
+ %\def\thepart{}%
+ \def\partname{ภาค}%
+ \def\pagename{หน้า}%
+ \def\seename{ดู}%
+ \def\alsoname{ดูเพิ่มเติม}%
+ \def\enclname{สิ่งที่แนบมาด้วย}%
+ \def\ccname{สำเนาถึง}%
+ \def\headtoname{เรียน}%
+ \def\proofname{พิสูจน์}%
+ %\def\glossaryname{}%
+}
+\def\datethai{%
+ \def\thai@month{%
+ \ifcase\month\or
+ มกราคม\or กุมภาพันธ์\or มีนาคม\or เมษายน%
+ \or พฤษภาคม\or มิถุนายน\or กรกฎาคม\or สิงหาคม%
+ \or กันยายน\or ตุลาคม\or พฤศจิกายน\or ธันวาคม\fi}%
+ \newcount\thai@year%
+ \thai@year=\year%
+ \advance\thai@year by 543%
+ \def\today{\thainumber\day \space \thai@month\space พ.ศ.~\thainumber\thai@year}%
+}
+
+%NB: thai-latex had "plus 0.6pt", but .4em appears to give better results
+% FIXME to avoid name clashes, rename \wbr to \wordbreak or \thaiworkbreak ?
+\def\wbr{\hskip0pt plus .4em\relax} %%OR \char"200B = ZWSP ? Does not work
+%\catcode"200b=\active
+%\def^^200b{\hskip 0pt plus .4em}
+
+\def\thaidigits#1{\expandafter\@thai@digits #1@}
+\def\@thai@digits#1{%
+ \ifx @#1% then terminate
+ \else
+ \ifx0#1๐\else\ifx1#1๑\else\ifx2#1๒\else\ifx3#1๓\else\ifx4#1๔\else\ifx5#1๕\else\ifx6#1๖\else\ifx7#1๗\else\ifx8#1๘\else\ifx9#1๙\else#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \expandafter\@thai@digits
+ \fi
+}
+
+\newcommand{\thainumerals}[2]{\thainumber{#2}}
+
+\def\thainumber#1{%
+ \if@thai@numerals
+ \thaidigits{\number#1}%
+ %%{\protect\addfontfeature{Mapping=thaidigits}\protect\number#1}
+ \else
+ \number#1%
+ %%{\protect\reset@font\number#1}
+ \fi}
+
+\def\@thaialph#1{%
+ \ifcase#1\or ก\or ข\or ค\or ง\or จ\or ฉ\or ช\or ซ\or ฌ\or ญ\or ฎ\or
+ ฏ\or ฐ\or ฑ\or ฒ\or ณ\or ด\or ต\or ถ\or ท\or ธ\or น\or บ\or ป\or ผ\or
+ ฝ\or พ\or ฟ\or ภ\or ม\or ย\or ร\or ล\or ว\or ศ\or ษ\or ส\or ห\or ฬ\or อ\or
+ ฮ\else\xpg@ill@value{#1}{@thaialph}\fi}
+\def\thaiAlph#1{\expandafter\@thaiAlph\csname c@#1\endcsname}
+\def\@thaiAlph#1{%
+ \ifcase#1\or ก\or ข\or ฃ\or ค\or ฅ\or ฆ\or ง\or จ\or ฉ\or ช\or ซ\or
+ ฌ\or ญ\or ฎ\or ฏ\or ฐ\or ฑ\or ฒ\or ณ\or ด\or ต\or ถ\or ท\or ธ\or น\or
+ บ\or ป\or ผ\or ฝ\or พ\or ฟ\or ภ\or ม\or ย\or ร\or ฤ\or ล\or ฦ\or ว\or
+ ศ\or ษ\or ส\or ห\or ฬ\or อ\or ฮ\else\xpg@ill@value{#1}{@thaialph}\fi}
+
+\def\thai@numbers{%
+ \if@thai@numerals
+ \let\@alph\@thaialph%
+ \let\@Alph\@thaiAlph%
+ \fi
+}
+\def\nothai@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\def\thai@globalnumbers{%
+ \let\orig@arabic\@arabic%
+ \let\@arabic\thainumber%
+ \renewcommand{\thefootnote}{\localnumeral*{footnote}}%
+}
+\def\nothai@globalnumbers{%
+ \let\@arabic\orig@arabic%
+}
+
+\def\blockextras@thai{%
+%%TODO \XeTeXlinebreaklocales "th"% uses ICU to find line breaks on the basis of a dictionary lookup-- make this optional? (in case a user might prefer a preprocessor
+ \let\orig@baselinestrech\baselinestretch%
+ \renewcommand{\baselinestretch}{1.2}%
+}
+\def\noblockextras@thai{%
+%%TODO \XeTeXlinebreaklocales "en"%
+ \let\baselinestrech\orig@baselinestretch%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-thai.ldf>
+%<*gloss-tibetan.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-tibetan.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-tibetan.ldf}[polyglossia: module for tibetan]
+%% Copyright 2013 Elie Roux
+%% Under the CC0 license <http://creativecommons.org/publicdomain/zero/1.0/>
+%%
+%% A good font to make tests is \newfontfamily\tibetanfont{Tibetan Machine Uni}
+%%
+
+\PolyglossiaSetup{tibetan}{
+ bcp47=bo,
+ script=Tibetan,
+ scripttag=tibt,
+ langtag=TIB,
+ hyphennames={nohyphenation},
+ fontsetup=true,
+ localnumeral=tibetannumerals
+ %TODO localalph={xxx@alph,xxx@Alph}
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{tibetan}{bo}
+
+\newif\if@tibetan@numerals
+\def\tmp@tibetan{tibetan}
+\define@key{tibetan}{numerals}[tibetan]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@tibetan\@tibetan@numeralstrue\else
+ \@tibetan@numeralsfalse\fi
+}
+
+\ifluatex
+ \newluatexattribute\xpg@tibteol %
+ \directlua{polyglossia.load_tibt_eol()}%
+\fi
+
+\def\tibetan@eol{%
+ \ifluatex %
+ \xpg@tibteol=1\relax %
+ \directlua{polyglossia.activate_tibt_eol()}%
+ \else %
+ \XeTeXlinebreaklocale "bo"%
+ \XeTeXlinebreakskip=0pt plus 0.1em% doesn't do much, but doesn't harm I guess...
+ \fi %
+}
+
+\def\notibetan@eol{%
+ \ifluatex %
+ \xpg@tibteol=0\relax %
+ %\directlua{polyglossia.activate_tibt_eol()}%
+ \else %
+ \XeTeXlinebreaklocale "en"% en? really?
+ \XeTeXlinebreakskip=0pt plus 0pt%
+ \fi %
+}
+
+% Register default options
+\xpg@initialize@gloss@options{tibetan}{numerals=tibetan}
+
+% some are known, but very few
+% a few come from "Standardizing Tibetan Terms of Information Technology"
+% from the China Tibetology Research Center
+\def\captionstibetan{%
+ %\def\refname{}%
+ \def\abstractname{གནད་བསྡུས།}%
+ \def\bibname{དཔེ་ཆའི་ཐོ་གཞུང་།}% or dpe deb kyi re'u mig?
+ \def\prefacename{དཔེ་དེབ་ཀྱི་གླེང་བརྗོད།}% or gleng brjod 'god pa or ngo sprod?
+ \def\chaptername{ལེའུ་}%
+ \def\appendixname{ཞར་བྱུང་།}%
+ \def\contentsname{དཀར་ཆག།}%
+ %\def\listfigurename{}%
+ %\def\listtablename{}%
+ \def\indexname{གསུལ་བྱང་།}%
+ \def\figurename{པར་རིས་}% or dpe ris?
+ \def\tablename{རེའུ་མིག་}%
+ %\def\thepart{}%
+ \def\partname{ཆ་ཤས་}%
+ \def\pagename{ཤོག་}%
+ %\def\seename{}%
+ %\def\alsoname{}%
+ %\def\enclname{}%
+ \def\ccname{འདྲ་བཤུས་ལེན་མཁན་}%
+ %\def\headtoname{}%
+ \def\proofname{བདེན་དཔང་།}% not sure about this one...
+ \def\glossaryname{མིང་ཚིག་རེའུ་མིག།}%
+}
+\def\datetibetan{%
+ \def\tibetan@month{%
+ \ifcase\month\or
+ ཟླ་དང་པོ\or ཟླ་གཉིས་པ\or ཟླ་གསུམ་པ%
+ \or ཟླ་བཞི་པ\or ཟླ་ལྔ་པ\or ཟླ་དྲུག་པ\or ཟླ་བདུན་པ%
+ \or ཟླ་བརྒྱད་པ\or ཟླ་དགུ་པ\or ཟླ་བཆུ་པ\or ཟླ་བཆུ་གཅིག་པ\or ཟླ་བཆུ་གཉིས་པ\fi}%
+ \def\tibetan@daynum{%
+ \ifcase\day\or དང་པོ\or གཉིས་པ\or གསུམ་པ \or བཞི་པ\or ལྔ་པ\or དྲུག་པ\or བདུན་པ\or བརྒྱད་པ\or དགུ་པ\or བཆུ་པ%
+ \or བཆུ་གཅིག་པ\or བཆུ་གཉིས་པ\or བཆུ་གསུམ་པ\or བཆུ་བཞི་པ\or བཆུ་ལྔ་པ\or བཆུ་དྲུག་པ\or བཆུ་བདུན་པ\or བཆུ་བརྒྱད་པ\or བཆུ་དགུ་པ\or ཉི་ཤུ་པ%
+
+ \or ཉི་ཤུ་རྩ་གཅིག་པ\or ཉི་ཤུ་རྩ་གཉིས་པ\or ཉི་ཤུ་རྩ་གསུམ་པ\or ཉི་ཤུ་རྩ་བཞི་པ\or ཉི་ཤུ་རྩ་ལྔ་པ\or ཉི་ཤུ་རྩ་དྲུག་པ\or ཉི་ཤུ་རྩ་བདུན་པ\or ཉི་ཤུ་རྩ་བརྒྱད་པ\or ཉི་ཤུ་རྩ་དགུ་པ\or སུམ་ཆུ་པ%
+ \or སུམ་ཆུ་སོ་གཅིག་པ\fi}%
+ % As we use gregorian calendar, it's better to stick with spyi lo
+ %\newcount\tibetan@year%
+ %\tibetan@year=\year%
+ %\advance\tibetan@year by 127% this is bod rgyal lo, the most common, but there are others...
+ % I'm not sure the / character is in most tibetan fonts
+ %\def\today{\tibetannumber\day /\tibetannumber\day /\tibetannumber\year}%
+ \def\today{\tibetannumber\day །\tibetannumber\month །\tibetannumber\year}%
+ % this is more litterate, but longer
+ %\def\today{སྤྱི་ལོ་\tibetannumber\year ་སྤྱི་\tibetan@month{}་ད་རེས་\tibetan@daynum{}།}%
+}
+
+\def\tibetandigits#1{\expandafter\@tibetan@digits #1@}
+\def\@tibetan@digits#1{%
+ \ifx @#1% then terminate
+ \else
+ \ifx0#1༠\else\ifx1#1༡\else\ifx2#1༢\else\ifx3#1༣\else\ifx4#1༤\else\ifx5#1༥\else\ifx6#1༦\else\ifx7#1༧\else\ifx8#1༨\else\ifx9#1༩\else#1\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
+ \expandafter\@tibetan@digits
+ \fi
+}
+
+\def\tibetannumber#1{%
+ \if@tibetan@numerals
+ \tibetandigits{\number#1}%
+ %%{\protect\addfontfeature{Mapping=tibetandigits}\protect\number#1}
+ \else
+ \number#1%
+ %%{\protect\reset@font\number#1}
+ \fi}
+
+\def\@tibetanalph#1{%
+ \ifcase#1\or ཀ\or ཁ\or ག\or ང\or ཅ\or ཆ\or ཇ\or ཉ\or ཏ\or ཐ\or ད\or ན\or པ\or
+ ཕ\or བ\or མ\or ཙ\or ཚ\or ཛ\or ཝ\or ཞ\or ཟ\or འ\or ཡ\or ར\or ལ\or ཤ\or ས\or ཧ\or ཨ
+ \else\xpg@ill@value{#1}{@tibetanalph}\fi}
+\def\tibetanAlph#1{\expandafter\@tibetanAlph\csname c@#1\endcsname}
+\def\@tibetanAlph#1{%
+ \ifcase#1\or ཀ\or ཁ\or ག\or ང\or ཅ\or ཆ\or ཇ\or ཉ\or ཏ\or ཐ\or ད\or ན\or པ\or
+ ཕ\or བ\or མ\or ཙ\or ཚ\or ཛ\or ཝ\or ཞ\or ཟ\or འ\or ཡ\or ར\or ལ\or ཤ\or ས\or ཧ\or ཨ
+ \else\xpg@ill@value{#1}{@tibetanalph}\fi}
+
+\newcommand{\tibetanumerals}[2]{\tibetannumber{#2}}
+
+\def\tibetan@numbers{%
+ \if@tibetan@numerals
+ \let\@alph\@tibetanalph%
+ \let\@Alph\@tibetanAlph%
+ \fi
+}
+\def\notibetan@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\def\tibetan@globalnumbers{%
+ \let\xpg@orig@arabic\@arabic%
+ \let\@arabic\tibetannumber%
+ \renewcommand{\thefootnote}{\localnumeral*{footnote}}%
+}
+
+\def\notibetan@globalnumbers{%
+ \let\@arabic\xpg@orig@arabic%
+}
+
+\def\noextras@tibetan{%
+ \notibetan@eol%
+ \ifcsname xpg@orig@baselinestretch\endcsname\renewcommand{\baselinestretch}{\xpg@orig@baselinestretch}\fi %
+ }
+
+\def\inlineextras@tibetan{%
+ \xdef\xpg@orig@baselinestretch{\ifcsname baselinestretch\endcsname \baselinestretch \else 1\fi}%
+ \renewcommand{\baselinestretch}{1.2}%
+ \tibetan@eol%
+ }
+
+\def\blockextras@tibetan{%
+ \xdef\xpg@orig@baselinestretch{\ifcsname baselinestretch\endcsname \baselinestretch \else 1\fi}%
+ \renewcommand{\baselinestretch}{1.2}%
+ \tibetan@eol%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-tibetan.ldf>
+%<*gloss-turkish.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-turkish.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-turkish.ldf}[polyglossia: module for turkish]
+\RequirePackage{hijrical}
+\PolyglossiaSetup{turkish}{
+ bcp47=tr,
+ hyphennames={turkish},
+ hyphenmins={2,2},
+ langtag=TRK,
+ frenchspacing=true,
+ fontsetup=true
+ }
+
+% TODO Add \ifluatex branch everywhere
+\ifxetex
+\newXeTeXintercharclass\turkish@punctthin % ! :
+\newXeTeXintercharclass\turkish@punctthick % =
+\fi
+
+\def\turkish@punctthinspace{{\ifdim\lastskip>\z@\unskip\penalty\@M\thinspace\fi}}
+\def\turkish@punctthickspace{{\unskip\nobreakspace}}
+
+\def\turkish@punctuation{%
+ \ifxetex
+ \XeTeXinterchartokenstate=1%
+ \XeTeXcharclass `\! \turkish@punctthin
+ \XeTeXcharclass `\: \turkish@punctthin
+ \XeTeXcharclass `\= \turkish@punctthick
+ \XeTeXinterchartoks \z@ \turkish@punctthin = \turkish@punctthinspace
+ \XeTeXinterchartoks \z@ \turkish@punctthick = \turkish@punctthickspace
+ \fi
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{turkish}{tr}
+
+\def\noturkish@punctuation{%
+ \ifxetex
+ \XeTeXcharclass `\! \z@
+ \XeTeXcharclass `\: \z@
+ \XeTeXcharclass `\= \z@
+ \XeTeXinterchartokenstate=0%
+ \fi
+}
+
+\def\turkish@casing{%
+ \lccode`\I=`\ı
+ \uccode`\i=`\İ
+}
+
+\def\noturkish@casing{%
+ \lccode`\I=`\i
+ \uccode`\i=`\I
+}
+
+\def\captionsturkish{%
+ \def\prefacename{Önsöz}%
+ \def\refname{Kaynaklar}%
+ \def\abstractname{Özet}%
+ \def\bibname{Kaynakça}%
+ \def\chaptername{Bölüm}%
+ \def\appendixname{Ek}%
+ \def\contentsname{İçindekiler}%
+ \def\listfigurename{Şekil Listesi}%
+ \def\listtablename{Tablo Listesi}%
+ \def\indexname{Dizin}%
+ \def\figurename{Şekil}%
+ \def\tablename{Tablo}%
+ \def\partname{Kısım}%
+ \def\enclname{İlişik}%
+ \def\ccname{Diğer Alıcılar}%
+ \def\headtoname{Alıcı}%
+ \def\pagename{Sayfa}%
+ \def\subjectname{İlgili}%
+ \def\seename{bkz.}%
+ \def\alsoname{ayrıca bkz.}%
+ \def\proofname{Kanıt}%
+ \def\glossaryname{Lügatçe}%
+ }
+\def\dateturkish{%
+ \def\today{\number\day~\ifcase\month\or
+ Ocak\or Şubat\or Mart\or Nisan\or Mayıs\or Haziran\or
+ Temmuz\or Ağustos\or Eylül\or Ekim\or Kasım\or
+ Aralık\fi
+ \space\number\year}%
+}
+\def\hijrimonthturkish#1{\ifcase#1%
+\or Muharrem\or Safer\or Rebiülevvel\or Rebiülahir\or Cemaziyelevvel\or Cemaziyelahir\or Recep\or Şaban\or Ramazan\or Şevval\or Zilkade\or Zilhicce\fi}
+%%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{turkish}{%
+\number\value{Hijriday}\space\hijrimonthturkish{\value{Hijrimonth}}\space\number\value{Hijriyear}}
+
+\def\noextras@turkish{%
+ \noturkish@punctuation%
+ \noturkish@casing%
+}
+
+\def\blockextras@turkish{%
+ \turkish@punctuation%
+ \turkish@casing%
+}
+
+\def\inlineextras@turkish{%
+ \turkish@punctuation%
+ \turkish@casing%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-turkish.ldf>
+%<*gloss-turkmen.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-turkmen.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-turkmen.ldf}[polyglossia: module for turkmen]
+%% Translations provided by Nazar Annagurban <nazartm at gmail dot com>
+\PolyglossiaSetup{turkmen}{
+ bcp47=tk,
+ hyphennames={turkmen},
+ hyphenmins={2,2},
+ langtag=TKM,
+ frenchspacing=false,
+ fontsetup=true
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{turkmen}{tk}
+
+\def\captionsturkmen{%
+ \def\prefacename{Sözbaşy}%
+ \def\refname{Çeşmeler}%
+ \def\abstractname{Gysgaça manysy}%
+ \def\bibname{Çeşmeler}%
+ \def\chaptername{Bap}%
+ \def\appendixname{Goşmaça}%
+ \def\contentsname{Mazmuny}%
+ \def\listfigurename{Suratlaryň sanawy}%
+ \def\listtablename{Tablisalaryň sanawy}%
+ \def\indexname{Indeks}%
+ \def\figurename{Surat}%
+ \def\tablename{Tablisa}%
+ \def\partname{Bölüm}%
+ \def\enclname{Goşmaça}%
+ \def\ccname{Iberilenler}%
+ \def\headtoname{Kime}%
+ \def\pagename{Sahypa}%
+ \def\subjectname{Tema}%
+ \def\seename{ser.}%
+ \def\alsoname{şuňa-da ser.}%
+ \def\proofname{Delil}%
+ \def\glossaryname{Sözlük}%
+}
+\def\dateturkmen{%
+ \def\today{\number\day~\ifcase\month\or
+ Ýanwar\or Fewral\or Mart\or Aprel\or Maý\or Iýun\or
+ Iýul\or Awgust\or Sentýabr\or Oktýabr\or Noýabr\or
+ Dekabr\fi
+ \space\number\year}%
+}
+% \end{macrocode}
+% \iffalse
+%</gloss-turkmen.ldf>
+%<*gloss-ukrainian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-ukrainian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-ukrainian.ldf}[polyglossia: module for ukrainian]
+% Strings taken from Babel
+% and revised by Roman Kyrylych
+
+\RequirePackage{xpg-cyrillicnumbers}
+
+\PolyglossiaSetup{ukrainian}{%
+ bcp47=uk,
+ script=Cyrillic,
+ scripttag=cyrl,
+ langtag=UKR,
+ hyphennames={ukrainian},
+ hyphenmins={2,2},
+ frenchspacing=true,
+ fontsetup=true,
+ localnumeral=ukrainiannumerals,
+ Localnumeral=Ukrainiannumerals
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{ukrainian}{uk}
+
+\newif\ifcyrillic@numerals
+\newif\ifcyrillic@asbuk@numerals
+\define@choicekey*+{ukrainian}{numerals}[\xpg@val\xpg@nr]{arabic,cyrillic,cyrillic-trad,cyrillic-alph}[arabic]{%
+ \ifcase\xpg@nr\relax
+ % arabic:
+ \cyrillic@numeralsfalse%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-trad:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralsfalse%
+ \or
+ % cyrillic-alph:
+ \cyrillic@numeralstrue%
+ \cyrillic@asbuk@numeralstrue%
+ \fi
+ \xpg@info{Option: Ukrainian, numerals=\xpg@val}%
+}{\xpg@warning{Unknown Ukrainian numerals value `#1'}}
+
+
+% Register default options
+\xpg@initialize@gloss@options{ukrainian}{numerals=arabic}
+
+\define@boolkey{ukrainian}[ukrainian@]{babelshorthands}[true]{}
+
+\ifsystem@babelshorthands
+ \setkeys{ukrainian}{babelshorthands=true}
+\else
+ \setkeys{ukrainian}{babelshorthands=false}
+\fi
+
+\ifcsundef{initiate@active@char}{%
+ \input{babelsh.def}%
+ \initiate@active@char{"}%
+ \shorthandoff{"}%
+}{}
+
+\def\ukrainian@shorthands{%
+ \bbl@activate{"}%
+ \def\language@group{ukrainian}%
+% \declare@shorthand{ukrainian}{"`}{„}%
+% \declare@shorthand{ukrainian}{"'}{“}%
+% \declare@shorthand{ukrainian}{"<}{«}%
+% \declare@shorthand{ukrainian}{">}{»}%
+ \declare@shorthand{ukrainian}{""}{\hskip\z@skip}%
+ \declare@shorthand{ukrainian}{"~}{\textormath{\leavevmode\hbox{-}}{-}}%
+ \declare@shorthand{ukrainian}{"=}{\nobreak-\hskip\z@skip}%
+ \declare@shorthand{ukrainian}{"|}{\textormath{\nobreak\discretionary{-}{}{\kern.03em}\allowhyphens}{}}%
+ \declare@shorthand{ukrainian}{"-}{%
+ \def\ukrainian@sh@tmp{%
+ \if\ukrainian@sh@next-\expandafter\ukrainian@sh@emdash
+ \else\expandafter\ukrainian@sh@hyphen\fi
+ }%
+ \futurelet\ukrainian@sh@next\ukrainian@sh@tmp}%
+ \def\ukrainian@sh@hyphen{%
+ \nobreak\-\bbl@allowhyphens}%
+ \def\ukrainian@sh@emdash##1##2{\cdash-##1##2}%
+ \def\cdash##1##2##3{%
+ \def\tempx@{##3}%
+ \def\tempa@{-}\def\tempb@{~}\def\tempc@{*}%
+ \ifx\tempx@\tempa@\@Acdash\else
+ \ifx\tempx@\tempb@\@Bcdash\else
+ \ifx\tempx@\tempc@\@Ccdash\else
+ \errmessage{Wrong usage of cdash}\fi\fi\fi%
+ }%
+ \def\@Acdash{\ifdim\lastskip>\z@\unskip\nobreak\hskip.2em\fi
+ \cyrdash\hskip.2em\ignorespaces}%
+ \def\@Bcdash{\leavevmode\ifdim\lastskip>\z@\unskip\fi
+ \nobreak\cyrdash\penalty\exhyphenpenalty\hskip\z@skip\ignorespaces}%
+ \def\@Ccdash{\leavevmode
+ \nobreak\cyrdash\nobreak\hskip.35em\ignorespaces}%
+ \ifx\cyrdash\undefined
+ \def\cyrdash{\hbox to.8em{--\hss--}}
+ \fi
+ \declare@shorthand{ukrainian}{",}{\nobreak\hskip.2em\ignorespaces}%
+}
+
+\def\noukrainian@shorthands{%
+ \@ifundefined{initiate@active@char}{}{\bbl@deactivate{"}}%
+}
+
+\def\captionsukrainian{%
+ \def\refname{Література}%
+ \def\abstractname{Анотація}%
+ \def\bibname{Бібліоґрафія}%
+ \def\prefacename{Вступ}%
+ \def\chaptername{Розділ}%
+ \def\appendixname{Додаток}%
+ \def\contentsname{Зміст}%
+ \def\listfigurename{Перелік ілюстрацій}%
+ \def\listtablename{Перелік таблиць}%
+ \def\indexname{Покажчик}%
+ \def\authorname{Іменний покажчик}% babel has "Їменний покажчик"
+ \def\figurename{Рис.}%
+ \def\tablename{Табл.}%
+ %\def\thepart{}%
+ \def\partname{Частина}%
+ \def\pagename{с.}%
+ \def\seename{див.}%
+ \def\alsoname{див.\ також}%
+ \def\enclname{вкладка}%
+ \def\ccname{копія}%
+ \def\headtoname{До}%
+ \def\proofname{Доведення}%
+ \def\glossaryname{Словник термінів}%
+}
+
+\def\dateukrainian{%
+ \def\today{\number\day~\ifcase\month\or
+ січня\or
+ лютого\or
+ березня\or
+ квітня\or
+ травня\or
+ червня\or
+ липня\or
+ серпня\or
+ вересня\or
+ жовтня\or
+ листопада\or
+ грудня\fi%
+ \space\number\year~р.}%
+}
+
+% The following is based on some ideas from ruscor.sty
+\def\ukrainian@capsformat{%
+ \def\@seccntformat##1{\csname pre##1\endcsname%
+ \csname the##1\endcsname%
+ \csname post##1\endcsname}%
+ \def\@aftersepkern{\hspace{0.5em}}%
+ \def\postchapter{.\@aftersepkern}%
+ \def\postsection{.\@aftersepkern}%
+ \def\postsubsection{.\@aftersepkern}%
+ \def\postsubsubsection{.\@aftersepkern}%
+ \def\postparagraph{.\@aftersepkern}%
+ \def\postsubparagraph{.\@aftersepkern}%
+ \def\prechapter{}%
+ \def\presection{}%
+ \def\presubsection{}%
+ \def\presubsubsection{}%
+ \def\preparagraph{}%
+ \def\presubparagraph{}%
+}
+
+\newcommand{\ukrainiannumerals}[2]{\ukrainiannumber{#2}}
+\newcommand{\Ukrainiannumerals}[2]{\Ukrainiannumber{#2}}
+
+\def\ukrainiannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \serbian@asbuk@alph{#1}%
+ \else
+ \cyr@alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\def\Ukrainiannumber#1{%
+ \ifcyrillic@numerals
+ \ifcyrillic@asbuk@numerals
+ \serbian@asbuk@Alph{#1}%
+ \else
+ \cyr@Alph{#1}%
+ \fi
+ \else
+ \number#1%
+ \fi%
+}
+
+\let\ukrainiannumeral=\ukrainiannumber
+\let\Ukrainiannumeral=\Ukrainiannumber
+
+\def\Asbuk#1{\expandafter\ukranian@asbuk@Alph\csname c@#1\endcsname}
+\def\asbuk#1{\expandafter\ukranian@asbuk@alph\csname c@#1\endcsname}
+
+\def\AsbukTrad#1{\expandafter\cyr@Alph\csname c@#1\endcsname}
+\def\asbukTrad#1{\expandafter\cyr@alph\csname c@#1\endcsname}
+
+% This is a poor man's cyrillic alphanumeric. It just uses the alphabet and
+% thus ends at 30.
+\def\ukranian@asbuk@Alph#1{\ifcase#1\or
+ А\or Б\or В\or Г\or Д\or Е\or Ж\or
+ З\or И\or К\or Л\or М\or Н\or О\or
+ П\or Р\or С\or Т\or У\or Ф\or Х\or
+ Ц\or Ч\or Ш\or Щ\or Э\or Ю\or Я%
+ \else\xpg@ill@value{#1}{ukranian@asbuk@Alph}\fi%
+}
+
+\def\ukranian@asbuk@alph#1{\ifcase#1\or
+ а\or б\or в\or г\or д\or е\or ж\or
+ з\or и\or к\or л\or м\or н\or о\or
+ п\or р\or с\or т\or у\or ф\or х\or
+ ц\or ч\or ш\or щ\or э\or ю\or я%
+ \else\xpg@ill@value{#1}{ukranian@asbuk@alph}\fi%
+}
+
+\def\ukrainian@numbers{%
+ \let\@Alph\ukrainian@Alph%
+ \let\@alph\ukrainian@alph%
+}
+
+\def\noukrainian@numbers{%
+ \let\@Alph\latin@Alph%
+ \let\@alph\latin@alph%
+}
+
+\def\noextras@ukrainian{%
+ \def\@seccntformat##1{\csname the##1\endcsname\quad}% = LaTeX kernel
+ \ifcyrillic@numerals\noukrainian@numbers\fi
+ \noukrainian@shorthands%
+}
+
+\def\blockextras@ukrainian{%
+ \ukrainian@capsformat%
+ \ifcyrillic@numerals\ukrainian@numbers\fi
+ \ifukrainian@babelshorthands\ukrainian@shorthands\fi
+}
+
+\def\inlineextras@ukrainian{%
+ \ifukrainian@babelshorthands\ukrainian@shorthands\fi%
+}
+
+%%% stuff from Babel
+% make it optional?
+\def\sh{\mathop{\operator@font sh}\nolimits}
+\def\ch{\mathop{\operator@font ch}\nolimits}
+\def\tg{\mathop{\operator@font tg}\nolimits}
+\def\arctg{\mathop{\operator@font arctg}\nolimits}
+\def\arcctg{\mathop{\operator@font arcctg}\nolimits}
+\def\ctg{\mathop{\operator@font ctg}\nolimits}
+\def\cth{\mathop{\operator@font cth}\nolimits}
+\def\cosec{\mathop{\operator@font cosec}\nolimits}
+\def\Prob{\mathop{\kern\z@\mathsf{P}}\nolimits}
+\def\Variance{\mathop{\kern\z@\mathsf{D}}\nolimits}
+\def\nsd{\mathop{\mathrm{н.с.д.}}\nolimits}
+\def\nsk{\mathop{\mathrm{н.с.к.}}\nolimits}
+\def\NSD{\mathop{\mathrm{НСД}}\nolimits}
+\def\NSK{\mathop{\mathrm{НСК}}\nolimits}
+\def\nod{\mathop{\mathrm{н.о.д.}}\nolimits}
+\def\nok{\mathop{\mathrm{н.о.к.}}\nolimits}
+\def\NOD{\mathop{\mathrm{НОД}}\nolimits}
+\def\NOK{\mathop{\mathrm{НОК}}\nolimits}
+\def\Proj{\mathop{\mathrm{пр}}\nolimits}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-ukrainian.ldf>
+%<*gloss-uppersorbian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-uppersorbian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-uppersorbian.ldf}[polyglossia: module for upper sorbian]
+
+% We provide this as a babel alias
+
+\xpg@load@master@language{sorbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-uppersorbian.ldf>
+%<*gloss-urdu.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-urdu.ldf}
+% \begin{macrocode}
+%%% Adapted from a file contributed by Kamal Abdali
+\ProvidesFile{gloss-urdu.ldf}[polyglossia: module for Urdu]
+\ifluatex
+ \xpg@warning{Urdu is not supported with LuaTeX.\MessageBreak
+I will proceed with the compilation, but\MessageBreak
+the output is not guaranteed to be correct\MessageBreak
+and may look very wrong.}
+\fi
+\RequireBidi
+\RequirePackage{arabicnumbers}
+\RequirePackage{hijrical}
+
+\PolyglossiaSetup{urdu}{
+ bcp47=ur,
+ script=Arabic,
+ direction=RL,
+ scripttag=arab,
+ langtag=URD,
+ hyphennames={urdu,nohyphenation},
+ fontsetup=true,
+ localnumeral=urdunumerals
+ %TODO localalph={abjad,abjad}
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{urdu}{ur}
+
+\newif\if@western@numerals
+\def\tmp@western{western}
+\define@key{urdu}{numerals}[eastern]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@western\@western@numeralstrue%
+ \else\@western@numeralsfalse%
+ \fi}
+
+%% TODO USE boolkey instead !!!
+%this is needed for \abjad in arabicnumbers.sty
+\def\tmp@true{true}
+\define@key{urdu}{abjadjimnotail}[true]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@true\abjad@jim@notailtrue%
+ \else
+ \abjad@jim@notailfalse
+ \fi}
+
+\newif\if@hijrical
+\def\tmp@hijri{hijri}
+\define@key{urdu}{calendar}[gregorian]{%
+ \def\@tmpa{#1}%
+ \ifx\@tmpa\tmp@hijri\@hijricaltrue%
+ \else\@hijricalfalse%
+ \fi}
+
+\define@key{urdu}{hijricorrection}[0]{%
+ \gdef\@hijri@correction{#1}}%
+
+% This should set the defaults
+\setkeys{urdu}{calendar,numerals,hijricorrection}
+
+\def\urdugregmonth#1{\ifcase#1%
+ \or جنوری\or فروری\or مارچ\or اپریل\or مئی\or جون\or جولائی\or اگست\or ستمبر\or اکتوبر\or نومبر\or دسمبر\fi}
+
+\def\urduhijrimonth#1{\ifcase#1%
+ \or محرّم\or صفر\or ربیع الاوّل\or ربیع الثّانی\or جمادی الاوّل\or جمادی الثّانی\or رجب\or شعبان\or رمضان\or شوّال\or ذیقعدہ\or ذی الحجّہ\fi}
+
+%\Hijritoday is now locale-aware and will format the date with this macro:
+\DefineFormatHijriDate{urdu}{\@ensure@RTL{%
+ \urdunumber{\value{Hijriday}}؍\space\urduhijrimonth{\value{Hijrimonth}}\space\urdunumber{\value{Hijriyear}}}}
+
+\def\captionsurdu{%
+ \def\refname{\@ensure@RTL{حوالہ جات}}%
+ \def\abstractname{\@ensure@RTL{ملخّص}}%
+ \def\bibname{\@ensure@RTL{کتابیات}}%
+ \def\prefacename{\@ensure@RTL{دیباچہ}}%
+ \def\chaptername{\@ensure@RTL{باب}}%
+ \def\appendixname{\@ensure@RTL{ضمیمہ}}%
+ \def\contentsname{\@ensure@RTL{فہرست عنوانات}}%
+ \def\listfigurename{\@ensure@RTL{فہرست اشکال}}%
+ \def\listtablename{\@ensure@RTL{فہرست جداول}}%
+ \def\indexname{\@ensure@RTL{اشاریہ}}%
+ \def\figurename{\@ensure@RTL{شكل}}%
+ \def\tablename{\@ensure@RTL{جدول}}%
+ %\def\thepart{}%
+ \def\partname{\@ensure@RTL{حصّہ}}%
+ \def\pagename{\@ensure@RTL{صفحہ}}%
+ \def\seename{\@ensure@RTL{ملاحظہ ہو}}%
+ \def\alsoname{\@ensure@RTL{ایضاً}}%
+ \def\enclname{\@ensure@RTL{منسلک}}%
+ \def\ccname{\@ensure@RTL{نقل}}%
+ \def\headtoname{\@ensure@RTL{بملاحظہ}}%
+ \def\proofname{\@ensure@RTL{ثبوت}}%
+ \def\glossaryname{\@ensure@RTL{لغت}}%
+ \def\sectionname{\@ensure@RTL{فصل}}%
+}
+
+\def\dateurdu{%
+ \def\today{%
+ \if@hijrical
+ \Hijritoday[\@hijri@correction]%
+ \else
+ \@ensure@RTL{\urdunumber\day؍\space\urdugregmonth{\month}%
+ \space\urdunumber\year}%
+ \fi}%
+}
+
+\def\urdunumber#1{%
+ \if@western@numerals
+ \number#1%
+ \else
+ %%FIXME use farsidigits instead???
+ \protect\arabicdigits{\number#1}%
+ \fi}
+
+\def\urdu@numbers{%
+ \let\@alph\abjad%
+ \let\@Alph\abjad%
+}
+
+\def\nourdu@numbers{%
+ \let\@alph\latin@alph%
+ \let\@Alph\latin@Alph%
+}
+
+\newcommand{\urdunumerals}[2]{\urdunumber{#2}}
+
+% Store original definition
+\let\xpg@save@arabic\@arabic
+
+\def\urdu@globalnumbers{%
+ \let\@arabic\urdunumber%
+ % For some reason \thefootnote needs to be set separately:
+ \renewcommand\thefootnote{\localnumeral*{footnote}}%
+}
+
+\def\nourdu@globalnumbers{
+ \let\@arabic\xpg@save@arabic%
+}
+
+% Save original \MakeUppercase definition
+\let\xpg@save@MakeUppercase\MakeUppercase
+
+\def\blockextras@urdu{%
+ \def\MakeUppercase##1{##1}%
+}
+
+\def\noextras@urdu{%
+ % restore original \MakeUppercase definition
+ \let\MakeUppercase\xpg@save@MakeUppercase%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-urdu.ldf>
+%<*gloss-usorbian.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-usorbian.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-usorbian.ldf}[polyglossia: module for upper sorbian]
+
+% We only provide this gloss for babel compatibility. Since usorbian is
+% a sorbian variety, we use 'sorbian' with variant 'upper' now.
+
+\xpg@load@master@language{sorbian}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-usorbian.ldf>
+%<*gloss-vietnamese.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-vietnamese.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-vietnamese.ldf}[polyglossia: module for vietnamese]
+%% Strings contributed by Daniel Owens < dhowens . pmbx . net >
+
+\PolyglossiaSetup{vietnamese}{
+ bcp47=vi,
+ hyphennames={nohyphenation},
+ hyphenmins={2,2},
+ langtag=VIT,
+ frenchspacing=true,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{vietnamese}{vi}
+
+\def\captionsvietnamese{%
+ \def\refname{Tài liệu}%
+ \def\abstractname{Tóm tắt nội dung}%
+ \def\bibname{Tài liệu tham khảo}%
+ \def\prefacename{Lời nói đầu}%
+ \def\chaptername{Chương}%
+ \def\appendixname{Phụ lục}%
+ \def\contentsname{Mục lục}%
+ \def\listfigurename{Danh sách hình vẽ}%
+ \def\listtablename{Danh sách bảng}%
+ \def\indexname{Chỉ mục}%
+ \def\figurename{Hình}%
+ \def\tablename{Bảng}%
+ \def\partname{Phần}%
+ \def\pagename{Trang}%
+ \def\seename{Xem}%
+ \def\alsoname{Xem thêm}%
+ \def\enclname{Kèm theo}%
+ \def\ccname{Cùng gửi}%
+ \def\headtoname{Gửi}%
+ \def\proofname{Chứng minh}%
+ \def\glossaryname{Từ điển chú giải}%
+ }
+
+\def\datevietnamese{%
+ \def\today{%
+ Ngày \number\day\space
+ tháng \number\month\space
+ năm \number\year}%
+ }
+
+% \end{macrocode}
+% \iffalse
+%</gloss-vietnamese.ldf>
+%<*gloss-welsh.ldf>
+% \fi
+% \clearpage
+%
+% \subsection{gloss-welsh.ldf}
+% \begin{macrocode}
+\ProvidesFile{gloss-welsh.ldf}[polyglossia: module for welsh]
+
+\PolyglossiaSetup{welsh}{
+ bcp47=cy,
+ hyphennames={welsh},
+ hyphenmins={2,3},
+ langtag=WEL,
+ fontsetup=true,
+}
+
+% BCP-47 compliant aliases
+\setlanguagealias*{welsh}{cy}
+
+\providebool{welsh@formaldate}
+
+\define@choicekey*+{welsh}{date}[\xpg@val\xpg@nr]{long,short}[short]{%
+ \ifcase\xpg@nr\relax
+ % long:
+ \welsh@formaldatetrue
+ \or
+ % accented:
+ \welsh@formaldatefalse
+ \fi
+ \xpg@info{Option: Welsh, date=\xpg@val}%
+}{\xpg@warning{Unknown date value `#1'}}
+
+% Register default options
+\xpg@initialize@gloss@options{welsh}{date=short}
+
+\def\captionswelsh{%
+ \def\refname{Cyfeiriadau}%
+ \def\abstractname{Crynodeb}%
+ \def\bibname{Llyfryddiaeth}%
+ \def\prefacename{Rhagair}%
+ \def\chaptername{Pennod}%
+ \def\appendixname{Atodiad}%
+ \def\contentsname{Cynnwys}%
+ \def\listfigurename{Rhestr Ddarluniau}%
+ \def\listtablename{Rhestr Dablau}%
+ \def\indexname{Mynegai}%
+ \def\figurename{Darlun}%
+ \def\tablename{Taflen}%
+ %\def\thepart{}%
+ \def\partname{Rhan}%
+ \def\pagename{tudalen}%
+ \def\seename{gweler}%
+ \def\alsoname{gweler hefyd}%
+ \def\enclname{amgaeëdig}%
+ \def\ccname{copïau}%
+ \def\headtoname{At}% ‘at’ on letters meaning ‘to (a person)’;
+ % ‘to (a place)’ is ‘i’ in Welsh
+ \def\proofname{Prawf}%
+ \def\glossaryname{Rhestr termau}%
+ }
+
+\newif\ifwelsh@first
+\def\welsh@article#1{\welsh@firsttrue y\expandafter\welsh@article@do#1}
+\def\welsh@article@do#1{\ifwelsh@first\welsh@isvowel#1\ifwelsh@vowel r\space\welsh@vowelfalse\else\space\fi#1\welsh@firstfalse\fi}
+\newif\ifwelsh@vowel
+\def\welsh@isvowel#1{\show#1\ifx#1a\welsh@voweltrue\else\ifx#1u\welsh@voweltrue\else\ifx#1w\welsh@voweltrue\fi\fi\fi}% FIXME Add the other vowels, just for good measure
+
+\def\welsh@ordinal@long#1{%
+ \ifcase#1\or cyntaf\or ail\or trydydd\or pedwerydd\or
+ pumed\or chweched\or seithfed\or wythfed\or nawfed\or degfed\or unfed ar ddeg\or deuddegfed\or trydydd ar ddeg\or pedwerydd ar ddeg\or pymthegfed\or unfed ar bymtheg\or ail ar bymtheg\or deunawfed\or pedwerydd ar bymtheg\or ugeinfed\else\expandafter\welsh@ordinalplusxx@long#1\fi}
+
+\def\welsh@ordinalplusxx@long#1{%
+ \let\dday=#1\advance\dday by -20\relax\welsh@ordinal@long\dday\space ar hugain%
+}
+
+\def\datewelsh{%
+ \def\today{\ifwelsh@formaldate\formaltoday\else\standardtoday\fi}
+ \def\standardtoday{%
+ \ifcase\day\or 1af\or 2ail\or 3ydd\or 4ydd\or 5ed\or 6ed%
+ \or 7fed\or 8fed\or 9fed\or 10fed\or 11eg\or 12fed\or 13eg\or
+ 14eg\or 15fed\or 16eg\or 17eg\or 18fed\or 19eg\or
+ 20fed\else\number\day ain\fi\space\ifcase\month\or
+ Ionawr\or Chwefror\or Mawrth\or Ebrill\or
+ Mai\or Mehefin\or Gorffennaf\or Awst\or
+ Medi\or Hydref\or Tachwedd\or Rhagfyr\fi%
+ \space\number\year}%
+ \def\formaltoday{%
+ \expandafter\welsh@article\welsh@ordinal@long\day\space o\space\ifcase\month\or
+ Ionawr\or Chwefror\or Fawrth\or Ebrill\or Fai\or Fehefin\or Orffenaf\or Awst\or
+ Fedi\or Hydref\or Dachwedd\or Ragfyr\fi%
+ \space\number\year}%
+}
+
+% \end{macrocode}
+% \iffalse
+%</gloss-welsh.ldf>
+%<*arabicdigits.map>
+% \fi
+% \clearpage
+%
+% \subsection{arabicdigits.map}
+% \begin{macrocode}
+; FC ...
+LHSName "Digits"
+RHSName "ArabicDigits"
+
+pass(Unicode)
+U+0030 <> U+0660 ;
+U+0031 <> U+0661 ;
+U+0032 <> U+0662 ;
+U+0033 <> U+0663 ;
+U+0034 <> U+0664 ;
+U+0035 <> U+0665 ;
+U+0036 <> U+0666 ;
+U+0037 <> U+0667 ;
+U+0038 <> U+0668 ;
+U+0039 <> U+0669 ;
+
+% \end{macrocode}
+% \iffalse
+%</arabicdigits.map>
+%<*bengalidigits.map>
+% \fi
+% \clearpage
+%
+% \subsection{bengalidigits.map}
+% \begin{macrocode}
+; FC ...
+LHSName "Digits"
+RHSName "BengaliDigits"
+
+pass(Unicode)
+U+0030 <> U+09E6 ;
+U+0031 <> U+09E7 ;
+U+0032 <> U+09E8 ;
+U+0033 <> U+09E9 ;
+U+0034 <> U+09EA ;
+U+0035 <> U+09EB ;
+U+0036 <> U+09EC ;
+U+0037 <> U+09ED ;
+U+0038 <> U+09EE ;
+U+0039 <> U+09EF ;
+
+% \end{macrocode}
+% \iffalse
+%</bengalidigits.map>
+%<*devanagaridigits.map>
+% \fi
+% \clearpage
+%
+% \subsection{devanagaridigits.map}
+% \begin{macrocode}
+; FC ...
+LHSName "Digits"
+RHSName "DevanagariDigits"
+
+pass(Unicode)
+U+0030 <> U+0966 ;
+U+0031 <> U+0967 ;
+U+0032 <> U+0968 ;
+U+0033 <> U+0969 ;
+U+0034 <> U+096A ;
+U+0035 <> U+096B ;
+U+0036 <> U+096C ;
+U+0037 <> U+096D ;
+U+0038 <> U+096E ;
+U+0039 <> U+096F ;
+
+% \end{macrocode}
+% \iffalse
+%</devanagaridigits.map>
+%<*farsidigits.map>
+% \fi
+% \clearpage
+%
+% \subsection{farsidigits.map}
+% \begin{macrocode}
+; FC ...
+LHSName "Digits"
+RHSName "FarsiDigits"
+
+pass(Unicode)
+U+0030 <> U+06F0 ;
+U+0031 <> U+06F1 ;
+U+0032 <> U+06F2 ;
+U+0033 <> U+06F3 ;
+U+0034 <> U+06F4 ;
+U+0035 <> U+06F5 ;
+U+0036 <> U+06F6 ;
+U+0037 <> U+06F7 ;
+U+0038 <> U+06F8 ;
+U+0039 <> U+06F9 ;
+
+% \end{macrocode}
+% \iffalse
+%</farsidigits.map>
+%<*thaidigits.map>
+% \fi
+% \clearpage
+%
+% \subsection{thaidigits.map}
+% \begin{macrocode}
+; FC ...
+LHSName "Digits"
+RHSName "ThaiDigits"
+
+pass(Unicode)
+U+0030 <> U+0E50 ;
+U+0031 <> U+0E51 ;
+U+0032 <> U+0E52 ;
+U+0033 <> U+0E53 ;
+U+0034 <> U+0E54 ;
+U+0035 <> U+0E55 ;
+U+0036 <> U+0E56 ;
+U+0037 <> U+0E57 ;
+U+0038 <> U+0E58 ;
+U+0039 <> U+0E59 ;
+
+% \end{macrocode}
+% \iffalse
+%</thaidigits.map>
+%<*polyglossia-french.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-french.lua}
+% \begin{macrocode}
+require('polyglossia-punct')
+
+local function set_left_space(lang, char, kern, rubber)
+ polyglossia.add_left_spaced_character(lang, char, kern, "space", rubber)
+end
+
+local function set_right_space(lang, char, kern, rubber)
+ polyglossia.add_right_spaced_character(lang, char, kern, "space", rubber)
+end
+
+local function activate_french_punct(thincolonspace, autospaceguillemets)
+ -- We need different language tags here to make switching of options possible
+ -- within a paragraph.
+ local lang = "french"
+ if thincolonspace then
+ lang = lang.."-thincolon"
+ end
+ if autospaceguillemets then
+ lang = lang.."-autospace"
+ end
+
+ polyglossia.activate_punct(lang)
+ polyglossia.clear_spaced_characters(lang)
+
+ if thincolonspace then
+ set_left_space(lang, ':', 0.5)
+ else
+ set_left_space(lang, ':', 1, true) -- stretchable and shrinkable space
+ end
+
+ set_left_space(lang, '!', 0.5)
+ set_left_space(lang, '?', 0.5)
+ set_left_space(lang, ';', 0.5)
+ set_left_space(lang, '‼', 0.5)
+ set_left_space(lang, '⁇', 0.5)
+ set_left_space(lang, '⁈', 0.5)
+ set_left_space(lang, '⁉', 0.5)
+ set_left_space(lang, '‽', 0.5) -- U+203D (interrobang)
+
+ if autospaceguillemets then
+ set_left_space(lang, '»', 0.5)
+ set_left_space(lang, '›', 0.5)
+ set_right_space(lang, '«', 0.5)
+ set_right_space(lang, '‹', 0.5)
+ end
+end
+
+local function deactivate_french_punct()
+ polyglossia.deactivate_punct()
+end
+
+polyglossia.activate_french_punct = activate_french_punct
+polyglossia.deactivate_french_punct = deactivate_french_punct
+% \end{macrocode}
+% \iffalse
+%</polyglossia-french.lua>
+%<*polyglossia-korean.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-korean.lua}
+% \begin{macrocode}
+--
+-- polyglossia-korean.lua
+--
+
+local glyph_id = node.id"glyph"
+local hbox_id = node.id"hlist"
+local vbox_id = node.id"vlist"
+local glue_id = node.id"glue"
+local penalty_id = node.id"penalty"
+local disc_id = node.id"disc"
+
+--
+-- attr_korean: variant = plain (0), classic (1), modern (2)
+--
+local attr_korean = luatexbase.attributes["xpg@attr@korean"]
+local attr_josa = luatexbase.attributes["xpg@attr@autojosa"]
+
+--
+-- characters after which linebreak is not allowed
+--
+local nobr_after = {
+ [0x28] = 1, -- ( LEFT PARENTHESIS
+ [0x3C] = 1, -- < LESS-THAN SIGN
+ [0x5B] = 1, -- [ LEFT SQUARE BRACKET
+ [0x60] = 1, -- ` GRAVE ACCENT
+ [0x7B] = 1, -- { LEFT CURLY BRACKET
+ [0xAB] = 1, -- « LEFT-POINTING DOUBLE ANGLE QUOTATION MARK
+ [0x2018] = 1, -- ‘ LEFT SINGLE QUOTATION MARK
+ [0x201C] = 1, -- “ LEFT DOUBLE QUOTATION MARK
+ [0x2329] = 1, -- 〈 LEFT-POINTING ANGLE BRACKET
+ [0x3008] = 1, -- 〈 LEFT ANGLE BRACKET
+ [0x300A] = 1, -- 《 LEFT DOUBLE ANGLE BRACKET
+ [0x300C] = 1, -- 「 LEFT CORNER BRACKET
+ [0x300E] = 1, -- 『 LEFT WHITE CORNER BRACKET
+ [0x3010] = 1, -- 【 LEFT BLACK LENTICULAR BRACKET
+ [0x3014] = 1, -- 〔 LEFT TORTOISE SHELL BRACKET
+ [0x3016] = 1, -- 〖 LEFT WHITE LENTICULAR BRACKET
+ [0x3018] = 1, -- 〘 LEFT WHITE TORTOISE SHELL BRACKET
+ [0x301A] = 1, -- 〚 LEFT WHITE SQUARE BRACKET
+ [0x301D] = 1, -- 〝 REVERSED DOUBLE PRIME QUOTATION MARK
+ [0xFE17] = 1, -- ︗ PRESENTATION FORM FOR VERTICAL LEFT WHITE LENTICULAR BRACKET
+ [0xFE35] = 1, -- ︵ PRESENTATION FORM FOR VERTICAL LEFT PARENTHESIS
+ [0xFE37] = 1, -- ︷ PRESENTATION FORM FOR VERTICAL LEFT CURLY BRACKET
+ [0xFE39] = 1, -- ︹ PRESENTATION FORM FOR VERTICAL LEFT TORTOISE SHELL BRACKET
+ [0xFE3B] = 1, -- ︻ PRESENTATION FORM FOR VERTICAL LEFT BLACK LENTICULAR BRACKET
+ [0xFE3D] = 1, -- ︽ PRESENTATION FORM FOR VERTICAL LEFT DOUBLE ANGLE BRACKET
+ [0xFE3F] = 1, -- ︿ PRESENTATION FORM FOR VERTICAL LEFT ANGLE BRACKET
+ [0xFE41] = 1, -- ﹁ PRESENTATION FORM FOR VERTICAL LEFT CORNER BRACKET
+ [0xFE43] = 1, -- ﹃ PRESENTATION FORM FOR VERTICAL LEFT WHITE CORNER BRACKET
+ [0xFE47] = 1, -- ﹇ PRESENTATION FORM FOR VERTICAL LEFT SQUARE BRACKET
+ [0xFE59] = 1, -- ﹙ SMALL LEFT PARENTHESIS
+ [0xFE5B] = 1, -- ﹛ SMALL LEFT CURLY BRACKET
+ [0xFE5D] = 1, -- ﹝ SMALL LEFT TORTOISE SHELL BRACKET
+ [0xFF08] = 1, -- ( FULLWIDTH LEFT PARENTHESIS
+ [0xFF3B] = 1, -- [ FULLWIDTH LEFT SQUARE BRACKET
+ [0xFF5B] = 1, -- { FULLWIDTH LEFT CURLY BRACKET
+ [0xFF5F] = 1, -- ⦅ FULLWIDTH LEFT WHITE PARENTHESIS
+ [0xFF62] = 1, -- 「 HALFWIDTH LEFT CORNER BRACKET
+}
+
+--
+-- characters before which linebreak is not allowed
+-- (currently, not much differences among the followings)
+-- 1: normal chars
+-- 2: hangul jamo vowels and trailing consonants
+-- 3: kana small letters
+-- 0: dashes (supress visible spacing)
+--
+local nobr_before = setmetatable({
+ [0x21] = 1, -- ! EXCLAMATION MARK
+ [0x22] = 1, -- " QUOTATION MARK
+ [0x27] = 1, -- ' APOSTROPHE
+ [0x29] = 1, -- ) RIGHT PARENTHESIS
+ [0x2C] = 1, -- , COMMA
+ [0x2D] = 0, -- - HYPHEN-MINUS
+ [0x2E] = 1, -- . FULL STOP
+ [0x2F] = 0, -- / SOLIDUS
+ [0x3A] = 0, -- : COLON
+ [0x3B] = 1, -- ; SEMICOLON
+ [0x3E] = 1, -- > GREATER-THAN SIGN
+ [0x3F] = 1, -- ? QUESTION MARK
+ [0x5C] = 0, -- \ REVERSE SOLIDUS
+ [0x5D] = 1, -- ] RIGHT SQUARE BRACKET
+ [0x7D] = 1, -- } RIGHT CURLY BRACKET
+ [0x7E] = 0, -- ~ TILDE
+ [0xB7] = 1, -- · MIDDLE DOT
+ [0xBB] = 1, -- » RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK
+ [0x2013] = 0, -- – EN DASH
+ [0x2014] = 0, -- — EM DASH
+ [0x2015] = 1, -- ― HORIZONTAL BAR
+ [0x2019] = 1, -- ’ RIGHT SINGLE QUOTATION MARK
+ [0x201D] = 1, -- ” RIGHT DOUBLE QUOTATION MARK
+ [0x2025] = 1, -- ‥ TWO DOT LEADER
+ [0x2026] = 1, -- … HORIZONTAL ELLIPSIS
+ [0x232A] = 1, -- 〉 RIGHT-POINTING ANGLE BRACKET
+ [0x3001] = 1, -- 、 IDEOGRAPHIC COMMA
+ [0x3002] = 1, -- 。 IDEOGRAPHIC FULL STOP
+ [0x3005] = 1, -- 々 IDEOGRAPHIC ITERATION MARK
+ [0x3009] = 1, -- 〉 RIGHT ANGLE BRACKET
+ [0x300B] = 1, -- 》 RIGHT DOUBLE ANGLE BRACKET
+ [0x300D] = 1, -- 」 RIGHT CORNER BRACKET
+ [0x300F] = 1, -- 』 RIGHT WHITE CORNER BRACKET
+ [0x3011] = 1, -- 】 RIGHT BLACK LENTICULAR BRACKET
+ [0x3015] = 1, -- 〕 RIGHT TORTOISE SHELL BRACKET
+ [0x3017] = 1, -- 〗 RIGHT WHITE LENTICULAR BRACKET
+ [0x3019] = 1, -- 〙 RIGHT WHITE TORTOISE SHELL BRACKET
+ [0x301B] = 1, -- 〛 RIGHT WHITE SQUARE BRACKET
+ [0x301C] = 1, -- 〜 WAVE DASH
+ [0x301E] = 1, -- 〞 DOUBLE PRIME QUOTATION MARK
+ [0x301F] = 1, -- 〟 LOW DOUBLE PRIME QUOTATION MARK
+ [0x3035] = 1, -- 〵 VERTICAL KANA REPEAT MARK LOWER HALF
+ [0x303B] = 1, -- 〻 VERTICAL IDEOGRAPHIC ITERATION MARK
+ [0x303C] = 1, -- 〼 MASU MARK
+ [0x3041] = 3, -- ぁ HIRAGANA LETTER SMALL A
+ [0x3043] = 3, -- ぃ HIRAGANA LETTER SMALL I
+ [0x3045] = 3, -- ぅ HIRAGANA LETTER SMALL U
+ [0x3047] = 3, -- ぇ HIRAGANA LETTER SMALL E
+ [0x3049] = 3, -- ぉ HIRAGANA LETTER SMALL O
+ [0x3063] = 3, -- っ HIRAGANA LETTER SMALL TU
+ [0x3083] = 3, -- ゃ HIRAGANA LETTER SMALL YA
+ [0x3085] = 3, -- ゅ HIRAGANA LETTER SMALL YU
+ [0x3087] = 3, -- ょ HIRAGANA LETTER SMALL YO
+ [0x308E] = 3, -- ゎ HIRAGANA LETTER SMALL WA
+ [0x3095] = 3, -- ゕ HIRAGANA LETTER SMALL KA
+ [0x3096] = 3, -- ゖ HIRAGANA LETTER SMALL KE
+ [0x3099] = 1, -- COMBINING KATAKANA-HIRAGANA VOICED SOUND MARK
+ [0x309A] = 1, -- COMBINING KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ [0x309B] = 1, -- ゛ KATAKANA-HIRAGANA VOICED SOUND MARK
+ [0x309C] = 1, -- ゜ KATAKANA-HIRAGANA SEMI-VOICED SOUND MARK
+ [0x309D] = 1, -- ゝ HIRAGANA ITERATION MARK
+ [0x309E] = 1, -- ゞ HIRAGANA VOICED ITERATION MARK
+ [0x30A0] = 1, -- ゠ KATAKANA-HIRAGANA DOUBLE HYPHEN
+ [0x30A1] = 3, -- ァ KATAKANA LETTER SMALL A
+ [0x30A3] = 3, -- ィ KATAKANA LETTER SMALL I
+ [0x30A5] = 3, -- ゥ KATAKANA LETTER SMALL U
+ [0x30A7] = 3, -- ェ KATAKANA LETTER SMALL E
+ [0x30A9] = 3, -- ォ KATAKANA LETTER SMALL O
+ [0x30C3] = 3, -- ッ KATAKANA LETTER SMALL TU
+ [0x30E3] = 3, -- ャ KATAKANA LETTER SMALL YA
+ [0x30E5] = 3, -- ュ KATAKANA LETTER SMALL YU
+ [0x30E7] = 3, -- ョ KATAKANA LETTER SMALL YO
+ [0x30EE] = 3, -- ヮ KATAKANA LETTER SMALL WA
+ [0x30F5] = 3, -- ヵ KATAKANA LETTER SMALL KA
+ [0x30F6] = 3, -- ヶ KATAKANA LETTER SMALL KE
+ [0x30FB] = 1, -- ・ KATAKANA MIDDLE DOT
+ [0x30FC] = 1, -- ー KATAKANA-HIRAGANA PROLONGED SOUND MARK
+ [0x30FD] = 1, -- ヽ KATAKANA ITERATION MARK
+ [0x30FE] = 1, -- ヾ KATAKANA VOICED ITERATION MARK
+ [0xFE30] = 1, -- ︰ PRESENTATION FORM FOR VERTICAL TWO DOT LEADER
+ [0xFE31] = 1, -- ︱ PRESENTATION FORM FOR VERTICAL EM DASH
+ [0xFE32] = 1, -- ︲ PRESENTATION FORM FOR VERTICAL EN DASH
+ [0xFE36] = 1, -- ︶ PRESENTATION FORM FOR VERTICAL RIGHT PARENTHESIS
+ [0xFE38] = 1, -- ︸ PRESENTATION FORM FOR VERTICAL RIGHT CURLY BRACKET
+ [0xFE3A] = 1, -- ︺ PRESENTATION FORM FOR VERTICAL RIGHT TORTOISE SHELL BRACKET
+ [0xFE3C] = 1, -- ︼ PRESENTATION FORM FOR VERTICAL RIGHT BLACK LENTICULAR BRACKET
+ [0xFE3E] = 1, -- ︾ PRESENTATION FORM FOR VERTICAL RIGHT DOUBLE ANGLE BRACKET
+ [0xFE40] = 1, -- ﹀ PRESENTATION FORM FOR VERTICAL RIGHT ANGLE BRACKET
+ [0xFE42] = 1, -- ﹂ PRESENTATION FORM FOR VERTICAL RIGHT CORNER BRACKET
+ [0xFE44] = 1, -- ﹄ PRESENTATION FORM FOR VERTICAL RIGHT WHITE CORNER BRACKET
+ [0xFE48] = 1, -- ﹈ PRESENTATION FORM FOR VERTICAL RIGHT SQUARE BRACKET
+ [0xFE5A] = 1, -- ﹚ SMALL RIGHT PARENTHESIS
+ [0xFE5C] = 1, -- ﹜ SMALL RIGHT CURLY BRACKET
+ [0xFE5E] = 1, -- ﹞ SMALL RIGHT TORTOISE SHELL BRACKET
+ [0xFF01] = 1, -- ! FULLWIDTH EXCLAMATION MARK
+ [0xFF09] = 1, -- ) FULLWIDTH RIGHT PARENTHESIS
+ [0xFF0C] = 1, -- , FULLWIDTH COMMA
+ [0xFF0E] = 1, -- . FULLWIDTH FULL STOP
+ [0xFF1A] = 1, -- : FULLWIDTH COLON
+ [0xFF1B] = 1, -- ; FULLWIDTH SEMICOLON
+ [0xFF1F] = 1, -- ? FULLWIDTH QUESTION MARK
+ [0xFF3D] = 1, -- ] FULLWIDTH RIGHT SQUARE BRACKET
+ [0xFF5D] = 1, -- } FULLWIDTH RIGHT CURLY BRACKET
+ [0xFF60] = 1, -- ⦆ FULLWIDTH RIGHT WHITE PARENTHESIS
+ [0xFF61] = 1, -- 。 HALFWIDTH IDEOGRAPHIC FULL STOP
+ [0xFF63] = 1, -- 」 HALFWIDTH RIGHT CORNER BRACKET
+ [0xFF64] = 1, -- 、 HALFWIDTH IDEOGRAPHIC COMMA
+ [0xFF65] = 1, -- ・ HALFWIDTH KATAKANA MIDDLE DOT
+ [0xFF9E] = 1, -- ゙ HALFWIDTH KATAKANA VOICED SOUND MARK
+ [0xFF9F] = 1, -- ゚ HALFWIDTH KATAKANA SEMI-VOICED SOUND MARK
+}, { __index = function(_,c)
+ if c >= 0x1160 and c <= 0x11FF then return 2 end
+ if c >= 0xD7B0 and c <= 0xD7FF then return 2 end
+ if c >= 0x302A and c <= 0x302F then return 1 end
+ if c >= 0x31F0 and c <= 0x31FF then return 3 end
+ if c >= 0xFF67 and c <= 0xFF70 then return 3 end
+ if c >= 0xFE00 and c <= 0xFE0F then return 1 end
+ if c >= 0xFE10 and c <= 0xFE19 and not (c == 0xFE17) then return 1 end
+ if c >= 0xFE50 and c <= 0xFE58 then return 1 end
+ if c >= 0xE0100 and c <= 0xE01EF then return 1 end
+ end
+})
+
+--
+-- whether 'c' is a cjk character
+--
+local function is_cjk (c)
+ return c >= 0xAC00 and c <= 0xD7FF
+ or c >= 0x1100 and c <= 0x11FF
+ or c >= 0xA960 and c <= 0xA97F
+ or c >= 0x2E80 and c <= 0x9FFF
+ or c >= 0xF900 and c <= 0xFAFF
+ or c >= 0xFE10 and c <= 0xFE1F
+ or c >= 0xFE30 and c <= 0xFE6F
+ or c >= 0xFF00 and c <= 0xFFEF
+ or c >= 0x1F100 and c <= 0x1F2FF
+ or c >= 0x20000 and c <= 0x2FA1F
+ or nobr_after[c] and c > 0x2014
+ or nobr_before[c] and c > 0x2014
+end
+
+--
+-- classify cjk characters
+-- 1: openings
+-- 2: closings
+-- 3: centered chars
+-- 4: full stops
+-- 5: ellipses
+-- 6: exclamation and question marks
+-- 0: all others
+--
+local charclass = setmetatable({
+ [0x2018] = 1, [0x201C] = 1, [0x2329] = 1, [0x3008] = 1,
+ [0x300A] = 1, [0x300C] = 1, [0x300E] = 1, [0x3010] = 1,
+ [0x3014] = 1, [0x3016] = 1, [0x3018] = 1, [0x301A] = 1,
+ [0x301D] = 1, [0xFE17] = 1, [0xFE35] = 1, [0xFE37] = 1,
+ [0xFE39] = 1, [0xFE3B] = 1, [0xFE3D] = 1, [0xFE3F] = 1,
+ [0xFE41] = 1, [0xFE43] = 1, [0xFE47] = 1, [0xFF08] = 1,
+ [0xFF3B] = 1, [0xFF5B] = 1, [0xFF5F] = 1, [0xFF62] = 1,
+ [0x2019] = 2, [0x201D] = 2, [0x232A] = 2, [0x3001] = 2,
+ [0x3009] = 2, [0x300B] = 2, [0x300D] = 2, [0x300F] = 2,
+ [0x3011] = 2, [0x3015] = 2, [0x3017] = 2, [0x3019] = 2,
+ [0x301B] = 2, [0x301E] = 2, [0x301F] = 2, [0xFE10] = 2,
+ [0xFE11] = 2, [0xFE18] = 2, [0xFE36] = 2, [0xFE38] = 2,
+ [0xFE3A] = 2, [0xFE3C] = 2, [0xFE3E] = 2, [0xFE40] = 2,
+ [0xFE42] = 2, [0xFE44] = 2, [0xFE48] = 2, [0xFF09] = 2,
+ [0xFF0C] = 2, [0xFF3D] = 2, [0xFF5D] = 2, [0xFF60] = 2,
+ [0xFF63] = 2, [0xFF64] = 2, [0x00B7] = 3, [0x30FB] = 3,
+ [0xFF1A] = 3, [0xFF1B] = 3, [0xFF65] = 3, [0x3002] = 4,
+ [0xFE12] = 4, [0xFF0E] = 4, [0xFF61] = 4, [0x2015] = 5,
+ [0x2025] = 5, [0x2026] = 5, [0xFE19] = 5, [0xFE30] = 5,
+ [0xFE31] = 5, [0xFE15] = 6, [0xFE16] = 6, [0xFF01] = 6,
+ [0xFF1F] = 6,
+}, { __index = function() return 0 end })
+
+--
+-- table for spacing between char classes
+-- 1 stands for 0.5*fontsize when variant=classic
+--
+local intercharclass = { [0] =
+ { [0] = nil, {1,1}, nil, {.5,.5} },
+ { [0] = nil, nil, nil, {.5,.5} },
+ { [0] = {1,1}, {1,1}, nil, {.5,.5}, nil, {1,1}, {1,1} },
+ { [0] = {.5,.5},{.5,.5},{.5,.5},{1,.5}, {.5,.5},{.5,.5},{.5,.5} },
+ { [0] = {1,0}, {1,0}, nil, {1.5,.5},nil, {1,0}, {1,0} },
+ { [0] = nil, {1,1}, nil, {.5,.5} },
+ { [0] = {1,1}, {1,1}, nil, {.5,.5} },
+}
+
+--
+-- get a new penalty node
+--
+local function get_new_penalty (p)
+ local penalty = node.new("penalty")
+ penalty.penalty = p
+ return penalty
+end
+
+--
+-- get a new glue node
+--
+local function get_new_glue (...)
+ local glue = node.new("glue")
+ node.setglue(glue, ...)
+ return glue
+end
+
+--
+-- return 0.5*fontsize of given fontid
+-- space: true if variant=modern; then 0.5*interword_space
+--
+local function get_font_size (fid, space)
+ local size = font.getparameters(fid)
+ if space then
+ size = size and size.space or 196608
+ else
+ size = size and size.quad or 655360
+ end
+ return size/2
+end
+
+--
+-- charclass 1 thru 4 will be packed in \hbox to 0.5em{\hss? curr \hss?}
+-- when variant=classic/modern
+--
+local function glyph_to_box (head, curr, class)
+ local g, h = curr
+ local size = get_font_size(g.font)
+ head, curr = node.remove(head, curr)
+ g.next, g.prev = nil, nil
+ local hss = get_new_glue(0, 65536, 65536, 2, 2)
+ if class == 1 then
+ h, hss.next, g.prev = hss, g, hss
+ elseif class == 2 or class == 4 then
+ h, g.next, hss.prev = g, hss, g
+ else
+ local hss2 = node.copy(hss)
+ h, hss.next, g.prev, g.next, hss2.prev = hss, g, hss, hss2, g
+ end
+ h = nodes.simple_font_handler(h)
+ local box = node.hpack(h, size, "exactly")
+ if curr then
+ head, curr = node.insert_before(head, curr, box)
+ else
+ head, curr = node.insert_after(head, node.tail(head), box)
+ end
+ return head, curr
+end
+
+--
+-- insert spacing defined as charclass[a][b] between a and b
+-- f: fontid
+-- var: variant = plain, classic, modern
+-- cc: charclass of current char
+-- nc: charclass of next char
+-- nobr: linebreak is not allowed
+--
+local function insert_cjk_penalty_glue (head, curr, f, var, cc, nc, nobr)
+ if nobr or cc == 1 or nc > 1 then
+ local penalty = get_new_penalty(10000)
+ head, curr = node.insert_after(head, curr, penalty)
+ end
+ local factor = get_font_size(f, var == 2)
+ local t = intercharclass[cc][nc]
+ local glue = get_new_glue(t[1]*factor, nil, t[2]*factor)
+ head, curr = node.insert_after(head, curr, glue)
+ return head, curr
+end
+
+--
+-- insert inter-character spacing in other normal cases
+-- f: fontid
+-- var: variant = plain, classic, modern
+-- x: true between cjk and non-cjk (a little more spacing)
+--
+local function insert_penalty_glue (head, curr, f, var, x)
+ if var ~= 1 then
+ local penalty = get_new_penalty(50)
+ head, curr = node.insert_after(head, curr, penalty)
+ end
+ local size, glue = get_font_size(f, x and var == 2)
+ if x then
+ glue = get_new_glue(size/2, size/4, size/8)
+ else
+ glue = get_new_glue(0, size/10, size/50)
+ end
+ head, curr = node.insert_after(head, curr, glue)
+ return head, curr
+end
+
+--
+-- main process for linebreak and inter-character spacing
+-- lb: true if pre_linebreak_filter
+--
+local function korean_break (head, lb)
+ local curr = head
+ while curr do
+ if curr.id == glyph_id then
+ local var = node.has_attribute(curr, attr_korean)
+ if var then
+ local c, f = curr.char or 0, curr.font or 0
+ local cc, cjkc = charclass[c], is_cjk(c)
+
+ -- compress cjk punctuations when charclass is 1 thru 4
+ if var > 0 and cc > 0 and cc < 5 then
+ head, curr = glyph_to_box(head, curr, cc)
+ end
+
+ local next = curr.next
+ if next and next.id == glyph_id then
+ local n = next.char or 0
+ local nc = charclass[n]
+ local nobr = nobr_before[n] or nobr_after[c]
+
+ -- insert spacing as of intercharclass
+ if var > 0 and intercharclass[cc][nc] then
+ head, curr = insert_cjk_penalty_glue(head, curr, f, var, cc, nc, nobr)
+
+ -- or insert spacing when linebreak is allowed
+ elseif not nobr then
+ local cjkn = is_cjk(n)
+
+ -- if curr or next is cjk char
+ if cjkc or cjkn then
+
+ -- if between cjk and non-cjk
+ if var > 0 and not (cjkc and cjkn) and nobr_before[c] ~= 0 then
+ head, curr = insert_penalty_glue(head, curr, f, var, true)
+
+ -- or under pre_linebreak_filter
+ elseif lb then
+ head, curr = insert_penalty_glue(head, curr, f, var)
+ end
+ end
+ end
+ end
+ end
+ end
+ curr = curr.next
+ end
+ return head
+end
+
+--
+-- process for reordering hangul tone marks (U+302E, U+302F)
+-- some hangul fonts (eg. Noto CJK) are so designed that hangul tone marks
+-- should be moved to the first position of a syllable.
+-- Currently, this functionality is not provided by luaotfload.
+--
+local function reorder_tm (head)
+ local curr, tone = node.slide(head)
+ while curr do
+ if curr.id == glyph_id and node.has_attribute(curr, attr_korean) then
+ local f = font.getfont(curr.font) or font.fonts[curr.font]
+ if f and f.hb then -- harfbuzz do the right thing
+ tone = nil
+ else
+ local c, wd = curr.char or 0, curr.width or 0
+ if (c == 0x302E or c == 0x302F) and wd > 0 then
+ tone = curr
+ elseif tone and not nobr_before[c] then
+ head = node.remove(head, tone)
+ tone.next, tone.prev = nil, nil
+ head, curr = node.insert_before(head, curr, tone)
+ tone = nil
+ end
+ end
+ end
+ curr = curr.prev
+ end
+ return head
+end
+
+--
+-- automatic josa selection
+--
+local josa_table = {
+ -- consonant ㄹ, vowel, other consonants
+ [0xAC00] = {0xC774, 0xAC00, 0xC774}, -- 가 => 이, 가, 이
+ [0xC740] = {0xC740, 0xB294, 0xC740}, -- 은 => 은, 는, 은
+ [0xC744] = {0xC744, 0xB97C, 0xC744}, -- 을 => 을, 를, 을
+ [0xC640] = {0xACFC, 0xC640, 0xACFC}, -- 와 => 과, 와, 과
+ [0xC73C] = {nil, nil, 0xC73C}, -- 으(로) => , , 으
+ [0xC774] = {0xC774, nil, 0xC774}, -- 이(라) => 이, , 이
+}
+
+--
+-- helper function for number-like characters
+--
+local function josa_char_num (t, c)
+ c = c % 10 + 0x30
+ return t[c] or 2
+end
+
+--
+-- decide josa selection
+--
+local josa_code = setmetatable({
+ [0x30] = 3, [0x31] = 1, [0x33] = 3, [0x36] = 3, [0x37] = 1,
+ [0x38] = 1, [0x4C] = 1, [0x4D] = 3, [0x4E] = 3, [0x6C] = 1,
+ [0x6D] = 3, [0x6E] = 3, [0xFB02] = 1, [0xFB04] = 1,
+},{ __index = function(t,c)
+ if c >= 0xAC00 and c <= 0xD7A3 then
+ c = (c - 0xAC00) % 28 + 0x11A7
+ end
+ if c >= 0x11A8 and c <= 0x11FF then
+ if c == 0x11AF then return 1 end
+ return 3
+ end
+ if c >= 0xD7CB and c <= 0xD7FB then return 3 end
+ if c >= 0x2170 and c <= 0x217F then c = c - 0x10 end
+ if c >= 0x2160 and c <= 0x216F then
+ if c >= 0x216C then return 3 end
+ return josa_char_num(t, c - 0x215F)
+ end
+ if c >= 0x2460 and c <= 0x2473 then return josa_char_num(t, c - 0x245F) end
+ if c >= 0x2474 and c <= 0x2487 then return josa_char_num(t, c - 0x2473) end
+ if c >= 0x2488 and c <= 0x249B then return josa_char_num(t, c - 0x2487) end
+ if c >= 0x249C and c <= 0x24B5 then return t[c - 0x249C + 0x61] or 2 end
+ if c >= 0x24B6 and c <= 0x24CF then return t[c - 0x24B6 + 0x61] or 2 end
+ if c >= 0x24D0 and c <= 0x24E9 then return t[c - 0x24D0 + 0x61] or 2 end
+ if c >= 0x3131 and c <= 0x318E then
+ if c == 0x3139 then return 1 end
+ if c >= 0x314F and c <= 0x3163 or c >= 0x3187 then return 2 end
+ return 3
+ end
+ if c >= 0x3260 and c <= 0x327E then c = c - 0x60 end
+ if c >= 0x3200 and c <= 0x321E then
+ if c == 0x3203 then return 1 end
+ if c >= 0x320E then return 2 end
+ return 3
+ end
+ if c >= 0xFF10 and c <= 0xFF19 then return josa_char_num(t, c - 0xFF10) end
+ if c >= 0xFF21 and c <= 0xFF3A then return t[c - 0xFF21 + 0x61] or 2 end
+ if c >= 0xFF41 and c <= 0xFF5A then return t[c - 0xFF41 + 0x61] or 2 end
+ return 2
+ end
+})
+
+--
+-- obtain char that comes just before the josa
+--
+local function get_prev_char (p)
+ while p do
+ if p.id == glyph_id then
+ local pc = p.char or 0
+ if not nobr_after[pc] then
+ if not nobr_before[pc] or nobr_before[pc] >= 2 then
+ return pc
+ end
+ end
+ elseif p.id == hbox_id or p.id == vbox_id then
+ local pc = get_prev_char(node.slide(p.head))
+ if pc then return pc end
+ end
+ p = p.prev
+ end
+end
+
+--
+-- main process of josa selection
+--
+local function auto_josa (head)
+ local curr, tofree = head, {}
+ while curr do
+ if curr.id == glyph_id then
+ local josa = node.has_attribute(curr, attr_josa)
+ if josa then
+ local cc = curr.char or 0
+ if josa == 0 then
+ josa = josa_code[get_prev_char(curr.prev) or 0x30]
+ end
+ if cc == 0xC774 then
+ local n = curr.next
+ if n and n.char and n.char >= 0xAC00 and n.char <= 0xD7A3 then
+ else
+ cc = 0xAC00
+ end
+ end
+ local new = josa_table[cc]
+ if new then
+ cc = new[josa]
+ if cc then
+ curr.char = cc
+ else
+ head = node.remove(head, curr)
+ table.insert(tofree, curr)
+ end
+ end
+ node.unset_attribute(curr, attr_josa)
+ end
+ end
+ curr = curr.next
+ end
+ for _,v in ipairs(tofree) do node.free(v) end
+ return head
+end
+
+--
+-- now register to luatex callbacks
+-- As char value of glyphs can be changed by opentype GSUB process,
+-- we have to occupy the first position among callback functions.
+--
+local prepend_to_callback
+if luatexbase.base_add_to_callback then
+ prepend_to_callback = function(name, func, desc)
+ luatexbase.add_to_callback(name, func, desc, 1)
+ end
+else
+ prepend_to_callback = function(name, func, desc)
+ local t = { {func, desc} }
+ for _,v in ipairs(luatexbase.callback_descriptions(name)) do
+ table.insert(t, {luatexbase.remove_from_callback(name, v)})
+ end
+ for _,v in ipairs(t) do
+ luatexbase.add_to_callback(name, v[1], v[2])
+ end
+ end
+end
+
+prepend_to_callback ("pre_linebreak_filter",
+ function(head)
+ head = auto_josa(head)
+ head = korean_break(head, true)
+ head = reorder_tm(head)
+ return head
+ end,
+ "polyglossia.lang_korean")
+
+prepend_to_callback ("hpack_filter",
+ function(head)
+ head = auto_josa(head)
+ head = korean_break(head)
+ head = reorder_tm(head)
+ return head
+ end,
+ "polyglossia.lang_korean")
+
+-- vim:ft=lua:tw=0:sw=4:ts=4:expandtab
+% \end{macrocode}
+% \iffalse
+%</polyglossia-korean.lua>
+%<*polyglossia-latin.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-latin.lua}
+% \begin{macrocode}
+require('polyglossia-punct')
+
+-- For ecclesiastic Latin (and sometimes for Italian) a very small space is
+-- used for the punctuation. The ecclesiastic package uses a space of
+-- 0.3\fontdimen2, where \fontdimen2 is a interword space, which is typically
+-- between 1/4 and 1/3 of a quad. We choose a half of a \thinspace here.
+local hairspace = 0.08333 -- 1/12
+
+local function space_left(char)
+ polyglossia.add_left_spaced_character('latin', char, hairspace, 'quad')
+end
+
+local function space_right(char)
+ polyglossia.add_right_spaced_character('latin', char, hairspace, 'quad')
+end
+
+polyglossia.clear_spaced_characters('latin')
+space_left('!')
+space_left('?')
+space_left('‼')
+space_left('⁇')
+space_left('⁈')
+space_left('⁉')
+space_left('‽') -- U+203D (interrobang)
+space_left(':')
+space_left(';')
+space_left('»')
+space_left('›')
+space_right('«')
+space_right('‹')
+
+local function activate_latin_punct()
+ polyglossia.activate_punct('latin')
+end
+
+local function deactivate_latin_punct()
+ polyglossia.deactivate_punct()
+end
+
+polyglossia.activate_latin_punct = activate_latin_punct
+polyglossia.deactivate_latin_punct = deactivate_latin_punct
+% \end{macrocode}
+% \iffalse
+%</polyglossia-latin.lua>
+%<*polyglossia-punct.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-punct.lua}
+% \begin{macrocode}
+require('polyglossia') -- just in case...
+
+local add_to_callback = luatexbase.add_to_callback
+local remove_from_callback = luatexbase.remove_from_callback
+local priority_in_callback = luatexbase.priority_in_callback
+local new_attribute = luatexbase.new_attribute
+
+local node = node
+
+local insert_node_before = node.insert_before
+local insert_node_after = node.insert_after
+local remove_node = node.remove
+local has_attribute = node.has_attribute
+local node_copy = node.copy
+local new_node = node.new
+local end_of_math = node.end_of_math
+local getnext = node.getnext
+local getprev = node.getprev
+
+-- node types according to node.types()
+local glue_code = node.id"glue"
+local glyph_code = node.id"glyph"
+local penalty_code = node.id"penalty"
+local kern_code = node.id"kern"
+local math_code = node.id"math"
+
+-- we need some node subtypes
+local userkern = 1
+local userskip = 0
+local removable_skip = {
+ [0] = true, -- userskip
+ [13] = true, -- spaceskip
+ [14] = true, -- xspaceskip
+}
+
+-- we make a new node, so that we can copy it later on
+local kern_node = new_node(kern_code)
+kern_node.subtype = userkern -- this kern can be removed later on
+
+local function get_kern_node(dim)
+ local n = node_copy(kern_node)
+ n.kern = dim
+ return n
+end
+
+local glue_node = new_node(glue_code)
+glue_node.subtype = userskip
+
+local function get_glue_node(dim, stretch, shrink)
+ local n = node_copy(glue_node)
+ n.width = dim
+ n.stretch = stretch
+ n.shrink = shrink
+ return n
+end
+
+local penalty_node = new_node(penalty_code)
+penalty_node.penalty = 10000
+
+local function get_penalty_node()
+ return node_copy(penalty_node)
+end
+
+-- all possible space characters according to section 6.2 of the Unicode Standard
+-- https://www.unicode.org/versions/Unicode12.0.0/ch06.pdf
+local space_chars = {
+ [0x20] = true, -- space
+ [0xA0] = true, -- no-break space
+ [0x1680] = true, -- ogham space mark
+ [0x2000] = true, -- en quad
+ [0x2001] = true, -- em quad
+ [0x2002] = true, -- en space
+ [0x2003] = true, -- em space
+ [0x2004] = true, -- three-per-em-space
+ [0x2005] = true, -- four-per-em space
+ [0x2006] = true, -- six-per-em space
+ [0x2007] = true, -- figure space
+ [0x2008] = true, -- punctuation space
+ [0x2009] = true, -- thin space
+ [0x200A] = true, -- hair space
+ [0x202F] = true, -- narrow no-break space
+ [0x205F] = true, -- medium mathematical space
+ [0x3000] = true -- ideographic space
+}
+
+-- all left bracket characters, referenced by their Unicode slot
+local left_bracket_chars = {
+ [0x28] = true, -- left parenthesis
+ [0x5B] = true, -- left square bracket
+ [0x7B] = true, -- left curly bracket
+ [0x27E8] = true -- mathematical left angle bracket
+}
+
+-- all right bracket characters, referenced by their Unicode slot
+local right_bracket_chars = {
+ [0x29] = true, -- right parenthesis
+ [0x5D] = true, -- right square bracket
+ [0x7D] = true, -- right curly bracket
+ [0x27E9] = true -- mathematical right angle bracket
+}
+
+-- question and exclamation marks, referenced by their Unicode slot
+local question_exclamation_chars = {
+ [0x21] = true, -- exclamation mark !
+ [0x3F] = true, -- question mark ?
+ [0x203C] = true, -- double exclamation mark ‼
+ [0x203D] = true, -- interrobang ‽
+ [0x2047] = true, -- double question mark ⁇
+ [0x2048] = true, -- question exclamation mark ⁈
+ [0x2049] = true, -- exclamation question mark ⁉
+}
+
+-- from nodes-tst.lua, adapted
+local function somespace(n)
+ if n then
+ local id, subtype = n.id, n.subtype
+ if id == glue_code then
+ -- it is dangerous to remove all the type of glue
+ return removable_skip[subtype]
+ elseif id == kern_code then
+ -- remove only user's kern
+ return subtype == userkern
+ elseif id == glyph_code then
+ return space_chars[n.char]
+ end
+ end
+end
+
+local function someleftbracket(n)
+ if n then
+ local id = n.id
+ if id == glyph_code then
+ return left_bracket_chars[n.char]
+ end
+ end
+end
+
+local function somerightbracket(n)
+ if n then
+ local id = n.id
+ if id == glyph_code then
+ return right_bracket_chars[n.char]
+ end
+ end
+end
+
+local function question_exclamation_sequence(n1, n2)
+ if n1 and n2 then
+ local id1 = n1.id
+ local id2 = n2.id
+ if id1 == glyph_code and id2 == glyph_code then
+ return question_exclamation_chars[n1.char] and question_exclamation_chars[n2.char]
+ end
+ end
+end
+
+-- idem
+local function somepenalty(n, value)
+ if n then
+ local id = n.id
+ if id == penalty_code then
+ if value then
+ return n.penalty == value
+ else
+ return true
+ end
+ end
+ end
+end
+
+local punct_attr = new_attribute("polyglossia_punct")
+
+local lang_id = {}
+local lang_counter = 0
+local left_space = {}
+local right_space = {}
+
+local function ensure_lang_id(lang)
+ if not lang_id[lang] then
+ lang_counter = lang_counter + 1
+ lang_id[lang] = lang_counter
+ end
+ return lang_id[lang]
+end
+
+local function clear_spaced_characters(lang)
+ local id = ensure_lang_id(lang)
+ left_space[id] = {}
+ right_space[id] = {}
+end
+
+local function illegal_unit(unit)
+ if unit then
+ texio.write_nl('Illegal spacing unit "'..unit..'".')
+ else
+ texio.write_nl('Spacing unit is a nil value.')
+ end
+end
+
+local function add_left_spaced_character(lang, char, kern, unit, rubber)
+-- The parameter kern is a number meant as a fraction of the unit.
+-- The unit can be "quad" (1em) or "space" (interword space).
+-- The parameter rubber is a Boolean value indicating if the inserted space is
+-- stretchable and shrinkable (only relevant if the unit is "space").
+ local id = ensure_lang_id(lang)
+ if unit == "quad" or unit == "space" then
+ left_space[id][char] = {}
+ left_space[id][char]["kern"] = kern
+ left_space[id][char]["unit"] = unit
+ left_space[id][char]["rubber"] = rubber
+ else
+ illegal_unit(unit)
+ end
+end
+
+local function add_right_spaced_character(lang, char, kern, unit, rubber)
+ local id = ensure_lang_id(lang)
+ if unit == "quad" or unit == "space" then
+ right_space[id][char] = {}
+ right_space[id][char]["kern"] = kern
+ right_space[id][char]["unit"] = unit
+ right_space[id][char]["rubber"] = rubber
+ else
+ illegal_unit(unit)
+ end
+end
+
+-- from typo-spa.lua, adapted
+local function process(head)
+ local current = head
+ while current do
+ local id = current.id
+ if id == glyph_code then
+ local attr = has_attribute(current, punct_attr)
+ if attr then
+ local char = utf8.char(current.char) -- requires Lua 5.3
+ local leftspace = left_space[attr][char]
+ local rightspace = right_space[attr][char]
+ if leftspace or rightspace then
+ local fontparameters = fonts.hashes.parameters[current.font]
+ local unit, stretch, shrink, spacing_node
+ if leftspace and fontparameters then
+ local prev = getprev(current)
+ local space_exception = false
+ if prev then
+ local prevprev = getprev(prev)
+ -- do not add space after left (opening) bracket and between question/exclamation marks
+ space_exception = someleftbracket(prev) or question_exclamation_sequence(prev, current)
+ if somespace(prev) then
+ -- TODO: there is a question here: do we override a preceding space or not?...
+ if somepenalty(prevprev, 10000) then
+ head = remove_node(head, prevprev)
+ end
+ head = remove_node(head, prev)
+ end
+ end
+ if leftspace.unit == "quad" then
+ unit = fontparameters.quad
+ spacing_node = get_kern_node(leftspace.kern*unit)
+ elseif leftspace.unit == "space" then
+ unit = fontparameters.space
+ if leftspace.rubber then
+ stretch = leftspace.kern*fontparameters.space_stretch
+ shrink = leftspace.kern*fontparameters.space_shrink
+ spacing_node = get_glue_node(leftspace.kern*unit, stretch, shrink)
+ head = insert_node_before(head, current, get_penalty_node())
+ else
+ spacing_node = get_kern_node(leftspace.kern*unit)
+ end
+ end
+ if not space_exception then
+ head = insert_node_before(head, current, spacing_node)
+ end
+ end
+ if rightspace and fontparameters then
+ local next = getnext(current)
+ local space_exception = false
+ if next then
+ -- do not add space before right (closing) bracket
+ space_exception = somerightbracket(next)
+ local nextnext = getnext(next)
+ if somepenalty(next, 10000) and somespace(nextnext) then
+ head = remove_node(head, next)
+ head = remove_node(head, nextnext)
+ elseif somespace(next) then
+ head = remove_node(head, next)
+ end
+ end
+ if rightspace.unit == "quad" then
+ unit = fontparameters.quad
+ spacing_node = get_kern_node(rightspace.kern*unit)
+ elseif rightspace.unit == "space" then
+ unit = fontparameters.space
+ if rightspace.rubber then
+ stretch = rightspace.kern*fontparameters.space_stretch
+ shrink = rightspace.kern*fontparameters.space_shrink
+ spacing_node = get_glue_node(rightspace.kern*unit, stretch, shrink)
+ if not space_exception then
+ head, current = insert_node_after(head, current, get_penalty_node())
+ end
+ else
+ spacing_node = get_kern_node(rightspace.kern*unit)
+ end
+ end
+ if not space_exception then
+ head, current = insert_node_after(head, current, spacing_node)
+ end
+ end
+ end
+ end
+ elseif id == math_code then
+ -- warning: this is a feature of luatex > 0.76
+ current = end_of_math(current) -- weird, can return nil .. no math end?
+ end
+ current = getnext(current) -- no error even if current is nil
+ end
+ return head
+end
+
+local function activate(lang)
+ local id = ensure_lang_id(lang)
+ -- We set the punctuation attribute to a language id here. This is
+ -- important to be able to intermix languages with different spacings
+ -- in one paragraph.
+ tex.setattribute(punct_attr, id)
+ for _, callback_name in ipairs{ "pre_linebreak_filter", "hpack_filter" } do
+ if not priority_in_callback(callback_name, "polyglossia-punct.process") then
+ add_to_callback(callback_name, process, "polyglossia-punct.process", 1)
+ end
+ end
+end
+
+local function deactivate()
+ tex.setattribute(punct_attr, -0x7FFFFFFF) -- this value means "unset"
+ -- Though it would make compilation slightly faster, it is not possible to
+ -- safely uncomment the following lines. Imagine the following case: you
+ -- start a paragraph by some spaced punctuation text, then, in the same
+ -- paragraph, you change the language to something else, and thus call the
+ -- following lines. This means that, at the end of the paragraph, the
+ -- function won't be in the callback, so the beginning of the paragraph
+ -- won't be processed by it.
+ -- if priority_in_callback(callback_name, "polyglossia-punct.process") then
+ -- remove_from_callback(callback_name, "polyglossia-punct.process")
+ -- end
+end
+
+polyglossia.activate_punct = activate
+polyglossia.deactivate_punct = deactivate
+polyglossia.add_left_spaced_character = add_left_spaced_character
+polyglossia.add_right_spaced_character = add_right_spaced_character
+polyglossia.clear_spaced_characters = clear_spaced_characters
+% \end{macrocode}
+% \iffalse
+%</polyglossia-punct.lua>
+%<*polyglossia-sanskrit.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-sanskrit.lua}
+% \begin{macrocode}
+require('polyglossia-punct')
+
+-- How do we now, in Lua, what a \thinspace is? In the LaTeX source (latex.ltx)
+-- it is defined as:
+-- \def\thinspace{\leavevmode@ifvmode\kern .16667em }
+-- I see no way of seeing if it has been overriden or not. So we stick to this
+-- value.
+local thinspace = 0.16667 -- 1/6
+
+local function space_left(char)
+ polyglossia.add_left_spaced_character('sanskrit', char, thinspace, 'quad')
+end
+
+polyglossia.clear_spaced_characters('sanskrit')
+space_left('!')
+space_left('?')
+space_left('‼')
+space_left('⁇')
+space_left('⁈')
+space_left('⁉')
+space_left('‽') -- U+203D (interrobang)
+space_left(':')
+space_left(';')
+space_left('।') -- danda, U+0964
+space_left('॥') -- double danda, U+0965
+
+local function activate_sanskrit_punct()
+ polyglossia.activate_punct('sanskrit')
+end
+
+local function deactivate_sanskrit_punct()
+ polyglossia.deactivate_punct()
+end
+
+polyglossia.activate_sanskrit_punct = activate_sanskrit_punct
+polyglossia.deactivate_sanskrit_punct = deactivate_sanskrit_punct
+% \end{macrocode}
+% \iffalse
+%</polyglossia-sanskrit.lua>
+%<*polyglossia-tibt.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia-tibt.lua}
+% \begin{macrocode}
+require('polyglossia') -- just in case...
+
+local add_to_callback = luatexbase.add_to_callback
+local remove_from_callback = luatexbase.remove_from_callback
+local priority_in_callback = luatexbase.priority_in_callback
+
+local next, type = next, type
+
+local nodes, fonts, node = nodes, fonts, node
+
+local nodecodes = nodes.nodecodes --- <= preloaded node.types()
+
+local insert_node_before = node.insert_before
+local insert_node_after = node.insert_after
+local remove_node = nodes.remove
+local copy_node = node.copy
+local has_attribute = node.has_attribute
+
+local end_of_math = node.end_of_math
+if not end_of_math then -- luatex < .76
+ local traverse_nodes = node.traverse_id
+ local math_code = nodecodes.math
+ local end_of_math = function (n)
+ for n in traverse_nodes(math_code, n.next) do
+ return n
+ end
+ end
+end
+
+-- node types as of April 2013
+local glyph_code = nodecodes.glyph
+local penalty_code = nodecodes.penalty
+local kern_code = nodecodes.kern
+
+-- we make a new node, so that we can copy it later on
+local penalty_node = node.new(penalty_code)
+penalty_node.penalty = 50 -- corresponds to the penalty LaTeX sets at explicit hyphens
+
+local function get_penalty_node()
+ return copy_node(penalty_node)
+end
+
+local xpgtibtattr = luatexbase.attributes['xpg@tibteol']
+
+local tsheg = unicode.utf8.byte('་')
+
+-- from typo-spa.lua
+local function process(head)
+ local start = head
+ -- head is always begin of par (whatsit), so we have at least two prev nodes
+ -- penalty followed by glue
+ while start do
+ local id = start.id
+ if id == glyph_code then
+ local attr = has_attribute(start, xpgtibtattr)
+ if attr and attr > 0 then
+ if start.char == tsheg then
+ if start.next then
+ insert_node_after(head,start,get_penalty_node())
+ end
+ end
+ end
+ elseif id == math_code then
+ -- warning: this is a feature of luatex > 0.76
+ start = end_of_math(start) -- weird, can return nil .. no math end?
+ end
+ if start then
+ start = start.next
+ end
+ end
+ return head
+end
+
+local callback_name = "pre_linebreak_filter"
+
+local function activate()
+ if not priority_in_callback (callback_name, "polyglossia-tibt.process") then
+ add_to_callback(callback_name, process, "polyglossia-tibt.process", 1)
+ end
+end
+
+local function desactivate()
+ if priority_in_callback (callback_name, "polyglossia-tibt.process") then
+ remove_from_callback(callback_name, "polyglossia-tibt.process")
+ end
+end
+
+polyglossia.activate_tibt_eol = activate
+polyglossia.desactivate_tibt_eol = desactivate
+% \end{macrocode}
+% \iffalse
+%</polyglossia-tibt.lua>
+%<*polyglossia.lua>
+% \fi
+% \clearpage
+%
+% \subsection{polyglossia.lua}
+% \begin{macrocode}
+
+local module_name = "polyglossia"
+local polyglossia_module = {
+ name = module_name,
+ version = 1.3,
+ date = "2013/05/11",
+ description = "Polyglossia",
+ author = "Elie Roux",
+ copyright = "Elie Roux",
+ license = "CC0"
+}
+
+luatexbase.provides_module(polyglossia_module)
+
+local log_info = function(message, ...)
+ luatexbase.module_info(module_name, message:format(...))
+end
+local log_warn = function(message, ...)
+ luatexbase.module_warning(module_name, message:format(...))
+end
+
+polyglossia = polyglossia or {}
+local polyglossia = polyglossia
+
+local function select_language(lang, id)
+ polyglossia.current_language = lang
+end
+
+local function set_default_language(lang, id)
+ polyglossia.default_language = lang
+end
+
+local byte = utf8.codepoint -- use standard module of lua 5.3
+
+local check_char
+
+if luaotfload and luaotfload.aux and luaotfload.aux.font_has_glyph then
+ local font_has_glyph = luaotfload.aux.font_has_glyph
+ function check_char(chr)
+ local codepoint = tonumber(chr) or byte(chr)
+ if font_has_glyph(font.current(), codepoint) then
+ tex.sprint('1')
+ else
+ tex.sprint('0')
+ end
+ end
+else
+ function check_char(chr) -- always in current font
+ local fontid = font.current()
+ local fontdata = font.getfont(fontid) or font.fonts[fontid]
+ local chardata = fontdata.characters
+ local codepoint = tonumber(chr) or byte(chr)
+ if chardata and chardata[codepoint] then
+ tex.sprint('1')
+ else
+ tex.sprint('0')
+ end
+ end
+end
+
+local function load_tibt_eol()
+ require('polyglossia-tibt')
+end
+
+-- predefined l@nohyphenation or LuaTeX's maximum value for \language
+local nohyphid = luatexbase.registernumber'l@nohyphenation' or 16383
+
+-- key `nohyphenation` is for .sty file when possibly undefined l@nohyphenation
+local newloader_loaded_languages = { nohyphenation = nohyphid }
+
+local newloader_available_languages = require'language.dat.lua'
+-- Suggestion by Dohyun Kim on #129
+local t = { }
+for k, v in pairs(newloader_available_languages) do
+ t[k] = v
+ for _, vv in pairs(v.synonyms) do
+ t[vv] = v
+ end
+end
+newloader_available_languages = t
+
+-- LaTeX's language register is \count19
+local lang_register = 19
+
+-- New hyphenation pattern loader: use language.dat.lua directly and the language identifiers
+local function newloader(langentry)
+ local loaded_language = newloader_loaded_languages[langentry]
+ if loaded_language then
+ local langid = lang.id(loaded_language)
+ log_info('Language %s already loaded; id is %i', langentry, langid)
+ return langid
+ else
+ local langdata = newloader_available_languages[langentry]
+ if langdata then
+
+ local special = langdata.special
+ if special then
+ -- language0 (USenglish) is already included in the format
+ if special == 'language0' then
+ return 0
+
+ -- disabled language should not be used for utf-8 text
+ elseif special:find'^disabled:' then
+ log_warn('Hyphenation of language %s %s', langentry, special)
+ return nohyphid
+ end
+ end
+
+ -- language info will be written into the .log file
+ local s = { "Language data for " .. langentry }
+ for k, v in pairs(langdata) do
+ if type(v) == 'table' then -- for 'synonyms'
+ s[#s+1] = k .. "\t" .. table.concat(v,',')
+ else
+ s[#s+1] = k .. "\t" .. tostring(v)
+ end
+ end
+ log_info(table.concat(s,"\n"))
+
+ --
+ -- LaTeX's \newlanguage increases language register (count19),
+ -- whereas LuaTeX's lang.new() increases its own language id.
+ -- So when a user has declared, say, \newlanguage\lang@xyz, then
+ -- these two numbers do not match each other. If we do not consider
+ -- this possible situation, our newloader() function will
+ -- unfortunately overwrite the language \lang@xyz.
+ --
+ -- Threfore here we will compare LaTeX's \newlanguage number with
+ -- LuaTeX's lang.new() id and select the bigger one for our new
+ -- language object. Also we will update LaTeX's language register
+ -- by this new id, so that another possible \newlanguage should not
+ -- overwrite our language object.
+ --
+ -- get next \newlanguage allocation number
+ local langcnt = tex.count[lang_register] + 1
+ -- get new lang object
+ local langobject = lang.new()
+ local langid = lang.id(langobject)
+ -- get bigger one between \newlanguage and new lang obj id
+ local newlangid = math.max(langcnt, langid)
+ -- set language register for possible \newlanguage
+ tex.setcount('global', lang_register, newlangid)
+ -- get new lang object if needeed
+ if langid ~= newlangid then
+ langobject = lang.new(newlangid)
+ end
+
+ -- load hyphenation patterns and exceptions
+ for _,v in ipairs{ 'patterns', 'hyphenation' } do
+ local data = langdata[v]
+ if data and data ~= '' then
+ -- cope with comma separated list, such as serbian
+ for _,vv in ipairs(data:explode',+') do
+ local filepath = kpse.find_file(vv)
+ if filepath then
+ local fh = io.open(filepath)
+ lang[v](langobject, fh:read'a')
+ fh:close()
+ else
+ log_warn('Hyphenation file %s not found', vv)
+ end
+ end
+ end
+ end
+
+ newloader_loaded_languages[langentry] = langobject
+
+ log_info('Language %s was not yet loaded; created with id %i',
+ langentry, newlangid)
+ return newlangid
+ else
+ log_warn('Language %s not found in language.dat.lua', langentry)
+ return nohyphid
+ end
+ end
+end
+
+polyglossia.select_language = select_language
+polyglossia.set_default_language = set_default_language
+polyglossia.check_char = check_char
+polyglossia.load_tibt_eol = load_tibt_eol
+polyglossia.newloader = newloader
+polyglossia.newloader_loaded_languages = newloader_loaded_languages
+-- global variables:
+-- polyglossia.default_language
+-- polyglossia.current_language
+% \end{macrocode}
+% \iffalse
+%</polyglossia.lua>
+% \fi
+% \clearpage
+% \PrintChanges
+% \Finale
+%
+% \iffalse
+%<*../README.md>
+# THE POLYGLOSSIA PACKAGE v1.49
+## Multilingual typesetting with XeLaTeX and LuaLaTeX
+
+This package provides an alternative to Babel for users of XeLaTeX and LuaLaTeX
+(with a few languages incompletely supported for the latter). This version
+includes support for over 70 different languages, some of which in different
+regional or national varieties, or using a different writing system.
+
+Polyglossia makes it possible to automate the following tasks:
+
+* Loading the appropriate hyphenation patterns.
+* Setting the script and language tags of the current font (if possible and
+ available), using the package fontspec.
+* Switching to a font assigned by the user to a particular script or language.
+* Adjusting some typographical conventions in function of the current language
+ (such as afterindent, frenchindent, spaces before or after punctuation marks,
+ etc.).
+* Redefining the document strings (like “chapter”, “figure”, “bibliography”).
+* Adapting the formatting of dates (for non-gregorian calendars via external
+ packages bundled with polyglossia: currently the Hebrew, Islamic and Farsi
+ calendars are supported).
+* For languages that have their own numeration system, modifying the formatting
+ of numbers appropriately.
+* Ensuring the proper directionality if the document contains languages
+ written from right to left (via the packages bidi and luabidi, available
+ separately).
+
+# LICENCE
+
+Copyright (c) 2008-2010 François Charette, 2013 Élie Roux, 2011-2020 Arthur Reutenauer,
+Copyright (c) 2019-2020 Bastien Roucariès, 2019-2020 Jürgen Spitzmüller
+
+Except where otherwise noted, Polyglossia is placed under the terms of the MIT licence
+(https://opensource.org/licenses/MIT).
+
+# BUGS
+
+If you run into a bug, or suspect you do, or you have a request or comment, please
+use the GitHub issue tracker: http://github.com/reutenauer/polyglossia/issues
+
+This is more efficient than contacting the maintainer by email as it allows me
+to track the issues and follow progress.
+%</../README.md>
+%<*Changelog>
+1.49 (???)
+
+New features:
+
+ * Add hook \polyglossia@language@switched to the external package interface (#398).
+ * Real fix for #400, that wasn’t properly taken care of in 1.48.
+
+Bug fixes:
+
+ * Fix compilation error with some swapstring options in Hungarian (#373).
+ * Fix whitespace problem in Greek language.
+
+Interface and defaults changes:
+
+ * Changed Finnish caption for "Table of Contents" to "Sisällys" (#403).
+
+
+1.48 (25-03-2020)
+
+No new features
+
+Bug fixes:
+ * Fix use of Hebrew with LuaLaTeX (#389).
+ * Do not overwrite footnote redefinitions of other packages
+ with Latin and French (#391)
+ * Fix Serbian cyrillic numerals code (#392).
+ * Fix [no]localmarks option, whose logic was swapped (part of #395).
+ * Protect localmarks function against uppercased language names (part of #395).
+ * Fix buggy redefinition of \@markright with option localmarks (#396).
+ * Fix incompatibility between Latin and unicode-math (#394).
+ * Make (undocumented) \defineshorthand command (imported from babel) work.
+ * Fix usage of localmarks option without value.
+ * Emergency fixes for bugs caused by updates in Babel’s switch.def (#399 and #400).
+
+Interface and defaults changes:
+ * Use private macros in keyval choice keys (#390).
+
+1.47 (29-01-2020)
+
+New features:
+ * IETF BCP-47 compliant language tags can now be used for loading and switching
+ languages alternatively to language names (#226).
+ * New commands \languageid{<type>} and \mainlanguageid{<type>}.
+ * New test \iflanguageidloaded.
+ * New list \xpg@bcp@loaded.
+ * New environment {lang}{<lang>} (equivalent to {<lang>}, but also available with
+ \setlanguagealias* which does not define dedicated alias environments).
+ * New gloss option totalhyphenmin (corresponds to LuaTeX's \hyphenationmin) (#111).
+ * New test \iflanguageoption{<lang>}{<key>}{<val>} (#364).
+ * Restore simple alphabetic numbering for \asbuk and \Asbuk in Belarusian, Mongolian,
+ Russian, Serbian, and Ukrainian (#377).
+ * New command \AsbukTrad and \asbukTrad for Belarusian, Mongolian, Russian, Serbian,
+ and Ukrainian which uses traditional alphanumerical numbering.
+ * New numerals option "cyrillic-trad" and "cyrillic-alph" to differentiate simple
+ alphabetic and traditional alpnanumerical Cyrillic numbering.
+ * \selectbackgroundlanguage and \resetdefaultlanguage now also support language
+ aliases.
+ * New macro \charifavailable{<char code>}{<substitution>}.
+ * Add French language variant "swiss".
+ * Implement babelshorthands for Croatian.
+ * Implement \localnumeral for Japanese.
+
+Bug fixes:
+ * Fix font family issue in headers (#355).
+ * Fix whitespace issues in \text<lang> (#356).
+ * Fix option-less \babelname in multi-variant languages (#357).
+ * Fix some spacing inconsistencies with French, Latin, and Sanskrit (#358).
+ * Fix issues with babelshorthands and graphics package (#368).
+ * Fix some captions and improve numbering in Marathi (#370).
+ * Fix Hungarian swapstrings feature (#373).
+ * Fix lua punctuation code problem (#374).
+ * Fix Bengali changecounternumbering option (#381).
+ * Fix whitespace issue in Japanese (#387).
+ * Fix \text<lang> command with multiple paragraphs.
+ * Actually implement documented german spelling variant '1996' (= 'new').
+ * Fix Slovenian localalph option.
+ * Fix Czech and Slovak splithyphens with typewriter fonts.
+ * farsical.sty: fix spacing issue with some month names.
+ * Fix directionalty of numbers in Hebrew with XeTeX.
+ * Improve interoperatability with biblatex (some language variants did not work yet).
+
+Interface and defaults changes:
+ * Some boolean options had 'false' value by default, which meant if you passed
+ them without value, the logic was reversed. This has been changed, leading to
+ change of behavior should you have used one of these options without value (#363).
+ Concerned are the following options:
+ - babelshorthands in language belarusian, mongolian, ukrainian, and russian
+ ('babelshorthands' now equals 'babelshorthand=true', no longer 'babelshorthands=false')
+ - localalph in language slovenian ('localalph' now equals 'localalph=true')
+ - latesthyphen in language german ('latesthyphen' now equals 'latesthyphen=true')
+ - fullyear in package hebrewcal ('fullyear' now equals 'fullyear=true')
+ * The command \setlanguagealias* (introduced in v1.46) does no longer define
+ dedicated alias environments.
+ * The babelnames for latin variants have been corrected to classiclatin, ecclesiasticlatin
+ and medievallatin. This is how the hyphenation patterns and babel \extras are named, even
+ though the variants can currently be selected in babel only via appended "dot modifier".
+ * In accordance with the respective l3kernel change, \str_lower_case:n has been renamed to
+ \str_lowercase:n where used in polyglossia.sty. Thus polyglossia 1.47 requires l3kernel
+ 2020-01-12 at least.
+
+1.46 (15-11-2019)
+
+New features:
+ * Add option "indentfirst" to Russian (#78).
+ * Add options to set and customize French-style itemize item labels to French (#89).
+ * Polyglossia now understands all babel language names in \setdefaultlanguage,
+ \setotherlanguage and the language switching commands (#112, #132).
+ * Add optional localized math operators to Spanish (#123).
+ * Swap section headings in Hungarian (#344). New option "swapstrings" provides control
+ over this.
+ * Introduce macro \setlanguagealias and \setlanguagealias*.
+ * Introduce language switching command \textlang{lang}{...} (equivalent to \text<lang>,
+ but also available with \setlanguagealias* which does not define \text<alias>).
+ * Add support for Afrikaans.
+ * Add support for Belarusian.
+ * Add support for Bosnian.
+ * Add support for Georgian.
+ * Add Spanish variant "mexican".
+ * Add babelshorthands as well as options "splithyphens" and "vlna" to Slovak.
+ * Add Latin language variant "ecclesiastic".
+ * Add Latin language options "capitalizemonth", "ecclesiasticfootnotes", "hyphenation",
+ "prosodicshorthands", and "usej".
+ * Add Latin shorthands for "«", "»", "æ", "Æ", "œ", and "Œ".
+ * Add French language option "thincolonspace".
+
+Bug fixes:
+ * Fix problems with fragile font settings (#24).
+ * Fix clash of French punctuation spacing with the soul package (#52).
+ * Re-enable the possibility to pass a macro as main argumente to \setmainlanguage and
+ \setotherlanguage (#331).
+ * Fix detection of default \languagevariant (#332).
+ * Fix LaTeX error with undefined hyphenation pattern (#346).
+ * Fix some babel shorthand issues by updating the shorthand code from recent babel.
+ * Fix some problems with French and Latin auto-spacing (#345, #352).
+ * Fix an expl3 declaration (#348).
+
+Interface and defaults changes:
+ * Per TeXLive request, the sub-package cyrillicnumbers.sty has been renamed to
+ xpg-cyrillicnumbers.sty.
+ * In Russian, all paragraphs are now indented by default, as common in Russian typography.
+ The behavior can be opted out by indentfirst=false.
+ * In Czech, splithyphens and lvna are enabled by default. Also, the option does now work
+ as well with LuaTeX.
+ * Changed option name "fraktur" to "blackletter" in German (the former is still available
+ as an alias).
+ * In French, high punctuation characters and guillemets are spaced by half an interword
+ space now instead of a \thinspace (cf. #345).
+
+1.45 (27-10-2019)
+
+New features:
+ * Introduce a framework for external packages to access language variants. This fixes,
+ among other things, long-standing problems in the interaction of biblatex and polyglossia.
+ * Add new macros \languagevariant, \mainlanguagevariant, \babelname and \mainbabelname
+ for package authors to access language information.
+ * Add new test \iflanguageloaded{<language>}{<true>}{<false>}, where <language>
+ can be a \polyglossia or babel language name.
+ * Add new macros \localnumeral, \localnumeral*, \Localnumeral and
+ \Localnumeral* that convert Arabic digitals to the local number scheme.
+ * Add new macro \pghyphenation to add language-specific hyphenation exceptions (#18).
+ * Add support form (Khalkha & Cyrillic) Mongolian in line with babel-mongolian (#23).
+ * Add option splithyphens and vlna to Czech (XeTeX only; for LuaTeX, use the package
+ luavlna to get these features) (#32).
+ * Add support for Kurdish, both Kurmanji and Sorani (#277).
+ * Implement proper Cyrillic (alphanumeric) numbering (#285).
+ * Add new language friulian.
+ This deprecates friulan (which is still supported for backwards compatibility).
+ * Add new language malay with variants indonesian and malaysian.
+ This deprecates bahasai and bahasam (which are still supported for
+ backwards compatibility).
+ * Add new language gaelic with variants irish and scottish.
+ This deprecates irish and scottish as own polyglossia languages (which
+ are still supported for backwards compatibility).
+ * Add new language hungarian.
+ This deprecates magyar (which is still supported for backwards compatibility).
+ * Add new language sorbian with variants lower and upper.
+ This deprecates lsorbian and usorbian (which are still supported for
+ backwards compatibility).
+ * Add new language portuguese with variants portuguese and brazilian.
+ This deprecates brazil and portuges (which are still supported for
+ backwards compatibility).
+ * Add new language norwegian with variants nynorsk and bokmal.
+ This deprecates nynorsk and norsk (which are still supported for
+ backwards compatibility).
+ * Add new language persian.
+ This deprecates farsi (which is still supported for backwards compatibility).
+ * Add new language sami. Currently only Northern Sami is supported.
+ This deprecates samin (which is still supported for backwards compatibility).
+ * gloss-serbian: add numerals=cyrillic option. Add \asbuk and \Asbuk (#285).
+ * Implement basic support for (French) canadien and (English) canadian (#22)
+ * Improve support for Armenian (#79): Add captions, Eastern month names
+ (accessible via variant=eastern) and Armenian alphabetic numbering
+ (via numerals=armenian and \armenicnumeral).
+ * Add french option autospacing and commands \AutoSpacing, \NoAutoSpacing
+ This allows to switch off autospacing globally or locally (#113)
+ * Fixup \normalfont (#203)
+ * Fix directionality issues in mixed RTL/LTR paragraphs (#204)
+ * Implement babelshorthands for Finnish (#212) and Czech.
+ * Implement access to current language via Lua (#243).
+ * Introduce french option option autospacetypewriter
+ alias OriginalTypewriter
+ * Support \aemph with lualatex
+ * Rename automaticspacesaroundguillemets to autospaceguillemets
+ The old option is kept for backwards compatibility.
+
+Bug fixes:
+ * Fix equation number in arabic and farsi (#7).
+ * Simplify and document Hebrew marcheshvan option (#16).
+ * Fix hyphenation of Greek with LuaTeX (#55).
+ * Fix N'ko date format (#63).
+ * Disable the extras of a language when a nested language starts (#66, #169).
+ * Properly implement bengali numbers (#69, #184).
+ * Fix conflicts with other packages caused by premature shorthand activation
+ in preamble (#81, #200).
+ * Fix kerning in math with French (#92).
+ * Fix expansion issue in Hebrew (#93).
+ * Fix numbering expansion issue in Greek (#110).
+ * Postpone \disablehyphenation in preamble until after setting of
+ document language (#125).
+ * Postpone the assignment of defaultfamily to BeginDocument,
+ thus do not overwrite \familydefault redefinitions in the preamble (#127).
+ * Reset number settings when switching language (#133).
+ * hebrew: Properly store \MakeUppercase for later restoration (#152).
+ * Fix whitespace issue in \datewelsh (#158).
+ * When switching language, set the language/script specific font families (#164).
+ * Correct some Bengali captions (#165).
+ * Fix documentation of Serbian (#168).
+ * Reset ucl codes in latin only if the respective variant is used (#172).
+ * Fix \disablehyphenation with LuaTeX (#187).
+ * Fix typos in Hindi captions (#202).
+ * Pass language options to the aux files (#205).
+ * Rewrite and fix English variant handling (#208).
+ * Define magyar caption formats in \blockextras and undef them in \noextras (#209).
+ * Ensure proper direction with arabic digits in Arabic and Farsi (#213).
+ * Fix \linespread with Korean (#218).
+ * Define russian caption before key allocation (#219).
+ * Register current language in polyglossia lua module after selection (#234).
+ * Fix babel language switching commands (#239).
+ \foreignlanguage and the starred otherlanguage* environment are not
+ supposed to change dates.
+ * Fix French spacing leaking beyond French (#270).
+ * Redefine fontfamilies for French only if language is loaded (#270).
+ * gloss-russian:
+ - check whether command exist before redefining (#280).
+ - Fix some whitespace issues.
+ * Fix and simplify frenchfootnote definition (#294).
+ * Fix footnote numbering in Farsi.
+ * Fix latin footnotes in Arabic documents.
+ * Set the correct main direction with luabidi.
+ * Fix autospaceguillemets option in French.
+ * Fix grouping in gloss-danish.ldf.
+ * Properly store \MakeUppercase and \@arabic for later restoration.
+
+Documentation:
+ * Add documentation about footnotes in RTL context
+ * Document tibetan numerals option (#109)
+ * Improve frenchfootnote documentation.
+ * Mention Japanese support in the docs.
+
+1.44 (04-04-2019)
+ * Correction to Russian language file, by Maksim Zholudev (commit d2f383e)
+ * Added Macedonian language file, by Stefan Zlatinov (commit cd379e1)
+
+05-03-2019
+ * Correction to Hindi language file, by Zdenĕk Wagner
+
+1.42.5 (13-04-2017)
+ * Many changes to the French language file, by Maïeul Rouquette
+
+1.42.4 (February, March 2016)
+ * Remedial actions for the Babel changes
+
+09-02-2016
+ * Fixed side effect of pull request #122 (see commit d2a34ff)
+ * Added automatic Josa selection, variant, and captions options to Korean, by Dohyun Kim (pull request #128)
+
+08-02-2016
+ * Updated gloss-occitan from CTAN
+
+18-01-2016
+ * Fixed issue #124 (minor typo in polyglossia-frpt.lua)
+
+03-12-2015
+ * Merged pull request #117 for more French guillemet spacing
+ * Merged pull request #121 to add \bbl@loaded; fixes issue #120
+ * Merged pull request #122 that build on #121
+
+08-11-2015
+ * Merged pull request #116 for French (spacing around guillemets)
+
+22-10-2015
+ * Fixed issue #115 (spurious spaces in Arabic)
+
+19-08-2015
+ * Fixed issue #107 for Marathi (labels and month names)
+
+1.42.0 (06-08-2015)
+ * Add Bengali digits package, and option to reset all numbering functions
+
+05-08-2015
+ * Add “long” option for Welsh date
+ * Add local alphabet in Slovenian, for enumerations and such
+
+04-08-2015
+ * Fix long-standing bug with Welsh: date should use ordinals
+
+03-08-2015
+ * Fix for Latin with LuaTeX: all variants had same problems as Classic
+
+02-08-2015
+ * Fixed error with British variant of English and LuaTeX (issue #86)
+
+1.41.0 (16-07-2015)
+ * Added support for Khmer, by Say Ol (private email)
+
+1.40.1 (14-07-2015)
+ * Bugfix for Korean, by Kim Dohyun (pull request #103)
+
+1.40.0 (07-07-2015)
+ * gloss-korean.ldf contributed by Kim Dohyun (pull request #102)
+
+1.33.7 (04-07-2015)
+ * Release to CTAN, no code change
+
+03-07-2015
+ * Fixed extraneous space in code for Swiss German (pull request #101)
+ * Fixed a typo in Ukrainian alphabet, for \Asbuk (pull request #99)
+
+24-06-2015
+ * Fix for Classic Latin: load patterns for LuaTeX
+
+23-05-2015
+ * Made \rmfamily, \sffamily and \ttfamily robust again
+
+11-05-2015
+ * Merged fix for Hebrew date format, by Guy Rutenberg (pull request #94)
+ * Merged fix for spurious space, by Caleb McKennan (pull request #91)
+ * Merged pull request #84 by Élie Roux for Tibetan
+
+10-05-2015
+ * Added support for Swiss German (pull request #75)
+ * Added commands \Asbuk and \asbuk for Ukrainian (pull request #76), similar to Russian
+ * Documented changes to Latin from last year.
+
+09-05-2015
+ * Be friendlier to right-to-left languages with LuaTeX
+
+04-06-2014
+ * Enhanced Latin support by Claudio Beccari
+
+1.33.5 (21-05-2014)
+ * Option to disable hyphenation entirely, by Élie Roux
+ * Fix spurious spaces in gloss-russian.ldf, by Oleg Domanov
+ * Support for the Austrian variant of German, by Jürgen Spitzmüller
+ * Changes to the Croatian translations, by Ivan Kokan
+ * Correction to the Lithuanian translations, by Ignas Anikevičius
+
+1.33.4 (27-06-2013)
+ * Emergency release for a bug introduced in babelsh.def
+
+1.33.3 (28-05-2013)
+ * Changed formatting of some error messages (emergency fixes for TeX Live 2013)
+
+1.33.2 (26-05-2013)
+ * Added \disablehyphenation and \enablehyphenation, contributed by
+ Élie Roux.
+ * Fixed bug related to package inclusion. Polyglossia would break if
+ we loaded breqn.sty, and then called \setmainlanguage{english}, this
+ is no longer the case.
+ * Removed spurious space introduced by \captionswedish.
+
+1.33.1 (23-05-2013)
+ * Editorial changes to the documentation
+ * Hunted and documented bugs
+
+1.33.0 (20-05-2013)
+ * Added support for N’Ko.
+ * Bugfixes for LuaTeX
+ * More work in progress on Bidi in LuaTeX.
+
+1.32.0 (15-05-2013)
+ Transitional version to support right-to-left languages with LuaTeX.
+
+1.31 (10-05-2013) / 1.3 (11-05-2013)
+ * Several bugfixes.
+ * Sync with Babel 3.9.
+ * Consolidated support for LuaTeX for all languages but the ones using
+ South and South-East Asian scripts, and languages written from right
+ to left. Many thanks to Élie Roux for his help.
+ * Added support for Tibetan, contributed by Élie Roux (end of lines are experimental).
+
+1.30MM (06-08-2012)
+ * Added support for LuaTeX. Many languages don’t work yet. Please be
+ patient.
+
+1.2.0e (28-04-2012)
+ * Fixed a number of outstanding and not very interesting bugs.
+ * Added gloss files for Romansh and Friulan, contributed by Claudio
+ Beccari.
+
+1.2.0d (12-01-2012)
+ * Removed \makeatletter and \makeother from gloss files entirely.
+
+1.2.0cc (12-10-2011) [First update by Arthur Reutenauer]
+ * Update to gloss-italian.ldf by Claudio Beccari, incorporating changes
+ by Enrico Gregorio.
+ * Conclude every gloss file with \makeatother to match the initial
+ \makeatletter. (Not necessary from a technical point of vue, because of one of the changes by Enrico reported below, but I like it better that way :-)
+ * Conclude polyglossia.sty with \ExplSyntaxOff to match the initial
+ \ExplSyntaxOn.
+ * Added gloss file for Kannada, contributed by Aravinda VK and others.
+ * Corrections to the gloss-dutch.ldf thanks to Wouter Bolsterlee.
+ * Several patches by Enrico Gregorio, fixing long-standing bugs.
+ From the git log:
+ - Deleted setup for right-to-left writing direction, see http://tug.org/pipermail/xetex/2011-April/020319.html
+ - Changed three appearances of \newcommand to \newrobustcmd, as the commands needs to be protected. Bug reported by "kamensky".
+ - Corrected \datepolish as suggested by Piotr Kempa
+ - Changed \lccode" into \lccode\string", because it might come into action at wrong times when " is active
+ - Changed definition of key xpg@setup, as \@tmpfirst and \@tmpsecond were not expanded, causing dependence of \lefthyphenmin and \righthyphenmin to the last loaded language. Raised by Vadim Rodionov on the XeTeX mailing list.
+ - Deleted \bgroup and \egroup tokens from the definition of otherlanguage*; they serve no purpose (we are already inside an environment) and conflict with csquotes. Noticed by P. Lehman.
+ - Changed the calls of \input to \xpg@input, which inputs the required file and resets the catcode of @ to the same value as it had before the input. Since each .ldf file starts with \makeatletter, the old behaviour would leave a category 11 @, which is wrong.
+ - Added "\csuse{date#2}" to the definition of "otherlanguage*"
+
+
+1.2.0b (03-10-2011) [Update by Philipp Stephani]
+ * Load xkeyval package explicitly since newer versions
+ of fontspec don't load it any more
+
+1.2.0a (27-07-2010) [Last update by François Charette]
+ * Initialize \fontfamily acc to value of \familydefault
+ (Fixes a bug when using polyglossia with beamer)
+ * Remove spurious space in def of \dateenglish
+ * Add missing English variant "american"
+ * Serbian: fix date format and captions (Latin+Cyrillic)
+ * Fix \atticnumeral in gloss-greek
+ * Small improvements and fixes in documentation
+
+
+1.2.0 (15-07-2010)
+ * Adapted for fontspec 2.0 (will not work with earlier versions!)
+ * New implementation of a \PolyglossiaSetup interface
+ that simplifies writing gloss-*.ldf files
+ * Many internal enhancements and refactoring
+ (including a patch by Dirk Ulrich)
+ * Improved automatic font setup when \<lang>font is not defined
+ * New environment otherlanguage* (env. equivalent of \foreignlanguage
+ (Enrico Gregorio)
+ * Bugfix to prevent bogus expansion of \{rm,sf,tt}family even in aux files
+ (Enrico Gregorio)
+ * New gloss files for Armenian, Bengali, Occitan, Bengali, Lao,
+ Malayalam, Marathi, Tamil, Telugu, and Turkmen.
+ * New auxiliary packages 'devanagaridigits' and 'bengalidigits'
+ * hijrical no longer loads bidi and checks for incompatible l3calc
+ * Add Babel shorthands for Russian (based on a patch by Vladimir Lomov)
+ * Fix \fnum@{table,figure} for Lithuanian
+ * Various improvements in gloss-russian (provided by Vladimir Lomov and
+ others)
+ * Corrected captions for Bahasai, Lithuanian, Russian, Croatian
+ * Add option indentfirst=true for Spanish, Croation and other languages
+ (NB: indentfirst was previously named frenchindent)
+ * New option 'script' for German: Setting script=fraktur modifies the
+ captions for typesetting in Fraktur.
+ * New command \aemph for Arabic, Farsi, Urdu, etc. to mark emphasis through
+ overlining.
+ * Package option 'nolocalmarks' is now true by default: to activate it the
+ option 'localmarks' must be passed instead.
+ * Loading languages à la Babel as package options is no longer possible (this
+ feature was deprecated since v1.1.0).
+
+1.1.1 (23-03-2010)
+ * Bugfix for French: explicit spaces before/after double punctuation
+ signs ("Par exemple : les grands « espaces » du Canada ! ") are
+ now replaced by the appropriate non-breaking spaces, as in Babel.
+ * Bugfix for font switching mechanism within Latin script
+ (pending a complete re-implementation in v1.2):
+ the font shape and series are no longer reset when switching language.
+ * New macros for non-Western decimal digits
+ (instead of fontmappings)
+ * New gloss files for Asturian, Lithuanian and Urdu
+ * hijrical.sty is now locale-aware: \hijritoday is
+ formatted differently in Arabic, Farsi, Urdu, Turkish
+ and Bahasa Indonesia.
+---NB: the above five items were not part of v1.1.1-rc1 which was made available on github---
+ * Enable babelshorthands for Dutch
+ * Add missing macro \allowhyphens
+ * Add global option babelshorthands
+ * Support Catalan geminated l
+ * Bugfix when declaring more than one pkg option
+ * Protect \reset@font
+ * Add missing requirement makecmds
+ * Bugfix for smallcaps in captions
+ * Typo for ccname in Hebrew
+ * Add option numerals to gloss-russian
+ * Provide newXeTeXintercharclass when undefined
+ * Bugfix for Russian alph
+ * Remove superfluous level of {} in def of markright
+ * Bugfix for \datecatalan
+ * Change hyphenmins for Sanskrit
+
+1.1.0b
+ * Modify hyphenmins for Sanskrit (Yves Codet)
+ * Bugfixes for Serbian and Bulgarian (Enrico Gregorio)
+1.1.0a
+ * Bugfix for interchar tokens
+1.1.0
+ * Use \newXeTeXintercharclass (thanks to Enrico Gregorio)
+ * Fixed implementation of shorthands for German (Babel code in file babelsh.def)
+ * Arabic (Khaled Hosny):
+ - Fix abjad form for 3 and 5 and add option abjadjimnotail
+ - bugfix for \arabicnumber
+ - make Gregorian calender the default
+ - fixed typos in the sample text
+ * Turkish (S. Ö. Yıldız):
+ - fix white-space before : and !
+ - also check if the font specified TRK for language
+ - added missing Turkish translation of "Glossary"
+ * Suppress nopattern warning for non-hyphenated scripts
+ * Changed U+0163 to U+021B for Romanian (Elie Roux)
+ * Stylistic fixes and use macro \xpg@option for package options (E. Gregorio)
+ * Fix monthnames in Dutch (A. Ledda)
+ * Add Brazilian translation for "glossary"
+ * Remove spurious space generated by gloss-spanish
+ * Fix ldf file for brazilian
+ * Various improvements in the code communicated by E. Gregorio:
+ - remove superfluous \protect\language
+ - change default language from 0 to \l@nohyphenation=255
+ - localize lccode handling of apostrophe in French; add it to Italian
+ * Fix frenchspacing for vietnamese
+ * Other minor bugfixes
+
+1.0.2
+ This is mostly a bug fixes release.
+ * Captions corrected in Hebrew, Russian and Spanish
+ * Removed all \text<lang> wrappers within caption definitions
+ * Improved compatibility with Babel
+ * New option "babelshorthands" for German
+ * New option "Script" for Sanskrit
+
+1.0.1
+ * Improved documentation (added sections on font setup and numeration mappings)
+ * Improvements and bugfixes for English and German
+ * Bugfix in gloss-syriac.ldf (spurious space after \textsyriac{...})
+ * Extended the scope of \syriacabjad
+ * Added gloss-amharic.ldf (ported from ethiop.ldf in the package ethiop)
+
+1.0
+ * Initial release on CTAN
+%</Changelog>
+%<*examples.tex>
+\documentclass[a4paper]{article}
+\usepackage[no-math]{fontspec}
+\usepackage{xltxtra,url}
+\let\XeTeX\undefined
+\let\XeLaTeX\undefined
+\usepackage{polyglossia}
+\usepackage{trace}
+\setdefaultlanguage{french}
+\setotherlanguage[variant=british,ordinalmonthday=false]{english}
+\setotherlanguage[variant=poly]{greek}
+\setotherlanguage[numerals=thai]{thai}
+\setotherlanguage[locale=mashriq]{arabic}
+\setotherlanguage[spelling=new,latesthyphen=true,babelshorthands=true]{german}
+\setotherlanguages{latin,russian,turkish,polish,latvian,sanskrit,ukrainian,farsi,syriac,divehi,hebrew,amharic,nko}
+\setotherlanguage[calendar=gregorian,numerals=western]{urdu}
+\setmainfont{Linux Libertine O}
+\defaultfontfeatures{Scale=MatchLowercase}
+\setmonofont{Inconsolata}
+\newfontfamily\arabicfont[Script=Arabic]{Amiri}
+\newfontfamily\syriacfont[Script=Syriac]{Serto Jerusalem}
+\newfontfamily\hebrewfont[Script=Hebrew]{Ezra SIL}
+\newfontfamily\sanskritfont[Script=Devanagari]{Sanskrit 2003}
+\newfontfamily\thaifont[Script=Thai]{Norasi}
+\newfontfamily\thaanafont[Script=Thaana,WordSpace=2]{FreeSerif}
+\newfontfamily\ethiopicfont[Script=Ethiopic]{Abyssinica SIL}
+\newfontfamily\nkofont[Renderer=Graphite]{Conakry}
+\parskip 1.33\baselineskip
+%\newcommand\showhyphmin{\fbox{\the\lefthyphenmin\ \the\righthyphenmin}}
+\begin{document}
+\hyphenation{Bru-xel-les}
+\noindent
+\textbf{Le français}\footnote{ From \url{http://fr.wikipedia.org/wiki/Français}} est une langue romane parlée en France, dont elle est originaire (la «langue d'oïl»), ainsi qu'en Afrique francophone, au Canada (principalement au Québec, au Nouveau-Brunswick et en Ontario), en Belgique (en Région wallonne et à Bruxelles), en Suisse, au Liban, en Haïti et dans d'autres régions du monde, soit au total dans 51 pays du monde ayant pour la plupart fait partie des anciens empires coloniaux français et belge. \\
+(\today)
+
+\begin{english}
+\textbf{English}\footnote{From \url{http://en.wikipedia.org/wiki/English_language}} is a West Germanic language originating in England, and the first language for most people in Australia, Canada, the Commonwealth Caribbean, Ireland, New Zealand, the United Kingdom and the United States of America (also commonly known as the Anglosphere). It is used extensively as a second language and as an official language throughout the world, especially in Commonwealth countries and in many international organisations. \\
+(\today)
+\end{english}
+
+\begin{german}
+\textbf{Die deutsche Sprache}\footnote{ From \url{http://de.wikipedia.org/wiki/Deutsche_Sprache}} (auch das Deutsche) gehört zum westlichen Zweig der germanischen Sprachen und ist eine der meistgesprochenen europäischen Sprachen weltweit, und gilt so als Weltsprache.\\
+(\today)
+\end{german}
+
+\begin{russian}
+\textbf{Русский язык} — один из восточнославянских языков, один из крупнейших языков мира, в том числе самый распространённый из славянских языков и самый распространённый язык Европы, как географически, так и по числу носителей языка как родного (хотя значительная, и географически бо́льшая, часть русского языкового ареала находится в Азии). \\
+(\today)
+\end{russian}
+
+\begin{latin}
+\textbf{Lingua Latina} est lingua Indoeuropaea. Nomen ductum est de terra in paeninsula Italica quam Latine loquentes incolebant, Vetus Latium appellata sitaque inter flumen Tiberis, Volscam terram, mare Tyrrhenicum, montes Apenninos.
+Quamquam sermone nativo fungi desinit, cumque nostris diebus perpauci Latine loqui possint, lingua mortua appellari solet, multas tamen peperit linguas quae linguae romanicae vocantur, sicut Hispanicam, Francogallicam, Italicam, Lusitanam, Dacoromanicam, Gallaicam, ne omnes afferam. \\
+(\today)
+\end{latin}
+
+\begin{greek}
+\textbf{Η ελληνική γλώσσα} είναι μία από τις ινδοευρωπαϊκές γλώσσες, για την
+οποία έχουμε γραπτά κείμενα από τον 15ο αιώνα π.Χ. μέχρι σήμερα. Αποτελεί το
+μοναδικό μέλος ενός κλάδου της ινδοευρωπαϊκής οικογένειας γλωσσών. Ανήκει
+επίσης στον βαλκανικό γλωσσικό δεσμό.\\
+(\today)
+\end{greek}
+
+
+\begin{hebrew}[numerals=hebrew]
+\textbf{עברית} היא שפה ממשפחת השפות השמיות, הידועה כשפתו של העם היהודי, ואשר ניב מודרני שלה משמש כשפה הרשמית והעיקרית של מדינת ישראל. \\
+(\today\ = \hebrewtoday)
+\end{hebrew}
+
+\begin{syriac}[numerals=abjad]
+ܠܫܢܐ ܐܪܡܝܐ ܐܘ ܐܪܡܝܬ ܗܘ ܠܫܢ̈ܐ ܥܡ ܬܫܥܝܬܐ ܕ\textrm{3000} ܫܢ̈ܝܐ܂ ܗܘܐ ܠܫܢܐ ܕܡܠܟܘ̈ܬܐ ܘܬܘܕ̈ܝܬܐ܂ ܥܡ ܠܫܢܐ ܥܒܪܝܐ܄ ܗܘܐ ܠܫܢܐ ܕܣܦܪ̈ܐ ܕܕܢܝܐܝܠ ܘܥܙܪܐ ܘܗܘ ܠܫܢܐ ܚܕܢܝܐ ܕܬܠܡܘܕ܂ ܐܪܡܝܐ ܗܘܐ ܠܫܢܐ ܕܝܫܘܥ܂ ܐܕܝܘܡ܄ ܐܪܡܝܐ ܗܘ ܠܫܢܐ ܕܟܠܕ̈ܝܐ܄ ܐܬܘܪ̈ܝܐ܄ ܡܪ̈ܘܢܝܐ܄ ܘܣܘܪ̈ܝܝܐ܀ \\
+(\today)
+\end{syriac}
+
+\begin{turkish}
+\textbf{Türkiye Türkçesi}, Ural-Altay Dilleri içerisinde Türk dil ailesinin Oğuz Grubu'na mensup lehçedir. Anadolu, Kıbrıs, Balkanlar ve Orta Avrupa'da geniş yayılım alanı bulmuş olup, Türkiye Cumhuriyeti, Kuzey Kıbrıs Türk Cumhuriyeti, Güney Kıbrıs Rum Kesimi, Makedonya ve Kosova'nın resmî dilidir. \\
+(\today = \Hijritoday)
+\end{turkish}
+
+\begin{polish}
+\textbf{Język polski (polszczyzna)} należy wraz z językiem czeskim, słowackim, pomorskim (kaszubskim), dolnołużyckim, górnołużyckim oraz wymarłym połabskim do grupy języków zachodniosłowiańskich, stanowiących część rodziny języków indoeuropejskich. Ocenia się, że język polski jest językiem ojczystym około 44 milionów ludzi na świecie (w literaturze naukowej można spotkać szacunki od 40 do 48 milionów), mieszkańców Polski oraz Polaków zamieszkałych za granicą (Polonia).\\
+(\today)
+\end{polish}
+
+\begin{latvian}
+\textbf{Latviešu valoda} ir dzimtā valoda apmēram 1,5 miljoniem cilvēku, galvenokārt Latvijā, kurā tā ir vienīgā valsts valoda. Lielākās latviešu valodas pratēju kopienas ārzemēs ir Austrālijā, ASV, Zviedrijā, Lielbritānijā, Vācijā, Brazīlijā, Krievijā. Latviešu valoda pieder indoeiropiešu valodu saimes baltu valodu grupai.\\
+(\today)
+\end{latvian}
+
+\begin{ukrainian}
+\textbf{Українська мова} — східнослов'янська мова, входить до однієї підгрупи з білоруською та російською. Подібно до цих мов українську записують кирилицею. Історично білоруська та українська мови походять з давньоруської (давньоукраїнської) — розмовної мови Київської Русі.\\
+(\today)
+\end{ukrainian}
+
+\begin{sanskrit}
+{\Large ससकत} पृथिव्यां प्राचीना समृद्घा वैज्ञानिकी च भाषा मन्यते । विश्ववाङ्‌मयेषु संस्कृतं श्रेष्ठरत्नम् इति न केवलं भारते अपि तु समग्रविश्वे एतद्विषये निर्णयाधिकारिभि: जनै: स्वीकृतम् । महर्षि पाणिनिना विरचिता अष्टाध्यायी इति संस्कृतव्याकरणम्‌ अधुनापि भारते विदेशेषु च भाषाविज्ञानिनां प्रेरणास्‍थानं वर्तते . संस्कृतशब्दा: एव उत्तरं दक्षिणं च भारतं संयोजयन्ति ।
+\end{sanskrit}
+
+\begin{Arabic}[]
+«اعلم أنّ فنّ التاريخ فنّ عزيز المذهب، جمّ الفوائد، شريف الغاية؛ إذ هو يوقفنا على أحوال الماضين من الأمم في أخلاقهم، و الأنبياء في سيرهم، و الملوك في دولهم و سياستهم؛ حتّى تتمّ فائدة الإقتداء في ذلك لمن يرومه في أحوال الدين و الدنيا.» (ابن خلدون، المقدّمة)\\
+(\today\ = \Hijritoday[0])
+\end{Arabic}
+
+\begin{farsi}
+فارسی یا پارسی، (که دری، فارسی دری، و پارسی دری نیز نامیده می‌شود) زبانی است که
+در کشورهای ایران، افغانستان، تاجیکستان و ازبکستان به آن سخن می‌رانند. \\
+(\Jalalitoday = \Hijritoday)
+\end{farsi}
+
+\pagebreak
+\begin{urdu}
+اُردو ایک ہندآریائی زبان ہے جس کا تعلّق ہند یوروپی لسانی خاندان کی ہندایرانی شاخ سے ہے۔ بارہویں صدی میں ہندوستان کی مقامی زبانوں اور فارسی، عربی، اور تُرکی زبانوں کے اختلاط سے اردو وجود میں آئی۔ اردو پاکستان کی قومی زبان ہے، اور ہندوستان کی 23 سرکاری زبانوں میں سے ایک ہے۔ جنوبی ایشیا کے باہر خلیجِ فارس کے ممالک، سعودی عرب، برطانیہ، امریکہ، کنیڈا، جرمنی، ناروے، اور آسٹریلیا میں بھی جنوبی ایشیائی مہاجرین کی بڑی تعداد اردو بولتی ہے۔ \\
+
+(\today\ مطابق \Hijritoday[0])
+\end{urdu}
+
+\begin{thai}
+เป็น\wbr แผนงานเพื่อ\wbr สนับสนุน\wbr การ\wbr ร่วมกัน\wbr สร้าง, การ\wbr ร่วมกันใช้, และ\wbr การ%
+ร่วมกัน\wbr พัฒนา\wbr ทรัพยากร\wbr ทาง\wbr ภาษา\wbr ของ\wbr ภาษา\wbr ไทย, บน\wbr เครือข่าย World Wide Web. แผนงานนี้\wbr มี%
+จุด\wbr ประสงค์หลั\wbr กอยู่\wbr สอง\wbr ประการคือ เพื่อแก้ปัญหา\wbr กำ\wbr แพง\wbr ทาง\wbr ภาษา, และรักษา%
+ไว้เพื่อ\wbr ความค\wbr งอยู่\wbr ของ\wbr ภาษา\wbr และ\wbr วัฒนธรรม\wbr ไทย. \\
+(\today)
+\end{thai}
+
+\begin{divehi}\small\sloppy
+ދިވެހިބަހަކީ ދިވެހިރާއްޖޭގެ ރަސްމީ ބަހެވެ. މި ބަހުން ވާހަކަ ދައްކައި އުޅެނީ ދިވެހިރާއްޖޭގެ އަހުލުވެރިންގެ އިތުރުން ހިންދުސްތާނުގެ މަލިކު ގެ
+އަހުލުވެރިންނެވެ. އެބައިމީހުން މި ބަހަށް ކިޔަނީ މަހަލް ބަހެވެ. ބަހާބެހޭ މާހިރުން ދިވެހިބަސް ހިމަނުއްވައިފައިވަނީ އިންޑޯ އާރިޔަން ބަސްތަކުގެ
+ތެރޭގަ އެވެ.
+\end{divehi}
+
+%\fontspec[Script=Georgian]{DejaVu Serif}
+%ქართული ენა არის საქართველოს სახელმწიფო ენა (აფხაზეთის ავტონომიურ რესპ\-უბლიკაში მის პარალელურად სახელმწიფო ენად აღიარებულია აგრეთვე აფხაზური ენა). ქართულ ენაზე 7 მილიონზე მეტი ადამიანი ლაპარაკობს.
+%
+
+\begin{amharic}
+\textbf{አማርኛ} የኢትዮጵያ መደበኛ ቋንቋ ነው። ከሴማዊ ቋንቋዎች እንደ ዕብራይስጥ ወይም ዓረብኛ አንዱ ነው። እንዲያውም 27 ሚሊዮን ያህል ተናጋሪዎች እያሉት፣ አማርኛ ከአረብኛ ቀጥሎ ትልቁ ሴማዊ ቋንቋ ነው። የሚጻፈውም በግዕዝ ፊደል ነው። አማርኛ ክዓረብኛና ከዕብራይስጥ ያለው መሰረታዊ ልዩነት አንደላቲን ከግራ ወደ ቀኝ መጻፉ ነው። \\
+(\today)
+\end{amharic}
+
+\begin{nko}
+ߒߞߏ ߦߋ߫ ߛߓߍߟߌߞߊ߲ߞߋ ߟߋ߬ ߘߌ߫ ߝߘߊ߬ߝߌ߲߬ߠߊ߫ ߕߟߋ߬ߓߋ ߘߐ߫ ߡߊ߲߬ߘߋ߲߬ ߡߌߙߌ߲ߘߌ ߞߊ߲ ߞߊߡߊ߬߸ ߊ߬ ߣߴߊ߬ ߡߟߋߞߎߦߊߞߊ߲ ߕߐ߮ ߟߋ߬. ߞߊ߬ߕߎ߲߯ ߸ ߊ߬ ߞߘߐ ߟߋ߬ ߡߊ߲߬ߘߋ߲߫ ߝߘߏ߬ߓߊ߬ߞߊ߲ ߓߏߟߏ߲ ߓߍ߯ ߘߐ߫ ߞߏ߫: ߒ ߞߊ߲߫ ߠߋ߬ ߞߏ߫. ߝߣߊ߫߸ ߊ߬ ߦߋ߫ ߟߊߓߊ߯ߙߟߊ߫ ߟߊ߫ ߖߡߊ߬ߣߊ ߢߌ߲߬ ߠߎ߫ ߟߋ߬ ߘߐ߫ ߓߊߞߍ߭: ߖߌ߬ߣߍ߫، ߜߋ߲ߞߐ߰ߖߌ߬ߘߊ، ߊ߬ ߣߌ߫ ߡߊߟߌ߫.
+\\
+(\today)
+\end{nko}
+
+\end{document}
+%</examples.tex>
+%<*example-arabic.tex>
+\documentclass[a4paper]{book}%
+\usepackage[no-math]{fontspec}
+\usepackage{xltxtra,url,amsmath}
+\setmainfont{Linux Libertine O}
+\defaultfontfeatures{Scale=MatchLowercase}
+\newfontfamily\arabicfont[Script=Arabic]{Amiri}%
+\newfontfamily\arabicfonttt[Script=Arabic,Scale=.75]{DejaVu Sans Mono}
+\newfontfamily\farsifont[Script=Arabic,Scale=1.1,WordSpace=2]{IranNastaliq}
+\let\XeTeX\undefined
+\let\XeLaTeX\undefined
+\usepackage[quiet,nolocalmarks]{polyglossia}
+\setdefaultlanguage[calendar=gregorian,hijricorrection=1,locale=mashriq]{arabic}
+\setotherlanguage[variant=british]{english}
+\setotherlanguage{farsi}
+\parindent 0pt
+\title{اختبار دعم اللغة العربية}
+\author{فرانسوا شاريت}
+\begin{document}
+\pagenumbering{alph}
+\maketitle
+\tableofcontents
+\chapter{تجربة}
+\pagenumbering{arabic}
+\section{لغات مختلفة}
+
+\textbf{العربية}\footnote{%
+من «\LR{\textenglish{\url{http://ar.wikipedia.org/wiki/}}\RL{\ttfamily لغة عربية}}»}
+أكبر لغات المجموعة السامية من حيث عدد المتحدثين، وإحدى أكثر اللغات انتشارا في
+العالم، يتحدثها أكثر من ٤٢٢ مليون نسمة، ويتوزع متحدثوها في المنطقة المعروفة
+باسم الوطن العربي، بالإضافة إلى العديد من المناطق الأخرى المجاورة كالأحواز وتركيا
+وتشاد ومالي والسنغال. وللغة العربية أهمية قصوى لدى أتباع الديانة الإسلامية، فهي
+لغة مصدري التشريع الأساسيين في الإسلام: القرآن، والأحاديث النبوية المروية عن النبي
+محمد، ولا تتم الصلاة في الإسلام (وعبادات أخرى) إلا بإتقان بعض من كلمات هذه اللغة.
+والعربية هي أيضًا لغة طقسية رئيسية لدى عدد من الكنائس المسيحية في العالم العربي،
+كما كتبت بها الكثير من أهم الأعمال الدينية والفكرية اليهودية في العصور الوسطى.
+وإثر انتشار الإسلام، وتأسيسه دولا، ارتفعت مكانة اللغة العربية، وأصبحت لغة السياسة
+والعلم والأدب لقرون طويلة في الأراضي التي حكمها المسلمون، وأثرت العربية، تأثيرا
+مباشرا أو غير مباشر على كثير من اللغات الأخرى في العالم الإسلامي، كالتركية
+والفارسية والأردية مثلا.
+
+\textlang{farsi}{\bfseries فارسی}\footnote{%
+از «\LR{\textenglish{\url{http://fa.wikipedia.org/wiki/}}\RL{\ttfamily فارسي}}»}
+\begin{farsi}
+یا پارسی، (که دری، فارسی دری، و پارسی دری نیز نامیده می‌شود) زبانی است که
+در کشورهای ایران، افغانستان، تاجیکستان و ازبکستان به آن سخن می‌رانند.
+(برخی زبان فارسی در تاجیکستان و ازبکستان و چین را فارسی تاجیکی نام
+می‌گذارند).
+\end{farsi}
+
+\newpage
+\begin{english}
+\textbf{English}\footnote{%
+ From \url{http://en.wikipedia.org/wiki/English_language}}
+is a West Germanic language originating in England, and the first language for
+most people in Australia, Canada, the Commonwealth Caribbean, Ireland, New
+Zealand, the United Kingdom and the United States of America (also commonly
+known as the Anglosphere). It is used extensively as a second language and as
+an official language throughout the world, especially in Commonwealth countries
+and in many international organisations.
+
+\textarabic{١ ٢ ٣}
+
+\end{english}
+\clearpage
+
+\section{أعمال تأريخية \textenglish{(Calendar operations)}}
+
+%\textenglish{\today} = \LTR{\today} =
+\setfootnoteLR
+\today\ = \Hijritoday%\footnote{
+% محسوب بـ \textenglish{\textsf{hijrical.sty}}}
+\LTRfootnote{ What is this?}
+\setfootnoteRL
+
+%\newpage
+\subsection{فلان}
+\textenglish{This is English: a b c}\marginpar{انكليزي} %FIXME! cf farsitex?
+
+\subsubsection{فلان فلان}
+\begin{enumerate}
+ \item مثال
+ \item مثال
+ \begin{enumerate}
+ \item مثال
+ \item مثال
+ \end{enumerate}
+
+ \item مثال
+\end{enumerate}
+
+\begin{table}[h]
+ \centering
+ \begin{tabular}{cc}
+ ا & ب \\
+ ج & د
+ \end{tabular}
+ \caption{هذا المثال}
+\end{table}
+
+\[
+x^\text{مال مال}
+\]
+
+\begin{equation}
+ x^2 + y^2 = z^2
+ \label{test}
+\end{equation}
+\end{document}
+%</example-arabic.tex>
+%<*example-thai.tex>
+\documentclass[a4paper]{article}
+\usepackage[no-math]{fontspec}
+\usepackage{xltxtra,url}
+\usepackage{polyglossia}
+\setdefaultlanguage[numerals=thai]{thai}
+\setotherlanguage{english}
+\setmainfont{Norasi}
+\begin{document}
+\begin{center}
+ \abstractname
+\end{center}
+\begin{english}
+Some English to begin with.\footnote{ %
+ Blabla}
+\end{english}
+%%% NOTE: The wordbreak (\wbr) commands were inserted by the preprocessor cttex
+%%% (available from http://linux.thai.net/pub/thailinux/cvs/software/cttex/
+%%% or from http://packages.debian.org/cttex)
+%%% using the command :
+%%% $ cttex-utf8 <infile.tex> <outfile.tex>
+%%% where cttex-utf8 is the following simple shell script:
+%%% #!/bin/bash
+%%% cat $1 | iconv -f UTF-8 -t TIS-620 | cttex -w | sed 's/<WBR>/\\wbr /g' | iconv -f TIS-620 -t UTF8 > $2
+%%% (this should also work on MacOSX; windows users need to tweak it into a batch file I guess)
+
+เป็น\wbr แผนงานเพื่อ\wbr สนับสนุน\wbr การ\wbr ร่วมกัน\wbr สร้าง, การ\wbr ร่วมกันใช้, และ\wbr การ%
+ร่วมกัน\wbr พัฒนา\wbr ทรัพยากร\wbr ทาง\wbr ภาษา\wbr ของ\wbr ภาษา\wbr ไทย, บน\wbr เครือข่าย World Wide Web. แผนงานนี้\wbr มี%
+จุด\wbr ประสงค์หลั\wbr กอยู่\wbr สอง\wbr ประการคือ เพื่อแก้ปัญหา\wbr กำ\wbr แพง\wbr ทาง\wbr ภาษา, และรักษา%
+ไว้เพื่อ\wbr ความค\wbr งอยู่\wbr ของ\wbr ภาษา\wbr และ\wbr วัฒนธรรม\wbr ไทย.
+
+เรา\wbr ตระหนัก\wbr ดีถึง\wbr ความ\wbr สำคัญ\wbr ของ\wbr ภาษา ซึ่ง\wbr นอกจาก\wbr จะ\wbr เป็นสื่อ\wbr ระหว่าง\wbr คนกับ\wbr คน\wbr แล้ว ยัง\wbr เป็น%
+รูปแทน\wbr ความคิด และ\wbr เป็น\wbr เครื่องมือ\wbr ใน\wbr การใช้\wbr ความคิด\wbr ด้วย. เครือข่าย\wbr คอมพิวเตอร์%
+ใน\wbr ปัจจุบัน\wbr ทำให้ข้อมูล\wbr ข่าวสาร\wbr แพร่หลาย\wbr ไป\wbr อย่าง\wbr รวดเร็ว. เครื่องมือที่ใช้\wbr ใน\wbr การแส\wbr ดง\wbr ผล%
+และ\wbr การเต\wbr รี\wbr ยมข้อมูล\wbr ข่าวสาร\wbr นั้น จึง\wbr เป็นสิ่ง\wbr จำ\wbr เป็น. ด้วย\wbr เทคโนโลยีที่\wbr ก้าวหน้า\wbr ไป%
+อย่าง\wbr รวดเร็ว, การที่\wbr เพียง\wbr จะ\wbr สามารถแส\wbr ดง\wbr ผลได้หรือ\wbr ป้อนข้อมูลได้\wbr เท่านั้น ไม่\wbr เป็นที่%
+เพียงพออีก\wbr แล้ว. การแส\wbr ดง\wbr ผลที่\wbr สวย\wbr งาม\wbr ถูก\wbr ต้อง\wbr ตาม\wbr แบบแผน หรือ\wbr การเต\wbr รี\wbr ยมข้อมูลได้\wbr อย่าง%
+ถูก\wbr ต้อง และ\wbr รวดเร็วจึง\wbr เป็นสิ่งที่\wbr จำ\wbr เป็นที่\wbr จะ\wbr ต้อง\wbr พัฒนาให้\wbr ทันตาม\wbr การ\wbr เปลี่ยนแปลง\wbr ของ%
+เทคโนโลยี.\footnote{ %
+ Second footnote}
+
+\today
+
+\begin{english}
+This is today: \today
+\end{english}
+
+\begin{enumerate}
+ \item A
+ \item B
+ \begin{enumerate}
+ \item a
+ \item b
+ \item c
+ \end{enumerate}
+ \item C
+\end{enumerate}
+\end{document}
+%</example-thai.tex>
+% \fi
+%
+% \typeout{*************************************************************}
+% \typeout{*}
+% \typeout{* To finish the installation you have to move the following}
+% \typeout{* file into a directory searched by TeX:}
+% \typeout{*}
+% \typeout{* \space\space\space all *.sty, *.lua, *.def and *.ldf files}
+% \typeout{*}
+% \typeout{* You also need to compile the *.map files with teckit_compile}
+% \typeout{* and place the resulting *.tec files under}
+% \typeout{* .../fonts/misc/xetex/fontmapping}
+% \typeout{*}
+% \typeout{*************************************************************}
+\endinput
diff --git a/macros/unicodetex/latex/polyglossia/polyglossia.pdf b/macros/unicodetex/latex/polyglossia/polyglossia.pdf
new file mode 100644
index 0000000000..6c1979411b
--- /dev/null
+++ b/macros/unicodetex/latex/polyglossia/polyglossia.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/unicode-math/CHANGES.md b/macros/unicodetex/latex/unicode-math/CHANGES.md
new file mode 100644
index 0000000000..facafe8080
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/CHANGES.md
@@ -0,0 +1,363 @@
+CHANGE HISTORY
+==============
+
+## v0.8q (2020/01/31)
+
+ * Update to adapt to / support new features in the upcoming 2e kernel.
+ * Give a better error message if used on non-supported engines that are not pdfTeX.
+
+
+## v0.8p (2019/09/26)
+
+ * Remove dependency on `filehook` package. Just to simplify.
+ * Remove patch code for the `colonequals` package; now if you use that package
+ you will simply receive its standard ‘constructed’ symbols.
+ * Load `amsmath` automatically. This is not intended to save time for the user,
+ but to simplify the code logic. Users should continue to load `amsmath` explicitly IMO.
+
+
+## v0.8o (2019/03/04)
+
+ * Avoid `'Dimension too large' error` for some (unpredictable) combinations of font
+ choice and the `Scale` option. Problems are still known to occur for very large or
+ very small values of `Scale`.
+ * Documentation is now run through ‘continuous integration’ (viz, *Travis* for the time being)
+ as well as the test suite.
+
+
+## v0.8n (2019/01/26)
+
+ * Add note to readme that the `lm-math` package is required for minimal functionality.
+ * Spacing fixed for maths fonts loaded with the `Scale` fontspec feature (#287).
+ * Commands like `\crampedtextstyle` now longer lead to an infinite loop under XeTeX (#505).
+ * Improvements to the functionality of the test suite. (Although more tests would be nice.)
+ * Test suite is now (successfully) run with `expl3` debug mode enabled.
+
+
+## v0.8m (2018/07/29)
+
+ * Restore behaviour of legacy syntax `x_\mathrm{x}` (i.e., with no braces).
+ While strictly ‘incorrectly’, this usage is widely used.
+ N.B. this syntax is not supported for the `\symXX` commands.
+ * Add `\cuberoot` and `\fourthroot` as proper radicals.
+ * Some additional input subscripts/superscripts.
+ * Some documentation additions (thanks for the contributions).
+ * Deprecation warning: the *internal* `\__um_switchto_XX:` commands will be dropped in
+ a future release in favour of `\__um_switch_to:n {XX}` (or similar). These are internal
+ commands and shouldn't be used by third-parties; please write if you have a use case.
+
+
+## v0.8l (2018/02/02)
+
+ * Issue an error message if `\setmathfont{...}[range=...]` is used first; a `range`
+ declaration inherently implies a subset, so a ‘main’ math font needs to be set up first.
+ * Fix issue when nesting `\mathXX` and `\symZZ` commands. (#356, #435, #438)
+ * Fix another issue when using `mathXX` or `\symXX` inside `\DeclareMathOperator`. (#449)
+ * Document incompatibility with the `mathspec` package. (#436)
+ * Fix bugs for using `range=\partial` and `range=\nabla`. (#441)
+
+
+## v0.8k (2018/01/13)
+
+ * Eliminate warnings `Variant form 'NV' invalid for base form`... (#430).
+ * Fix issue when loading the `cal` range (#431).
+ * Fix issue with `\sqrt[n]{x}` with `amsmath` (#432).
+ * Error when loading on (really) old versions of XeTeX/LuaTeX removed.
+ * More UM fonts listed in the README (#425).
+
+
+## v0.8j (2018/01/07)
+
+ - NEW
+
+ * Numbers and latin letters in the fullwidth Unicode range are now supported
+ as aliases to their ASCII counterparts (#337).
+ * New commands `\(New|Renew)NegationCommand \foo` for defining custom negations
+ accessed via `\not\foo`.
+
+ - SYMBOLS
+
+ * `\typecolon` is now `\mathrel` instead of `\mathbin` (#360).
+ * New symbol `\mathhyphen` which acts like a ‘letter’ (#313).
+ * `\nabla` and `\partial` have corrected documentation (#257).
+ * The following legacy commands are listed as ‘unsupported’ and will result
+ in sensible error messages rather than the old behaviour of meaningless
+ output: `\arrowvert`, `\Arrowvert`, `\bracevert`. (#411).
+
+ - BUGS
+
+ * LuaTeX bug with shifted `\underbrace` when it contains accented symbols worked around (#391).
+ * When using the `range` feature, users commonly found they needed to call
+ `\setmathfont` a final time with the original font to ensure correct
+ formatting and correct selection of symbol alphabets. I hope the issues
+ that required this have now been corrected (#331, #387).
+ * If `\setmathfont` is called a second time in a document, it tries harder
+ to more properly reset the maths font setup for the new font (#224).
+ * Properly hard-coded the `\delcode` of the period to ensure `\left`/`\right`
+ behave correctly in all circumstances (#344, #351, #420).
+ * Correct `\mathrm` (etc.) situation when no fonts loaded explicitly by the user (#330).
+ * Various bug fixes to `\not` (#126, #343, #363)
+ * `\std@minus` & `\std@equal` now properly corrected (#332).
+ * Fix problem with infinite loop with `\cdots` when `amsmath` loaded after `unicode-math` (#227).
+ * If `\setmath(rm|sf|tt)` is called *before* loading `unicode-math`, the setting
+ is now remembered (#407).
+
+ - INTERNALS
+
+ * A number of improvements to efficiency when loading subsequent math fonts
+ using the `range` feature.
+ * No longer loads the `ucharcat` package.
+ * Test suite re-implemented for better portability and use with Travis CI.
+ See <https://travis-ci.org/wspr/unicode-math> for the up-to-date status
+ of whether the test suite is passing.
+
+
+
+## v0.8i (2017/11/18)
+
+ * Many internal changes to support future work.
+ * Improved documentation describing the `\mathXX` and `\symXX` commands.
+ * Documentation is now split into `unicode-math.pdf` (for the user)
+ and `unicode-math-code.pdf` (for the typeset source code).
+
+
+## v0.8h (2017/10/09)
+
+ * Some bugs crept in in the last update due to some code rearrangement:
+ * package version wasn't set;
+ * some code was being executed at the wrong time;
+ * `\sqrt[]{}` in LuaLaTeX gave incorrect output.
+ * The layout of the code is now structured far more sensibly.
+ * Remove (long deprecated) `\resetmathfont`; for years it has been a synonym for `\setmathfont`.
+
+
+## v0.8g (2017/10/02)
+
+ * Better use of scriptstyle sizes in LuaTeX (I think a regression).
+ * Fix regression (`\mathbf` etc. not being set automatically) caused by the renaming of a `fontspec` internal command.
+ * Minor documentation improvements.
+ * (Only relevant for me: I've also disabled the test suite almost entirely to begin a re-write for ‘continuous integration’.)
+
+
+## v0.8f (2017/08/02)
+
+ * Emergency fix (thanks Bruno) for another bug revealed by `expl3` update.
+
+
+## v0.8e (2017/07/30)
+
+ * Add `\surd` to access the sqrt symbol.
+ * Fix bug exposed by `expl3` update to booleans.
+ * Add Deja Vu Math TeX Gyre in list of symbols.
+ * Add `\sime` alias for `\simeq` and `\nsimeq` for `\nsime`.
+ (For negations it's helpful when they have consistent naming.)
+
+
+## v0.8d (2017/01/25)
+
+ * `vargreek-shape=TeX` and `vargreek-shape=unicode` package options dropped; for consistency and compatibility, `\phi` and `\epsilon` should and will now behave the same as in `TeX`.
+ * On that note, when using control sequences such as `\mbfitsansvarphi` (and so on), there were a few faulty definitions. The new behaviour is to consistenyl define the `varphi` and `varepsilon` ones as those with the "curly" designs.
+ * Add `\wideoverbar`, `\widebreve`, `\widecheck`.
+ * Add `\mathsection`, `\mathparagraph`.
+ * Remove `\mupvarbeta`, `upold(Kk)oppa`, `\up(Ss)tigma`, `\up(Kk)oppa`, `\up(Ss)ampi` — none of these are maths symbols.
+ * `!` (`\mathexclam`) changed from `\mathpunct` to `\mathclose` for backwards compatibility with TeX.
+
+
+## v0.8c (2015/09/24)
+
+ * Add `\over(left/right)harpoon` as "wide" accents.
+ * Add RTL mathematics operators `\arabicmaj` and `\arabichad`, which correspond to `U+1EEF0` and `U+1EEF1`, resp.
+ * Remove `catchfile` package dependency.
+ * Update some internal names to match expl3 standards.
+
+
+## v0.8b (2015/09/09)
+
+ * Bug fix: Use the "ucharcat" package to simplify some code that caused some headaches with \tl_rescan:nn.
+
+
+## v0.8a (2015/08/06)
+
+ * Fix bug with \vert, \|, \(l/r)vert, etc., displaying with the wrong characters.
+
+ * Improve documentation to properly reflect changes in v0.8 and fix some broken examples.
+
+ * No longer reset catcodes of : and @ during \setmathfont .
+
+ * Fix remapping of alphabets (needed for Minion Math) in cases such as:
+
+ \setmathfont[range=bfit->it]{MinionMath-Bold.otf}
+
+
+## v0.8 (2015/07/29) **Breaking changes in this update!**
+
+ * `\mathrm` (`\mathup`), `\mathit`, `\mathbf`, `\mathsf`, and `\mathtt` revert to their traditional LaTeX meanings; they are set up to match their equivalent text fonts unless specifically set using `\setmathrm` and friends from `fontspec` or the new `\setmathfontface` in `unicode-math`. These commands should be used for *multi*-letter identifiers.
+
+ * New "symbol" commands have been added, `\symrm` (`\symup`), `symit`, ..., to replace the behaviour of the old commands. These should be used for *single*-letter identifiers. See the package documentation for more detail on these and related commands.
+
+ * Package options `mathit=sym`, `mathbf=sym`, etc., reverse the changes above to revert to pre-v0.8 behaviour for `\mathXYZ`. Regardless of package option, `\symXYZ` always maps to symbols and `\mathtextXYZ` is provided for the traditional `\mathXYZ` font switch.
+
+ * New command `\setoperatorfont` to set the font used for commands such as `\sin` and `\cos`. Usage: `\setoperatorfont\mathbf` or any command defined with `\setmathfontface`.
+
+ * Traditional LaTeX `\DeclareMathAlphabet` now works again for legacy font-loading packages.
+
+ * Commands defined to "force" Greek letters with `\upbeta` and `\itbeta`, etc.
+
+ * Assorted bug fixes and minor changes.
+
+
+## v0.7e (2014/06/30)
+
+ * No longer assume fixltx2e has been loaded.
+ * Some ascii math symbols have been renamed with a \math... prefix, such as \mathquestion.
+ * Assume latest luaotfload is being used; no need for a separate unicode-math.lua script.
+ * Assorted typos and minor bugs.
+
+
+## v0.7e (2013/05/04)
+
+ * Track luaotfload updates.
+
+
+## v0.7d (2013/03/16)
+
+ * More expl3 changes missed first time around. (Sorry again.)
+
+
+## v0.7c (2013/02/25)
+
+ * The Latin Modern math font name changed TWICE. Only caught the first one.
+ Sorry for any inconvenience caused.
+
+
+## v0.7b (2013/02/22)
+
+ * Keep in sync with Latin Modern Math font name change.
+ * Keep in sync with expl3 changes.
+
+
+## v0.7a (2012/07/28)
+
+ * Keep in sync with expl3 changes.
+
+
+## v0.7 (2012/05/30): The TeX Live 2012 release.
+
+ * Most changes (and all significant ones) in this release thanks to Khaled
+ Hosny, who is now credited as an author of the package.
+ * Many improvements for XeTeX support to take advantage of the new engine
+ (v0.9998) in TL2012.
+ * As a result, `\resetmathfont` is no longer required.
+ * Improve `\not` to use pre-combined glyphs where possible.
+ * LM Math is loaded by default.
+ * Support bottom accents.
+ * And add `\wideutilde`.
+ * The ‘symbols’ document is somewhat better organised and contains
+ information on whether a symbol is defined in plain TeX or amssymb.
+ * Various other minor fixes and additions:
+ * `\underleftrightarrow` added for fonts that support it.
+ * Don’t overwrite mathtool’s `\overbracket` and `\underbracket`.
+ * Bug in `[range=...]` parsing fixed.
+ * Add `\longdivision`.
+ * Add `\lgroup` and `\rgroup`.
+ * Fix ‘moustache’ delimiters.
+ * `\openbox` renamed to `\mathvisiblespace`, since it is already defined
+ in amsthm as an empty box.
+
+
+## v0.6a (2011/09/19)
+
+ * Always a bug that slips through the cracks! Fixes `\left.` and `\right.`
+ * Add experimental package option `warnings-off=...` which allows warnings
+ to be suppressed on an individual basis.
+
+
+## v0.6 (2011/09/18)
+
+ * Keep in sync with fontspec internals
+ (sorry for the small delay where things were broken)
+ * Keep in sync with expl3 deprecated functions
+ * Math versions (finally) implemented; can now change maths fonts
+ mid-document without reinitialising everything
+ (thanks to Ulrike Fischer and Ulrik Vieth)
+ * Symbols file `unimath-symbols.pdf` now uses maths versions to compare
+ all of the OpenType maths fonts I currently have access to
+ * Over- and under- braces, brackets, and parentheses now work in XeTeX
+ (thanks to Claudio Beccari)
+ * Many internal changes, including a re-write of the `range` feature;
+ it should now be faster and more robust
+ * Tentative programmer's interface for querying the current math style:
+ `\l_um_mathstyle_tl`.
+ * Remove (outdated) interaction with beamer; you must specify
+ `professionalfonts` manually for now
+ * Quieten the console output when loading maths fonts with incomplete maths
+ style coverage
+ * Synonym added: `\lnot` -> `\neg`
+ * Two added Unicode symbols (names tentative): `\blanksymbol` and `\openbox`
+ (thanks to Apostolos Syropoulos)
+ * Fixed literal sub-/super-script input.
+
+
+## v0.5e (2011/07/31)
+
+ * Fix forward compatibility clash with deprecated expl3 functions (sorry)
+ * Command names are now `\protected`; this makes them safe to use in moving
+ arguments and so on
+ * Similarly to the change in v0.5c, the main math font is now loaded in
+ math family zero (equiv. to LaTeX's `operators` math font)
+ * `\mathring` added
+ * Ensure that a math font has been selected in order to prevent problems
+ in minimal documents (this will be unnecessary when the OpenType LM math
+ font is released)
+ * Documentation for which was which of epsilon/varepsilon was backwards!
+ (thank to Rasmus Villemoes for pointing this out)
+ * Spurious `\upUpsilon` removed (the one at U+03A5 is now the correct one)
+ * Typo when defining `\dprime` fixed
+ (thanks to Ulrik Vieth for these last two)
+ * Fix the math class of `\modtwosum`; it is now a large operator
+ (thanks to Michael Ummels)
+ * Move several LuaTeX-related patches to the `lualatex-math` package
+ * Fixed mathtool's `\cramped` in XeLaTeX usage
+
+
+## v0.5d (2011/01/30)
+
+ * Assorted improvements to LuaLaTeX support, including non-growing accents
+ available in LuaTeX v0.65 and later
+ * Improved behaviour with reading and using maths font dimensions
+ * Better compatibility with legacy maths packages and environments
+ (always more worked needed, though)
+ * Fix the default setting for "vargreek-shape"
+
+
+## v0.5c (2010/09/27)
+
+ * Fix a long-standing bug in XeLaTeX in which the "master" math
+ families 2 and 3 weren't being set; hence fraction rules and many other
+ parameters were not being set correctly
+ * Stay in sync with internal fontspec changes
+
+
+## v0.5b (2010/09/19): Tune-up
+
+ * Added missing symbols/synonyms:
+ \diamond \smallint \emptyset \hbar \backepsilon \eth
+ * \overline works for LuaLaTeX
+ * Fix \slash; previously, it overwrote the text definition
+ * \vartriangle now has the correct math class
+
+
+## v0.5a (2010/07/14): TeX Live 2010 release
+
+ * Numerous documentation improvements
+ * Bug fix against stray catcode changes
+ * Add `\mathcal` and `\mathbfcal` as distinct from the Script style;
+ these are only supported by the XITS fonts at present
+ * Small changes to the range of symbols offered (especially note that `\ac`
+ is now `\invlazys` to avoid acronym package clash)
+ * Superscripts are allowed after primes (as they should be)
+ * Numerous LuaLaTeX improvements, including roots and over/under braces.
+
+
+## v0.5 (2010/06/03): Initial CTAN release
+
diff --git a/macros/unicodetex/latex/unicode-math/LICENSE b/macros/unicodetex/latex/unicode-math/LICENSE
new file mode 100644
index 0000000000..2244313901
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/LICENSE
@@ -0,0 +1,416 @@
+The LaTeX Project Public License
+=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-=-
+
+LPPL Version 1.3c 2008-05-04
+
+Copyright 1999 2002-2008 LaTeX3 Project
+ Everyone is allowed to distribute verbatim copies of this
+ license document, but modification of it is not allowed.
+
+
+PREAMBLE
+========
+
+The LaTeX Project Public License (LPPL) is the primary license under
+which the LaTeX kernel and the base LaTeX packages are distributed.
+
+You may use this license for any work of which you hold the copyright
+and which you wish to distribute. This license may be particularly
+suitable if your work is TeX-related (such as a LaTeX package), but
+it is written in such a way that you can use it even if your work is
+unrelated to TeX.
+
+The section `WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE',
+below, gives instructions, examples, and recommendations for authors
+who are considering distributing their works under this license.
+
+This license gives conditions under which a work may be distributed
+and modified, as well as conditions under which modified versions of
+that work may be distributed.
+
+We, the LaTeX3 Project, believe that the conditions below give you
+the freedom to make and distribute modified versions of your work
+that conform with whatever technical specifications you wish while
+maintaining the availability, integrity, and reliability of
+that work. If you do not see how to achieve your goal while
+meeting these conditions, then read the document `cfgguide.tex'
+and `modguide.tex' in the base LaTeX distribution for suggestions.
+
+
+DEFINITIONS
+===========
+
+In this license document the following terms are used:
+
+ `Work'
+ Any work being distributed under this License.
+
+ `Derived Work'
+ Any work that under any applicable law is derived from the Work.
+
+ `Modification'
+ Any procedure that produces a Derived Work under any applicable
+ law -- for example, the production of a file containing an
+ original file associated with the Work or a significant portion of
+ such a file, either verbatim or with modifications and/or
+ translated into another language.
+
+ `Modify'
+ To apply any procedure that produces a Derived Work under any
+ applicable law.
+
+ `Distribution'
+ Making copies of the Work available from one person to another, in
+ whole or in part. Distribution includes (but is not limited to)
+ making any electronic components of the Work accessible by
+ file transfer protocols such as FTP or HTTP or by shared file
+ systems such as Sun's Network File System (NFS).
+
+ `Compiled Work'
+ A version of the Work that has been processed into a form where it
+ is directly usable on a computer system. This processing may
+ include using installation facilities provided by the Work,
+ transformations of the Work, copying of components of the Work, or
+ other activities. Note that modification of any installation
+ facilities provided by the Work constitutes modification of the Work.
+
+ `Current Maintainer'
+ A person or persons nominated as such within the Work. If there is
+ no such explicit nomination then it is the `Copyright Holder' under
+ any applicable law.
+
+ `Base Interpreter'
+ A program or process that is normally needed for running or
+ interpreting a part or the whole of the Work.
+
+ A Base Interpreter may depend on external components but these
+ are not considered part of the Base Interpreter provided that each
+ external component clearly identifies itself whenever it is used
+ interactively. Unless explicitly specified when applying the
+ license to the Work, the only applicable Base Interpreter is a
+ `LaTeX-Format' or in the case of files belonging to the
+ `LaTeX-format' a program implementing the `TeX language'.
+
+
+
+CONDITIONS ON DISTRIBUTION AND MODIFICATION
+===========================================
+
+1. Activities other than distribution and/or modification of the Work
+are not covered by this license; they are outside its scope. In
+particular, the act of running the Work is not restricted and no
+requirements are made concerning any offers of support for the Work.
+
+2. You may distribute a complete, unmodified copy of the Work as you
+received it. Distribution of only part of the Work is considered
+modification of the Work, and no right to distribute such a Derived
+Work may be assumed under the terms of this clause.
+
+3. You may distribute a Compiled Work that has been generated from a
+complete, unmodified copy of the Work as distributed under Clause 2
+above, as long as that Compiled Work is distributed in such a way that
+the recipients may install the Compiled Work on their system exactly
+as it would have been installed if they generated a Compiled Work
+directly from the Work.
+
+4. If you are the Current Maintainer of the Work, you may, without
+restriction, modify the Work, thus creating a Derived Work. You may
+also distribute the Derived Work without restriction, including
+Compiled Works generated from the Derived Work. Derived Works
+distributed in this manner by the Current Maintainer are considered to
+be updated versions of the Work.
+
+5. If you are not the Current Maintainer of the Work, you may modify
+your copy of the Work, thus creating a Derived Work based on the Work,
+and compile this Derived Work, thus creating a Compiled Work based on
+the Derived Work.
+
+6. If you are not the Current Maintainer of the Work, you may
+distribute a Derived Work provided the following conditions are met
+for every component of the Work unless that component clearly states
+in the copyright notice that it is exempt from that condition. Only
+the Current Maintainer is allowed to add such statements of exemption
+to a component of the Work.
+
+ a. If a component of this Derived Work can be a direct replacement
+ for a component of the Work when that component is used with the
+ Base Interpreter, then, wherever this component of the Work
+ identifies itself to the user when used interactively with that
+ Base Interpreter, the replacement component of this Derived Work
+ clearly and unambiguously identifies itself as a modified version
+ of this component to the user when used interactively with that
+ Base Interpreter.
+
+ b. Every component of the Derived Work contains prominent notices
+ detailing the nature of the changes to that component, or a
+ prominent reference to another file that is distributed as part
+ of the Derived Work and that contains a complete and accurate log
+ of the changes.
+
+ c. No information in the Derived Work implies that any persons,
+ including (but not limited to) the authors of the original version
+ of the Work, provide any support, including (but not limited to)
+ the reporting and handling of errors, to recipients of the
+ Derived Work unless those persons have stated explicitly that
+ they do provide such support for the Derived Work.
+
+ d. You distribute at least one of the following with the Derived Work:
+
+ 1. A complete, unmodified copy of the Work;
+ if your distribution of a modified component is made by
+ offering access to copy the modified component from a
+ designated place, then offering equivalent access to copy
+ the Work from the same or some similar place meets this
+ condition, even though third parties are not compelled to
+ copy the Work along with the modified component;
+
+ 2. Information that is sufficient to obtain a complete,
+ unmodified copy of the Work.
+
+7. If you are not the Current Maintainer of the Work, you may
+distribute a Compiled Work generated from a Derived Work, as long as
+the Derived Work is distributed to all recipients of the Compiled
+Work, and as long as the conditions of Clause 6, above, are met with
+regard to the Derived Work.
+
+8. The conditions above are not intended to prohibit, and hence do not
+apply to, the modification, by any method, of any component so that it
+becomes identical to an updated version of that component of the Work as
+it is distributed by the Current Maintainer under Clause 4, above.
+
+9. Distribution of the Work or any Derived Work in an alternative
+format, where the Work or that Derived Work (in whole or in part) is
+then produced by applying some process to that format, does not relax or
+nullify any sections of this license as they pertain to the results of
+applying that process.
+
+10. a. A Derived Work may be distributed under a different license
+ provided that license itself honors the conditions listed in
+ Clause 6 above, in regard to the Work, though it does not have
+ to honor the rest of the conditions in this license.
+
+ b. If a Derived Work is distributed under a different license, that
+ Derived Work must provide sufficient documentation as part of
+ itself to allow each recipient of that Derived Work to honor the
+ restrictions in Clause 6 above, concerning changes from the Work.
+
+11. This license places no restrictions on works that are unrelated to
+the Work, nor does this license place any restrictions on aggregating
+such works with the Work by any means.
+
+12. Nothing in this license is intended to, or may be used to, prevent
+complete compliance by all parties with all applicable laws.
+
+
+NO WARRANTY
+===========
+
+There is no warranty for the Work. Except when otherwise stated in
+writing, the Copyright Holder provides the Work `as is', without
+warranty of any kind, either expressed or implied, including, but not
+limited to, the implied warranties of merchantability and fitness for a
+particular purpose. The entire risk as to the quality and performance
+of the Work is with you. Should the Work prove defective, you assume
+the cost of all necessary servicing, repair, or correction.
+
+In no event unless required by applicable law or agreed to in writing
+will The Copyright Holder, or any author named in the components of the
+Work, or any other party who may distribute and/or modify the Work as
+permitted above, be liable to you for damages, including any general,
+special, incidental or consequential damages arising out of any use of
+the Work or out of inability to use the Work (including, but not limited
+to, loss of data, data being rendered inaccurate, or losses sustained by
+anyone as a result of any failure of the Work to operate with any other
+programs), even if the Copyright Holder or said author or said other
+party has been advised of the possibility of such damages.
+
+
+MAINTENANCE OF THE WORK
+=======================
+
+The Work has the status `author-maintained' if the Copyright Holder
+explicitly and prominently states near the primary copyright notice in
+the Work that the Work can only be maintained by the Copyright Holder
+or simply that it is `author-maintained'.
+
+The Work has the status `maintained' if there is a Current Maintainer
+who has indicated in the Work that they are willing to receive error
+reports for the Work (for example, by supplying a valid e-mail
+address). It is not required for the Current Maintainer to acknowledge
+or act upon these error reports.
+
+The Work changes from status `maintained' to `unmaintained' if there
+is no Current Maintainer, or the person stated to be Current
+Maintainer of the work cannot be reached through the indicated means
+of communication for a period of six months, and there are no other
+significant signs of active maintenance.
+
+You can become the Current Maintainer of the Work by agreement with
+any existing Current Maintainer to take over this role.
+
+If the Work is unmaintained, you can become the Current Maintainer of
+the Work through the following steps:
+
+ 1. Make a reasonable attempt to trace the Current Maintainer (and
+ the Copyright Holder, if the two differ) through the means of
+ an Internet or similar search.
+
+ 2. If this search is successful, then enquire whether the Work
+ is still maintained.
+
+ a. If it is being maintained, then ask the Current Maintainer
+ to update their communication data within one month.
+
+ b. If the search is unsuccessful or no action to resume active
+ maintenance is taken by the Current Maintainer, then announce
+ within the pertinent community your intention to take over
+ maintenance. (If the Work is a LaTeX work, this could be
+ done, for example, by posting to comp.text.tex.)
+
+ 3a. If the Current Maintainer is reachable and agrees to pass
+ maintenance of the Work to you, then this takes effect
+ immediately upon announcement.
+
+ b. If the Current Maintainer is not reachable and the Copyright
+ Holder agrees that maintenance of the Work be passed to you,
+ then this takes effect immediately upon announcement.
+
+ 4. If you make an `intention announcement' as described in 2b. above
+ and after three months your intention is challenged neither by
+ the Current Maintainer nor by the Copyright Holder nor by other
+ people, then you may arrange for the Work to be changed so as
+ to name you as the (new) Current Maintainer.
+
+ 5. If the previously unreachable Current Maintainer becomes
+ reachable once more within three months of a change completed
+ under the terms of 3b) or 4), then that Current Maintainer must
+ become or remain the Current Maintainer upon request provided
+ they then update their communication data within one month.
+
+A change in the Current Maintainer does not, of itself, alter the fact
+that the Work is distributed under the LPPL license.
+
+If you become the Current Maintainer of the Work, you should
+immediately provide, within the Work, a prominent and unambiguous
+statement of your status as Current Maintainer. You should also
+announce your new status to the same pertinent community as
+in 2b) above.
+
+
+WHETHER AND HOW TO DISTRIBUTE WORKS UNDER THIS LICENSE
+======================================================
+
+This section contains important instructions, examples, and
+recommendations for authors who are considering distributing their
+works under this license. These authors are addressed as `you' in
+this section.
+
+Choosing This License or Another License
+----------------------------------------
+
+If for any part of your work you want or need to use *distribution*
+conditions that differ significantly from those in this license, then
+do not refer to this license anywhere in your work but, instead,
+distribute your work under a different license. You may use the text
+of this license as a model for your own license, but your license
+should not refer to the LPPL or otherwise give the impression that
+your work is distributed under the LPPL.
+
+The document `modguide.tex' in the base LaTeX distribution explains
+the motivation behind the conditions of this license. It explains,
+for example, why distributing LaTeX under the GNU General Public
+License (GPL) was considered inappropriate. Even if your work is
+unrelated to LaTeX, the discussion in `modguide.tex' may still be
+relevant, and authors intending to distribute their works under any
+license are encouraged to read it.
+
+A Recommendation on Modification Without Distribution
+-----------------------------------------------------
+
+It is wise never to modify a component of the Work, even for your own
+personal use, without also meeting the above conditions for
+distributing the modified component. While you might intend that such
+modifications will never be distributed, often this will happen by
+accident -- you may forget that you have modified that component; or
+it may not occur to you when allowing others to access the modified
+version that you are thus distributing it and violating the conditions
+of this license in ways that could have legal implications and, worse,
+cause problems for the community. It is therefore usually in your
+best interest to keep your copy of the Work identical with the public
+one. Many works provide ways to control the behavior of that work
+without altering any of its licensed components.
+
+How to Use This License
+-----------------------
+
+To use this license, place in each of the components of your work both
+an explicit copyright notice including your name and the year the work
+was authored and/or last substantially modified. Include also a
+statement that the distribution and/or modification of that
+component is constrained by the conditions in this license.
+
+Here is an example of such a notice and statement:
+
+ %% pig.dtx
+ %% Copyright 2005 M. Y. Name
+ %
+ % This work may be distributed and/or modified under the
+ % conditions of the LaTeX Project Public License, either version 1.3
+ % of this license or (at your option) any later version.
+ % The latest version of this license is in
+ % http://www.latex-project.org/lppl.txt
+ % and version 1.3 or later is part of all distributions of LaTeX
+ % version 2005/12/01 or later.
+ %
+ % This work has the LPPL maintenance status `maintained'.
+ %
+ % The Current Maintainer of this work is M. Y. Name.
+ %
+ % This work consists of the files pig.dtx and pig.ins
+ % and the derived file pig.sty.
+
+Given such a notice and statement in a file, the conditions
+given in this license document would apply, with the `Work' referring
+to the three files `pig.dtx', `pig.ins', and `pig.sty' (the last being
+generated from `pig.dtx' using `pig.ins'), the `Base Interpreter'
+referring to any `LaTeX-Format', and both `Copyright Holder' and
+`Current Maintainer' referring to the person `M. Y. Name'.
+
+If you do not want the Maintenance section of LPPL to apply to your
+Work, change `maintained' above into `author-maintained'.
+However, we recommend that you use `maintained', as the Maintenance
+section was added in order to ensure that your Work remains useful to
+the community even when you can no longer maintain and support it
+yourself.
+
+Derived Works That Are Not Replacements
+---------------------------------------
+
+Several clauses of the LPPL specify means to provide reliability and
+stability for the user community. They therefore concern themselves
+with the case that a Derived Work is intended to be used as a
+(compatible or incompatible) replacement of the original Work. If
+this is not the case (e.g., if a few lines of code are reused for a
+completely different task), then clauses 6b and 6d shall not apply.
+
+
+Important Recommendations
+-------------------------
+
+ Defining What Constitutes the Work
+
+ The LPPL requires that distributions of the Work contain all the
+ files of the Work. It is therefore important that you provide a
+ way for the licensee to determine which files constitute the Work.
+ This could, for example, be achieved by explicitly listing all the
+ files of the Work near the copyright notice of each file or by
+ using a line such as:
+
+ % This work consists of all files listed in manifest.txt.
+
+ in that place. In the absence of an unequivocal list it might be
+ impossible for the licensee to determine what is considered by you
+ to comprise the Work and, in such a case, the licensee would be
+ entitled to make reasonable conjectures as to which files comprise
+ the Work.
+
diff --git a/macros/unicodetex/latex/unicode-math/MANIFEST.md b/macros/unicodetex/latex/unicode-math/MANIFEST.md
new file mode 100644
index 0000000000..638be84dab
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/MANIFEST.md
@@ -0,0 +1,258 @@
+# Manifest for unicode-math
+
+This file is a listing of all files considered to be part of this package.
+It is automatically generated with `texlua build.lua manifest`.
+
+
+## Repository manifest
+
+The following groups list the files included in the development repository of the package.
+Files listed with a ‘†’ marker are included in the TDS but not CTAN files, and files listed
+with ‘‡’ are included in both.
+
+### Source files
+
+These are source files for a number of purposes, including the `unpack` process which
+generates the installation files of the package. Additional files included here will also
+be installed for processing such as testing.
+
+ | File | Flag | Description |
+ | --- | --- | --- |
+ | unicode-math.dtx | ‡ | Metadata for the package code, including files and versioning |
+ | um-code-opening.dtx | ‡ | Assorted initialisation tasks, including some low-level function definitions. |
+ | um-code-variables.dtx | ‡ | Declaration of all code-level variables used in the package. |
+ | um-code-api.dtx | ‡ | The (underdeveloped) API to interface with the package internals. |
+ | um-code-ui.dtx | ‡ | The xparse user interface top-level definitions. |
+ | um-code-pkgopt.dtx | ‡ | Package options. |
+ | um-code-msg.dtx | ‡ | Definitions of error, warning, and log messages. |
+ | um-code-usv.dtx | ‡ | Mapping of mathematical unicode slots for alphabets. |
+ | um-code-setchar.dtx | ‡ | General assignment of maths symbols. |
+ | um-code-mathtext.dtx | ‡ | The "math text" commands such as `\mathbf` and co. |
+ | um-code-main.dtx | ‡ | Definition of `\setmainfont`. |
+ | um-code-fontopt.dtx | ‡ | Keyval for `\setmathfont` |
+ | um-code-fontparam.dtx | ‡ | Cross-platform interface for font parameters |
+ | um-code-mathmap.dtx | ‡ | Setup of symbol alphabets. |
+ | um-code-sym-commands.dtx | ‡ | Definition of "math symbol alphabet" commands such as `\symbf` and co. |
+ | um-code-alphabets.dtx | ‡ | Definitions for setting up the "math symbol alphabets". |
+ | um-code-primes.dtx | ‡ | The definitions needed for the input of primes. |
+ | um-code-sscript.dtx | ‡ | Setup for active chars needed to process subscript/superscript input chars. |
+ | um-code-compat.dtx | ‡ | Compatibility with 3rd party packages. |
+ | um-code-amsmath.dtx | ‡ | Compatibility with amsmath. |
+ | um-code-epilogue.dtx | ‡ | Assorted definitions to close up. |
+ | unicode-math.ins | ‡ | Docstrip installer. |
+ | unicode-math-table.tex | ‡ | Source file of the math symbols. |
+
+### Typeset documentation source files
+
+These files are typeset using LaTeX to produce the PDF documentation for the package.
+
+ | File | Flag | Description |
+ | --- | --- | --- |
+ | unicode-math-code.ltx | ‡ | Typeset code. |
+ | unicode-math.ltx | ‡ | User documentation. |
+ | unimath-example.ltx | ‡ | A minimal example file to demonstrate the package. |
+ | unimath-symbols.ltx | ‡ | Listing of Unicode mathematics symbols using a variety of fonts. |
+
+### Documentation files
+
+These files form part of the documentation but are not typeset. Generally they will be
+additional input files for the typeset documentation files listed above.
+
+ 1. um-doc-style.tex ‡
+ 2. um-doc-main.tex ‡
+ 3. um-doc-stixextract.tex ‡
+ 4. um-doc-nfsssummary.tex ‡
+ 5. um-doc-legacyfontdimen.tex ‡
+ 6. um-doc-mathfontdimen.tex ‡
+
+### Text files
+
+Plain text files included as documentation or metadata.
+
+ 1. CHANGES.md ‡
+ 2. MANIFEST.md ‡
+ 3. README.md ‡
+ 4. LICENSE
+
+### Derived files
+
+The files created by ‘unpacking’ the package sources. This typically includes
+`.sty` and `.cls` files created from DocStrip `.dtx` files.
+
+ 1. unicode-math-luatex.sty †
+ 2. unicode-math-xetex.sty †
+ 3. unicode-math.sty †
+
+### Typeset documents
+
+The output files (PDF, essentially) from typesetting the various source, demo,
+etc., package files.
+
+ 1. unicode-math-code.pdf ‡
+ 2. unicode-math.pdf ‡
+ 3. unimath-example.pdf ‡
+ 4. unimath-symbols.pdf ‡
+
+### Checking-specific support files
+
+Support files for checking the test suite.
+
+ 1. umtest-preamble.tex
+
+### Test files
+
+These files form the test suite for the package. The listed `.lvt` files are the individual unit tests, with matching `.tlg` (not shown, for brevity) are the stored output for ensuring changes to the package produce the same output.
+
+ 1. Bbbit.lvt
+ 2. aaa-loading.lvt
+ 3. active-frac.lvt
+ 4. active-sscripts-amsmath.lvt
+ 5. active-sscripts.lvt
+ 6. alph-range-calscr.lvt
+ 7. alph-range-fallback.lvt
+ 8. alph-range-mapping.lvt
+ 9. alph-range-sym-alph.lvt
+10. alph-range-sym-range.lvt
+11. alph-sym.lvt
+12. ascii-catcodes.lvt
+13. boldstyle-french.lvt
+14. boldstyle-iso.lvt
+15. boldstyle-literal.lvt
+16. boldstyle-tex.lvt
+17. boldstyle-upright.lvt
+18. fontname-log.lvt
+19. hyphen.lvt
+20. input-fullwidth.lvt
+21. lmdefault-mathrm-it-bf.lvt
+22. mathit-symit-var.lvt
+23. mathit-symit.lvt
+24. mathsizes.lvt
+25. mathstyle-french.lvt
+26. mathstyle-iso.lvt
+27. mathstyle-literal.lvt
+28. mathstyle-tex.lvt
+29. mathstyle-upright.lvt
+30. nabla.lvt
+31. not.lvt
+32. operatorname.lvt
+33. partial.lvt
+34. range-char-cmd.lvt
+35. range-class.lvt
+36. range-up-num.lvt
+37. setmathsf.lvt
+38. sqrt-amsmath-exec.lvt
+39. sqrt-amsmath-output.lvt
+40. sqrt-exec.lvt
+41. sqrt-output.lvt
+
+
+## TDS manifest
+
+The following groups list the files included in the TeX Directory Structure used to install
+the package into a TeX distribution.
+
+### Source files (TDS)
+
+All files included in the `unicode-math/source` directory.
+
+ 1. um-code-alphabets.dtx
+ 2. um-code-amsmath.dtx
+ 3. um-code-api.dtx
+ 4. um-code-compat.dtx
+ 5. um-code-epilogue.dtx
+ 6. um-code-fontopt.dtx
+ 7. um-code-fontparam.dtx
+ 8. um-code-main.dtx
+ 9. um-code-mathmap.dtx
+10. um-code-mathtext.dtx
+11. um-code-msg.dtx
+12. um-code-opening.dtx
+13. um-code-pkgopt.dtx
+14. um-code-primes.dtx
+15. um-code-setchar.dtx
+16. um-code-sscript.dtx
+17. um-code-sym-commands.dtx
+18. um-code-ui.dtx
+19. um-code-usv.dtx
+20. um-code-variables.dtx
+21. unicode-math.dtx
+22. unicode-math.ins
+
+### TeX files (TDS)
+
+All files included in the `unicode-math/tex` directory.
+
+ 1. unicode-math-luatex.sty
+ 2. unicode-math-table.tex
+ 3. unicode-math-xetex.sty
+ 4. unicode-math.sty
+
+### Doc files (TDS)
+
+All files included in the `unicode-math/doc` directory.
+
+ 1. CHANGES.md
+ 2. MANIFEST.md
+ 3. README.md
+ 4. um-doc-legacyfontdimen.tex
+ 5. um-doc-main.tex
+ 6. um-doc-mathfontdimen.tex
+ 7. um-doc-nfsssummary.tex
+ 8. um-doc-stixextract.tex
+ 9. um-doc-style.tex
+10. unicode-math-code.ltx
+11. unicode-math-code.pdf
+12. unicode-math.ltx
+13. unicode-math.pdf
+14. unimath-example.ltx
+15. unimath-example.pdf
+16. unimath-symbols.ltx
+17. unimath-symbols.pdf
+
+
+## CTAN manifest
+
+The following group lists the files included in the CTAN package.
+
+### CTAN files
+
+ 1. CHANGES.md
+ 2. MANIFEST.md
+ 3. README.md
+ 4. um-code-alphabets.dtx
+ 5. um-code-amsmath.dtx
+ 6. um-code-api.dtx
+ 7. um-code-compat.dtx
+ 8. um-code-epilogue.dtx
+ 9. um-code-fontopt.dtx
+10. um-code-fontparam.dtx
+11. um-code-main.dtx
+12. um-code-mathmap.dtx
+13. um-code-mathtext.dtx
+14. um-code-msg.dtx
+15. um-code-opening.dtx
+16. um-code-pkgopt.dtx
+17. um-code-primes.dtx
+18. um-code-setchar.dtx
+19. um-code-sscript.dtx
+20. um-code-sym-commands.dtx
+21. um-code-ui.dtx
+22. um-code-usv.dtx
+23. um-code-variables.dtx
+24. um-doc-legacyfontdimen.tex
+25. um-doc-main.tex
+26. um-doc-mathfontdimen.tex
+27. um-doc-nfsssummary.tex
+28. um-doc-stixextract.tex
+29. um-doc-style.tex
+30. unicode-math-code.ltx
+31. unicode-math-code.pdf
+32. unicode-math-table.tex
+33. unicode-math.dtx
+34. unicode-math.ins
+35. unicode-math.ltx
+36. unicode-math.pdf
+37. unimath-example.ltx
+38. unimath-example.pdf
+39. unimath-symbols.ltx
+40. unimath-symbols.pdf
diff --git a/macros/unicodetex/latex/unicode-math/README.md b/macros/unicodetex/latex/unicode-math/README.md
new file mode 100644
index 0000000000..12e0d1157a
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/README.md
@@ -0,0 +1,116 @@
+The UNICODE-MATH package
+========================
+
+This package provides an implementation of Unicode/OpenType mathematics for
+XeLaTeX and LuaLaTeX.
+
+While I am a little wary of encouraging people to use this package for
+production work, I understand that it has certain uses and am making it
+available for distribution. Your testing and feedback is essential to fill
+in the many gaps that I miss!
+
+Please be aware that this package is undergoing continued development and the
+interface and functionality should not be considered completely stable. But
+the more the package is used the more stable it will become. (Things are
+generally working now; it is only minutiae that may change in the future.)
+
+Unicode maths is currently supported by the following freely available fonts:
+
+ - [Latin Modern Math][LM] (Bogusław Jackowski, Janusz M. Nowacki)
+ - [TeX Gyre Bonum Math][BM] (B. Jackowski, P. Strzel­czyk and P. Pianowski)
+ - [TeX Gyre Pagella Math][PM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
+ - [TeX Gyre Schola Math][SCM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
+ - [TeX Gyre Termes Math][TM] (B. Jackowski, P. Strzelczyk and P. Pianowski)
+ - [DejaVu Math TeX Gyre][DEJA] (B. Jackowski, P. Strzelczyk and P. Pianowski)
+ - [Asana Math][AM] (Apostolos Syropolous),
+ - [STIX][STIX] (STIpub), and
+ - [XITS Math][XM] (Khaled Hosny),
+ - [Libertinus Math][LIB] (Philipp H. Poll and Khaled Hosny).
+ - [Fire Math][FIRA] (Xiangdong Zeng).
+
+These fonts are available under open source licences
+(the [GUST Font License][GFL] and [Open Font Licence][OFL]).
+
+The following fonts are proprietary with OpenType maths support:
+
+ - [Lucida Bright Math][LUCI] (Charles Bigelow and Kris Holmes)
+ - [Cambria Math][CM] (Microsoft),
+ - [Minion Math][MM] (Johannes Küster, typoma GmbH)
+
+I'm always looking for new fonts to test with, so please let me know of any
+new releases.
+
+[CM]: http://www.ascenderfonts.com/font/cambria-regular.aspx
+[LUCI]: http://tug.org/store/lucida/opentype.html
+[MM]: http://www.typoma.com/en/fonts.html
+[LM]: http://www.gust.org.pl/projects/e-foundry/lm-math
+[PM]: http://www.ctan.org/pkg/tex-gyre-math-pagella
+[BM]: http://www.ctan.org/pkg/tex-gyre-math-bonum
+[SCM]: http://www.ctan.org/pkg/tex-gyre-math-schola
+[TM]: http://www.ctan.org/pkg/tex-gyre-math-termes
+[DEJA]: https://ctan.org/pkg/tex-gyre-math-dejavu
+[AM]: http://www.ctan.org/pkg/asana-math
+[STIX]: http://www.stixfonts.org
+[XM]: http://github.com/khaledhosny/xits-math
+[LIB]: https://ctan.org/pkg/libertinus
+[GFL]: http://www.gust.org.pl/projects/projects/e-foundry/licenses/
+[OFL]: http://scripts.sil.org/OFL
+[FIRA]: https://github.com/firamath/firamath
+
+
+PACKAGE USAGE
+-------------
+
+Please see the PDF documentation for full details. A simple beginning is:
+
+```tex
+\usepackage{unicode-math}
+\setmathfont{texgyrepagella-math.otf}
+```
+
+Most LaTeX math should still work after this. (Let me know if it doesn't.)
+Furthermore, it will be in a different font.
+
+
+REQUIREMENTS
+------------
+
+As well as running XeTeX or LuaTeX, this package requires recent versions of the
+`lm-math`, `fontspec`, `expl3`, `xpackages`, and `lualatex-math` packages.
+
+
+THANKS
+------
+
+I write LaTeX code as a hobby and a passion, not as part of my day job.
+If you would like to say thanks, please consider a donation at: <https://www.patreon.com/wspr>
+
+
+DEVELOPMENT and MAINTENANCE
+---------------------------
+
+The current release version is available from CTAN:
+> <https://ctan.org/pkg/unicode-math>
+
+Latest developmental and archived historical versions are available from Github:
+> <http://github.com/wspr/unicode-math>
+
+Please file bug reports with minimal examples:
+> <http://github.com/wspr/unicode-math/issues>
+
+See `CHANGES.md` for the complete listing of change history.
+
+Further information on the details surrounding the development of the package
+can be found in the `CONTRIBUTING.md` file in the Github repository.
+
+
+LICENCE
+-------
+
+The unicode-math package may be modified and distributed under the terms and
+conditions of the [LaTeX Project Public License][LPPL], version 1.3c or
+greater.
+
+[LPPL]: http://www.latex-project.org/lppl/
+
+This work is maintained by Will Robertson and consists of the files listed in `MANIFEST.md`.
diff --git a/macros/unicodetex/latex/unicode-math/RELEASE_CHECKLIST.md b/macros/unicodetex/latex/unicode-math/RELEASE_CHECKLIST.md
new file mode 100644
index 0000000000..ab250200e0
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/RELEASE_CHECKLIST.md
@@ -0,0 +1,11 @@
+# UNICODE-MATH RELEASE CHECKLIST
+
+- [ ] Finish final changes on `working` branch
+- [ ] Ensure `CHANGES.md` is up-to-date with a new version number
+- [ ] `git push`
+- [ ] Check Travis build status
+- [ ] Update local distro fully with tlmgr
+- [ ] Run `build check` locally
+- [ ] Install prerelease versions of `fontspec` and `latex3` and re-check
+- [ ] `texlua autorelease.lua`
+- [ ] Check `latex3/contrib/testfiles/unicode-math001.lvt` and update if necessary
diff --git a/macros/unicodetex/latex/unicode-math/um-code-alphabets.dtx b/macros/unicodetex/latex/unicode-math/um-code-alphabets.dtx
new file mode 100644
index 0000000000..fd6dd322c8
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-alphabets.dtx
@@ -0,0 +1,934 @@
+%%^^A%% um-code-alphabets.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Definitions for setting up the "math symbol alphabets".
+
+% \section{Setting up alphabets}
+% \label{sec:setupalphabets}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \subsection{Upright: up}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {up} {num}
+ {
+ \@@_set_normal_numbers:nn {up} {#1}
+ \@@_set_mathalphabet_numbers:nnn {up} {up} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {up} {Latin}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_Latin:nn {up} {#1} }
+ {
+ \bool_if:NT \g_@@_upLatin_bool { \@@_set_normal_Latin:nn {up,it} {#1} }
+ }
+ \@@_set_mathalphabet_Latin:nnn {up} {up,it} {#1}
+ \@@_set_mathalphabet_Latin:nnn {literal} {up} {up}
+ \@@_set_mathalphabet_Latin:nnn {literal} {it} {it}
+ }
+
+\@@_new_alphabet_config:nnn {up} {latin}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_latin:nn {up} {#1} }
+ {
+ \bool_if:NT \g_@@_uplatin_bool
+ {
+ \@@_set_normal_latin:nn {up,it} {#1}
+ \@@_set_normal_char:nnn {h} {up,it} {#1}
+ \@@_set_normal_char:nnn {dotlessi} {up,it} {#1}
+ \@@_set_normal_char:nnn {dotlessj} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {up} {up,it}{#1}
+ \@@_set_mathalphabet_latin:nnn {literal} {up} {up}
+ \@@_set_mathalphabet_latin:nnn {literal} {it} {it}
+ }
+
+\@@_new_alphabet_config:nnn {up} {Greek}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_Greek:nn {up}{#1} }
+ {
+ \bool_if:NT \g_@@_upGreek_bool { \@@_set_normal_Greek:nn {up,it}{#1} }
+ }
+ \@@_set_mathalphabet_Greek:nnn {up} {up,it}{#1}
+ \@@_set_mathalphabet_Greek:nnn {literal} {up} {up}
+ \@@_set_mathalphabet_Greek:nnn {literal} {it} {it}
+ }
+
+\@@_new_alphabet_config:nnn {up} {greek}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_greek:nn {up} {#1} }
+ {
+ \bool_if:NT \g_@@_upgreek_bool
+ {
+ \@@_set_normal_greek:nn {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_greek:nnn {up} {up,it} {#1}
+ \@@_set_mathalphabet_greek:nnn {literal} {up} {up}
+ \@@_set_mathalphabet_greek:nnn {literal} {it} {it}
+ }
+
+\@@_new_alphabet_config:nnn {up} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{up}{up}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{up,it}{up}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{up}{up}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{up,it}{up}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {up} {partial} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {up} {Nabla} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {up} {dotlessi} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {up} {dotlessj} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Italic: it}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {it} {Latin}
+ {
+ \bool_if:NTF \g_@@_literal_bool { \@@_set_normal_Latin:nn {it} {#1} }
+ {
+ \bool_if:NF \g_@@_upLatin_bool { \@@_set_normal_Latin:nn {up,it} {#1} }
+ }
+ \@@_set_mathalphabet_Latin:nnn {it} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {it} {latin}
+ {
+ \bool_if:NTF \g_@@_literal_bool
+ {
+ \@@_set_normal_latin:nn {it}{#1}
+ \@@_set_normal_char:nnn {h}{it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_uplatin_bool
+ {
+ \@@_set_normal_latin:nn {up,it} {#1}
+ \@@_set_normal_char:nnn {h} {up,it} {#1}
+ \@@_set_normal_char:nnn {dotlessi} {up,it} {#1}
+ \@@_set_normal_char:nnn {dotlessj} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {it} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {it} {dotlessi} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {it} {dotlessj} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {it} {Greek}
+ {
+ \bool_if:NTF \g_@@_literal_bool
+ {
+ \@@_set_normal_Greek:nn {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_upGreek_bool { \@@_set_normal_Greek:nn {up,it} {#1} }
+ }
+ \@@_set_mathalphabet_Greek:nnn {it} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {it} {greek}
+ {
+ \bool_if:NTF \g_@@_literal_bool
+ {
+ \@@_set_normal_greek:nn {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_upgreek_bool { \@@_set_normal_greek:nn {it,up} {#1} }
+ }
+ \@@_set_mathalphabet_greek:nnn {it} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {it} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla} {it} {it}
+ }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla} {up,it} {it}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial} {it} {it}
+ }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial} {up,it} {it}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {it} {partial} {up,it}{#1}
+ \@@_set_mathalphabet_pos:nnnn {it} {Nabla} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Blackboard or double-struck: bb and bbit}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bb} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {bb} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bb} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {bb} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {C} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {H} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {N} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {P} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {Q} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {R} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {Z} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bb} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {bb} {up} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bb} {misc}
+ {
+ \@@_set_mathalphabet_pos:nnnn {bb} {Pi} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {pi} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {Gamma} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {gamma} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bb} {summation} {up} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bbit} {misc}
+ {
+ \@@_set_mathalphabet_pos:nnnn {bbit} {D} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bbit} {d} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bbit} {e} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bbit} {i} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bbit} {j} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Script and caligraphic: scr and cal}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {scr} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {scr} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {B} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {E} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {F} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {H} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {I} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {L} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {M} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {R} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {scr} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {scr} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {e} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {g} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {scr} {o} {up,it} {#1}
+ }
+% \end{macrocode}
+% These are by default synonyms for the above, but with the STIX
+% fonts we want to use the alternate alphabet.
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {cal} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {cal} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {B} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {E} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {F} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {H} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {I} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {L} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {M} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {cal} {R} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Fractur or fraktur or blackletter: frak}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {frak} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {frak} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {C} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {H} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {I} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {R} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {frak} {Z} {up,it} {#1}
+ }
+\@@_new_alphabet_config:nnn {frak} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {frak} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Sans serif upright: sfup}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {sfup} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {sf} {up} {#1}
+ \@@_set_mathalphabet_numbers:nnn {sfup} {up} {#1}
+ }
+\@@_new_alphabet_config:nnn {sfup} {Latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {sfup} {#1}
+ \@@_set_mathalphabet_Latin:nnn {sf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_Latin:nn {sfup,sfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {sf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_Latin:nnn {sfup} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {sfup} {latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_latin:nn {sfup} {#1}
+ \@@_set_mathalphabet_latin:nnn {sf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_latin:nn {sfup,sfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {sf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {sfup} {up,it} {#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Sans serif italic: sfit}
+%
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {sfit} {Latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {sfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {sf} {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_Latin:nn {sfup,sfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {sf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_Latin:nnn {sfit} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {sfit} {latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_latin:nn {sfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {sf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_latin:nn {sfup,sfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {sf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {sfit} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Typewriter or monospaced: tt}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {tt} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {tt} {up}{#1}
+ }
+\@@_new_alphabet_config:nnn {tt} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {tt} {up,it}{#1}
+ }
+\@@_new_alphabet_config:nnn {tt} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {tt} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Bold Italic: bfit}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfit} {Latin}
+ {
+ \bool_if:NF \g_@@_bfupLatin_bool
+ {
+ \@@_set_normal_Latin:nn {bfup,bfit} {#1}
+ }
+ \@@_set_mathalphabet_Latin:nnn {bfit} {up,it}{#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {bfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_bfupLatin_bool
+ {
+ \@@_set_normal_Latin:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bf} {up,it}{#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfit} {latin}
+ {
+ \bool_if:NF \g_@@_bfuplatin_bool
+ {
+ \@@_set_normal_latin:nn {bfup,bfit} {#1}
+ }
+ \@@_set_mathalphabet_latin:nnn {bfit} {up,it}{#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_latin:nn {bfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_bfuplatin_bool
+ {
+ \@@_set_normal_latin:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bf} {up,it}{#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfit} {Greek}
+ {
+ \@@_set_mathalphabet_Greek:nnn {bfit} {up,it}{#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_Greek:nn {bfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_bfupGreek_bool
+ {
+ \@@_set_normal_Greek:nn {bfup,bfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bf} {up,it}{#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfit} {greek}
+ {
+ \@@_set_mathalphabet_greek:nnn {bfit} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_greek:nn {bfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bf} {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_bfupgreek_bool
+ {
+ \@@_set_normal_greek:nn {bfit,bfup} {#1}
+ \@@_set_mathalphabet_greek:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfit} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ { \@@_set_normal_char:nnn {Nabla} {bfit} {#1} }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ { \@@_set_normal_char:nnn {Nabla} {bfup,bfit} {#1} }
+ }
+
+ \bool_if:NTF \g_@@_literal_partial_bool
+ { \@@_set_normal_char:nnn {partial} {bfit} {#1} }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ { \@@_set_normal_char:nnn {partial} {bfup,bfit} {#1} }
+ }
+
+ \@@_set_mathalphabet_pos:nnnn {bfit} {partial} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bfit} {Nabla} {up,it} {#1}
+
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {partial} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {partial} {up,it}{#1}
+ }
+ }
+
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {Nabla} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {Nabla} {up,it}{#1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Bold Upright: bfup}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfup} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {bf} {up} {#1}
+ \@@_set_mathalphabet_numbers:nnn {bfup} {up} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {Latin}
+ {
+ \bool_if:NT \g_@@_bfupLatin_bool
+ {
+ \@@_set_normal_Latin:nn {bfup,bfit} {#1}
+ }
+ \@@_set_mathalphabet_Latin:nnn {bfup} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {bfup} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_bfupLatin_bool
+ {
+ \@@_set_normal_Latin:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {latin}
+ {
+ \bool_if:NT \g_@@_bfuplatin_bool
+ {
+ \@@_set_normal_latin:nn {bfup,bfit} {#1}
+ }
+ \@@_set_mathalphabet_latin:nnn {bfup} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_latin:nn {bfup} {#1}
+ \@@_set_mathalphabet_latin:nnn {bf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_bfuplatin_bool
+ {
+ \@@_set_normal_latin:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {Greek}
+ {
+ \@@_set_mathalphabet_Greek:nnn {bfup} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_Greek:nn {bfup} {#1}
+ \@@_set_mathalphabet_Greek:nnn {bf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_bfupGreek_bool
+ {
+ \@@_set_normal_Greek:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_Greek:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {greek}
+ {
+ \@@_set_mathalphabet_greek:nnn {bfup} {up,it} {#1}
+ \bool_if:NTF \g_@@_bfliteral_bool
+ {
+ \@@_set_normal_greek:nn {bfup} {#1}
+ \@@_set_mathalphabet_greek:nnn {bf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_bfupgreek_bool
+ {
+ \@@_set_normal_greek:nn {bfup,bfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bf} {up,it} {#1}
+ }
+ }
+ }
+
+\@@_new_alphabet_config:nnn {bfup} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla} {bfup} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla} {bfup,bfit} {#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial} {bfup} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial} {bfup,bfit} {#1}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {bfup} {partial} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bfup} {Nabla} {up,it} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bfup} {digamma} {up} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bfup} {Digamma} {up} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bf} {digamma} {up} {#1}
+ \@@_set_mathalphabet_pos:nnnn {bf} {Digamma} {up} {#1}
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {partial} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {partial} {up,it} {#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {Nabla} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bf} {Nabla} {up,it} {#1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{Bold fractur or fraktur or blackletter: bffrak}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bffrak} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {bffrak} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bffrak} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {bffrak} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Bold script or calligraphic: bfscr}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfscr} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {bfscr} {up,it}{#1}
+ }
+\@@_new_alphabet_config:nnn {bfscr} {latin}
+ {
+ \@@_set_mathalphabet_latin:nnn {bfscr} {up,it}{#1}
+ }
+\@@_new_alphabet_config:nnn {bfcal} {Latin}
+ {
+ \@@_set_mathalphabet_Latin:nnn {bfcal} {up,it}{#1}
+ }
+% \end{macrocode}
+%
+% \subsection{Bold upright sans serif: bfsfup}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfsfup} {num}
+ {
+ \@@_set_mathalphabet_numbers:nnn {bfsf} {up}{#1}
+ \@@_set_mathalphabet_numbers:nnn {bfsfup} {up}{#1}
+ }
+\@@_new_alphabet_config:nnn {bfsfup} {Latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {bfsfup} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bfsf} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_Latin:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_Latin:nnn {bfsfup} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfup} {latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_latin:nn {bfsfup} {#1}
+ \@@_set_mathalphabet_latin:nnn {bfsf} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_latin:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {bfsfup} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfup} {Greek}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Greek:nn {bfsfup}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bfsf} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_Greek:nn {bfsfup,bfsfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_Greek:nnn {bfsfup} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfup} {greek}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_greek:nn {bfsfup} {#1}
+ \@@_set_mathalphabet_greek:nnn {bfsf} {up} {#1}
+ }
+ {
+ \bool_if:NT \g_@@_upsans_bool
+ {
+ \@@_set_normal_greek:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bfsf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_greek:nnn {bfsfup} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfup} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{bfsfup}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{bfsfup,bfsfit}{#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{bfsfup}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{bfsfup,bfsfit}{#1}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {bfsfup} {partial} {up,it}{#1}
+ \@@_set_mathalphabet_pos:nnnn {bfsfup} {Nabla} {up,it}{#1}
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {partial} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_uppartial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {partial} {up,it}{#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {Nabla} {up}{#1}
+ }
+ {
+ \bool_if:NT \g_@@_upNabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {Nabla} {up,it}{#1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Bold italic sans serif: bfsfit}
+% \begin{macrocode}
+\@@_new_alphabet_config:nnn {bfsfit} {Latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Latin:nn {bfsfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bfsf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_Latin:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_Latin:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_Latin:nnn {bfsfit} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfit} {latin}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_latin:nn {bfsfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bfsf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_latin:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_latin:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_latin:nnn {bfsfit} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfit} {Greek}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_Greek:nn {bfsfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bfsf} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_Greek:nn {bfsfup,bfsfit}{#1}
+ \@@_set_mathalphabet_Greek:nnn {bfsf} {up,it}{#1}
+ }
+ }
+ \@@_set_mathalphabet_Greek:nnn {bfsfit} {up,it}{#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfit} {greek}
+ {
+ \bool_if:NTF \g_@@_sfliteral_bool
+ {
+ \@@_set_normal_greek:nn {bfsfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bfsf} {it} {#1}
+ }
+ {
+ \bool_if:NF \g_@@_upsans_bool
+ {
+ \@@_set_normal_greek:nn {bfsfup,bfsfit} {#1}
+ \@@_set_mathalphabet_greek:nnn {bfsf} {up,it} {#1}
+ }
+ }
+ \@@_set_mathalphabet_greek:nnn {bfsfit} {up,it} {#1}
+ }
+
+\@@_new_alphabet_config:nnn {bfsfit} {misc}
+ {
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{bfsfit}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ {
+ \@@_set_normal_char:nnn {Nabla}{bfsfup,bfsfit}{#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{bfsfit}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ {
+ \@@_set_normal_char:nnn {partial}{bfsfup,bfsfit}{#1}
+ }
+ }
+ \@@_set_mathalphabet_pos:nnnn {bfsfit} {partial} {up,it}{#1}
+ \@@_set_mathalphabet_pos:nnnn {bfsfit} {Nabla} {up,it}{#1}
+ \bool_if:NTF \g_@@_literal_partial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {partial} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_uppartial_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {partial} {up,it}{#1}
+ }
+ }
+ \bool_if:NTF \g_@@_literal_Nabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {Nabla} {it}{#1}
+ }
+ {
+ \bool_if:NF \g_@@_upNabla_bool
+ {
+ \@@_set_mathalphabet_pos:nnnn {bfsf} {Nabla} {up,it}{#1}
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-amsmath.dtx b/macros/unicodetex/latex/unicode-math/um-code-amsmath.dtx
new file mode 100644
index 0000000000..ee1f0642bc
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-amsmath.dtx
@@ -0,0 +1,173 @@
+%%^^A%% um-code-amsmath.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Compatibility with amsmath.
+
+% \section{Compatibility with \pkg{amsmath}}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Since the mathcode of |`\-| is greater than eight bits, this piece of |\AtBeginDocument| code from \pkg{amsmath} dies if we try and set the maths font in the preamble:
+% \begin{macrocode}
+ \tl_remove_once:Nn \@begindocumenthook
+ {
+ \mathchardef\std@minus\mathcode`\-\relax
+ \mathchardef\std@equal\mathcode`\=\relax
+ }
+ \AtBeginDocument
+ {
+ \Umathcharnumdef\std@minus\Umathcodenum`-
+ \Umathcharnumdef\std@equal\Umathcodenum`=
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \cs_set:Npn \@cdots {\mathinner{\unicodecdots}}
+ \cs_set_eq:NN \dotsb@ \cdots
+% \end{macrocode}
+% This isn't as clever as the \pkg{amsmath} definition but I think it works:
+% \begin{macrocode}
+%<*XE>
+ \def \resetMathstrut@
+ {%
+ \setbox\z@\hbox{$($}%)
+ \ht\Mathstrutbox@\ht\z@ \dp\Mathstrutbox@\dp\z@
+ }
+% \end{macrocode}
+% The |subarray| environment uses inappropriate font dimensions.
+% \begin{macrocode}
+ \cs_set:Npn \subarray #1
+ {
+ \vcenter
+ \c_group_begin_token
+ \Let@
+ \restore@math@cr
+ \default@tag
+ \skip_set:Nn \baselineskip
+ {
+ \@@_stack_num_up:N \scriptstyle
+ + \@@_stack_denom_down:N \scriptstyle
+ }
+ \lineskip \@@_stack_vgap:N \scriptstyle
+ \lineskiplimit \lineskip
+ \ialign
+ \c_group_begin_token
+ \token_if_eq_meaning:NNT c #1 { \hfil }
+ \c_math_toggle_token
+ \m@th
+ \scriptstyle
+ \c_parameter_token \c_parameter_token
+ \c_math_toggle_token
+ \hfil
+ \crcr
+ }
+%</XE>
+% \end{macrocode}
+% The roots need a complete rework.
+% \begin{macrocode}
+%<*LU>
+ \cs_set_nopar:Npn \plainroot@ #1 \of #2
+ {
+ \bool_if:nTF
+ {
+ \@@_int_if_zero_p:n \uproot@ && \@@_int_if_zero_p:n \leftroot@
+ }
+ {
+ \Uroot \c_@@_radical_sqrt_tl { #1 } { #2 }
+ }
+ {
+ \hbox_set:Nn \rootbox
+ {
+ \c_math_toggle_token \m@th
+ \scriptscriptstyle { #1 }
+ \c_math_toggle_token
+ }
+ \mathchoice
+ { \r@@@@t \displaystyle { #2 } }
+ { \r@@@@t \textstyle { #2 } }
+ { \r@@@@t \scriptstyle { #2 } }
+ { \r@@@@t \scriptscriptstyle { #2 } }
+ }
+ \c_group_end_token
+ }
+%</LU>
+% \end{macrocode}
+%
+% \begin{macrocode}
+ \cs_set_nopar:Npn \r@@@@t #1 #2
+%<*LU>
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \c_math_toggle_token \m@th
+ #1 \mskip \uproot@ mu
+ \c_math_toggle_token
+ }
+ \Uroot \c_@@_radical_sqrt_tl
+ {
+ \box_move_up:nn { \box_wd:N \l_tmpa_box }
+ {
+ \hbox:n
+ {
+ \c_math_toggle_token \m@th
+ \mkern -\leftroot@ mu
+ \box_use:N \rootbox
+ \mkern \leftroot@ mu
+ \c_math_toggle_token
+ }
+ }
+ }
+ { #2 }
+ }
+%</LU>
+%<*XE>
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \c_math_toggle_token \m@th
+ #1 \sqrtsign { #2 }
+ \c_math_toggle_token
+ }
+ \hbox_set:Nn \l_tmpb_box
+ {
+ \c_math_toggle_token \m@th
+ #1 \mskip \uproot@ mu
+ \c_math_toggle_token
+ }
+ \mkern -\leftroot@ mu
+ \@@_mathstyle_scale:NnnN #1 { \kern } { \fontdimen 63 \g_@@_sqrt_font_cmd_tl } \g_@@_sqrt_font_cmd_tl
+ \box_move_up:nn
+ {
+ \box_wd:N \l_tmpb_box + (\box_ht:N \l_tmpa_box - \box_dp:N \l_tmpa_box)
+ * \number \fontdimen 65 \g_@@_sqrt_font_cmd_tl / 100
+ }
+ { \box_use:N \rootbox }
+ \@@_mathstyle_scale:NnnN #1 { \kern } { \fontdimen 64 \g_@@_sqrt_font_cmd_tl } \g_@@_sqrt_font_cmd_tl
+ \mkern \leftroot@ mu
+ \box_use_drop:N \l_tmpa_box
+ }
+%</XE>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-api.dtx b/macros/unicodetex/latex/unicode-math/um-code-api.dtx
new file mode 100644
index 0000000000..69a6f5a031
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-api.dtx
@@ -0,0 +1,43 @@
+%%^^A%% um-code-api.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% The (underdeveloped) API to interface with the package internals.
+
+% \section{Programmers' interface}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \begin{macro}{\unimath_get_mathstyle:}
+% This command expands to the currently math style.
+% \begin{macrocode}
+\cs_new:Nn \unimath_get_mathstyle:
+ {
+ \tl_use:N \l_@@_mathstyle_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-compat.dtx b/macros/unicodetex/latex/unicode-math/um-code-compat.dtx
new file mode 100644
index 0000000000..72ce5186da
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-compat.dtx
@@ -0,0 +1,157 @@
+%%^^A%% um-code-compat.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Compatibility with 3rd party packages.
+
+% \section{Compatibility}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \section{Patching/augmenting 3rd-party packages}
+%
+% \subsection{\pkg{url}}
+% Here we need to get \pkg{url} in a state such that
+% when it switches to math mode and enters \ascii\ characters, the maths
+% setup (i.e., \pkg{unicode-math}) doesn't remap the symbols into Plane 1.
+% Which is what \cs{symliteral} is intended to do.
+% This is the same as writing, e.g., |\def\UrlFont{\ttfamily\@@_switch_to:n{literal}}|
+% but activates automatically so documents that might change the \cs{url}
+% font through the standard interface still work correctly.
+% \begin{macrocode}
+\@@_after_package:nNn {url} \@@_patch_url:
+ {
+ \tl_put_left:Nn \Url@FormatString { \@@_switch_to:n {literal} }
+ \tl_put_right:Nn \UrlSpecials
+ {
+ \do \` { \mathchar`\` }
+ \do \' { \mathchar`\' }
+ \do \$ { \mathchar`\$ }
+ \do \& { \mathchar`\& }
+ }
+ }
+% \end{macrocode}
+%
+%
+% \subsection{\pkg{mathtools}}
+%
+% \pkg{mathtools}’s |\cramped| command and others that make use of its internal version use an incorrect font dimension.
+%
+% The \XeTeX\ version is pretty similar to the legacy version, only using the correct font dimensions.
+% Note we used `\verb|\XeTeXradical|' with the family 255 to be almost sure
+% that the radical rule width is not set. Former use of `\verb|\newfam|' had an
+% upsetting effect on legacy math alphabets.
+% \begin{macrocode}
+%<*XE>
+\@@_after_package:nNn { mathtools } \@@_patch_mathtools_A:
+ {
+ \cs_set_nopar:Npn \MT_cramped_internal:Nn ##1 ##2
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \color@setgroup \c_math_toggle_token \m@th
+ ##1
+ \dim_zero:N \nulldelimiterspace
+ \XeTeXradical 255 ~ 0 ~ { ##2 }
+ \c_math_toggle_token \color@endgroup
+ }
+ \box_set_ht:Nn \l_tmpa_box
+ {
+ \box_ht:N \l_tmpa_box - \@@_radical_vgap:N ##1
+ }
+ \box_use_drop:N \l_tmpa_box
+ }
+ }
+%</XE>
+% \end{macrocode}
+%
+% \begin{macro}{\overbracket}
+% \begin{macro}{\underbracket}
+% \pkg{mathtools}’s |\overbracket| and |\underbracket| take optional
+% arguments and are defined in terms of rules, so we keep them, and rename
+% ours to |\Uoverbracket| and |\Uunderbracket|.
+%
+% Original definition used the height of |\braceld| which is not available
+% with Unicode fonts, so we are hard coding the $5/18$ex suggested by
+% \pkg{mathtools}’s documentation.
+% \begin{macrocode}
+\@@_after_package:nNn { mathtools } \@@_patch_mathtools_B:
+ {
+ \cs_set_eq:NN \MToverbracket \overbracket
+ \cs_set_eq:NN \MTunderbracket \underbracket
+
+ \AtBeginDocument
+ {
+ \msg_warning:nn { unicode-math } { mathtools-overbracket }
+
+ \cs_set:Npn \downbracketfill ##1 ##2
+ {
+ \tl_set:Nn \l_MT_bracketheight_fdim {.27ex}
+ \downbracketend {##1} {##2}
+ \leaders \vrule \@height ##1 \@depth \z@ \hfill
+ \downbracketend {##1} {##2}
+ }
+
+ \cs_set:Npn \upbracketfill ##1 ##2
+ {
+ \tl_set:Nn \l_MT_bracketheight_fdim {.27ex}
+ \upbracketend {##1} {##2}
+ \leaders \vrule \@height \z@ \@depth ##1 \hfill
+ \upbracketend {##1} {##2}
+ }
+
+ \cs_set_eq:NN \Uoverbracket \overbracket
+ \cs_set_eq:NN \Uunderbracket \underbracket
+ \cs_set_eq:NN \overbracket \MToverbracket
+ \cs_set_eq:NN \underbracket \MTunderbracket
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\dblcolon}
+% \begin{macro}{\coloneqq}
+% \begin{macro}{\Coloneqq}
+% \begin{macro}{\eqqcolon}
+% \pkg{mathtools} defines several commands as combinations of colons and
+% other characters, but with meanings incompatible to \pkg{unicode-math}.
+% Thus we issue a warning. Note \pkg{mathtools} uses
+% \cmd{\providecommand} \cmd{\AtBeginDocument}.
+% \begin{macrocode}
+\@@_after_package:nNn { mathtools } \@@_patch_mathtools_C:
+ {
+ \msg_warning:nn { unicode-math } { mathtools-colon }
+ \DeclareDocumentCommand \dblcolon { } { \Colon }
+ \DeclareDocumentCommand \coloneqq { } { \coloneq }
+ \DeclareDocumentCommand \Coloneqq { } { \Coloneq }
+ \DeclareDocumentCommand \eqqcolon { } { \eqcolon }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-epilogue.dtx b/macros/unicodetex/latex/unicode-math/um-code-epilogue.dtx
new file mode 100644
index 0000000000..9c10ee0ddf
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-epilogue.dtx
@@ -0,0 +1,420 @@
+%%^^A%% um-code-epilogue.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Assorted definitions to close up.
+
+% \section{Epilogue}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% Lots of little things to tidy up.
+%
+% \subsection{Resolving Greek symbol name control sequences}
+%
+% \begin{macro}{\@@_resolve_greek:}
+% This macro defines \cmd\Alpha\dots\cmd\omega\ as their corresponding
+% Unicode (mathematical italic) character. Remember that the mapping
+% to upright or italic happens with the mathcode definitions, whereas these macros
+% just stand for the literal Unicode characters.
+% \begin{macrocode}
+\AtBeginDocument { \debug_suspend: \@@_resolve_greek: \debug_resume: }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Npn \@@_resolve_greek:
+ {
+ \clist_map_inline:nn
+ {
+ Alpha,Beta,Gamma,Delta,Epsilon,Zeta,Eta,Theta,Iota,Kappa,Lambda,
+ alpha,beta,gamma,delta,epsilon,zeta,eta,theta,iota,kappa,lambda,
+ Mu,Nu,Xi,Omicron,Pi,Rho,Sigma,Tau,Upsilon,Phi,Chi,Psi,Omega,
+ mu,nu,xi,omicron,pi,rho,sigma,tau,upsilon,phi,chi,psi,omega,
+ varTheta,varsigma,vartheta,varkappa,varrho,varpi,varepsilon,varphi
+ }
+ {
+ \tl_set:cx {##1} { \exp_not:c { mit ##1 } }
+ \tl_set:cx {up ##1} { \exp_not:N \symup \exp_not:c { ##1 } }
+ \tl_set:cx {it ##1} { \exp_not:N \symit \exp_not:c { ##1 } }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsection{Unicode radicals}
+%
+% Make sure \cs{Uroot} is defined in the case where the \LaTeX{}
+% kernel doesn't make it available with its native name.
+%
+% \begin{macro}{\@@_redefine_radical:}
+% \begin{macrocode}
+\AtBeginDocument{ \@ifpackageloaded { amsmath } { } { \@@_redefine_radical: } }
+% \end{macrocode}
+%
+% \begin{macro}{\r@@t}
+% \darg{A mathstyle (for \cmd\mathpalette)}
+% \darg{Leading superscript for the sqrt sign}
+% A re-implementation of \LaTeX's hard-coded n-root sign using the appropriate \cmd\fontdimen s.
+% \begin{macrocode}
+%<*XE>
+\cs_new:Nn \@@_redefine_radical:
+ {
+ \cs_set_nopar:Npn \r@@@@t ##1 ##2
+ {
+ \hbox_set:Nn \l_tmpa_box
+ {
+ \c_math_toggle_token \m@th
+ ##1 \sqrtsign { ##2 }
+ \c_math_toggle_token
+ }
+ \@@_mathstyle_scale:NnnN ##1 { \kern } { \fontdimen 63 \g_@@_sqrt_font_cmd_tl } \g_@@_sqrt_font_cmd_tl
+ \box_move_up:nn
+ {
+ (\box_ht:N \l_tmpa_box - \box_dp:N \l_tmpa_box) * \number \fontdimen 65 \g_@@_sqrt_font_cmd_tl / 100
+ }
+ { \box_use:N \rootbox }
+ \@@_mathstyle_scale:NnnN ##1 { \kern } { \fontdimen 64 \g_@@_sqrt_font_cmd_tl } \g_@@_sqrt_font_cmd_tl
+ \box_use_drop:N \l_tmpa_box
+ }
+ }
+%</XE>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\root}
+% Redefine this macro for \LuaTeX, which provides us a nice primitive to use.
+% \begin{macrocode}
+%<*LU>
+\cs_new:Nn \@@_redefine_radical:
+ {
+ \cs_set:Npn \root ##1 \of ##2
+ {
+ \Uroot \c_@@_radical_sqrt_tl { ##1 } { ##2 }
+ }
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsubsection{Active fractions}
+%
+% Active fractions can be set up independently of any maths font definition;
+% all it requires is a mapping from the Unicode input chars to the relevant
+% \LaTeX\ fraction declaration.
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_which_frac:nn
+ {
+ \bool_if:NTF \l_@@_smallfrac_bool {\tfrac} {\frac} {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_setup_active_frac:
+ {
+ \@@_mathactive_remap:nn {"2189} { \@@_which_frac:nn {0} {3} }
+ \@@_mathactive_remap:nn {"2152} { \@@_which_frac:nn {1} {10} }
+ \@@_mathactive_remap:nn {"2151} { \@@_which_frac:nn {1} {9} }
+ \@@_mathactive_remap:nn {"215B} { \@@_which_frac:nn {1} {8} }
+ \@@_mathactive_remap:nn {"2150} { \@@_which_frac:nn {1} {7} }
+ \@@_mathactive_remap:nn {"2159} { \@@_which_frac:nn {1} {6} }
+ \@@_mathactive_remap:nn {"2155} { \@@_which_frac:nn {1} {5} }
+ \@@_mathactive_remap:nn {"00BC} { \@@_which_frac:nn {1} {4} }
+ \@@_mathactive_remap:nn {"2153} { \@@_which_frac:nn {1} {3} }
+ \@@_mathactive_remap:nn {"215C} { \@@_which_frac:nn {3} {8} }
+ \@@_mathactive_remap:nn {"2156} { \@@_which_frac:nn {2} {5} }
+ \@@_mathactive_remap:nn {"00BD} { \@@_which_frac:nn {1} {2} }
+ \@@_mathactive_remap:nn {"2157} { \@@_which_frac:nn {3} {5} }
+ \@@_mathactive_remap:nn {"215D} { \@@_which_frac:nn {5} {8} }
+ \@@_mathactive_remap:nn {"2154} { \@@_which_frac:nn {2} {3} }
+ \@@_mathactive_remap:nn {"00BE} { \@@_which_frac:nn {3} {4} }
+ \@@_mathactive_remap:nn {"2158} { \@@_which_frac:nn {4} {5} }
+ \@@_mathactive_remap:nn {"215A} { \@@_which_frac:nn {5} {6} }
+ \@@_mathactive_remap:nn {"215E} { \@@_which_frac:nn {7} {8} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtBeginDocument { \@@_setup_active_frac: }
+% \end{macrocode}
+%
+%
+% \subsection{Synonyms and all the rest}
+%
+% These are symbols with multiple names. Eventually to be taken care of
+% automatically by the maths characters database.
+% \begin{macrocode}
+\protected\def\to{\rightarrow}
+\protected\def\le{\leq}
+\protected\def\ge{\geq}
+\protected\def\neq{\ne}
+\protected\def\triangle{\mathord{\bigtriangleup}}
+\protected\def\bigcirc{\mdlgwhtcircle}
+\protected\def\circ{\vysmwhtcircle}
+\protected\def\bullet{\smblkcircle}
+\protected\def\mathyen{\yen}
+\protected\def\mathsterling{\sterling}
+\protected\def\diamond{\smwhtdiamond}
+\protected\def\emptyset{\varnothing}
+\protected\def\hbar{\hslash}
+\protected\def\land{\wedge}
+\protected\def\lor{\vee}
+\protected\def\owns{\ni}
+\protected\def\gets{\leftarrow}
+\protected\def\mathring{\ocirc}
+\protected\def\lnot{\neg}
+\protected\def\longdivision{\longdivisionsign}
+% \end{macrocode}
+% These are somewhat odd: (and their usual Unicode uprightness does not match their amssymb glyphs)
+% \begin{macrocode}
+\protected\def\backepsilon{\upbackepsilon}
+\protected\def\eth{\matheth}
+% \end{macrocode}
+% These are names that are `frozen' in HTML but have dumb names:
+% \begin{macrocode}
+\protected\def\dbkarow {\dbkarrow}
+\protected\def\drbkarow{\drbkarrow}
+\protected\def\hksearow{\hksearrow}
+\protected\def\hkswarow{\hkswarrow}
+% \end{macrocode}
+%
+% Due to the magic of OpenType math, big operators are automatically
+% enlarged when necessary. Since there isn't a separate unicode glyph for
+% `small integral', I'm not sure if there is a better way to do this:
+% \begin{macrocode}
+\protected\def\smallint{\mathop{\textstyle\int}\limits}
+% \end{macrocode}
+%
+% \begin{macro}{\underbar}
+% \begin{macrocode}
+\cs_set_eq:NN \latexe_underbar:n \underbar
+\renewcommand\underbar
+ {
+ \mode_if_math:TF \mathunderbar \latexe_underbar:n
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\colon}
+% Define \cs{colon} as a mathpunct `|:|'.
+% This is wrong: it should be \unichar{003A} {colon} instead!
+% We hope no-one will notice.
+% \begin{macrocode}
+\@ifpackageloaded{amsmath}
+ {
+ % define their own colon, perhaps I should just steal it. (It does look much better.)
+ }
+ {
+ \cs_set_protected:Npn \colon
+ {
+ \bool_if:NTF \g_@@_literal_colon_bool {:} { \mathpunct{:} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\digamma}
+% \begin{macro}{\Digamma}
+% I might end up just changing these in the table.
+% \begin{macrocode}
+\protected\def\digamma{\updigamma}
+\protected\def\Digamma{\upDigamma}
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Symbols}
+%
+% \begin{macrocode}
+\cs_set_protected:Npn \| {\Vert}
+% \end{macrocode}
+%
+% \cs{mathinner} items:
+% \begin{macrocode}
+\cs_set_protected:Npn \mathellipsis {\mathinner{\unicodeellipsis}}
+\cs_set_protected:Npn \cdots {\mathinner{\unicodecdots}}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set_eq:NN \@@_text_slash: \slash
+\cs_set_protected:Npn \slash
+ {
+ \mode_if_math:TF {\mathslash} {\@@_text_slash:}
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection{\cs{not}}
+% \label{sec:negations}
+%
+% The situation of \cs{not} symbol is currently messy, in Unicode it is defined
+% as a combining mark so naturally it should be treated as a math accent,
+% however \XeTeX\ does not correctly place it as it needs special
+% treatment compared to other accents.
+% Furthermore a math accent changes the
+% spacing of its nucleus, so \cs{not=} will be spaced as an ordinary not
+% relational symbol, which is undesired.
+%
+% Here modify \cs{not} to a macro that tries to use predefined negated symbols,
+% which would give better results in most cases, until there is more robust
+% solution in the engines.
+%
+% This code is based on an answer to a TeX -- Stack Exchange question by Enrico
+% Gregorio\footnote{\url{http://tex.stackexchange.com/a/47260/729}}.
+%
+% \begin{macro}{\not}
+% \begin{macrocode}
+\DeclareDocumentCommand \not {m}
+ {
+ \tl_set:Nx \l_@@_not_token_name_tl { \cs_to_str:N #1 }
+ \tl_if_empty:NT \l_@@_not_token_name_tl
+ {
+ \tl_set:Nx \l_@@_not_token_name_tl { \token_to_str:N #1 }
+ }
+ \cs_if_exist:cTF { not \l_@@_not_token_name_tl }
+ {
+ \use:c { not \l_@@_not_token_name_tl }
+ }
+ {
+ \cs_if_exist:cTF { n \l_@@_not_token_name_tl }
+ {
+ \use:c { n \l_@@_not_token_name_tl }
+ }
+ {
+ \tl_if_eq:nnTF {#1} {$} { \notaccent{} } { \notaccent } #1
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\NewNegationCommand}
+% \begin{macro}{\RenewNegationCommand}
+% \begin{macrocode}
+\DeclareDocumentCommand \NewNegationCommand {mm}
+ {
+ \@@_set_negation_command:Nnn \cs_new_protected:cpn {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\DeclareDocumentCommand \RenewNegationCommand {mm}
+ {
+ \@@_set_negation_command:Nnn \cs_set_protected:cpn {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Nn \@@_set_negation_command:Nnn
+ {
+ \tl_set:Nx \l_@@_not_token_name_tl { \cs_to_str:N #2 }
+ \tl_if_empty:NT \l_@@_not_token_name_tl
+ {
+ \tl_set:Nx \l_@@_not_token_name_tl { \token_to_str:N #2 }
+ }
+ #1 { not \l_@@_not_token_name_tl } { #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\NewNegationCommand { = } { \neq }
+\NewNegationCommand { < } { \nless }
+\NewNegationCommand { > } { \ngtr }
+\NewNegationCommand { \gets } { \nleftarrow }
+\NewNegationCommand { \simeq } { \nsime }
+\NewNegationCommand { \equal } { \ne }
+\NewNegationCommand { \le } { \nleq }
+\NewNegationCommand { \ge } { \ngeq }
+\NewNegationCommand { \greater } { \ngtr }
+\NewNegationCommand { \forksnot } { \forks }
+% \end{macrocode}
+%
+%
+% \subsubsection{Full-width remapping}
+%
+% While this could be done with the full mathcode remapping machinery used
+% for the other purposes, it would be fairly redundant with plain ASCII.
+% Worse, this would slow down what is already an inefficient part of \pkg{unicode-math}.
+%
+% Instead we use mathactive to do a plain old mapping from full-width to ASCII directly.
+%
+% Until I get requests for it, I've not included symbols or punctuation here.
+%
+% \paragraph{Numbers}
+%
+% \begin{macrocode}
+\int_step_inline:nnnn {0} {1} {9}
+ {
+ \@@_mathactive_remap:nn {"FF10+#1} {\char\int_eval:n{`\0+#1}}
+ }
+% \end{macrocode}
+%
+% \paragraph{Letters}
+%
+% \begin{macrocode}
+\int_step_inline:nnnn {0} {1} {26}
+ {
+ \@@_mathactive_remap:nn {"FF21+#1} {\char\int_eval:n{`\A+#1}}
+ \@@_mathactive_remap:nn {"FF41+#1} {\char\int_eval:n{`\a+#1}}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Legacy characters}
+%
+% \begin{macro}{\@@_undeclare_symbol:N}
+% \begin{macrocode}
+\cs_new:Nn \@@_undeclare_symbol:N
+ {
+ \cs_set_protected:Npn #1
+ { \@@_error:nx {legacy-char-not-supported} { \token_to_str:N #1 } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% If you have better ideas about what to do here, please mention.
+% \begin{macrocode}
+\@@_undeclare_symbol:N \arrowvert
+\@@_undeclare_symbol:N \Arrowvert
+\@@_undeclare_symbol:N \bracevert
+% \end{macrocode}
+%
+% \section{A secret hook}
+% This will be executed after most if not all of the standard unicode-math setup.
+% \begin{macrocode}
+\AtBeginDocument{\g_@@_secret_hook_tl}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \section*{Fin}
+%
+% The official end of the package:
+% \begin{macrocode}
+%<package>\endinput
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-fontopt.dtx b/macros/unicodetex/latex/unicode-math/um-code-fontopt.dtx
new file mode 100644
index 0000000000..acd1117e34
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-fontopt.dtx
@@ -0,0 +1,326 @@
+%%^^A%% um-code-fontopt.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Keyval for `\setmathfont`
+
+% \section{Font loading options}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{Math version}
+% \begin{macrocode}
+\keys_define:nn {unicode-math}
+ {
+ version .code:n =
+ {
+ \tl_set:Nn \l_@@_mversion_tl {#1}
+ \DeclareMathVersion {\l_@@_mversion_tl}
+ }
+ }
+% \end{macrocode}
+%
+% \subsection{Script and scriptscript font options}
+% \begin{macrocode}
+\keys_define:nn {unicode-math}
+ {
+ script-features .tl_set:N = \l_@@_script_features_tl ,
+ sscript-features .tl_set:N = \l_@@_sscript_features_tl ,
+ script-font .tl_set:N = \l_@@_script_font_tl ,
+ sscript-font .tl_set:N = \l_@@_sscript_font_tl ,
+ }
+% \end{macrocode}
+%
+% \subsection{Range processing}
+% \seclabel{rangeproc}
+%
+% Locally redefined all math symbol commands to their slot number prefixed by a quark.
+% Similary for the math classes.
+% \begin{macrocode}
+\keys_define:nn {unicode-math}
+ {
+ range .code:n =
+ {
+ \bool_if:NF \g_@@_main_font_defined_bool { \@@_error:n {no-main-font} }
+ \bool_gset_false:N \g_@@_init_bool
+ \@@_range_init:
+ \group_begin:
+ \seq_map_inline:Nn \g_@@_mathclasses_seq
+ {
+ \cs_set:Npn ##1 { \use_none:n \q_unicode_math \exp_not:N ##1 }
+ }
+ \cs_set:Npn \_@@_sym:nnn ##1 ##2 ##3
+ {
+ \cs_set:Npn ##2 { \use_none:n \q_unicode_math ##1 }
+ }
+ \@@_input_math_symbol_table:
+ \@@_range_process:n {#1}
+ \group_end:
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_range_init:}
+% Set processing functions if we're not defining the full Unicode math repetoire.
+% Math symbols are defined with \cmd\_@@_sym:nnn; see \secref{mathsymbol}
+% for the individual definitions
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_range_init:
+ {
+ \int_gincr:N \g_@@_fam_int
+ \tl_set:Nx \l_@@_symfont_label_tl {@@_fam\int_use:N\g_@@_fam_int}
+ \cs_set_eq:NN \_@@_sym:nnn \@@_process_symbol_parse:nnn
+ \cs_set_eq:NN \@@_remap_symbol:nnn \@@_remap_symbol_parse:nnn
+ \cs_set_eq:NN \@@_maybe_init_alphabet:n \use_none:n
+ \cs_set_eq:NN \@@_assign_delcode:nn \@@_assign_delcode_parse:nn
+ \cs_set_eq:NN \@@_make_mathactive:nNN \@@_make_mathactive_parse:nNN
+% \end{macrocode}
+% Proceed by filling up the various `range' seqs according to the user options.
+% \begin{macrocode}
+ \seq_gclear:N \g_@@_char_range_seq
+ \seq_gclear:N \g_@@_mclass_range_seq
+ \seq_gclear:N \g_@@_mathalph_seq
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_range_process:}
+% \begin{macrocode}
+\cs_new:Nn \@@_range_process:n
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_mathalph_decl:nF {##1} { \@@_range_decl:n {##1} }
+ }
+}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathalph_decl:nF}
+% Possible forms of input:\\
+% |\mathscr|\\
+% |\mathscr->\mathup|\\
+% |\mathscr/{Latin}|\\
+% |\mathscr/{Latin}->\mathup|\\
+% Outputs:\\
+% |tmpa|: math style (\eg, |\mathscr|)\\
+% |tmpb|: alphabets (\eg, |Latin|)\\
+% |tmpc|: remap style (\eg, |\mathup|). Defaults to |tmpa|.
+%
+% The remap style can also be |\mathcal->stixcal|, which I marginally prefer
+% in the general case.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathalph_decl:nF
+ {
+ \tl_set:Nn \l_@@_tmpa_tl {#1}
+ \tl_clear:N \l_@@_tmpb_tl
+ \tl_clear:N \l_@@_tmpc_tl
+
+ \tl_if_in:NnT \l_@@_tmpa_tl {->}
+ { \exp_after:wN \@@_split_arrow:w \l_@@_tmpa_tl \q_nil }
+
+ \tl_if_in:NnT \l_@@_tmpa_tl {/}
+ { \exp_after:wN \@@_split_slash:w \l_@@_tmpa_tl \q_nil }
+
+ \tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:N \l_@@_tmpa_tl }
+ \exp_args:NNx \tl_remove_all:Nn \l_@@_tmpa_tl { \token_to_str:N \math }
+ \exp_args:NNx \tl_remove_all:Nn \l_@@_tmpa_tl { \token_to_str:N \sym }
+ \tl_trim_spaces:N \l_@@_tmpa_tl
+
+ \tl_if_empty:NT \l_@@_tmpc_tl
+ { \tl_set_eq:NN \l_@@_tmpc_tl \l_@@_tmpa_tl }
+
+ \clist_if_in:NVT \g_@@_bad_alpha_clist \l_@@_tmpa_tl { \@@_error:n {range-not-bf-sf} }
+
+ \prop_if_exist:cTF {g_@@_named_range_ \l_@@_tmpa_tl _prop}
+ {
+ \seq_gput_right:Nx \g_@@_mathalph_seq
+ {
+ { \exp_not:V \l_@@_tmpa_tl }
+ { \exp_not:V \l_@@_tmpb_tl }
+ { \exp_not:V \l_@@_tmpc_tl }
+ }
+ }
+ {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_split_arrow:w #1->#2 \q_nil
+ {
+ \tl_set:Nx \l_@@_tmpa_tl { \tl_trim_spaces:n {#1} }
+ \tl_set:Nx \l_@@_tmpc_tl { \tl_trim_spaces:n {#2} }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_set:Npn \@@_split_slash:w #1/#2 \q_nil
+ {
+ \tl_set:Nx \l_@@_tmpa_tl { \tl_trim_spaces:n {#1} }
+ \tl_set:Nx \l_@@_tmpb_tl { \tl_trim_spaces:n {#2} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_range_decl:n}
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_range_decl:n
+ {
+ \bool_lazy_and:nnTF { \tl_if_single_p:n {#1} } { \token_if_cs_p:N #1 }
+ % IF A CSNAME:
+ {
+ \tl_if_in:VnTF #1 { \q_unicode_math }
+ {
+ \seq_if_in:NnTF \g__um_mathclasses_seq {#1}
+ { \seq_gput_right:Nn \g_@@_mclass_range_seq {#1} }
+ { \seq_gput_right:Nx \g_@@_char_range_seq { #1 } }
+ }
+ { \@@_error:nx {bad-cs-in-range} { \tl_to_str:n {#1} } }
+ }
+ % ELSE ASSUME NUMERIC INPUT:
+ {
+ \seq_gput_right:Nx \g_@@_char_range_seq { #1 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_if_char_spec:nNT}
+% \darg{Unicode character slot}
+% \darg{control sequence (math class)}
+% \darg{code to execute}
+% This macro expands to |#3|
+% if any of its arguments are contained in \cmd\g_@@_char_range_seq.
+% This list can contain either character ranges (for checking with |#1|) or control sequences.
+% These latter can either be the command name of a specific character, \emph{or} the math
+% type of one (\eg, \cmd\mathbin).
+%
+% Character ranges are passed to \cs{@@_if_char_spec:nNT}, which accepts input in the form shown in \tabref{ranges}.
+%
+% \begin{table}[htbp]
+% \centering
+% \topcaption{Ranges accepted by \cs{@@_if_char_spec:nNT}.}
+% \label{tab:ranges}
+% \begin{tabular}{>{\ttfamily}cc}
+% \textrm{Input} & Range \\
+% \hline
+% x & $r=x$ \\
+% x- & $r\geq x$ \\
+% -y & $r\leq y$ \\
+% x-y & $x \leq r \leq y$ \\
+% \end{tabular}
+% \end{table}
+%
+% We have three tests, performed sequentially in order of execution time.
+% Any test finding a match jumps directly to the end.
+% \begin{macrocode}
+\cs_new:Nn \@@_if_char_spec:nNT
+ {
+ % math class:
+ \seq_if_in:NnT \g_@@_mclass_range_seq {#2}
+ { \use_none_delimit_by_q_nil:w }
+
+ % character slot:
+ \seq_map_inline:Nn \g_@@_char_range_seq
+ {
+ \@@_int_if_slot_is_last_in_range:nnT {#1} {##1}
+ { \seq_gremove_all:Nn \g_@@_char_range_seq {##1} }
+
+ \@@_int_if_slot_in_range:nnT {#1} {##1}
+ { \seq_map_break:n { \use_none_delimit_by_q_nil:w } }
+ }
+
+ % the following expands to nil if no match was found:
+ \use_none:nnn
+ \q_nil
+ \use:n
+ {
+ \cs_if_eq:NNT #2 \mathalpha
+ {
+ \clist_put_right:Nx \l_@@_mathmap_charints_clist { \int_eval:n {#1} }
+ }
+ #3
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_int_if_slot_in_range:nnT}
+% Pretty basic comma separated range processing.
+% Donald Arseneau's \pkg{selectp} package has a cleverer technique.
+%
+% A `numrange' is like |-2,5-8,12,17-| (can be unsorted).
+%
+% Four cases, four argument types:
+% \begin{Verbatim}
+% input #2 #3 #4
+% "1 " [ 1] - [qn] - [ ] qs
+% "1- " [ 1] - [ ] - [qn-] qs
+% " -3" [ ] - [ 3] - [qn-] qs
+% "1-3" [ 1] - [ 3] - [qn-] qs
+% \end{Verbatim}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_int_if_slot_in_range:nnT
+ {
+ \@@_numrange_parse:nwT {#1} #2 - \q_nil - \q_stop {#3}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_numrange_parse:nwT #1 #2 - #3 - #4 \q_stop #5
+ {
+ \tl_if_empty:nTF {#4} { \int_compare:nT {#1=#2} {#5} }
+ {
+ \tl_if_empty:nTF {#3} { \int_compare:nT {#1>=#2} {#5} }
+ {
+ \tl_if_empty:nTF {#2} { \int_compare:nT {#1<=#3} {#5} }
+ {
+ \int_compare:nT {#1>=#2} { \int_compare:nT {#1<=#3} {#5} }
+ } } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_int_if_slot_is_last_in_range:nnT
+ {
+ \@@_numrange_last_parse:nwT {#1} #2 - \q_nil - \q_stop {#3}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_numrange_last_parse:nwT #1 #2 - #3 - #4 \q_stop #5
+ {
+ \tl_if_empty:nTF {#4} { \int_compare:nT {#1==#2} {#5} }
+ {
+ \tl_if_empty:nTF {#2} { \int_compare:nT {#1==#3} {#5} }
+ {
+ \int_compare:nT {#1==#3} {#5}
+ } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-fontparam.dtx b/macros/unicodetex/latex/unicode-math/um-code-fontparam.dtx
new file mode 100644
index 0000000000..b801b6c0b9
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-fontparam.dtx
@@ -0,0 +1,345 @@
+%%^^A%% um-code-fontparam.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Cross-platform interface for font parameters
+
+% \section{Cross-platform interface for font parameters}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \XeTeX\ and \LuaTeX\ have different interfaces for math font parameters.
+% We use \LuaTeX’s interface because it’s much better, but rename the primitives to be more \LaTeX3-like.
+% There are getter and setter commands for each font parameter.
+% The names of the parameters is derived from the \LuaTeX\ names, with underscores inserted between words.
+% For every parameter \cs{Umath\meta{\LuaTeX\ name}}, we define an expandable getter command \cs{@@_\meta{\LaTeX3 name}:N} and a protected setter command \cs{@@_set_\meta{\LaTeX3 name}:Nn}.
+% The getter command takes one of the style primitives (\cs{displaystyle} etc.)\ and expands to the font parameter, which is a \meta{dimension}.
+% The setter command takes a style primitive and a dimension expression, which is parsed with \cs{dim_eval:n}.
+%
+% Often, the mapping between font dimensions and font parameters is bijective, but there are cases which require special attention:
+% \begin{itemize}
+% \item Some parameters map to different dimensions in display and non-display styles.
+% \item Likewise, one parameter maps to different dimensions in non-cramped and cramped styles.
+% \item There are a few parameters for which \XeTeX\ doesn’t seem to provide \cs{fontdimen}s; in this case the getter and setter commands are left undefined.
+% \end{itemize}
+%
+% \paragraph{Cramped style tokens}
+% \LuaTeX\ has \cs{crampeddisplaystyle} etc.,\ but they are loaded as \cs{luatexcrampeddisplaystyle} etc.\ by the \pkg{luatextra} package.
+% \XeTeX, however, doesn’t have these primitives, and their syntax cannot really be emulated.
+% Nevertheless, we define these commands as quarks, so they can be used as arguments to the font parameter commands (but nowhere else).
+% Making these commands available is necessary because we need to make a distinction between cramped and non-cramped styles for one font parameter.
+%
+% \begin{macro}{\@@_new_cramped_style:N}
+% \darg{command}
+% Define \meta{command} as a new cramped style switch.
+% For \LuaTeX, simply rename the correspronding primitive if it is not
+% already defined.
+% For \XeTeX, define \meta{command} as a new quark.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_new_cramped_style:N
+%<XE> { \tl_const:Nn #1 { \use_none:n #1 } }
+%<LU> {
+%<LU> \cs_if_exist:NF #1
+%<LU> { \cs_new_eq:Nc #1 { luatex \cs_to_str:N #1 } }
+%<LU> }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\crampeddisplaystyle}
+% \begin{macro}{\crampedtextstyle}
+% \begin{macro}{\crampedscriptstyle}
+% \begin{macro}{\crampedscriptscriptstyle}
+% The cramped style commands.
+% \begin{macrocode}
+\@@_new_cramped_style:N \crampeddisplaystyle
+\@@_new_cramped_style:N \crampedtextstyle
+\@@_new_cramped_style:N \crampedscriptstyle
+\@@_new_cramped_style:N \crampedscriptscriptstyle
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \paragraph{Font dimension mapping}
+% Font parameters may differ between the styles.
+% \LuaTeX\ accounts for this by having the parameter primitives take a style token argument.
+% To replicate this behavior in \XeTeX, we have to map style tokens to specific combinations of font dimension numbers and math fonts (\cs{textfont} etc.).
+%
+% \begin{macro}{\@@_font_dimen:Nnnnn}
+% \darg{style token}
+% \darg{font dimen for display style}
+% \darg{font dimen for cramped display style}
+% \darg{font dimen for non-display styles}
+% \darg{font dimen for cramped non-display styles}
+% Map math style to \XeTeX\ math font dimension.
+% \meta{style token} must be one of the style switches (\cs{displaystyle}, \cs{crampeddisplaystyle}, \dots).
+% The other parameters are integer constants referring to font dimension numbers.
+% The macro expands to a dimension which contains the appropriate font dimension.
+% \begin{macrocode}
+%<*XE>
+ \cs_new_nopar:Npn \@@_font_dimen:Nnnnn #1 #2 #3 #4 #5 {
+ \fontdimen
+ \cs_if_eq:NNTF #1 \displaystyle {
+ #2 \textfont
+ } {
+ \cs_if_eq:NNTF #1 \crampeddisplaystyle {
+ #3 \textfont
+ } {
+ \cs_if_eq:NNTF #1 \textstyle {
+ #4 \textfont
+ } {
+ \cs_if_eq:NNTF #1 \crampedtextstyle {
+ #5 \textfont
+ } {
+ \cs_if_eq:NNTF #1 \scriptstyle {
+ #4 \scriptfont
+ } {
+ \cs_if_eq:NNTF #1 \crampedscriptstyle {
+ #5 \scriptfont
+ } {
+ \cs_if_eq:NNTF #1 \scriptscriptstyle {
+ #4 \scriptscriptfont
+ } {
+% \end{macrocode}
+% Should we check here if the style is invalid?
+% \begin{macrocode}
+ #5 \scriptscriptfont
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% Which family to use?
+% \begin{macrocode}
+ 2~
+ }
+%</XE>
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Font parameters}
+% This paragraph contains macros for defining the font parameter interface, as well as the definition for all font parameters known to \LuaTeX.
+%
+% \begin{macro}{\@@_font_param:nnnnn}
+% \darg{name}
+% \darg{font dimension for non-cramped display style}
+% \darg{font dimension for cramped display style}
+% \darg{font dimension for non-cramped non-display styles}
+% \darg{font dimension for cramped non-display styles}
+% This macro defines getter and setter functions for the font parameter \meta{name}.
+% The \LuaTeX\ font parameter name is produced by removing all underscores and prefixing the result with |Umath|.
+% The \XeTeX\ font dimension numbers must be integer constants.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_font_param:nnnnn
+%<*XE>
+ {
+ \@@_font_param_aux:ccnnnn { @@_ #1 :N } { @@_set_ #1 :Nn }
+ { #2 } { #3 } { #4 } { #5 }
+ }
+%</XE>
+%<*LU>
+ {
+ \tl_set:Nn \l_@@_tmpa_tl { #1 }
+ \tl_remove_all:Nn \l_@@_tmpa_tl { _ }
+ \@@_font_param_aux:ccc { @@_ #1 :N } { @@_set_ #1 :Nn }
+ { Umath \l_@@_tmpa_tl }
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_param:nnn}
+% \darg{name}
+% \darg{font dimension for display style}
+% \darg{font dimension for non-display styles}
+% This macro defines getter and setter functions for the font parameter \meta{name}.
+% The \LuaTeX\ font parameter name is produced by removing all underscores and prefixing the result with |Umath|.
+% The \XeTeX\ font dimension numbers must be integer constants.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_font_param:nnn
+ {
+ \@@_font_param:nnnnn { #1 } { #2 } { #2 } { #3 } { #3 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_param:nn}
+% \darg{name}
+% \darg{font dimension}
+% This macro defines getter and setter functions for the font parameter \meta{name}.
+% The \LuaTeX\ font parameter name is produced by removing all underscores and prefixing the result with |Umath|.
+% The \XeTeX\ font dimension number must be an integer constant.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_font_param:nn
+ {
+ \@@_font_param:nnnnn { #1 } { #2 } { #2 } { #2 } { #2 }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_param:n}
+% \darg{name}
+% This macro defines getter and setter functions for the font parameter \meta{name}, which is considered unavailable in \XeTeX\@.
+% The \LuaTeX\ font parameter name is produced by removing all underscores and prefixing the result with |Umath|.
+% \begin{macrocode}
+\cs_new_protected_nopar:Nn \@@_font_param:n
+%<XE> { }
+%<LU> { \@@_font_param:nnnnn { #1 } { 0 } { 0 } { 0 } { 0 } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_font_param_aux:NNnnnn}
+% \begin{macro}{\@@_font_param_aux:NNN}
+% Auxiliary macros for generating font parameter accessor macros.
+% \begin{macrocode}
+%<*XE>
+\cs_new_protected_nopar:Nn \@@_font_param_aux:NNnnnn
+ {
+ \cs_new_nopar:Npn #1 ##1
+ {
+ \@@_font_dimen:Nnnnn ##1 { #3 } { #4 } { #5 } { #6 }
+ }
+ \cs_new_protected_nopar:Npn #2 ##1 ##2
+ {
+ #1 ##1 \dim_eval:n { ##2 }
+ }
+ }
+\cs_generate_variant:Nn \@@_font_param_aux:NNnnnn { cc }
+%</XE>
+%<*LU>
+\cs_new_protected_nopar:Nn \@@_font_param_aux:NNN
+ {
+ \cs_new_nopar:Npn #1 ##1
+ {
+ #3 ##1
+ }
+ \cs_new_protected_nopar:Npn #2 ##1 ##2
+ {
+ #3 ##1 \dim_eval:n { ##2 }
+ }
+ }
+\cs_generate_variant:Nn \@@_font_param_aux:NNN { ccc }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% Now all font parameters that are listed in the \LuaTeX\ reference follow.
+% \begin{macrocode}
+\@@_font_param:nn { axis } { 15 }
+\@@_font_param:nn { operator_size } { 13 }
+\@@_font_param:n { fraction_del_size }
+\@@_font_param:nnn { fraction_denom_down } { 45 } { 44 }
+\@@_font_param:nnn { fraction_denom_vgap } { 50 } { 49 }
+\@@_font_param:nnn { fraction_num_up } { 43 } { 42 }
+\@@_font_param:nnn { fraction_num_vgap } { 47 } { 46 }
+\@@_font_param:nn { fraction_rule } { 48 }
+\@@_font_param:nn { limit_above_bgap } { 29 }
+\@@_font_param:n { limit_above_kern }
+\@@_font_param:nn { limit_above_vgap } { 28 }
+\@@_font_param:nn { limit_below_bgap } { 31 }
+\@@_font_param:n { limit_below_kern }
+\@@_font_param:nn { limit_below_vgap } { 30 }
+\@@_font_param:nn { over_delimiter_vgap } { 41 }
+\@@_font_param:nn { over_delimiter_bgap } { 38 }
+\@@_font_param:nn { under_delimiter_vgap } { 40 }
+\@@_font_param:nn { under_delimiter_bgap } { 39 }
+\@@_font_param:nn { overbar_kern } { 55 }
+\@@_font_param:nn { overbar_rule } { 54 }
+\@@_font_param:nn { overbar_vgap } { 53 }
+\@@_font_param:n { quad }
+\@@_font_param:nn { radical_kern } { 62 }
+\@@_font_param:nn { radical_rule } { 61 }
+\@@_font_param:nnn { radical_vgap } { 60 } { 59 }
+\@@_font_param:nn { radical_degree_before } { 63 }
+\@@_font_param:nn { radical_degree_after } { 64 }
+\@@_font_param:nn { radical_degree_raise } { 65 }
+\@@_font_param:nn { space_after_script } { 27 }
+\@@_font_param:nnn { stack_denom_down } { 35 } { 34 }
+\@@_font_param:nnn { stack_num_up } { 33 } { 32 }
+\@@_font_param:nnn { stack_vgap } { 37 } { 36 }
+\@@_font_param:nn { sub_shift_down } { 18 }
+\@@_font_param:nn { sub_shift_drop } { 20 }
+\@@_font_param:n { subsup_shift_down }
+\@@_font_param:nn { sub_top_max } { 19 }
+\@@_font_param:nn { subsup_vgap } { 25 }
+\@@_font_param:nn { sup_bottom_min } { 23 }
+\@@_font_param:nn { sup_shift_drop } { 24 }
+\@@_font_param:nnnnn { sup_shift_up } { 21 } { 22 } { 21 } { 22 }
+\@@_font_param:nn { supsub_bottom_max } { 26 }
+\@@_font_param:nn { underbar_kern } { 58 }
+\@@_font_param:nn { underbar_rule } { 57 }
+\@@_font_param:nn { underbar_vgap } { 56 }
+\@@_font_param:n { connector_overlap_min }
+% \end{macrocode}
+%
+% \subsection{Historical commands}
+%
+% \begin{macro}{\@@_fontdimen_to_percent:nN}
+% \begin{macro}{\@@_fontdimen_pc_to_pt:nN}
+% \darg{Font dimen number}
+% \darg{Font `variable'}
+% \cmd\fontdimen s |10|, |11|, and |65| aren't actually dimensions, they're percentage values given in units of |sp|.
+% \cs{@@_fontdimen_to_percent:nn} takes a font dimension number and outputs the decimal value of the associated parameter.
+% \cs{@@_fontdimen_pc_to_pt:nn} returns a dimension correspond to the current
+% font size relative proportion based on that percentage.
+% \begin{macrocode}
+\cs_set:Nn \@@_fontdimen_to_percent:nN
+ {
+ \fp_eval:n { \dim_to_decimal_in_sp:n { \fontdimen #1 #2 } / 100 }
+ }
+\cs_new:Nn \@@_fontdimen_pc_to_pt:nN
+ {
+ \fp_eval:n { \dim_to_decimal_in_sp:n { \fontdimen #1 #2 } / 100 * \f@size }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathstyle_scale:NnnN}
+% \darg{A math style (\cs{scriptstyle}, say)}
+% \darg{Macro that takes a non-delimited length argument (like \cmd\kern)}
+% \darg{Length control sequence to be scaled according to the math style}
+% \darg{Math font face to use for the lookups}
+% This macro is used to scale the lengths reported by \cmd\fontdimen\ according to the scale factor for script- and scriptscript-size objects.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathstyle_scale:NnnN
+ {
+ \ifx#1\scriptstyle
+ #2 \@@_fontdimen_to_percent:nN {10} #4 #3
+ \else
+ \ifx#1\scriptscriptstyle
+ #2 \@@_fontdimen_to_percent:nN {11} #4 #3
+ \else
+ #2 #3
+ \fi
+ \fi
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-main.dtx b/macros/unicodetex/latex/unicode-math/um-code-main.dtx
new file mode 100644
index 0000000000..ff132044e0
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-main.dtx
@@ -0,0 +1,700 @@
+%%^^A%% um-code-main.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Definition of `\setmainfont`.
+
+% \section{The main \cs{setmathfont} macro}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_setmathfont:nn}
+% \darg{keyval options}
+% \darg{font name/file}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setmathfont:nn
+ {
+% \end{macrocode}
+% \begin{itemize}
+% \item Initialise all local variables.
+% \item
+% Erase any conception \LaTeX\ has of previously defined math symbol fonts;
+% this allows \cmd\DeclareSymbolFont\ at any point in the document.
+% \item
+% Grab the current size information:
+% (is this robust enough? Maybe it should be preceded by \cmd\normalsize).
+% The macro \cmd\S@\meta{size}
+% contains the definitions of the sizes used for maths letters, subscripts and subsubscripts in
+% \cmd\tf@size, \cmd\sf@size, and \cmd\ssf@size, respectively.
+% \end{itemize}
+% \begin{macrocode}
+
+ \@@_init:n {#2}
+ \cs_set_eq:NN \glb@currsize \scan_stop:
+ \cs_if_exist:cF { S@ \f@size } { \calculate@math@sizes }
+ \use:c { S@ \f@size }
+
+ \keys_set_known:nnN {unicode-math} {#1} \l_@@_unknown_keys_clist
+
+ \bool_if:NT \g_@@_init_bool \@@_fontspec_trial_font:
+ \bool_if:NT \g_@@_init_bool \@@_declare_math_sizes:
+
+ \@@_fontspec_select_font:
+ \@@_setup_math_fam:
+ \bool_if:NT \g_@@_init_bool
+ {
+ \@@_setup_legacy_fam_two:
+ \@@_setup_legacy_fam_three:
+ }
+
+ \@@_input_math_symbol_table:
+
+% \end{macrocode}
+% \begin{itemize}
+% \item the `once-off' setup that doesn't need to be per-font
+% \item remap symbols that don't take their natural mathcode;
+% \item activate any symbols that need to be math-active;
+% \item assign delimiter codes for symbols that need to grow;
+% \item setup the maths alphabets (\cs{symbf} etc.) ---
+% this is an extensive part of the code; see Section~\ref{sec:mathmap};
+% \end{itemize}
+% \begin{macrocode}
+ \bool_if:NT \g_@@_init_bool \@@_onceoff_setup:
+ \@@_remap_symbols:
+ \@@_setup_mathactives:
+ \@@_setup_delcodes:
+ \@@_setup_alphabets:
+
+ %% TODO: what of the above should only be run for the "default"/"main" font?
+
+ \bool_if:NTF \g_@@_init_bool
+ {
+ \bool_gset_true:N \g_@@_main_font_defined_bool
+%<LU> \@@_mathparam_store:
+ \@@_log:n {default-math-font}
+ }
+ {
+%<LU> \@@_mathparam_restore:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Fall-back font}
+%
+% Want to load Latin Modern Math if nothing else.
+% This needs to happen early so that all of the font-loading machinery executes before
+% the other `AtBeginDocument' code.
+% \begin{macrocode}
+\AtBeginDocument { \bool_if:NF \g_@@_main_font_defined_bool \@@_load_lm: }
+\@@_cs_new:Nn \@@_load_lm:
+ {
+ \setmathfont{latinmodern-math.otf}[BoldFont={latinmodern-math.otf}]
+ }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_init:n}
+% Reset local variables.
+% Default to defining the font for every math symbol character.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_init:n
+ {
+ \tl_set:Nn \l_@@_fontname_tl {#1}
+ \bool_gset_true:N \g_@@_ot_math_bool
+ \tl_set:Nn \l_@@_mversion_tl {normal}
+ \tl_set:Nn \l_@@_symfont_label_tl {operators}
+
+ \tl_set:Nn \l_@@_script_features_tl {Style=MathScript}
+ \tl_set:Nn \l_@@_sscript_features_tl {Style=MathScriptScript}
+ \tl_set_eq:NN \l_@@_script_font_tl \l_@@_fontname_tl
+ \tl_set_eq:NN \l_@@_sscript_font_tl \l_@@_fontname_tl
+
+ \bool_gset_true:N \g_@@_init_bool
+ \seq_gclear:N \g_@@_char_range_seq
+ \clist_clear:N \l_@@_mathmap_charints_clist
+ \seq_gclear:N \g_@@_mathalph_seq
+ \seq_clear:N \l_@@_missing_alph_seq
+
+ \cs_set_eq:NN \_@@_sym:nnn \@@_process_symbol_noparse:nnn
+ \cs_set_eq:NN \@@_remap_symbol:nnn \@@_remap_symbol_noparse:nnn
+ \cs_set_eq:NN \@@_maybe_init_alphabet:n \@@_init_alphabet:n
+ \cs_set_eq:NN \@@_assign_delcode:nn \@@_assign_delcode_noparse:nn
+ \cs_set_eq:NN \@@_make_mathactive:nNN \@@_make_mathactive_noparse:nNN
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_declare_math_sizes:}
+% Set the math sizes according to the recommended font parameters.
+% \begin{macrocode}
+\tl_new:N \g_@@_main_font_cmd_tl
+\cs_new:Nn \@@_sf_size: { \@@_fontdimen_pc_to_pt:nN {10} \g_@@_trial_font }
+\cs_new:Nn \@@_ssf_size: { \@@_fontdimen_pc_to_pt:nN {11} \g_@@_trial_font }
+\@@_cs_new:Nn \@@_declare_math_sizes:
+ {
+ \fp_gset:Nn \g_@@_size_tfsf_fp { (\f@size + \@@_sf_size: )/2 }
+ \fp_gset:Nn \g_@@_size_sfssf_fp { (\@@_sf_size: + \@@_ssf_size:)/2 }
+
+ \dim_compare:nF { \fontdimen 10 \g_@@_trial_font == 0pt }
+ {
+ \DeclareMathSizes { \f@size } { \f@size } { \@@_sf_size: } { \@@_ssf_size: }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \begin{macro}{\@@_fontspec_trial_font:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_fontspec_trial_font:
+ {
+ \tl_set:Nx \l_@@_font_keyval_tl
+ {
+%<LU> Renderer = Basic,
+ BoldItalicFont = {}, ItalicFont = {}, SmallCapsFont = {},
+ Script = Math,
+%<LU> FontAdjustment = { \@@_luatex_copy_fontdimens: },
+ \l_@@_unknown_keys_clist
+ }
+
+ \fontspec_set_family:Nxn \l_@@_trial_family_tl {\l_@@_font_keyval_tl} {\l_@@_fontname_tl}
+
+ \group_begin:
+ \fontfamily { \l_@@_trial_family_tl } \selectfont
+ \exp_last_unbraced:NNo \@@_fontface_gset_eq:NN \g_@@_trial_font \font@name
+ \fontspec_if_script:nF {math}
+ {
+ \@@_warning:n {not-ot-math}
+ \bool_gset_false:N \g_@@_ot_math_bool
+ \bool_gset_false:N \g_@@_init_bool
+ }
+ \group_end:
+
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fontspec_select_font:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_fontspec_select_font:
+ {
+ \tl_set:Nx \l_@@_font_keyval_tl
+ {
+%<LU> Renderer = Basic,
+ BoldItalicFont = {}, ItalicFont = {}, SmallCapsFont = {},
+ Script = Math,
+ SizeFeatures =
+ {
+ {
+ Size = \fp_use:N \g_@@_size_tfsf_fp -
+ } ,
+ {
+ Size = \fp_use:N \g_@@_size_sfssf_fp - \fp_use:N \g_@@_size_tfsf_fp ,
+ Font = \l_@@_script_font_tl ,
+ \l_@@_script_features_tl
+ } ,
+ {
+ Size = - \fp_use:N \g_@@_size_sfssf_fp ,
+ Font = \l_@@_sscript_font_tl ,
+ \l_@@_sscript_features_tl
+ }
+ } ,
+%<LU> FontAdjustment = { \@@_luatex_copy_fontdimens: },
+ \l_@@_unknown_keys_clist
+ }
+
+ \fontspec_set_family:Nxn \l_@@_family_tl {\l_@@_font_keyval_tl} {\l_@@_fontname_tl}
+
+ \int_gincr:N \g_@@_fonts_used_int
+ \group_begin:
+ \fontfamily { \l_@@_family_tl } \selectfont
+ \exp_last_unbraced:Nno \@@_fontface_gset_eq:cN {g_@@_mathfont_ \int_use:N \g_@@_fonts_used_int _font} \font@name
+ \tl_gset:Nx \g_@@_curr_font_cmd_tl { \exp_not:c {g_@@_mathfont_ \int_use:N \g_@@_fonts_used_int _font} }
+ \bool_if:NT \g_@@_init_bool
+ {
+ \exp_last_unbraced:NNo \@@_fontface_gset_eq:NN \l_@@_font \font@name
+ }
+ \group_end:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\tl_gset:Nn \g_@@_main_font_cmd_tl { \l_@@_font }
+\tl_gset:Nn \g_@@_sqrt_font_cmd_tl { \l_@@_font }
+\tl_gset:Nn \g_@@_prime_font_cmd_tl { \l_@@_font }
+% \end{macrocode}
+%
+% \begin{macro}{\@@_luatex_copy_fontdimens:}
+% This performs a once-off copy of the LuaTeX math params into XeTeX-like fontdimens.
+% While the list is somewhat comprehensive, these are really only for backwards compatibility
+% and to allow a little shared code. They shouldn't be relied upon, since LuaTeX users
+% might change the math params, which wouldn't be reflected in the fontdimens.
+% \begin{macrocode}
+%<*LU>
+\@@_cs_new:Nn \@@_luatex_copy_fontdimens:
+ {
+ \@@_fontdimen_from_param:nn {10} {ScriptPercentScaleDown}
+ \@@_fontdimen_from_param:nn {11} {ScriptScriptPercentScaleDown}
+ \@@_fontdimen_from_param:nn {15} {AxisHeight}
+ \@@_fontdimen_from_param:nn {18} {SubscriptShiftDown}
+ \@@_fontdimen_from_param:nn {20} {SubscriptBaselineDropMin}
+ \@@_fontdimen_from_param:nn {21} {SuperscriptShiftUp}
+ \@@_fontdimen_from_param:nn {22} {SuperscriptShiftUpCramped}
+ \@@_fontdimen_from_param:nn {24} {SuperscriptBaselineDropMax}
+ \@@_fontdimen_from_param:nn {28} {UpperLimitGapMin}
+ \@@_fontdimen_from_param:nn {29} {UpperLimitBaselineRiseMin}
+ \@@_fontdimen_from_param:nn {30} {LowerLimitGapMin}
+ \@@_fontdimen_from_param:nn {31} {LowerLimitBaselineDropMin}
+ \@@_fontdimen_from_param:nn {32} {StackTopShiftUp}
+ \@@_fontdimen_from_param:nn {42} {FractionNumeratorShiftUp}
+ \@@_fontdimen_from_param:nn {43} {FractionNumeratorDisplayStyleShiftUp}
+ \@@_fontdimen_from_param:nn {44} {FractionDenominatorShiftDown}
+ \@@_fontdimen_from_param:nn {45} {FractionDenominatorDisplayStyleShiftDown}
+ \@@_fontdimen_from_param:nn {48} {FractionRuleThickness}
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_math_fam:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_math_fam:
+ {
+ \cs_if_exist:cF { sym \l_@@_symfont_label_tl }
+ {
+ \DeclareSymbolFont{\l_@@_symfont_label_tl}
+ {\encodingdefault}{\l_@@_family_tl}{\mddefault}{\shapedefault}
+ }
+ \SetSymbolFont{\l_@@_symfont_label_tl}{\l_@@_mversion_tl}
+ {\encodingdefault}{\l_@@_family_tl}{\mddefault}{\shapedefault}
+% \end{macrocode}
+% Set the bold math version.
+% \begin{macrocode}
+ \str_if_eq:eeT {\l_@@_mversion_tl} {normal}
+ {
+ \SetSymbolFont{\l_@@_symfont_label_tl}{bold}
+ {\encodingdefault}{\l_@@_family_tl}{\bfdefault}{\shapedefault}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_legacy_fam_two:}
+% \TeX\ won't load the same font twice at the same scale, so we need to magnify this one by an imperceptable amount.
+% Note that for extreme font sizes, this scaling value might need to be adjusted.
+% 1.0001 should be enough for reasonable use cases however.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_legacy_fam_two:
+ {
+ \fontspec_set_family:Nxn \l_@@_fam_two_tl
+ {
+ \l_@@_font_keyval_tl,
+ ScaleAgain = 1.0001,
+ FontAdjustment =
+ {
+ \@@_copy_fontdimen:nnN { 8} {43} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN { 9} {42} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {10} {32} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {11} {45} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {12} {44} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {13} {21} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {14} {21} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {15} {22} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {16} {18} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {17} {18} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {18} {24} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {19} {20} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {22} {15} \g_@@_main_font_cmd_tl
+ \@@_zero_fontdimen:n {20} % delim1 = FractionDelimiterDisplaySize
+ \@@_zero_fontdimen:n {21} % delim2 = FractionDelimiterSize
+ }
+ } {\l_@@_fontname_tl}
+
+ \SetSymbolFont{symbols}{\l_@@_mversion_tl}
+ {\encodingdefault}{\l_@@_fam_two_tl}{\mddefault}{\shapedefault}
+
+ \str_if_eq:eeT {\l_@@_mversion_tl} {normal}
+ {
+ \SetSymbolFont{symbols}{bold}
+ {\encodingdefault}{\l_@@_fam_two_tl}{\bfdefault}{\shapedefault}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_legacy_fam_three:}
+% Similarly, this font is shrunk by an imperceptable amount for \TeX\ to load it again.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_legacy_fam_three:
+ {
+ \fontspec_set_family:Nxn \l_@@_fam_three_tl
+ {
+ \l_@@_font_keyval_tl,
+ ScaleAgain = 0.9999,
+ FontAdjustment = {
+ \@@_copy_fontdimen:nnN { 8} {48} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN { 9} {28} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {10} {30} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {11} {29} \g_@@_main_font_cmd_tl
+ \@@_copy_fontdimen:nnN {12} {31} \g_@@_main_font_cmd_tl
+ \@@_zero_fontdimen:n {13}
+ }
+ } {\l_@@_fontname_tl}
+
+ \SetSymbolFont{largesymbols}{\l_@@_mversion_tl}
+ {\encodingdefault}{\l_@@_fam_three_tl}{\mddefault}{\shapedefault}
+
+ \str_if_eq:eeT {\l_@@_mversion_tl} {normal}
+ {
+ \SetSymbolFont{largesymbols}{bold}
+ {\encodingdefault}{\l_@@_fam_three_tl}{\bfdefault}{\shapedefault}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_onceoff_setup:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_onceoff_setup:
+ {
+ \@@_set_delcode:nnn {operators} {`\.} {0}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Functions for setting up symbols with mathcodes}
+% \seclabel{mathsymbol}
+%
+% \begin{macro}{\@@_process_symbol_noparse:nnn}
+% \begin{macro}{\@@_process_symbol_parse:nnn}
+% If the \feat{range} font feature has been used, then only
+% a subset of the Unicode glyphs are to be defined.
+% See \secref{rangeproc} for the code that enables this.
+% \begin{macrocode}
+\cs_set:Nn \@@_process_symbol_noparse:nnn
+ {
+ \@@_set_mathsymbol:nNNn {\l_@@_symfont_label_tl} #2 #3 {#1}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_set:Nn \@@_process_symbol_parse:nnn
+ {
+ \@@_if_char_spec:nNT {#1} {#3}
+ {
+ \@@_process_symbol_noparse:nnn {#1} {#2} {#3}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_remap_symbols:}
+% This function is used to define the mathcodes for those chars which should
+% be mapped to a different glyph than themselves.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_remap_symbols:
+ {
+ \@@_remap_symbol:nnn {`\-} {\mathbin} {"2212}
+ \@@_remap_symbol:nnn {`\*} {\mathbin} {"02217}% text asterisk to "centred asterisk"
+ \bool_if:NF \g_@@_literal_colon_bool
+ {
+ \@@_remap_symbol:nnn {`\:} {\mathrel} {"02236}% colon to ratio (i.e., punct to rel)
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_remap_symbol_noparse:nnn}
+% \begin{macro}{\@@_remap_symbol_parse:nnn}
+% Where |\@@_remap_symbol:nnn| is defined to be one of these two, depending
+% on the range setup:
+% \begin{macrocode}
+\cs_new:Nn \@@_remap_symbol_parse:nnn
+ {
+ \@@_if_char_spec:nNT {#3} {#2}
+ { \@@_remap_symbol_noparse:nnn {#1} {#2} {#3} }
+ }
+\cs_new:Nn \@@_remap_symbol_noparse:nnn
+ {
+ \clist_map_inline:nn {#1}
+ { \@@_set_mathcode:nnnn {##1} {#2} {\l_@@_symfont_label_tl} {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Active math characters}
+%
+% There are more math active chars later in the subscript/superscript section.
+% But they don't need to be able to be typeset directly.
+%
+% \begin{macro}{\@@_setup_mathactives:}
+% TODO: if not an OpenType math font, we should ignore doing anything with primes.
+% This needs a revamped `range` feature, I think.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_mathactives:
+ {
+ \@@_make_mathactive:nNN {"2032} \@@_prime_single_mchar \mathord
+ \@@_make_mathactive:nNN {"2033} \@@_prime_double_mchar \mathord
+ \@@_make_mathactive:nNN {"2034} \@@_prime_triple_mchar \mathord
+ \@@_make_mathactive:nNN {"2057} \@@_prime_quad_mchar \mathord
+ \@@_make_mathactive:nNN {"2035} \@@_backprime_single_mchar \mathord
+ \@@_make_mathactive:nNN {"2036} \@@_backprime_double_mchar \mathord
+ \@@_make_mathactive:nNN {"2037} \@@_backprime_triple_mchar \mathord
+ \@@_make_mathactive:nNN {`\'} \mathstraightquote \mathord
+ \@@_make_mathactive:nNN {`\`} \mathbacktick \mathord
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_make_mathactive:nNN}
+% Makes |#1| a mathactive char, and gives cs |#2| the meaning of mathchar |#1|
+% with class |#3|.
+% You are responsible for giving active |#1| a particular meaning!
+% \begin{macrocode}
+\cs_new:Nn \@@_make_mathactive_parse:nNN
+ {
+ \@@_if_char_spec:nNT {#1} #3
+ { \@@_make_mathactive_noparse:nNN {#1} #2 #3 }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_make_mathactive_noparse:nNN
+ {
+ \@@_set_mathchar:NNnn #2 #3 {\l_@@_symfont_label_tl} {#1}
+ \@@_char_gmake_mathactive:n {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Delimiter codes}
+%
+% \begin{macro}{\@@_assign_delcode:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_assign_delcode_noparse:nn
+ {
+ \@@_set_delcode:nnn \l_@@_symfont_label_tl {#1} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_assign_delcode_parse:nn
+ {
+ \@@_if_char_spec:nNT {#2} \@nil
+ {
+ \@@_assign_delcode_noparse:nn {#1} {#2}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_assign_delcode:n}
+% Shorthand.
+% \begin{macrocode}
+\cs_new:Nn \@@_assign_delcode:n { \@@_assign_delcode:nn {#1} {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_delcodes:}
+% Some symbols that aren't mathopen/mathclose still need to have delimiter codes assigned.
+% The list of vertical arrows may be incomplete.
+% On the other hand, many fonts won't support them all being stretchy.
+% And some of them are probably not meant to stretch, either. But adding them here doesn't hurt.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_delcodes:
+ {
+ \@@_assign_delcode:nn {`\/} {\g_@@_slash_delimiter_usv}
+ \@@_assign_delcode:nn {"2044} {\g_@@_slash_delimiter_usv} % fracslash
+ \@@_assign_delcode:nn {"2215} {\g_@@_slash_delimiter_usv} % divslash
+ \@@_assign_delcode:n {"005C} % backslash
+ \@@_assign_delcode:nn {`\<} {"27E8} % angle brackets with ascii notation
+ \@@_assign_delcode:nn {`\>} {"27E9} % angle brackets with ascii notation
+ \@@_assign_delcode:n {"2191} % up arrow
+ \@@_assign_delcode:n {"2193} % down arrow
+ \@@_assign_delcode:n {"2195} % updown arrow
+ \@@_assign_delcode:n {"219F} % up arrow twohead
+ \@@_assign_delcode:n {"21A1} % down arrow twohead
+ \@@_assign_delcode:n {"21A5} % up arrow from bar
+ \@@_assign_delcode:n {"21A7} % down arrow from bar
+ \@@_assign_delcode:n {"21A8} % updown arrow from bar
+ \@@_assign_delcode:n {"21BE} % up harpoon right
+ \@@_assign_delcode:n {"21BF} % up harpoon left
+ \@@_assign_delcode:n {"21C2} % down harpoon right
+ \@@_assign_delcode:n {"21C3} % down harpoon left
+ \@@_assign_delcode:n {"21C5} % arrows up down
+ \@@_assign_delcode:n {"21F5} % arrows down up
+ \@@_assign_delcode:n {"21C8} % arrows up up
+ \@@_assign_delcode:n {"21CA} % arrows down down
+ \@@_assign_delcode:n {"21D1} % double up arrow
+ \@@_assign_delcode:n {"21D3} % double down arrow
+ \@@_assign_delcode:n {"21D5} % double updown arrow
+ \@@_assign_delcode:n {"21DE} % up arrow double stroke
+ \@@_assign_delcode:n {"21DF} % down arrow double stroke
+ \@@_assign_delcode:n {"21E1} % up arrow dashed
+ \@@_assign_delcode:n {"21E3} % down arrow dashed
+ \@@_assign_delcode:n {"21E7} % up white arrow
+ \@@_assign_delcode:n {"21E9} % down white arrow
+ \@@_assign_delcode:n {"21EA} % up white arrow from bar
+ \@@_assign_delcode:n {"21F3} % updown white arrow
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{(Big) operators}
+%
+% The engine does what is necessary to deal with big operators for us
+% automatically with \cmd\Umathchardef.
+% However, the limits aren't set automatically; that is, we want to define,
+% a la Plain \TeX\ \etc, |\def\int{\intop\nolimits}|, so there needs to be a
+% transformation from \cmd\int\ to \cmd\intop\ during the expansion of
+% \cmd\_@@_sym:nnn\ in the appropriate contexts.
+%
+% \begin{macro}{\l_@@_nolimits_tl}
+% This macro is a sequence containing those maths operators that require a
+% \cmd\nolimits\ suffix.
+% This list is used when processing |unicode-math-table.tex| to define such
+% commands automatically (see the macro \cs{@@_set_mathsymbol:nNNn}).
+% I've chosen essentially just the operators that look like integrals;
+% hopefully a better mathematician can help me out here.
+% I've a feeling that it's more useful \emph{not} to include the multiple
+% integrals such as $\iiiint$, but that might be a matter of preference.
+% \begin{macrocode}
+\tl_set:Nn \l_@@_nolimits_tl
+ {
+ \int\iint\iiint\iiiint\oint\oiint\oiiint
+ \intclockwise\varointclockwise\ointctrclockwise\sumint
+ \intbar\intBar\fint\cirfnint\awint\rppolint
+ \scpolint\npolint\pointint\sqint\intlarhk\intx
+ \intcap\intcup\upint\lowint
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Radicals}
+%
+% \begin{macro}{\l_@@_radicals_tl}
+% The radicals are organised in \cs{@@_set_mathsymbol:nNNn}.
+% We organise radicals in the same way as nolimits-operators.
+% (\cs{cuberoot} and \cs{fourthroot}, don't seem to behave as proper radicals.)
+% \begin{macrocode}
+\tl_set:Nn \l_@@_radicals_tl {\sqrt \longdivision \cuberoot \fourthroot}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Fontdimens}
+%
+% \begin{macrocode}
+%<*LU>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_mathparam_restore:}
+% \cs{glb@settings} might not be necessary but is included for symmetry.
+% If the maths font were to be loaded later it would clobber our mathparam settings, so
+% this seems like a sensible move.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_mathparam_restore:
+ {
+ \glb@settings
+ \tl_use:N \g_@@_mathparam_settings_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathparam_store:}
+% \cs{glb@settings} is called to force maths fonts loading \emph{now} so the mathparams
+% are up-to-date.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_mathparam_store:
+ {
+ \glb@settings
+ \tl_gset:Nx \g_@@_mathparam_settings_tl
+ {
+ \@@_mathparam_store_aux:N \displaystyle
+ \@@_mathparam_store_aux:N \textstyle
+ \@@_mathparam_store_aux:N \scriptstyle
+ \@@_mathparam_store_aux:N \scriptscriptstyle
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Nn \@@_mathparam_store_aux:N
+ {
+ \Umathquad #1 = \the \Umathquad #1 \scan_stop:
+ \Umathaxis #1 = \the \Umathaxis #1 \scan_stop:
+ \Umathoperatorsize #1 = \the \Umathoperatorsize #1 \scan_stop:
+ \Umathoverbarkern #1 = \the \Umathoverbarkern #1 \scan_stop:
+ \Umathoverbarrule #1 = \the \Umathoverbarrule #1 \scan_stop:
+ \Umathoverbarvgap #1 = \the \Umathoverbarvgap #1 \scan_stop:
+ \Umathunderbarkern #1 = \the \Umathunderbarkern #1 \scan_stop:
+ \Umathunderbarrule #1 = \the \Umathunderbarrule #1 \scan_stop:
+ \Umathunderbarvgap #1 = \the \Umathunderbarvgap #1 \scan_stop:
+ \Umathradicalkern #1 = \the \Umathradicalkern #1 \scan_stop:
+ \Umathradicalrule #1 = \the \Umathradicalrule #1 \scan_stop:
+ \Umathradicalvgap #1 = \the \Umathradicalvgap #1 \scan_stop:
+ \Umathradicaldegreebefore #1 = \the \Umathradicaldegreebefore #1 \scan_stop:
+ \Umathradicaldegreeafter #1 = \the \Umathradicaldegreeafter #1 \scan_stop:
+ \Umathradicaldegreeraise #1 = \the \Umathradicaldegreeraise #1 \scan_stop:
+ \Umathstackvgap #1 = \the \Umathstackvgap #1 \scan_stop:
+ \Umathstacknumup #1 = \the \Umathstacknumup #1 \scan_stop:
+ \Umathstackdenomdown #1 = \the \Umathstackdenomdown #1 \scan_stop:
+ \Umathfractionrule #1 = \the \Umathfractionrule #1 \scan_stop:
+ \Umathfractionnumvgap #1 = \the \Umathfractionnumvgap #1 \scan_stop:
+ \Umathfractionnumup #1 = \the \Umathfractionnumup #1 \scan_stop:
+ \Umathfractiondenomvgap #1 = \the \Umathfractiondenomvgap #1 \scan_stop:
+ \Umathfractiondenomdown #1 = \the \Umathfractiondenomdown #1 \scan_stop:
+ \Umathfractiondelsize #1 = \the \Umathfractiondelsize #1 \scan_stop:
+ \Umathlimitabovevgap #1 = \the \Umathlimitabovevgap #1 \scan_stop:
+ \Umathlimitabovebgap #1 = \the \Umathlimitabovebgap #1 \scan_stop:
+ \Umathlimitabovekern #1 = \the \Umathlimitabovekern #1 \scan_stop:
+ \Umathlimitbelowvgap #1 = \the \Umathlimitbelowvgap #1 \scan_stop:
+ \Umathlimitbelowbgap #1 = \the \Umathlimitbelowbgap #1 \scan_stop:
+ \Umathlimitbelowkern #1 = \the \Umathlimitbelowkern #1 \scan_stop:
+ \Umathoverdelimitervgap #1 = \the \Umathoverdelimitervgap #1 \scan_stop:
+ \Umathoverdelimiterbgap #1 = \the \Umathoverdelimiterbgap #1 \scan_stop:
+ \Umathunderdelimitervgap #1 = \the \Umathunderdelimitervgap #1 \scan_stop:
+ \Umathunderdelimiterbgap #1 = \the \Umathunderdelimiterbgap #1 \scan_stop:
+ \Umathsubshiftdrop #1 = \the \Umathsubshiftdrop #1 \scan_stop:
+ \Umathsubshiftdown #1 = \the \Umathsubshiftdown #1 \scan_stop:
+ \Umathsupshiftdrop #1 = \the \Umathsupshiftdrop #1 \scan_stop:
+ \Umathsupshiftup #1 = \the \Umathsupshiftup #1 \scan_stop:
+ \Umathsubsupshiftdown #1 = \the \Umathsubsupshiftdown #1 \scan_stop:
+ \Umathsubtopmax #1 = \the \Umathsubtopmax #1 \scan_stop:
+ \Umathsupbottommin #1 = \the \Umathsupbottommin #1 \scan_stop:
+ \Umathsupsubbottommax #1 = \the \Umathsupsubbottommax #1 \scan_stop:
+ \Umathsubsupvgap #1 = \the \Umathsubsupvgap #1 \scan_stop:
+ \Umathspaceafterscript #1 = \the \Umathspaceafterscript #1 \scan_stop:
+ \Umathconnectoroverlapmin #1 = \the \Umathconnectoroverlapmin #1 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</LU>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-mathmap.dtx b/macros/unicodetex/latex/unicode-math/um-code-mathmap.dtx
new file mode 100644
index 0000000000..e55fe07c2c
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-mathmap.dtx
@@ -0,0 +1,595 @@
+%%^^A%% um-code-mathmap.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Setup of symbol alphabets.
+
+% \section{Defining the math alphabets per style}
+% \label{sec:mathmap}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_setup_alphabets:}
+% This function is called within \cs{setmathfont} to configure the
+% mapping between characters inside math styles. Three modes:
+% \begin{description}
+% \item[IMPLICIT] No ranges specified, set up everything
+% \item[EXPLICIT] Some ranges specified, set up what is requested only
+% \item[INHERIT] Of the slots in the ranges specified, compare against
+% slots in each styled alphabet and only set up those needed
+% \end{description}
+% The INHERIT mode saves less time than I was hoping for but is still beneficial
+% in simple cases.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_alphabets:
+ {
+ \bool_if:NTF \g_@@_init_bool { \@@_setup_alphabets_implicit: }
+ {
+ \seq_if_empty:NF \g_@@_mathalph_seq { \@@_setup_alphabets_explicit: }
+ \clist_if_empty:NF \l_@@_mathmap_charints_clist { \@@_setup_alphabets_inherit: }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_setup_alphabets_implicit:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_alphabets_implicit:
+ {
+ \@@_log:n {setup-implicit}
+ \seq_gset_eq:NN \g_@@_mathalph_seq \g_@@_default_mathalph_seq
+ \bool_set_true:N \l_@@_implicit_alph_bool
+ \@@_maybe_init_alphabet:n {sf}
+ \@@_maybe_init_alphabet:n {bf}
+ \@@_maybe_init_alphabet:n {bfsf}
+ \cs_set_eq:NN \@@_set_mathalphabet_char:nnn \@@_mathmap_noparse:nnn
+ \cs_set_eq:NN \@@_map_char_single:nn \@@_map_char_noparse:nn
+ \@@_mathalph_map:
+ \seq_if_empty:NF \l_@@_missing_alph_seq { \@@_log:n { missing-alphabets } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_setup_alphabets_explicit:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_alphabets_explicit:
+ {
+ \@@_log:n {setup-explicit}
+ \bool_set_false:N \l_@@_implicit_alph_bool
+ \cs_set_eq:NN \@@_set_mathalphabet_char:nnn \@@_mathmap_noparse:nnn
+ \cs_set_eq:NN \@@_map_char_single:nn \@@_map_char_noparse:nn
+ \@@_mathalph_map:
+ \seq_if_empty:NF \l_@@_missing_alph_seq { \@@_log:n { missing-alphabets } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{ \@@_setup_alphabets_inherit:}
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_alphabets_inherit:
+ {
+ \seq_gclear:N \g_@@_mathalph_seq
+ \seq_map_inline:Nn \g_@@_default_mathalph_seq
+ {
+ \tl_set:No \l_@@_style_tl { \use_i:nnn ##1 }
+ \clist_set:No \l_@@_alphabet_clist { \use_ii:nnn ##1 }
+
+ \clist_map_inline:Nn \l_@@_alphabet_clist
+ {
+ \clist_if_exist:cT {g_@@_named_slots_ \l_@@_style_tl _ ####1 _clist}
+ {
+ \clist_map_inline:cn {g_@@_named_slots_ \l_@@_style_tl _ ####1 _clist}
+ {
+ \clist_map_inline:Nn \l_@@_mathmap_charints_clist
+ {
+ \@@_int_if_slot_in_range:nnT {################1} {########1}
+ {
+ \seq_gput_right:Nn \g_@@_mathalph_seq {##1}
+ \clist_map_break:n { \clist_map_break:n { \clist_map_break: } }
+ }
+ }
+ }
+ }
+ }
+ }
+
+ \cs_set_eq:NN \@@_set_mathalphabet_char:nnn \@@_mathmap_parse:nnn
+ \cs_set_eq:NN \@@_map_char_single:nn \@@_map_char_parse:nn
+ \@@_mathalph_map:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathalph_map:}
+% \begin{macrocode}
+\cs_set:Nn \@@_mathalph_map:
+ {
+ \seq_map_inline:Nn \g_@@_mathalph_seq
+ {
+ \tl_set:No \l_@@_style_tl { \use_i:nnn ##1 }
+ \clist_set:No \l_@@_alphabet_clist { \use_ii:nnn ##1 }
+ \tl_set:No \l_@@_remap_style_tl { \use_iii:nnn ##1 }
+
+ % If no set of alphabets is defined:
+ \clist_if_empty:NT \l_@@_alphabet_clist
+ {
+ \cs_set_eq:NN \@@_maybe_init_alphabet:n \@@_init_alphabet:n
+ \prop_get:cnN { g_@@_named_range_ \l_@@_style_tl _prop }
+ { default-alpha } \l_@@_alphabet_clist
+ }
+
+ \@@_check_math_alphabet:
+ \@@_setup_math_alphabet:
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_check_math_alphabet:}
+% First check that at least one of the alphabets for the font shape is defined
+% (this process is fast) \dots
+% \begin{macrocode}
+\cs_new:Nn \@@_check_math_alphabet:
+ {
+ \clist_map_inline:Nn \l_@@_alphabet_clist
+ {
+ \tl_set:Nn \l_@@_alphabet_tl {##1}
+ \@@_if_alphabet_exists:nnTF \l_@@_style_tl \l_@@_alphabet_tl
+ {
+ \str_if_eq:eeTF {\l_@@_alphabet_tl} {misc}
+ {
+ \@@_maybe_init_alphabet:n \l_@@_style_tl
+ \clist_map_break:
+ }
+ {
+ \@@_glyph_if_exist:NnT \g_@@_curr_font_cmd_tl
+ { \@@_to_usv:nn {\l_@@_style_tl} {\l_@@_alphabet_tl} }
+ {
+ \@@_maybe_init_alphabet:n \l_@@_style_tl
+ \clist_map_break:
+ }
+ }
+ }
+ {
+ \msg_warning:nnx {unicode-math} {no-alphabet}
+ { \l_@@_style_tl / \l_@@_alphabet_tl }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_setup_math_alphabet:}
+% \dots and then loop through them defining the individual ranges:
+% (currently this process is slow)
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setup_math_alphabet:
+ {
+ \clist_map_inline:Nn \l_@@_alphabet_clist
+ {
+ \tl_set:Nx \l_@@_alphabet_tl { \tl_trim_spaces:n {##1} }
+
+%<debug>\@@_debug:n {_setup_math_alphabet:~\l_@@_style_tl/\l_@@_alphabet_tl}
+
+ \@@_if_alphabet_exists:nnT {\l_@@_style_tl} {\l_@@_alphabet_tl}
+ {
+ \exp_args:No \tl_if_eq:nnTF \l_@@_alphabet_tl {misc}
+ {
+ \@@_log:nx {setup-alph} {sym \l_@@_style_tl~(\l_@@_alphabet_tl)}
+ \@@_alphabet_config:nnn {\l_@@_style_tl} {\l_@@_alphabet_tl} {\l_@@_remap_style_tl}
+ }
+ {
+ \@@_glyph_if_exist:NnTF \g_@@_curr_font_cmd_tl { \@@_to_usv:nn {\l_@@_remap_style_tl} {\l_@@_alphabet_tl} }
+ {
+ \@@_log:nx {setup-alph} {sym \l_@@_style_tl~(\l_@@_alphabet_tl)}
+ \@@_alphabet_config:nnn {\l_@@_style_tl} {\l_@@_alphabet_tl} {\l_@@_remap_style_tl}
+ }
+ {
+ \bool_if:NTF \l_@@_implicit_alph_bool
+ {
+ \seq_put_right:Nx \l_@@_missing_alph_seq
+ {
+ \@backslashchar sym \l_@@_style_tl \space
+ (\tl_use:c{c_@@_math_alphabet_name_ \l_@@_alphabet_tl _tl})
+ }
+ }
+ {
+ \@@_alphabet_config:nnn {\l_@@_style_tl} {\l_@@_alphabet_tl} {up}
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% Each alphabet style needs to be configured.
+% This happens in Section~\ref{sec:setupalphabets}.
+% \begin{macrocode}
+\cs_new:Nn \@@_new_alphabet_config:nnn
+ {
+ \prop_if_exist:cF {g_@@_named_range_#1_prop}
+ { \@@_warning:nnn {no-named-range} {#1} {#2} }
+
+
+ \prop_gput:cnn {g_@@_named_range_#1_prop} { alpha_tl }
+ {
+ \prop_item:cn {g_@@_named_range_#1_prop} { alpha_tl } {#2}
+ }
+ % Q: do I need to bother removing duplicates?
+
+% \end{macrocode}
+% Create list of all chars defined in this named range:
+% \begin{macrocode}
+ \cs_new:cn { @@_config_#1_#2:n }
+ {
+ \clist_gclear_new:c {g_@@_named_slots_#1_#2_clist}
+ \tl_set:Nn \l_@@_curr_named_slot { g_@@_named_slots_#1_#2_clist }
+ #3
+ \clist_gremove_duplicates:c {g_@@_named_slots_#1_#2_clist}
+ }
+
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Nn \@@_alphabet_config:nnn
+ {
+ \use:c {@@_config_#1_#2:n} {#3}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_if_alphabet_exists:nn {T,TF}
+ {
+ \cs_if_exist:cTF {@@_config_#1_#2:n}
+ \prg_return_true: \prg_return_false:
+ }
+% \end{macrocode}
+%
+% \subsection{Mapping `naked’ math characters}
+%
+% Before we show the definitions of the alphabet mappings using the functions
+% |\@@_alphabet_config:nnn \l_@@_style_tl {##1} {...}|, we first want to define some functions
+% to be used inside them to actually perform the character mapping.
+%
+% \subsubsection{Functions}
+%
+% \begin{macro}{\@@_map_char_single:nn}
+% Wrapper for |\@@_map_char_noparse:nn| or |\@@_map_char_parse:nn|
+% depending on the context.
+%
+% \begin{macro}{\@@_map_char_noparse:nn}
+% \begin{macro}{\@@_map_char_parse:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_map_char_noparse:nn
+ {
+ \@@_set_mathcode:nnnn {#1} {\mathalpha} {\l_@@_symfont_label_tl} {#2}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_map_char_parse:nn
+ {
+ \@@_if_char_spec:nNT {#1} {\mathalpha}
+ { \@@_map_char_noparse:nn {#1}{#2} }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_map_char_single:nnn}
+% \darg{char name (`dotlessi’)}
+% \darg{from alphabet(s)}
+% \darg{to alphabet}
+% Logical interface to \cs{@@_map_char_single:nn}.
+% \begin{macrocode}
+\cs_new:Nn \@@_map_char_single:nnn
+ {
+ \@@_map_char_single:nn { \@@_to_usv:nn {#1} {#3} }
+ { \@@_to_usv:nn {#2} {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_map_chars_range:nnnn}
+% \darg{Number of chars (26)}
+% \darg{From style, one or more (it)}
+% \darg{To style (up)}
+% \darg{Alphabet name (Latin)}
+% First the function with numbers:
+% \begin{macrocode}
+\cs_set:Nn \@@_map_chars_range:nnn
+ {
+ \int_step_inline:nnnn {0} {1} {#1-1}
+ { \@@_map_char_single:nn {#2+##1} {#3+##1} }
+
+ \clist_gput_right:cx { \l_@@_curr_named_slot }
+ { \int_eval:n { #3 } - \int_eval:n { #3 + #1-1 } }
+ }
+% \end{macrocode}
+% And the wrapper with names:
+% \begin{macrocode}
+\cs_new:Nn \@@_map_chars_range:nnnn
+ {
+ \@@_map_chars_range:nnn {#1} { \@@_to_usv:nn {#2} {#4} }
+ { \@@_to_usv:nn {#3} {#4} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Functions for `normal’ alphabet symbols}
+%
+% \begin{macro}{\@@_set_normal_char:nnn}
+% \begin{macrocode}
+\cs_set:Nn \@@_set_normal_char:nnn
+ {
+ \@@_usv_if_exist:nnT {#3} {#1}
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \@@_set_mathalphabet_pos:nnnn {normal} {#1} {##1} {#3}
+ \@@_map_char_single:nnn {##1} {#3} {#1}
+
+ \clist_gput_right:cx {\l_@@_curr_named_slot}
+ { \int_eval:n { \@@_to_usv:nn {#3} {#1} } }
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_Latin:nn
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_set_mathalphabet_Latin:nnn {normal} {##1} {#2}
+ \@@_map_chars_range:nnnn {26} {##1} {#2} {Latin}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_latin:nn
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_set_mathalphabet_latin:nnn {normal} {##1} {#2}
+ \@@_map_chars_range:nnnn {26} {##1} {#2} {latin}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_greek:nn
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_set_mathalphabet_greek:nnn {normal} {##1} {#2}
+ \@@_map_chars_range:nnnn {25} {##1} {#2} {greek}
+ \@@_map_char_single:nnn {##1} {#2} {epsilon}
+ \@@_map_char_single:nnn {##1} {#2} {vartheta}
+ \@@_map_char_single:nnn {##1} {#2} {varkappa}
+ \@@_map_char_single:nnn {##1} {#2} {phi}
+ \@@_map_char_single:nnn {##1} {#2} {varrho}
+ \@@_map_char_single:nnn {##1} {#2} {varpi}
+ \@@_set_mathalphabet_pos:nnnn {normal} {epsilon} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {vartheta} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {varkappa} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {phi} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {varrho} {##1} {#2}
+ \@@_set_mathalphabet_pos:nnnn {normal} {varpi} {##1} {#2}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_Greek:nn
+ {
+ \clist_map_inline:nn {#1}
+ {
+ \@@_set_mathalphabet_Greek:nnn {normal} {##1} {#2}
+ \@@_map_chars_range:nnnn {25} {##1} {#2} {Greek}
+ \@@_map_char_single:nnn {##1} {#2} {varTheta}
+ \@@_set_mathalphabet_pos:nnnn {normal} {varTheta} {##1} {#2}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_normal_numbers:nn
+ {
+ \@@_set_mathalphabet_numbers:nnn {normal} {#1} {#2}
+ \@@_map_chars_range:nnnn {10} {#1} {#2} {num}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Mapping chars inside a math style}
+%
+% \subsubsection{Functions for setting up the maths alphabets}
+%
+% \begin{macro}{\@@_set_mathalphabet_char:nnn}
+% \darg{Maths alphabet, \eg, `bb’}
+% \darg{Input slot, \eg, the slot for `A’ (comma separated)}
+% \darg{Output slot, \eg, the slot for `$\mathbb{A}$’}
+% This is a wrapper for either |\@@_mathmap_noparse:nnn| or
+% |\@@_mathmap_parse:nnn|, depending on the context.
+% \end{macro}
+%
+% \begin{macro}{\@@_mathmap_noparse:nnn}
+% \darg{Maths alphabet, \eg, `bb’}
+% \darg{Input slot, \eg, the slot for `A’ (comma separated)}
+% \darg{Output slot, \eg, the slot for `$\mathbb{A}$’}
+% Adds \cs{@@_set_mathcode:nnnn} declarations to the specified maths alphabet’s definition.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathmap_noparse:nnn
+ {
+ \tl_gput_right:cx { g_@@_switchto_#1_tl }
+ {
+ \@@_set_mathcode:nnnn {#2} {\mathalpha} {\l_@@_symfont_label_tl} {#3}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathmap_parse:nnn}
+% \darg{Maths alphabet, \eg, `bb’}
+% \darg{Input slot, \eg, the slot for `A’ (comma separated)}
+% \darg{Output slot, \eg, the slot for `$\mathbb{A}$’}
+% When \cmd\@@_if_char_spec:nNT\ is executed, it populates the \cmd\l_@@_mathmap_charints_clist\
+% macro with slot numbers corresponding to the specified range. This range is used to
+% conditionally add \cs{@@_set_mathcode:nnnn} declaractions to the maths alphabet definition.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathmap_parse:nnn
+ {
+ \exp_args:NNx \clist_if_in:NnT \l_@@_mathmap_charints_clist { \int_eval:n {#3} }
+ {
+ \@@_mathmap_noparse:nnn {#1} {#2} {#3}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_mathalphabet_char:nnnn}
+% \darg{math style command}
+% \darg{input math alphabet name}
+% \darg{output math alphabet name}
+% \darg{char name to map}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_char:nnnn
+ {
+ \@@_set_mathalphabet_char:nnn {#1} { \@@_to_usv:nn {#2} {#4} }
+ { \@@_to_usv:nn {#3} {#4} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_mathalph_range:nnnn}
+% \darg{Number of iterations}
+% \darg{Sym command suffix}
+% \darg{Starting input char}
+% \darg{Starting output char}
+% Loops through character ranges setting \cmd\mathcode.
+% First the version that uses numbers:
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalph_range:nnnn
+ {
+ \int_step_inline:nnnn {0} {1} {#1-1}
+ { \@@_set_mathalphabet_char:nnn {#2} { ##1 + #3 } { ##1 + #4 } }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_mathalph_range:nnnn}
+% \darg{Number of iterations}
+% \darg{Sym command suffix}
+% \darg{input style}
+% \darg{output style}
+% \darg{alphabet}
+% Then the wrapper version that uses names:
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalph_range:nnnnn
+ {
+ \clist_gput_right:cx { \l_@@_curr_named_slot }
+ { \int_eval:n { \@@_to_usv:nn {#4} {#5} } - \int_eval:n { (#1-1)+\@@_to_usv:nn {#4} {#5} } }
+
+ \@@_set_mathalph_range:nnnn {#1} {#2} { \@@_to_usv:nn {#3} {#5} }
+ { \@@_to_usv:nn {#4} {#5} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Individual mapping functions for different alphabets}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_pos:nnnn
+ {
+ \@@_usv_if_exist:nnT {#4} {#2}
+ {
+ \clist_map_inline:nn {#3}
+ { \@@_set_mathalphabet_char:nnnn {#1} {##1} {#4} {#2} }
+
+ \clist_gput_right:cx {\l_@@_curr_named_slot}
+ { \int_eval:n { \@@_to_usv:nn {#4} {#2} } }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_numbers:nnn
+ {
+ \clist_map_inline:nn {#2}
+ { \@@_set_mathalph_range:nnnnn {10} {#1} {##1} {#3} {num} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_Latin:nnn
+ {
+ \clist_map_inline:nn {#2}
+ { \@@_set_mathalph_range:nnnnn {26} {#1} {##1} {#3} {Latin} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_latin:nnn
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \@@_set_mathalph_range:nnnnn {26} {#1} {##1} {#3} {latin}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {h}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_Greek:nnn
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \@@_set_mathalph_range:nnnnn {25} {#1} {##1} {#3} {Greek}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {varTheta}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_set_mathalphabet_greek:nnn
+ {
+ \clist_map_inline:nn {#2}
+ {
+ \@@_set_mathalph_range:nnnnn {25} {#1} {##1} {#3} {greek}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {epsilon}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {vartheta}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {varkappa}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {phi}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {varrho}
+ \@@_set_mathalphabet_char:nnnn {#1} {##1} {#3} {varpi}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-mathtext.dtx b/macros/unicodetex/latex/unicode-math/um-code-mathtext.dtx
new file mode 100644
index 0000000000..d002483378
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-mathtext.dtx
@@ -0,0 +1,259 @@
+%%^^A%% um-code-mathtext.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% The "math text" commands such as `\mathbf` and co.
+
+% \section{Maths text commands}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{\cs{setmathfontface}}
+%
+% \begin{macro}{\@@_setmathfontface:Nnn}
+% Interface around \cs{SetMathAlphabet}.
+% \begin{macrocode}
+\keys_define:nn {@@_mathface}
+ {
+ version .tl_set:N = \l_@@_mversion_tl
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_setmathfontface:Nnn
+ {
+ \tl_clear:N \l_@@_mversion_tl
+
+ \keys_set_known:nnN {@@_mathface} {#2} \l_@@_keyval_clist
+
+ \fontspec_set_family:Nxx \l_@@_tmpa_tl
+ { ItalicFont={}, BoldFont={}, SmallCapsFont={}, \exp_not:V \l_@@_keyval_clist }
+ { #3 }
+
+ \tl_if_empty:NT \l_@@_mversion_tl
+ {
+ \tl_set:Nn \l_@@_mversion_tl {normal}
+ \DeclareMathAlphabet #1 {\g_fontspec_encoding_tl} {\l_@@_tmpa_tl} {\mddefault} {\shapedefault}
+ }
+
+ \SetMathAlphabet #1 {\l_@@_mversion_tl} {\g_fontspec_encoding_tl} {\l_@@_tmpa_tl} {\mddefault} {\shapedefault}
+
+ % integrate with fontspec's \setmathrm etc:
+ \tl_case:Nn #1
+ {
+ \mathrm { \cs_gset_eq:NN \g__fontspec_mathrm_tl \l_@@_tmpa_tl }
+ \mathsf { \cs_gset_eq:NN \g__fontspec_mathsf_tl \l_@@_tmpa_tl }
+ \mathtt { \cs_gset_eq:NN \g__fontspec_mathtt_tl \l_@@_tmpa_tl }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Hooks into \LaTeXe}
+%
+% Switching to a different style of alphabetic symbols was traditionally performed with
+% commands like \cmd\mathbf, which literally changes fonts to access alternate symbols.
+% This is not as simple with Unicode fonts.
+%
+% In traditional \TeX{} maths font setups, you simply switch between different `families' (\cmd\fam), which is analogous to changing from one font to another---a symbol such as `a' will be upright in one font, bold in another, and so on.
+% In pkg{unicode-math}, a different mechanism is used to switch between styles. For every letter (start with ascii a-zA-Z and numbers to keep things simple for now), they are assigned a `mathcode' with \cmd\Umathcode\ that maps from input letter to output font glyph slot. This is done with the equivalent of
+% \begin{Verbatim}
+% \Umathcode`\a = 7 1 "1D44E\relax
+% \Umathcode`\b = 7 1 "1D44F\relax
+% \Umathcode`\c = 7 1 "1D450\relax
+% ...
+% \end{Verbatim}
+% When switching from regular letters to, say, \cmd\mathrm, we now need to execute a new mapping:
+% \begin{Verbatim}
+% \Umathcode`\a = 7 1 `\a\relax
+% \Umathcode`\b = 7 1 `\b\relax
+% \Umathcode`\c = 7 1 `\c\relax
+% ...
+% \end{Verbatim}
+% This is fairly straightforward to perform when we're defining our own commands such as \cmd\symbf\ and so on. However, this means that `classical' \TeX\ font setups will break, because with the original mapping still in place, the engine will be attempting to insert unicode maths glyphs from a standard font.
+%
+% \begin{macro}{\use@mathgroup}
+% To overcome this, we patch \cs{use@mathgroup}, which is only used inside of commands
+% such as \cs{mathXYZ}, so this shouldn't have any side-effects.
+% Omit the test for math mode because this is only called \emph{inside} \cs{mathrm} or similar,
+% which already has a math mode check.
+% \begin{macrocode}
+\cs_set:Npn \use@mathgroup #1 #2
+ {
+ \math@bgroup
+ \cs_if_eq:cNF {M@\f@encoding} #1 {#1}
+ \@@_switch_to:n {literal}
+ \@@_mathgroup_set:n {#2}
+ \math@egroup
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% In LaTeX maths, the command |\operator@font| is defined that switches to the |operator| mathgroup. The classic example is the |\sin| in |$\sin{x}$|; essentially we’re using |\mathrm| to typeset the upright symbols, but the syntax is |{\operator@font sin}|.
+% I thought that hooking into |\operator@font| would be hard because all other maths font selection in 2e uses |\mathrm{...}| style.
+% Then reading source2e a little more I stumbled upon \cs{@fontswitch}.
+% Reimplement that here to avoid \cs{bgroup}/\cs{egroup}.
+% \begin{macro}{\operator@font}
+% \begin{macrocode}
+\cs_set:Npn \operator@font
+ {
+ \@@_switch_to:n {literal}
+ \@@_fontswitch:n { \g_@@_operator_mathfont_tl }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fontswitch:n}
+% Omit the check for math mode as \verb|#1| should do that for us.
+% \begin{macrocode}
+\cs_set:Nn \@@_fontswitch:n
+ {
+ \cs_set_eq:NN \math@bgroup \scan_stop:
+ \cs_set_eq:NN \@@_group_begin: \scan_stop:
+ \cs_set:Npn \@@_group_end:n % takes no argument in this case
+ {
+ \cs_set_eq:NN \@@_group_begin: \@@_group_begin_frozen:
+ \cs_set_eq:NN \@@_group_end:n \@@_group_end_frozen:n
+ \cs_set_eq:NN \math@bgroup \@@@@math@bgroup
+ \cs_set_eq:NN \math@egroup \@@@@math@egroup
+ }
+ \cs_set_eq:NN \math@egroup \@@_group_end:n
+ #1 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Hooks into \pkg{fontspec}}
+%
+% Historically, \cs{mathrm} and so on were completely overwritten by \pkg{unicode-math}, and \pkg{fontspec}'s methods for setting these fonts in the classical manner were bypassed.
+%
+% While we could now re-activate the way that \pkg{fontspec} does the following, because we can now change maths fonts whenever it's better to define new commands in \pkg{unicode-math} to define the \cs{mathXYZ} fonts.
+%
+% \subsubsection{Text font}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \tl_if_eq:nnT {o}
+\@@_cs_set:Nn \__fontspec_setmainfont_hook:nn
+ {
+ \tl_if_eq:onT {\g__fontspec_mathrm_tl} {\rmdefault}
+ {
+%<XE> \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g__fontspec_mathrm_tl {Renderer=Basic,#1} {#2}
+ \__fontspec_setmathrm_hook:nn {#1} {#2}
+ }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setsansfont_hook:nn
+ {
+ \tl_if_eq:onT {\g__fontspec_mathsf_tl} {\sfdefault}
+ {
+%<XE> \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g__fontspec_mathsf_tl {Renderer=Basic,#1} {#2}
+ \__fontspec_setmathsf_hook:nn {#1} {#2}
+ }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setmonofont_hook:nn
+ {
+ \tl_if_eq:onT {\g__fontspec_mathtt_tl} {\ttdefault}
+ {
+%<XE> \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {#1} {#2}
+%<LU> \fontspec_gset_family:Nnn \g__fontspec_mathtt_tl {Renderer=Basic,#1} {#2}
+ \__fontspec_setmathtt_hook:nn {#1} {#2}
+ }
+ }
+% \end{macrocode}
+%
+% \subsubsection{Maths font}
+%
+% If the maths fonts are set explicitly, then the text commands above will not execute
+% their branches to set the maths font alphabets.
+%
+% Helper macro for looking up customisable series' by family (new \LaTeXe\ feature 2020).
+% \begin{macrocode}
+\cs_new:Nn \@@_rm_series_default:n
+ {
+ \ifcsname #1series@rm\endcsname
+ \csname #1series@rm\endcsname
+ \else
+ \csname #1default\endcsname
+ \fi
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setmathrm_hook:nn
+ {
+ \SetMathAlphabet\mathrm{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl{\@@_rm_series_default:n {md}}\shapedefault
+ \SetMathAlphabet\mathit{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl{\@@_rm_series_default:n {md}}\itdefault
+ \SetMathAlphabet\mathbf{normal}\g_fontspec_encoding_tl\g__fontspec_mathrm_tl{\@@_rm_series_default:n {bf}}\shapedefault
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setboldmathrm_hook:nn
+ {
+ \SetMathAlphabet\mathrm{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl{\@@_rm_series_default:n {md}}\shapedefault
+ \SetMathAlphabet\mathbf{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl{\@@_rm_series_default:n {bf}}\shapedefault
+ \SetMathAlphabet\mathit{bold}\g_fontspec_encoding_tl\g__fontspec_bfmathrm_tl\mddefault\itdefault
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setmathsf_hook:nn
+ {
+ \SetMathAlphabet\mathsf{normal}\g_fontspec_encoding_tl\g__fontspec_mathsf_tl{\@@_rm_series_default:n {md}}\shapedefault
+ \SetMathAlphabet\mathsf{bold} \g_fontspec_encoding_tl\g__fontspec_mathsf_tl{\@@_rm_series_default:n {bf}}\shapedefault
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_cs_set:Nn \__fontspec_setmathtt_hook:nn
+ {
+ \SetMathAlphabet\mathtt{normal}\g_fontspec_encoding_tl\g__fontspec_mathtt_tl{\@@_rm_series_default:n {md}}\shapedefault
+ \SetMathAlphabet\mathtt{bold} \g_fontspec_encoding_tl\g__fontspec_mathtt_tl{\@@_rm_series_default:n {bf}}\shapedefault
+ }
+% \end{macrocode}
+%
+% I can't quite remember the logic behind the following two.
+%
+% If \pkg{fontspec} has been loaded and \verb|\setmathsf| (etc) run, this
+% syncs things up:
+% \begin{macrocode}
+\tl_if_eq:onF {\g__fontspec_mathrm_tl} {\rmdefault} { \__fontspec_setmathrm_hook:nn {} {} }
+\tl_if_eq:onF {\g__fontspec_mathsf_tl} {\sfdefault} { \__fontspec_setmathsf_hook:nn {} {} }
+\tl_if_eq:onF {\g__fontspec_mathtt_tl} {\ttdefault} { \__fontspec_setmathtt_hook:nn {} {} }
+% \end{macrocode}
+%
+% I suppose this is to make things work if neither fontspec or unicode-math
+% load any fonts: (I should check that)
+% \begin{macrocode}
+\AtBeginDocument
+ {
+ \tl_if_eq:onT {\g__fontspec_mathrm_tl} {\rmdefault} { \__fontspec_setmathrm_hook:nn {} {} }
+ \tl_if_eq:onT {\g__fontspec_mathsf_tl} {\sfdefault} { \__fontspec_setmathsf_hook:nn {} {} }
+ \tl_if_eq:onT {\g__fontspec_mathtt_tl} {\ttdefault} { \__fontspec_setmathtt_hook:nn {} {} }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-msg.dtx b/macros/unicodetex/latex/unicode-math/um-code-msg.dtx
new file mode 100644
index 0000000000..c93809cf4f
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-msg.dtx
@@ -0,0 +1,156 @@
+%%^^A%% um-code-msg.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Definitions of error, warning, and log messages.
+
+% \section{Error messages}
+% \seclabel{codemsg}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\char_set_catcode_space:n {32}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_msg_new:nn {no-tfrac}
+{
+ Small fraction command \protect\tfrac\ not defined.\\
+ Load amsmath or define it manually before loading unicode-math.
+}
+\@@_msg_new:nn {default-math-font}
+{
+ Defining the default maths font as '\l_@@_fontname_tl'.
+}
+\@@_msg_new:nn {setup-implicit}
+{
+ Setup alphabets: implicit mode.
+}
+\@@_msg_new:nn {setup-explicit}
+{
+ Setup alphabets: explicit mode.
+}
+\@@_msg_new:nn {alph-initialise}
+{
+ Initialising \@backslashchar math#1.
+}
+\@@_msg_new:nn {setup-alph}
+{
+ Setup alphabet: #1.
+}
+\@@_msg_new:nn {no-alphabet}
+{
+ I am trying to set up alphabet"#1" but there are no configuration settings for it.
+ (See source file "unicode-math-alphabets.dtx" to debug.)
+}
+\@@_msg_new:nn {no-named-range}
+ {
+ I am trying to define new alphabet "#2" in range "#1", but range "#1" hasn't been defined yet.
+ }
+\@@_msg_new:nn {missing-alphabets}
+ {
+ Missing math alphabets in font "\fontname\g_@@_curr_font_cmd_tl" \\ \\
+ \seq_map_function:NN \l_@@_missing_alph_seq \@@_print_indent:n
+ }
+\cs_new:Nn \@@_print_indent:n { \space\space\space\space #1 \\ }
+\@@_msg_new:nn {macro-expected}
+{
+ I've expected that #1 is a macro, but it isn't.
+}
+\@@_msg_new:nn {wrong-meaning}
+{
+ I've expected #1 to have the meaning #3, but it has the meaning #2.
+}
+\@@_msg_new:nn {patch-macro}
+{
+ I'm going to patch macro #1.
+}
+\@@_msg_new:nn {mathtools-overbracket} {
+ Using \token_to_str:N \overbracket\ and
+ \token_to_str:N \underbracket\ from
+ `mathtools' package.\\
+ \\
+ Use \token_to_str:N \Uoverbracket\ and
+ \token_to_str:N \Uunderbracket\ for
+ original `unicode-math' definition.
+}
+\@@_msg_new:nn {mathtools-colon} {
+ I'm going to overwrite the following commands from
+ the `mathtools' package: \\ \\
+ \ \ \ \ \token_to_str:N \dblcolon,
+ \token_to_str:N \coloneqq,
+ \token_to_str:N \Coloneqq,
+ \token_to_str:N \eqqcolon. \\ \\
+ Note that since I won't overwrite the other colon-like
+ commands, using them will lead to inconsistencies.
+}
+\@@_msg_new:nn {colonequals} {
+ I'm going to overwrite the following commands from
+ the `colonequals' package: \\ \\
+ \ \ \ \ \token_to_str:N \ratio,
+ \token_to_str:N \coloncolon,
+ \token_to_str:N \minuscolon, \\
+ \ \ \ \ \token_to_str:N \colonequals,
+ \token_to_str:N \equalscolon,
+ \token_to_str:N \coloncolonequals. \\ \\
+ Note that since I won't overwrite the other colon-like
+ commands, using them will lead to inconsistencies.
+ Furthermore, changing \token_to_str:N \colonsep \c_space_tl
+ or \token_to_str:N \doublecolonsep \c_space_tl won't have
+ any effect on the re-defined commands.
+}
+\@@_msg_new:nn {bad-cs-in-range}
+ {
+ Command `#1` in math range is not recognised as a maths symbol.
+ Check file "unicode-math-table.tex" for allowable commands.
+ }
+\@@_msg_new:nn {legacy-char-not-supported}
+ {
+ Command `#1` is a legacy maths symbol that is not supported by unicode-math.
+ }
+\@@_msg_new:nn {range-not-bf-sf}
+ {
+ Range alphabets cannot include alphabets referring to `bf`, `sf`, or `bfsf`
+ since they relate to input commands not output glyphs.
+ Use `bfit` or `bfup` (etc.) to specify which.
+ }
+\@@_msg_new:nn {no-main-font}
+ {
+ No main maths font has been set up yet.\\If you simply want ‘the default’, use: \\
+ \iow_indent:n {\token_to_str:N\setmathfont{latinmodern-math.otf}}
+ }
+\@@_msg_new:nn {not-ot-math}
+ {
+ The first font loaded by unicode-math must be an OpenType Math font (with script=math).
+ If you simply want ‘the default’ before loading supplementary fonts over the top for certain
+ ranges, use: \\
+ \iow_indent:n {\token_to_str:N\setmathfont{latinmodern-math.otf}}
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\char_set_catcode_ignore:n {32}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-opening.dtx b/macros/unicodetex/latex/unicode-math/um-code-opening.dtx
new file mode 100644
index 0000000000..16e3213998
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-opening.dtx
@@ -0,0 +1,410 @@
+%%^^A%% um-code-opening.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Assorted initialisation tasks, including some low-level function definitions.
+
+% \section{Start of the package code}
+%
+% The prefix for \pkg{unicode-math} is \texttt{um}:
+% \begin{macrocode}
+%<@@=um>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \paragraph{Packages}
+% Assuming people are running up-to-date packages.
+% \begin{macrocode}
+\RequirePackage{xparse,l3keys2e}
+\RequirePackage{fontspec}
+\RequirePackage{fix-cm}
+\RequirePackage{amsmath}
+%<LU>\RequirePackage{lualatex-math}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set_protected:Npn \@@_after_package:nNn #1 #2 #3
+ {
+ \AtBeginDocument
+ {
+ \cs_new_protected:Npn #2 {#3}
+ \@ifpackageloaded {#1} {#2} {}
+ }
+ }
+\RequirePackage{xparse,l3keys2e}
+\RequirePackage{fontspec}
+\RequirePackage{fix-cm}
+%<LU>\RequirePackage{lualatex-math}
+% \end{macrocode}
+%
+% \subsection{\pkg{expl3} variants}
+%
+% Variants needed from \pkg{expl3}:
+% \begin{macrocode}
+\cs_set_protected_nopar:Npn \exp_last_unbraced:NNx { \::N \::x_unbraced \::: }
+% \end{macrocode}
+%
+% For \pkg{fontspec}:
+% \begin{macrocode}
+\cs_generate_variant:Nn \fontspec_set_family:Nnn {Nx,Nxx}
+\cs_generate_variant:Nn \prop_get:NnNTF {cx}
+\cs_generate_variant:Nn \tl_if_eq:nnF {o}
+% \end{macrocode}
+%
+%
+% \subsection{Low level commands}
+%
+% \begin{macrocode}
+\cs_set_eq:NN \@@_group_begin: \group_begin:
+\cs_set_protected:Npn \@@_group_end:n #1 { #1 \group_end: }
+\cs_set_eq:NN \@@_group_begin_frozen: \@@_group_begin:
+\cs_set_eq:NN \@@_group_end_frozen:n \@@_group_end:n
+% \end{macrocode}
+%
+%
+% \subsection{Primitive font commands}
+%
+% What might end up being provided by the kernel.
+%
+% \begin{macro}{\@@_glyph_if_exist:NnTF}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_glyph_if_exist:Nn {p,TF,T,F}
+ {
+ \tex_iffontchar:D #1 #2 \scan_stop:
+ \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fontface_gset_eq:NN}
+% \begin{macrocode}
+\cs_set_protected:Nn \@@_fontface_gset_eq:NN
+ {
+ \tex_global:D \tex_let:D #1 #2
+ }
+\cs_generate_variant:Nn \@@_fontface_gset_eq:NN {cN}
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Mathcode and friends}
+%
+% \begin{macro}{\@@_set_mathcode:nnnn}
+% \begin{macro}{\@@_set_mathcode:nnn}
+% These are all wrappers for the primitive commands that take numerical
+% input only.
+% \begin{macrocode}
+\cs_set:Npn \@@_set_mathcode:nnnn #1#2#3#4
+ {
+ \Umathcode \int_eval:n {#1} =
+ \mathchar@type#2 \csname sym#3\endcsname \int_eval:n {#4} \scan_stop:
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_set:Npn \@@_set_mathcode:nnn #1#2#3
+ {
+ \Umathcode \int_eval:n {#1} =
+ \mathchar@type#2 \csname sym#3\endcsname \int_eval:n {#1} \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_mathchar:NNnn}
+% \begin{macro}{\@@_set_mathchar:cNnn}
+% \begin{macrocode}
+\cs_set:Npn \@@_set_mathchar:NNnn #1#2#3#4
+ {
+ \Umathchardef #1 =
+ \mathchar@type#2 \csname sym#3\endcsname \int_eval:n {#4} \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \@@_set_mathchar:NNnn {c}
+% \end{macrocode}
+%
+% \begin{macro}{\@@_set_delcode:nnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_delcode:nnn
+ {
+ \Udelcode#2 = \csname sym#1\endcsname #3 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_radical:nn}
+% \begin{macrocode}
+\cs_new:Nn \@@_radical:nn
+ {
+ \Uradical \csname sym#1\endcsname #2 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_delimiter:Nnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_delimiter:Nnn
+ {
+ \Udelimiter \mathchar@type#1 \csname sym#2\endcsname #3 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_accent:nnn}
+% \begin{macrocode}
+\cs_new:Nn \@@_accent:nnn
+ {
+ \Umathaccent #1~ \mathchar@type\mathaccent \use:c { sym #2 } #3 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_char_gmake_mathactive:N}
+% \begin{macro}{\@@_char_gmake_mathactive:n}
+% \begin{macrocode}
+\cs_new:Nn \@@_char_gmake_mathactive:N
+ {
+ \tex_global:D \tex_mathcode:D `#1 = "8000 \scan_stop:
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Nn \@@_char_gmake_mathactive:n
+ {
+ \tex_global:D \tex_mathcode:D \int_eval:n {#1} = "8000 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_mathactive_remap:nn}
+% Makes |#1| math-active and defines its meaning to be |#2|.
+% This is a global operation.
+% \begin{macrocode}
+\cs_new:Nn \@@_mathactive_remap:nn
+ {
+ \group_begin:
+ \cs_set_protected:Npn \@@_tmp: {#2}
+ \@@_char_gmake_mathactive:n {#1}
+ \char_gset_active_eq:nN {#1} \@@_tmp:
+ \group_end:
+ }
+% \end{macrocode}
+%
+% \subsubsection{NFSS-related interfaces}
+%
+% \begin{macro}{\@@_mathgroup_set:n}
+% Remember that \cs{mathgroup} is just \cs{fam}!
+% \begin{macrocode}
+\cs_new_protected:Nn \@@_mathgroup_set:n
+ {
+ \tex_fam:D #1 \scan_stop:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsubsection{Font parameters}
+%
+% \begin{macro}{\@@_copy_fontdimen:nnN}
+% \begin{macrocode}
+\cs_new:Nn \@@_copy_fontdimen:nnN
+ {
+ \fontdimen #1 \font = \the \fontdimen #2 #3 \relax
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_zero_fontdimen:n}
+% \begin{macrocode}
+\cs_new:Nn \@@_zero_fontdimen:n
+ {
+ \fontdimen #1 \font = 0pt\relax
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_fontdimen_from_param:Nnn}
+% This function extracts the math font dimen \verb|#3| from the font \verb|#1|
+% and sets fontdimen \verb|#2| of the same font to that value.
+%
+% Use \XeTeX's fontdimen approach because it's tidy. We don't need bells and whistles here.
+% \begin{macrocode}
+%<*LU>
+\cs_new_protected:Nn \@@_fontdimen_from_param:nn
+ {
+ \fontdimen #1 \font =
+ \lua_now:n { fontspec.mathfontdimen(font.current(),"#2") }
+ \scan_stop:
+ }
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+%^^A \begin{function}[EXP, added = 2019-01-19]{\@@_int_if_zero_p:n, \@@_int_if_zero:nTF}
+%^^A \begin{syntax}
+%^^A \cs{int_if_zero_p:n} \Arg{intexpr}
+%^^A \cs{int_if_zero:nTF} \Arg{intexpr} \Arg{true code} \Arg{false code}
+%^^A \end{syntax}
+%^^A A conditional for testing if the \meta{intexpr} evaluates to zero.
+%^^A This is simply a shorthand for
+%^^A \begin{verbatim}
+%^^A \int_compare_p:nNn {intexpr} = {0}
+%^^A \end{verbatim}
+%^^A \end{function}
+%
+% \begin{macro}{\@@_int_if_zero_p:n}
+% \begin{macro}{\@@_int_if_zero:nTF}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_int_if_zero:n {p,TF,T,F}
+ {
+ \int_compare:nNnTF {#1} = 0 {\prg_return_true:} {\prg_return_false:}
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%
+% \subsection{Alphabet Unicode positions (USVs)}
+%
+% Before we begin, let's define the positions of the various Unicode
+% alphabets so that our code is a little more readable.\footnote{`\textsc{u.s.v.}' stands
+% for `Unicode scalar value'.}
+%
+% \begin{macro}{\usv_set:nnn,\@@_to_usv:nn}
+% Rather than `readable', in the end, this makes the code more extensible.
+% \begin{macrocode}
+\cs_new:Nn \usv_set:nnn { \tl_const:cn { c_@@_#1_#2_usv } {#3} }
+\cs_new:Nn \@@_to_usv:nn { \use:c { c_@@_#1_#2_usv } }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_usv_if_exist:nnTF}
+% \begin{macrocode}
+\prg_new_conditional:Nnn \@@_usv_if_exist:nn {T,F,TF}
+ {
+ \cs_if_exist:cTF { c_@@_#1_#2_usv }
+ \prg_return_true: \prg_return_false:
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Overcoming \texorpdfstring{\cmd\@onlypreamble}{\textbackslash @onlypreamble}}
+%
+% The requirement of only setting up the maths fonts in the preamble is lifted.
+% (Perhaps unwisely.)
+% \begin{macrocode}
+\tl_map_inline:nn
+ {
+ \new@mathgroup\cdp@list\cdp@elt\DeclareMathSizes
+ \@DeclareMathSizes\newmathalphabet\newmathalphabet@@\newmathalphabet@@@
+ \DeclareMathVersion\define@mathalphabet\define@mathgroup\addtoversion
+ \version@list\version@elt\alpha@list\alpha@elt
+ \restore@mathversion\init@restore@version\dorestore@version\process@table
+ \new@mathversion\DeclareSymbolFont\group@list\group@elt
+ \new@symbolfont\SetSymbolFont\SetSymbolFont@\get@cdp
+ \DeclareMathAlphabet\new@mathalphabet\SetMathAlphabet\SetMathAlphabet@
+ \DeclareMathAccent\set@mathaccent\DeclareMathSymbol\set@mathchar
+ \set@mathsymbol\DeclareMathDelimiter\@xxDeclareMathDelimiter
+ \@DeclareMathDelimiter\@xDeclareMathDelimiter\set@mathdelimiter
+ \set@@mathdelimiter\DeclareMathRadical\mathchar@type
+ \DeclareSymbolFontAlphabet\DeclareSymbolFontAlphabet@
+ }
+ {
+ \tl_remove_once:Nn \@preamblecmds {\do#1}
+ }
+% \end{macrocode}
+%
+%
+% \subsection{Wrappers for kernel commands}
+%
+% Messages themselves are defined in \secref{codemsg}.
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_error:n { \msg_error:nn {unicode-math} }
+\cs_new:Npn \@@_error:nx { \msg_error:nnx {unicode-math} }
+\cs_new:Npn \@@_warning:n { \msg_warning:nn {unicode-math} }
+\cs_new:Npn \@@_warning:nnn { \msg_warning:nnxx {unicode-math} }
+\cs_new:Npn \@@_log:n { \msg_log:nn {unicode-math} }
+\cs_new:Npn \@@_log:nx { \msg_log:nnx {unicode-math} }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_generate_variant:Nn \msg_new:nnn {nnx}
+\cs_generate_variant:Nn \msg_new:nnnn {nnxx}
+\cs_new:Nn \@@_msg_new:nn { \msg_new:nnx {unicode-math} {#1} { \tl_trim_spaces:n {#2} } }
+% \end{macrocode}
+%
+%
+% \begin{macro}{\@@_cs_new:Nn}
+% \begin{macrocode}
+%<*debug>
+\int_new:N \g_@@_debug_nest_int
+\cs_new:Nn \@@_debug:n
+ {
+ \typeout{ <UM~DEBUG>~\prg_replicate:nn \g_@@_debug_nest_int {::}~ #1}
+ }
+\cs_new:Nn \@@_debug_start:n
+ {
+ \int_gincr:N \g_@@_debug_nest_int
+ \@@_debug:n {#1}
+ }
+\cs_new:Nn \@@_debug_end:n
+ {
+ \int_gdecr:N \g_@@_debug_nest_int
+ }
+%</debug>
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_cs_set:Nn #1 #2
+ {
+ \cs_if_exist:NF #1 { \ERROR{CS~ DOES~ NOT~ EXIST,~ USE~ "NEW"} }
+ \cs_set_protected:Nn #1
+ {
+%<debug>\@@_debug_start:n { \cs_to_str:N #1 }
+ #2
+%<debug>\@@_debug_end:n { \cs_to_str:N #1 }
+ }
+ }
+\cs_new:Npn \@@_cs_new:Nn #1 #2
+ {
+ \cs_new_protected:Nn #1
+ {
+%<debug>\@@_debug_start:n { \cs_to_str:N #1 }
+ #2
+%<debug>\@@_debug_end:n { \cs_to_str:N #1 }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-pkgopt.dtx b/macros/unicodetex/latex/unicode-math/um-code-pkgopt.dtx
new file mode 100644
index 0000000000..68d265674a
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-pkgopt.dtx
@@ -0,0 +1,330 @@
+%%^^A%% um-code-pkgopt.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Package options.
+
+% \section{setup and package options}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\@@_keys_choices:nn}
+% To simplify the creation of option keys, let's iterate in pairs rather than worry about equals signs and commas.
+% \begin{macrocode}
+\cs_new:Nn \@@_keys_choices:nn
+ {
+ \cs_set:Npn \@@_keys_choices_fn:nn { \@@_keys_choices_aux:nnn {#1} }
+ \use:x
+ {
+ \exp_not:N \keys_define:nn {unicode-math}
+ {
+ #1 .choice: ,
+ \@@_tl_map_dbl:nN {#2} \@@_keys_choices_fn:nn
+ }
+ }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\cs_new:Nn \@@_keys_choices_aux:nnn { #1 / #2 .code:n = { \exp_not:n {#3} } , }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_tl_map_dbl:nN
+ {
+ \__@@_tl_map_dbl:Nnn #2 #1 \q_recursion_tail {}{} \q_recursion_stop
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \__@@_tl_map_dbl:Nnn
+ {
+ \quark_if_recursion_tail_stop:n {#2}
+ \quark_if_recursion_tail_stop:n {#3}
+ #1 {#2} {#3}
+ \__@@_tl_map_dbl:Nnn #1
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \paragraph{Compatibility}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathup}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathrm_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathrm_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathrm}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathrm_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathrm_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathit}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathit_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathit_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathbf}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathbf_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathbf_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathsf}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathsf_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathsf_text_bool }
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_keys_choices:nn {mathtt}
+ {
+ {sym} { \bool_gset_false:N \g_@@_mathtt_text_bool }
+ {text} { \bool_gset_true:N \g_@@_mathtt_text_bool }
+ }
+% \end{macrocode}
+%
+% \paragraph{math-style}
+% \begin{macrocode}
+\@@_keys_choices:nn {normal-style}
+ {
+ {ISO} {
+ \bool_gset_false:N \g_@@_literal_bool
+ \bool_gset_false:N \g_@@_upGreek_bool
+ \bool_gset_false:N \g_@@_upgreek_bool
+ \bool_gset_false:N \g_@@_upLatin_bool
+ \bool_gset_false:N \g_@@_uplatin_bool
+ }
+ {TeX} {
+ \bool_gset_false:N \g_@@_literal_bool
+ \bool_gset_true:N \g_@@_upGreek_bool
+ \bool_gset_false:N \g_@@_upgreek_bool
+ \bool_gset_false:N \g_@@_upLatin_bool
+ \bool_gset_false:N \g_@@_uplatin_bool
+ }
+ {french} {
+ \bool_gset_false:N \g_@@_literal_bool
+ \bool_gset_true:N \g_@@_upGreek_bool
+ \bool_gset_true:N \g_@@_upgreek_bool
+ \bool_gset_true:N \g_@@_upLatin_bool
+ \bool_gset_false:N \g_@@_uplatin_bool
+ }
+ {upright} {
+ \bool_gset_false:N \g_@@_literal_bool
+ \bool_gset_true:N \g_@@_upGreek_bool
+ \bool_gset_true:N \g_@@_upgreek_bool
+ \bool_gset_true:N \g_@@_upLatin_bool
+ \bool_gset_true:N \g_@@_uplatin_bool
+ }
+ {literal} {
+ \bool_gset_true:N \g_@@_literal_bool
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_choices:nn {math-style}
+ {
+ {ISO} {
+ \unimathsetup { nabla=upright, partial=italic,
+ normal-style=ISO, bold-style=ISO, sans-style=italic }
+ }
+ {TeX} {
+ \unimathsetup { nabla=upright, partial=italic,
+ normal-style=TeX, bold-style=TeX, sans-style=upright }
+ }
+ {french} {
+ \unimathsetup { nabla=upright, partial=upright,
+ normal-style=french, bold-style=upright, sans-style=upright }
+ }
+ {upright} {
+ \unimathsetup { nabla=upright, partial=upright,
+ normal-style=upright, bold-style=upright, sans-style=upright }
+ }
+ {literal} {
+ \unimathsetup { colon=literal, nabla=literal, partial=literal,
+ normal-style=literal, bold-style=literal, sans-style=literal }
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{bold-style}
+% \begin{macrocode}
+\@@_keys_choices:nn {bold-style}
+ {
+ {ISO} {
+ \bool_gset_false:N \g_@@_bfliteral_bool
+ \bool_gset_false:N \g_@@_bfupGreek_bool
+ \bool_gset_false:N \g_@@_bfupgreek_bool
+ \bool_gset_false:N \g_@@_bfupLatin_bool
+ \bool_gset_false:N \g_@@_bfuplatin_bool
+ }
+ {TeX} {
+ \bool_gset_false:N \g_@@_bfliteral_bool
+ \bool_gset_true:N \g_@@_bfupGreek_bool
+ \bool_gset_false:N \g_@@_bfupgreek_bool
+ \bool_gset_true:N \g_@@_bfupLatin_bool
+ \bool_gset_true:N \g_@@_bfuplatin_bool
+ }
+ {upright} {
+ \bool_gset_false:N \g_@@_bfliteral_bool
+ \bool_gset_true:N \g_@@_bfupGreek_bool
+ \bool_gset_true:N \g_@@_bfupgreek_bool
+ \bool_gset_true:N \g_@@_bfupLatin_bool
+ \bool_gset_true:N \g_@@_bfuplatin_bool
+ }
+ {literal} {
+ \bool_gset_true:N \g_@@_bfliteral_bool
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{sans-style}
+% \begin{macrocode}
+\@@_keys_choices:nn {sans-style}
+ {
+ {italic} { \bool_gset_false:N \g_@@_upsans_bool }
+ {upright} { \bool_gset_true:N \g_@@_upsans_bool }
+ {literal} { \bool_gset_true:N \g_@@_sfliteral_bool }
+ }
+% \end{macrocode}
+%
+%
+% \paragraph{Nabla and partial}
+% \begin{macrocode}
+\@@_keys_choices:nn {nabla}
+ {
+ {upright} {
+ \bool_gset_false:N \g_@@_literal_Nabla_bool
+ \bool_gset_true:N \g_@@_upNabla_bool
+ }
+ {italic} {
+ \bool_gset_false:N \g_@@_literal_Nabla_bool
+ \bool_gset_false:N \g_@@_upNabla_bool
+ }
+ {literal} {
+ \bool_gset_true:N \g_@@_literal_Nabla_bool
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_choices:nn {partial}
+ {
+ {upright} {
+ \bool_gset_false:N \g_@@_literal_partial_bool
+ \bool_gset_true:N \g_@@_uppartial_bool
+ }
+ {italic} {
+ \bool_gset_false:N \g_@@_literal_partial_bool
+ \bool_gset_false:N \g_@@_uppartial_bool
+ }
+ {literal} {
+ \bool_gset_true:N \g_@@_literal_partial_bool
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Colon style}
+% \begin{macrocode}
+\@@_keys_choices:nn {colon}
+ {
+ {literal} { \bool_gset_true:N \g_@@_literal_colon_bool }
+ {TeX} { \bool_gset_false:N \g_@@_literal_colon_bool }
+ }
+% \end{macrocode}
+%
+% \paragraph{Slash delimiter style}
+% \begin{macrocode}
+\@@_keys_choices:nn {slash-delimiter}
+ {
+ {ascii} { \tl_gset:Nn \g_@@_slash_delimiter_usv {"002F} }
+ {frac} { \tl_gset:Nn \g_@@_slash_delimiter_usv {"2044} }
+ {div} { \tl_gset:Nn \g_@@_slash_delimiter_usv {"2215} }
+ }
+% \end{macrocode}
+%
+%
+% \paragraph{Active fraction style}
+% \begin{macrocode}
+\@@_keys_choices:nn {active-frac}
+ {
+ {small}
+ {
+ \cs_if_exist:NTF \tfrac
+ { \bool_set_true:N \l_@@_smallfrac_bool }
+ {
+ \@@_warning:n {no-tfrac}
+ \bool_set_false:N \l_@@_smallfrac_bool
+ }
+ \use:c {@@_setup_active_frac:}
+ }
+
+ {normalsize}
+ {
+ \bool_set_false:N \l_@@_smallfrac_bool
+ \use:c {@@_setup_active_frac:}
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Debug/tracing}
+%
+% \begin{macrocode}
+\keys_define:nn {unicode-math}
+ {
+ warnings-off .code:n =
+ {
+ \clist_map_inline:nn {#1}
+ { \msg_redirect_name:nnn { unicode-math } { ##1 } { none } }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\@@_keys_choices:nn {trace}
+ {
+ {on} {} % default
+ {debug} { \msg_redirect_module:nnn { unicode-math } { log } { warning } }
+ {off} { \msg_redirect_module:nnn { unicode-math } { log } { none } }
+ }
+% \end{macrocode}
+%
+% \subsection{Defaults}
+%
+% \begin{macrocode}
+\unimathsetup {math-style=TeX}
+\unimathsetup {slash-delimiter=ascii}
+\unimathsetup {trace=off}
+\unimathsetup {mathrm=text,mathit=text,mathbf=text,mathsf=text,mathtt=text}
+\cs_if_exist:NT \tfrac { \unimathsetup {active-frac=small} }
+\ProcessKeysOptions {unicode-math}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-primes.dtx b/macros/unicodetex/latex/unicode-math/um-code-primes.dtx
new file mode 100644
index 0000000000..ad3f3be642
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-primes.dtx
@@ -0,0 +1,385 @@
+%%^^A%% um-code-primes.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% The definitions needed for the input of primes.
+
+% \section{Primes}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% We need a new `prime' algorithm. Unicode math has four pre-drawn prime glyphs.
+% \begin{quote}\obeylines
+% \unichar{2032} {prime} (\cs{prime}): $x\prime$
+% \unichar{2033} {double prime} (\cs{dprime}): $x\dprime$
+% \unichar{2034} {triple prime} (\cs{trprime}): $x\trprime$
+% \unichar{2057} {quadruple prime} (\cs{qprime}): $x\qprime$
+% \end{quote}
+% As you can see, they're all drawn at the correct height without being superscripted.
+% However, in a correctly behaving OpenType font,
+% we also see different behaviour after the \texttt{ssty} feature is applied:
+% \begin{quote}
+% \font\1="[XITSMath-Regular.otf]:script=math,+ssty=0"\1
+% \char"1D465\char"2032\quad
+% \char"1D465\char"2033\quad
+% \char"1D465\char"2034\quad
+% \char"1D465\char"2057
+% \end{quote}
+% The glyphs are now `full size' so that when placed inside a superscript,
+% their shape will match the originally sized ones. Many thanks to Ross Mills
+% of Tiro Typeworks for originally pointing out this behaviour.
+%
+% In regular \LaTeX, primes can be entered with the straight quote character
+% |'|, and multiple straight quotes chain together to produce multiple
+% primes. Better results can be achieved in \pkg{unicode-math} by chaining
+% multiple single primes into a pre-drawn multi-prime glyph; consider
+% $x\prime{}\prime{}\prime$ vs.\ $x\trprime$.
+%
+% For Unicode maths, we wish to conserve this behaviour and augment it with
+% the possibility of adding any combination of Unicode prime or any of the
+% $n$-prime characters. E.g., the user might copy-paste a double prime from
+% another source and then later type another single prime after it; the output
+% should be the triple prime.
+%
+% Our algorithm is:
+% \begin{itemize}[nolistsep]
+% \item Prime encountered; pcount=1.
+% \item Scan ahead; if prime: pcount:=pcount+1; repeat.
+% \item If not prime, stop scanning.
+% \item If pcount=1, \cs{prime}, end.
+% \item If pcount=2, check \cs{dprime}; if it exists, use it, end; if not, goto last step.
+% \item Ditto pcount=3 \& \cs{trprime}.
+% \item Ditto pcount=4 \& \cs{qprime}.
+% \item If pcount>4 or the glyph doesn't exist, insert pcount \cs{prime}s with \cs{primekern} between each.
+% \end{itemize}
+%
+% This is a wrapper to insert a superscript; if there is a subsequent
+% trailing superscript, then it is included within the insertion.
+% \begin{macrocode}
+\cs_new:Nn \@@_arg_i_before_egroup:n {#1\egroup}
+\cs_new:Nn \@@_superscript:n
+ {
+ ^\bgroup #1
+ \peek_meaning_remove:NTF ^ \@@_arg_i_before_egroup:n \egroup
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_nprimes:Nn
+ {
+ \@@_superscript:n
+ {
+ #1
+ \prg_replicate:nn {#2-1} { \mskip \g_@@_primekern_muskip #1 }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_nprimes_select:nn
+ {
+ \int_case:nnF {#2}
+ {
+ {1} { \@@_superscript:n {#1} }
+ {2} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2033}
+ { \@@_superscript:n {\@@_prime_double_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ {3} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2034}
+ { \@@_superscript:n {\@@_prime_triple_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ {4} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2057}
+ { \@@_superscript:n {\@@_prime_quad_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ }
+ {
+ \@@_nprimes:Nn #1 {#2}
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Nn \@@_nbackprimes_select:nn
+ {
+ \int_case:nnF {#2}
+ {
+ {1} { \@@_superscript:n {#1} }
+ {2} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2036}
+ { \@@_superscript:n {\@@_backprime_double_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ {3} {
+ \@@_glyph_if_exist:NnTF \g_@@_prime_font_cmd_tl {"2037}
+ { \@@_superscript:n {\@@_backprime_triple_mchar} }
+ { \@@_nprimes:Nn #1 {#2} }
+ }
+ }
+ {
+ \@@_nprimes:Nn #1 {#2}
+ }
+ }
+% \end{macrocode}
+%
+% Scanning is annoying because I'm too lazy to do it for the general case.
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_scan_prime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_zero:N \l_@@_primecount_int
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_dprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {1}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_trprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {2}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_qprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {3}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_prime:
+ {
+ \int_zero:N \l_@@_primecount_int
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_dprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {1}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_trprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {2}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_qprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {3}
+ \@@_scanprime_collect:N \@@_prime_single_mchar
+ }
+\cs_new:Nn \@@_scanprime_collect:N
+ {
+ \int_incr:N \l_@@_primecount_int
+ \peek_meaning_remove:NTF '
+ { \@@_scanprime_collect:N #1 }
+ {
+ \peek_meaning_remove:NTF \@@_scan_prime:
+ { \@@_scanprime_collect:N #1 }
+ {
+ \peek_meaning_remove:NTF ^^^^2032
+ { \@@_scanprime_collect:N #1 }
+ {
+ \peek_meaning_remove:NTF \@@_scan_dprime:
+ {
+ \int_incr:N \l_@@_primecount_int
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2033
+ {
+ \int_incr:N \l_@@_primecount_int
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_trprime:
+ {
+ \int_add:Nn \l_@@_primecount_int {2}
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2034
+ {
+ \int_add:Nn \l_@@_primecount_int {2}
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_qprime:
+ {
+ \int_add:Nn \l_@@_primecount_int {3}
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2057
+ {
+ \int_add:Nn \l_@@_primecount_int {3}
+ \@@_scanprime_collect:N #1
+ }
+ {
+ \@@_nprimes_select:nn {#1} {\l_@@_primecount_int}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\cs_new:Npn \@@_scan_backprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_zero:N \l_@@_primecount_int
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_backdprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {1}
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_backtrprime:
+ {
+ \cs_set_eq:NN \@@_superscript:n \use:n
+ \int_set:Nn \l_@@_primecount_int {2}
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_backprime:
+ {
+ \int_zero:N \l_@@_primecount_int
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_backdprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {1}
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Npn \@@_scan_sup_backtrprime:
+ {
+ \int_set:Nn \l_@@_primecount_int {2}
+ \@@_scanbackprime_collect:N \@@_backprime_single_mchar
+ }
+\cs_new:Nn \@@_scanbackprime_collect:N
+ {
+ \int_incr:N \l_@@_primecount_int
+ \peek_meaning_remove:NTF `
+ {
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_backprime:
+ {
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2035
+ {
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_backdprime:
+ {
+ \int_incr:N \l_@@_primecount_int
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2036
+ {
+ \int_incr:N \l_@@_primecount_int
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF \@@_scan_backtrprime:
+ {
+ \int_add:Nn \l_@@_primecount_int {2}
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \peek_meaning_remove:NTF ^^^^2037
+ {
+ \int_add:Nn \l_@@_primecount_int {2}
+ \@@_scanbackprime_collect:N #1
+ }
+ {
+ \@@_nbackprimes_select:nn {#1} {\l_@@_primecount_int}
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\AtBeginDocument { \@@_define_prime_commands: \@@_define_prime_chars: }
+\cs_new:Nn \@@_define_prime_commands:
+ {
+ \cs_set_eq:NN \prime \@@_prime_single_mchar
+ \cs_set_eq:NN \dprime \@@_prime_double_mchar
+ \cs_set_eq:NN \trprime \@@_prime_triple_mchar
+ \cs_set_eq:NN \qprime \@@_prime_quad_mchar
+ \cs_set_eq:NN \backprime \@@_backprime_single_mchar
+ \cs_set_eq:NN \backdprime \@@_backprime_double_mchar
+ \cs_set_eq:NN \backtrprime \@@_backprime_triple_mchar
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+\group_begin:
+ \char_set_catcode_active:N \'
+ \char_set_catcode_active:N \`
+ \char_set_catcode_active:n {"2032}
+ \char_set_catcode_active:n {"2033}
+ \char_set_catcode_active:n {"2034}
+ \char_set_catcode_active:n {"2057}
+ \char_set_catcode_active:n {"2035}
+ \char_set_catcode_active:n {"2036}
+ \char_set_catcode_active:n {"2037}
+ \cs_gset:Nn \@@_define_prime_chars:
+ {
+ \cs_set_eq:NN ' \@@_scan_sup_prime:
+ \cs_set_eq:NN ^^^^2032 \@@_scan_sup_prime:
+ \cs_set_eq:NN ^^^^2033 \@@_scan_sup_dprime:
+ \cs_set_eq:NN ^^^^2034 \@@_scan_sup_trprime:
+ \cs_set_eq:NN ^^^^2057 \@@_scan_sup_qprime:
+ \cs_set_eq:NN ` \@@_scan_sup_backprime:
+ \cs_set_eq:NN ^^^^2035 \@@_scan_sup_backprime:
+ \cs_set_eq:NN ^^^^2036 \@@_scan_sup_backdprime:
+ \cs_set_eq:NN ^^^^2037 \@@_scan_sup_backtrprime:
+ }
+\group_end:
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-setchar.dtx b/macros/unicodetex/latex/unicode-math/um-code-setchar.dtx
new file mode 100644
index 0000000000..8d2ba46e2a
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-setchar.dtx
@@ -0,0 +1,298 @@
+%%^^A%% um-code-setchar.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% General assignment of maths symbols.
+
+% \section{Setting up maths chars}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \subsection{A token list to contain the data of the math table}
+%
+% Instead of \cmd\input-ing the unicode math table every time we
+% want to re-read its data, we save it within a macro. This has two
+% advantages: 1.~it should be slightly faster, at the expense of memory;
+% 2.~we don't need to worry about catcodes later, since they're frozen
+% at this point.
+%
+% In time, the case statement inside |set_mathsymbol| will be moved in here
+% to avoid re-running it every time.
+%
+% \begin{macrocode}
+\group_begin:
+ \file_get:nnN {unicode-math-table.tex} {} \l_@@_mathtable_tl
+ \cs_set:Npn \UnicodeMathSymbol #1#2#3#4
+ {
+ \exp_not:n { \_@@_sym:nnn {#1} {#2} {#3} }
+ }
+ \tl_gset:Nx \g_@@_mathtable_tl {\l_@@_mathtable_tl}
+\group_end:
+% \end{macrocode}
+%
+%
+% \begin{macro}{\@@_input_math_symbol_table:}
+% This function simply expands to the token list containing all the data.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_input_math_symbol_table: {\g_@@_mathtable_tl}
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \subsection{Definitions of the active math characters}
+%
+% Ensure catcodes are appropriate;
+% make sure |#| is an `other' so that we don't get confused with \cs{mathoctothorpe}.
+% \begin{macrocode}
+\AtBeginDocument{\@@_define_math_chars:}
+\@@_cs_new:Nn \@@_define_math_chars:
+ {
+ \group_begin:
+ \cs_set:Npn \_@@_sym:nnn ##1##2##3
+ {
+ \tl_if_in:nnT
+ { \mathord \mathalpha \mathbin \mathrel \mathpunct \mathop \mathfence }
+ {##3}
+ {
+ \exp_last_unbraced:NNx \cs_gset_eq:NN ##2 { \char_generate:nn {##1} {12} }
+ }
+ }
+ \@@_input_math_symbol_table:
+ \group_end:
+ }
+% \end{macrocode}
+%
+%
+%
+% \subsection{Commands for each symbol/glyph/char}
+%
+% \begin{macro}{\@@_set_mathsymbol:nNNn}
+% \darg{A \LaTeX\ symbol font, e.g., \texttt{operators}}
+% \darg{Symbol macro, \eg, \cmd\alpha}
+% \darg{Type, \eg, \cmd\mathalpha}
+% \darg{Slot, \eg, \texttt{"221E}}
+% There are a bunch of tests to perform to process the various characters.
+% The following assignments should all be fairly straightforward.
+%
+% The catcode setting is to work around (strange?) behaviour in LuaTeX in which catcode 11 characters don't have italic correction for maths.
+% We don't adjust ascii chars, however, because certain punctuation should not have their catcodes changed.
+% \begin{macrocode}
+\cs_set:Nn \@@_set_mathsymbol:nNNn
+ {
+ \bool_lazy_and:nnT
+ {
+ \int_compare_p:nNn {#4} > {127}
+ }
+ {
+ \int_compare_p:nNn { \char_value_catcode:n {#4} } = {11}
+ }
+ { \char_set_catcode_other:n {#4} }
+
+ \tl_case:Nn #3
+ {
+ \mathord { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathalpha { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathbin { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathrel { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathpunct { \@@_set_mathcode:nnn {#4} {#3} {#1} }
+ \mathop { \@@_set_big_operator:nnn {#1} {#2} {#4} }
+ \mathopen { \@@_set_math_open:nnn {#1} {#2} {#4} }
+ \mathclose { \@@_set_math_close:nnn {#1} {#2} {#4} }
+ \mathfence { \@@_set_math_fence:nnnn {#1} {#2} {#3} {#4} }
+ \mathaccent
+ { \@@_set_math_accent:Nnnn #2 {fixed} {#1} {#4} }
+ \mathbotaccent
+ { \@@_set_math_accent:Nnnn #2 {bottom~ fixed} {#1} {#4} }
+ \mathaccentwide
+ { \@@_set_math_accent:Nnnn #2 {} {#1} {#4} }
+ \mathbotaccentwide
+ { \@@_set_math_accent:Nnnn #2 {bottom} {#1} {#4} }
+ \mathover
+ { \@@_set_math_overunder:Nnnn #2 {} {#1} {#4} }
+ \mathunder
+ { \@@_set_math_overunder:Nnnn #2 {bottom} {#1} {#4} }
+ \mathaccentoverlay
+%<LU> { \@@_set_math_accent:Nnnn #2 {overlay~ fixed} {#1} {#4} }
+%<XE> { \@@_set_math_accent:Nnnn #2 {} {#1} {#4} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+\edef\mathfence{\string\mathfence}
+\edef\mathover{\string\mathover}
+\edef\mathunder{\string\mathunder}
+\edef\mathbotaccent{\string\mathbotaccent}
+\edef\mathaccentwide{\string\mathaccentwide}
+\edef\mathaccentoverlay{\string\mathaccentoverlay}
+\edef\mathbotaccentwide{\string\mathbotaccentwide}
+% \end{macrocode}
+%
+%
+% \begin{macro}{\@@_set_big_operator:nnn}
+% \darg{Symbol font name}
+% \darg{Macro to assign}
+% \darg{Glyph slot}
+% In the examples following, say we're defining for the symbol \cmd\sum\ ($\sum$).
+% In order for literal Unicode characters to be used in the source and still
+% have the correct limits behaviour, big operators are made math-active.
+% This involves three steps:
+% \begin{itemize}
+% \item
+% The active math char is defined to expand to the macro \cs{sum_sym}.
+% (Later, the control sequence \cs{sum} will be assigned the math char.)
+% \item
+% Declare the plain old mathchardef for the control sequence \cmd\sumop.
+% (This follows the convention of \LaTeX/\pkg{amsmath}.)
+% \item
+% Define \cs{sum_sym} as \cmd\sumop, followed by \cmd\nolimits\ if necessary.
+% \end{itemize}
+% Whether the \cmd\nolimits\ suffix is inserted is controlled by the
+% token list \cs{l_@@_nolimits_tl}, which contains a list of such characters.
+% This list is checked dynamically to allow it to be updated mid-document.
+%
+% Examples of expansion, by default, for two big operators:
+% \begin{quote}
+% (~\cs{sum} $\to$~) $\sum$ $\to$ \cs{sum_sym} $\to$ \cs{sumop}\cs{nolimits}\par
+% (~\cs{int} $\to$~) $\int$ $\to$ \cs{int_sym} $\to$ \cs{intop}
+% \end{quote}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_big_operator:nnn
+ {
+ \@@_char_gmake_mathactive:n {#3}
+ \cs_set_protected_nopar:Npx \@@_tmpa: { \exp_not:c { \cs_to_str:N #2 _sym } }
+ \char_gset_active_eq:nN {#3} \@@_tmpa:
+
+ \@@_set_mathchar:cNnn {\cs_to_str:N #2 op} \mathop {#1} {#3}
+
+ \cs_gset:cpx { \cs_to_str:N #2 _sym }
+ {
+ \exp_not:c { \cs_to_str:N #2 op }
+ \exp_not:n { \tl_if_in:NnT \l_@@_nolimits_tl {#2} \nolimits }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_open:nnn}
+% \darg{Symbol font name}
+% \darg{Macro to assign}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_open:nnn
+ {
+ \tl_if_in:NnTF \l_@@_radicals_tl {#2}
+ {
+ \cs_if_exist:NF #2
+ {
+ %% todo: check if the check is necessary
+ \cs_gset_protected_nopar:Npx #2 { \exp_not:c { \cs_to_str:N #2 sign } }
+ }
+ \cs_gset_protected_nopar:cpx { \cs_to_str:N #2 sign }
+ {
+ \@@_radical:nn {#1} {#3}
+ }
+ \tl_if_exist:cF {c_@@_radical_\cs_to_str:N #2_tl}
+ {
+ \tl_const:cn {c_@@_radical_\cs_to_str:N #2_tl} {\use:c{sym #1}~ #3}
+ }
+ }
+ {
+ \@@_set_delcode:nnn {#1} {#3} {#3}
+ \@@_set_mathcode:nnn {#3} \mathopen {#1}
+ \cs_gset_protected_nopar:Npx #2
+ { \@@_delimiter:Nnn \mathopen {#1} {#3} }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_close:nnn}
+% \darg{Symbol font name}
+% \darg{Macro to assign}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_close:nnn
+ {
+ \@@_set_delcode:nnn {#1} {#3} {#3}
+ \@@_set_mathcode:nnn {#3} \mathclose {#1}
+ \cs_gset_protected_nopar:Npx #2
+ { \@@_delimiter:Nnn \mathclose {#1} {#3} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_fence:nnnn}
+% \darg{Symbol font name}
+% \darg{Macro to assign}
+% \darg{Type, \eg, \cmd\mathalpha}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_fence:nnnn
+ {
+ \@@_set_mathcode:nnn {#4} {#3} {#1}
+ \@@_set_delcode:nnn {#1} {#4} {#4}
+ \cs_gset_protected_nopar:cpx {l \cs_to_str:N #2}
+ { \@@_delimiter:Nnn \mathopen {#1} {#4} }
+ \cs_gset_protected_nopar:cpx {r \cs_to_str:N #2}
+ { \@@_delimiter:Nnn \mathclose {#1} {#4} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_accent:Nnnn}
+% \darg{Accend command}
+% \darg{Accent type (string)}
+% \darg{Symbol font name}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_accent:Nnnn
+ {
+ \cs_gset_protected_nopar:Npx #1
+ { \@@_accent:nnn {#2} {#3} {#4} }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_set_math_overunder:Nnnn}
+% \darg{Accend command}
+% \darg{Accent type (string)}
+% \darg{Symbol font name}
+% \darg{Glyph slot}
+% \begin{macrocode}
+\cs_new:Nn \@@_set_math_overunder:Nnnn
+ {
+ \cs_gset_protected_nopar:Npx #1 ##1
+ {
+ \mathop
+ { \@@_accent:nnn {#2} {#3} {#4} {{}##1} }
+ % TODO: remove braces above ^^ which work around a LuaTeX bug
+ \limits
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-sscript.dtx b/macros/unicodetex/latex/unicode-math/um-code-sscript.dtx
new file mode 100644
index 0000000000..a2192714dd
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-sscript.dtx
@@ -0,0 +1,238 @@
+%%^^A%% um-code-sscript.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Setup for active chars needed to process subscript/superscript input chars.
+
+% \section{Unicode sub- and super-scripts}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% The idea here is to enter a scanning state after a superscript or subscript
+% is encountered.
+% If subsequent superscripts or subscripts (resp.) are found,
+% they are lumped together.
+% Each sub/super has a corresponding regular size
+% glyph which is used by \XeTeX\ to typeset the results; this means that the
+% actual subscript/superscript glyphs are never seen in the output
+% document~--- they are only used as input characters.
+%
+% Open question: should the superscript-like `modifiers' (\unichar{1D2C}
+% {modifier capital letter a} and on) be included here?
+%
+% \paragraph{Superscripts}
+% Populate a property list with superscript characters; themselves as their
+% key, and their replacement as each key's value.
+% Then make the superscript active and bind it to the scanning function.
+%
+% \cs{scantokens} makes this process much simpler since we can activate the
+% char and assign its meaning in one step.
+% \begin{macrocode}
+\cs_new:Nn \@@_setup_active_superscript:nn
+ {
+ \prop_gput:Nxn \g_@@_supers_prop { \int_eval:n {#1} } {#2}
+ \@@_mathactive_remap:nn {#1}
+ {
+ \tl_set:Nn \l_@@_ss_chain_tl {#2}
+ \cs_set_eq:NN \@@_sub_or_super:n \sp
+ \tl_set:Nn \l_@@_tmpa_tl {supers}
+ \@@_scan_sscript:
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Subscripts}
+% \begin{macrocode}
+\cs_new:Nn \@@_setup_active_subscript:nn
+ {
+ \prop_gput:Nxn \g_@@_subs_prop { \int_eval:n {#1} } {#2}
+ \@@_mathactive_remap:nn {#1}
+ {
+ \tl_set:Nn \l_@@_ss_chain_tl {#2}
+ \cs_set_eq:NN \@@_sub_or_super:n \sb
+ \tl_set:Nn \l_@@_tmpa_tl {subs}
+ \@@_scan_sscript:
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{The scanning command}
+% Collects a chain of subscripts or a chain
+% of superscripts and then typesets what it has collected.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_scan_sscript:
+ {
+ \@@_scan_sscript:TF
+ { \@@_scan_sscript: }
+ { \@@_sub_or_super:n {\l_@@_ss_chain_tl} }
+ }
+% \end{macrocode}
+% We do not skip spaces when scanning ahead, and we explicitly wish to
+% bail out on encountering a space or a brace. These cases are filtered
+% using \cs{peek_N_type:TF}. Otherwise the token can be taken as an
+% \texttt{N}-type argument. Then we search for it in the appropriate
+% property list (\cs{l_@@_tmpa_tl} is |subs| or |supers|).
+% If found, add the value to the current chain of sub/superscripts.
+% Remember to put the character back in the input otherwise.
+% The \cs{group_align_safe_begin:} and \cs{group_align_safe_end:} are
+% needed in case |#3| is |&|.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_scan_sscript:TF
+ {
+ \peek_N_type:TF
+ {
+ \group_align_safe_begin:
+ \@@_scan_sscript_aux:nnN {#1} {#2}
+ }
+ {#2}
+ }
+% \end{macrocode}
+% The look-ahead for the sscripts doesn't try to peek inside the lookahead.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_scan_sscript_aux:nnN
+ {
+ \tl_set:Nx \l_@@_tmpa_key_tl { \tl_to_str:n {#3} }
+ \prop_get:cxNTF {g_@@_\l_@@_tmpa_tl _prop}
+ { \int_eval:n { \exp_after:wN ` \l_@@_tmpa_key_tl } }
+ \l_@@_tmpb_tl
+ {
+ \tl_put_right:NV \l_@@_ss_chain_tl \l_@@_tmpb_tl
+ \group_align_safe_end:
+ #1
+ }
+ { \group_align_safe_end: #2 #3 }
+ }
+% \end{macrocode}
+%
+% \paragraph{Definitions}
+% Superscripts.
+% \begin{macrocode}
+\@@_setup_active_superscript:nn {"2070} {0}
+\@@_setup_active_superscript:nn {"00B9} {1}
+\@@_setup_active_superscript:nn {"00B2} {2}
+\@@_setup_active_superscript:nn {"00B3} {3}
+\@@_setup_active_superscript:nn {"2074} {4}
+\@@_setup_active_superscript:nn {"2075} {5}
+\@@_setup_active_superscript:nn {"2076} {6}
+\@@_setup_active_superscript:nn {"2077} {7}
+\@@_setup_active_superscript:nn {"2078} {8}
+\@@_setup_active_superscript:nn {"2079} {9}
+\@@_setup_active_superscript:nn {"207A} {+}
+\@@_setup_active_superscript:nn {"207B} {-}
+\@@_setup_active_superscript:nn {"207C} {=}
+\@@_setup_active_superscript:nn {"207D} {(}
+\@@_setup_active_superscript:nn {"207E} {)}
+\@@_setup_active_superscript:nn {"1D2C} {A}
+\@@_setup_active_superscript:nn {"1D2E} {B}
+\@@_setup_active_superscript:nn {"1D30} {D}
+\@@_setup_active_superscript:nn {"1D31} {E}
+\@@_setup_active_superscript:nn {"1D33} {G}
+\@@_setup_active_superscript:nn {"1D34} {H}
+\@@_setup_active_superscript:nn {"1D35} {I}
+\@@_setup_active_superscript:nn {"1D36} {J}
+\@@_setup_active_superscript:nn {"1D37} {K}
+\@@_setup_active_superscript:nn {"1D38} {L}
+\@@_setup_active_superscript:nn {"1D39} {M}
+\@@_setup_active_superscript:nn {"1D3A} {N}
+\@@_setup_active_superscript:nn {"1D3C} {O}
+\@@_setup_active_superscript:nn {"1D3E} {P}
+\@@_setup_active_superscript:nn {"1D3F} {R}
+\@@_setup_active_superscript:nn {"1D40} {T}
+\@@_setup_active_superscript:nn {"1D41} {U}
+\@@_setup_active_superscript:nn {"2C7D} {V}
+\@@_setup_active_superscript:nn {"1D42} {W}
+\@@_setup_active_superscript:nn {"1D43} {a}
+\@@_setup_active_superscript:nn {"1D47} {b}
+\@@_setup_active_superscript:nn {"1D9C} {c}
+\@@_setup_active_superscript:nn {"1D48} {d}
+\@@_setup_active_superscript:nn {"1D49} {e}
+\@@_setup_active_superscript:nn {"1DA0} {f}
+\@@_setup_active_superscript:nn {"1D4D} {g}
+\@@_setup_active_superscript:nn {"02B0} {h}
+\@@_setup_active_superscript:nn {"2071} {i}
+\@@_setup_active_superscript:nn {"02B2} {j}
+\@@_setup_active_superscript:nn {"1D4F} {k}
+\@@_setup_active_superscript:nn {"02E1} {l}
+\@@_setup_active_superscript:nn {"1D50} {m}
+\@@_setup_active_superscript:nn {"207F} {n}
+\@@_setup_active_superscript:nn {"1D52} {o}
+\@@_setup_active_superscript:nn {"1D56} {p}
+\@@_setup_active_superscript:nn {"02B3} {r}
+\@@_setup_active_superscript:nn {"02E2} {s}
+\@@_setup_active_superscript:nn {"1D57} {t}
+\@@_setup_active_superscript:nn {"1D58} {u}
+\@@_setup_active_superscript:nn {"1D5B} {v}
+\@@_setup_active_superscript:nn {"02B7} {w}
+\@@_setup_active_superscript:nn {"02E3} {x}
+\@@_setup_active_superscript:nn {"02B8} {y}
+\@@_setup_active_superscript:nn {"1DBB} {z}
+\@@_setup_active_superscript:nn {"1D5D} {\beta}
+\@@_setup_active_superscript:nn {"1D5E} {\gamma}
+\@@_setup_active_superscript:nn {"1D5F} {\delta}
+\@@_setup_active_superscript:nn {"1D60} {\phi}
+\@@_setup_active_superscript:nn {"1D61} {\chi}
+\@@_setup_active_superscript:nn {"1DBF} {\theta}
+% \end{macrocode}
+% A few more subscripts than superscripts:
+% \begin{macrocode}
+\@@_setup_active_subscript:nn {"2080} {0}
+\@@_setup_active_subscript:nn {"2081} {1}
+\@@_setup_active_subscript:nn {"2082} {2}
+\@@_setup_active_subscript:nn {"2083} {3}
+\@@_setup_active_subscript:nn {"2084} {4}
+\@@_setup_active_subscript:nn {"2085} {5}
+\@@_setup_active_subscript:nn {"2086} {6}
+\@@_setup_active_subscript:nn {"2087} {7}
+\@@_setup_active_subscript:nn {"2088} {8}
+\@@_setup_active_subscript:nn {"2089} {9}
+\@@_setup_active_subscript:nn {"208A} {+}
+\@@_setup_active_subscript:nn {"208B} {-}
+\@@_setup_active_subscript:nn {"208C} {=}
+\@@_setup_active_subscript:nn {"208D} {(}
+\@@_setup_active_subscript:nn {"208E} {)}
+\@@_setup_active_subscript:nn {"2090} {a}
+\@@_setup_active_subscript:nn {"2091} {e}
+\@@_setup_active_subscript:nn {"2095} {h}
+\@@_setup_active_subscript:nn {"1D62} {i}
+\@@_setup_active_subscript:nn {"2C7C} {j}
+\@@_setup_active_subscript:nn {"2096} {k}
+\@@_setup_active_subscript:nn {"2097} {l}
+\@@_setup_active_subscript:nn {"2098} {m}
+\@@_setup_active_subscript:nn {"2099} {n}
+\@@_setup_active_subscript:nn {"2092} {o}
+\@@_setup_active_subscript:nn {"209A} {p}
+\@@_setup_active_subscript:nn {"1D63} {r}
+\@@_setup_active_subscript:nn {"209B} {s}
+\@@_setup_active_subscript:nn {"209C} {t}
+\@@_setup_active_subscript:nn {"1D64} {u}
+\@@_setup_active_subscript:nn {"1D65} {v}
+\@@_setup_active_subscript:nn {"2093} {x}
+\@@_setup_active_subscript:nn {"1D66} {\beta}
+\@@_setup_active_subscript:nn {"1D67} {\gamma}
+\@@_setup_active_subscript:nn {"1D68} {\rho}
+\@@_setup_active_subscript:nn {"1D69} {\phi}
+\@@_setup_active_subscript:nn {"1D6A} {\chi}
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-sym-commands.dtx b/macros/unicodetex/latex/unicode-math/um-code-sym-commands.dtx
new file mode 100644
index 0000000000..b2450878fe
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-sym-commands.dtx
@@ -0,0 +1,216 @@
+%%^^A%% um-code-sym-commands.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Definition of "math symbol alphabet" commands such as `\symbf` and co.
+
+% \section{Mapping in maths alphabets}
+% \label{sec:symcmd}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \subsection{Setting styles}
+%
+% Algorithm for setting alphabet fonts.
+% By default, when |range| is empty, we are in \emph{implicit} mode.
+% If |range| contains the name of the math alphabet, we are in \emph{explicit}
+% mode and do things slightly differently.
+%
+% Implicit mode:
+% \begin{itemize}
+% \item Try and set all of the alphabet shapes.
+% \item Check for the first glyph of each alphabet to detect if the font supports each
+% alphabet shape.
+% \item For alphabets that do exist, overwrite whatever’s already there.
+% \item For alphabets that are not supported, \emph{do nothing}.
+% (This includes leaving the old alphabet definition in place.)
+% \end{itemize}
+%
+% Explicit mode:
+% \begin{itemize}
+% \item Only set the alphabets specified.
+% \item Check for the first glyph of the alphabet to detect if the font contains
+% the alphabet shape in the Unicode math plane.
+% \item For Unicode math alphabets, overwrite whatever’s already there.
+% \item Otherwise, use the \ascii\ glyph slots instead.
+% \end{itemize}
+%
+%
+%
+% \subsection{Defining the math style macros}
+%
+% We call the different shapes that a math alphabet can be a `math style’.
+% Note that different alphabets can exist within the same math style. E.g.,
+% we call `bold’ the math style |bf| and within it there are upper and lower
+% case Greek and Roman alphabets and Arabic numerals.
+%
+% \begin{macro}{\@@_prepare_mathstyle:n}
+% \darg{math style name (e.g., \texttt{it} or \texttt{bb})}
+% Define the high level math alphabet macros (\cs{mathit}, etc.) in terms of
+% unicode-math definitions. Use \cs{bgroup}/\cs{egroup} so s’scripts scan the
+% whole thing.
+%
+% The flag \cs{l_@@_mathstyle_tl} is for other applications to query the
+% current math style.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_prepare_mathstyle:n
+ {
+ \seq_gput_right:Nn \g_@@_mathstyles_seq {#1}
+ \@@_init_alphabet:n {#1}
+ \cs_set_protected:cpx {sym#1}
+ {
+ \@@_group_begin:
+ \exp_not:n
+ {
+ \mode_if_math:F { \exp_args:Nc \non@alpherr {sym#1} }
+ \tl_set:Nn \l_@@_mathstyle_tl {#1}
+ }
+ \@@_switch_to:n {#1}
+ \@@_mathgroup_set:n {-1}
+ \@@_group_end:n
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\@@_init_alphabet:n}
+% \darg{math alphabet name (e.g., \texttt{it} or \texttt{bb})}
+% This macro initialises the macros used to set up a math alphabet.
+% First used when the math alphabet macro is first defined, but then used
+% later when redefining a particular maths alphabet.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_init_alphabet:n
+ {
+ \@@_log:nx {alph-initialise} {#1}
+ \tl_gclear_new:c {g_@@_switchto_#1_tl}
+ \cs_set_protected:cpn {@@_switchto_#1:} { \tl_use:c {g_@@_switchto_#1_tl} }
+ }
+\cs_new_protected:Nn \@@_switch_to:n
+ {
+ \tl_use:c {g_@@_switchto_#1_tl}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Definition of alphabets and styles}
+%
+%
+% The linking between named ranges and symbol style commands happens here.
+% It’s currently not using all of the machinery we’re in the process of setting up above.
+% Baby steps.
+% \begin{macrocode}
+\@@_cs_new:Nn \@@_default_mathalph:nnn
+ {
+ \prop_new:c {g_@@_named_range_#1_prop}
+ \seq_gput_right:Nn \g_@@_default_mathalph_seq {{#1}{#2}{#3}}
+ \prop_gput:cnn { g_@@_named_range_#1_prop } { default-alpha } {#2}
+ }
+% \end{macrocode}
+% \begin{macrocode}
+\@@_default_mathalph:nnn {up } {latin,Latin,greek,Greek,num,misc} {up }
+\@@_default_mathalph:nnn {it } {latin,Latin,greek,Greek,misc} {it }
+\@@_default_mathalph:nnn {bb } {latin,Latin,num,misc} {bb }
+\@@_default_mathalph:nnn {bbit } {misc} {bbit }
+\@@_default_mathalph:nnn {scr } {latin,Latin} {scr }
+\@@_default_mathalph:nnn {cal } {Latin} {scr }
+\@@_default_mathalph:nnn {bfcal } {Latin} {bfscr }
+\@@_default_mathalph:nnn {frak } {latin,Latin} {frak }
+\@@_default_mathalph:nnn {tt } {latin,Latin,num} {tt }
+\@@_default_mathalph:nnn {sfup } {latin,Latin,num} {sfup }
+\@@_default_mathalph:nnn {sfit } {latin,Latin} {sfit }
+\@@_default_mathalph:nnn {bfup } {latin,Latin,greek,Greek,num,misc} {bfup }
+\@@_default_mathalph:nnn {bfit } {latin,Latin,greek,Greek,misc} {bfit }
+\@@_default_mathalph:nnn {bfscr } {latin,Latin} {bfscr }
+\@@_default_mathalph:nnn {bffrak} {latin,Latin} {bffrak}
+\@@_default_mathalph:nnn {bfsfup} {latin,Latin,greek,Greek,num,misc} {bfsfup}
+\@@_default_mathalph:nnn {bfsfit} {latin,Latin,greek,Greek,misc} {bfsfit}
+% \end{macrocode}
+%
+% \subsubsection{Define symbol style commands}
+% Finally, all of the `symbol styles’ commands are set up, which are the commands to access each of the named alphabet styles. There is not a one-to-one mapping between symbol style commands and named style ranges!
+% \begin{macrocode}
+\clist_map_inline:nn
+ {
+ up, it, bfup, bfit, sfup, sfit, bfsfup, bfsfit, bfsf,
+ tt, bb, bbit, scr, bfscr, cal, bfcal, frak, bffrak,
+ normal, literal, sf, bf,
+ }
+ {
+ \@@_prepare_mathstyle:n {#1}
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection{New names for legacy textmath alphabet selection}
+% In case a package option overwrites, say, \cs{mathbf} with \cs{symbf}.
+% \begin{macrocode}
+\clist_map_inline:nn
+ { rm, it, bf, sf, tt }
+ { \cs_set_eq:cc { mathtext #1 } { math #1 } }
+% \end{macrocode}
+% Perhaps these should actually be defined using a hypothetical unicode-math interface to creating new such styles. To come.
+%
+%
+% \subsubsection{Replacing legacy pure-maths alphabets}
+% The following are alphabets which do not have a math/text ambiguity.
+% \begin{macrocode}
+\clist_map_inline:nn
+ {
+ normal, bb , bbit, scr, bfscr, cal, bfcal, frak, bffrak, tt,
+ bfup, bfit, sfup, sfit, bfsfup, bfsfit, bfsf
+ }
+ {
+ \cs_set:cpx { math #1 } { \exp_not:c { sym #1 } }
+ }
+% \end{macrocode}
+%
+%
+% \subsubsection{New commands for ambiguous alphabets}
+%
+% \begin{macrocode}
+\AtBeginDocument { \@@_setup_mathtext: }
+\@@_cs_new:Nn \@@_setup_mathtext:
+ {
+ \clist_map_inline:nn
+ { rm, it, bf, sf, tt }
+ {
+ \cs_set_protected:cpx { math ##1 }
+ {
+ \exp_not:n { \bool_if:NTF } \exp_not:c { g_@@_ math ##1 _text_bool}
+ { \exp_not:c { mathtext ##1 } }
+ { \exp_not:c { sym ##1 } }
+ }
+ }
+ }
+% \end{macrocode}
+%
+% \paragraph{Alias \cs{mathrm} as legacy name for \cs{mathup}}
+% \begin{macrocode}
+\cs_set_protected:Npn \mathup { \mathrm }
+\cs_set_protected:Npn \symrm { \symup }
+% \end{macrocode}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-ui.dtx b/macros/unicodetex/latex/unicode-math/um-code-ui.dtx
new file mode 100644
index 0000000000..38c257d1dc
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-ui.dtx
@@ -0,0 +1,101 @@
+%%^^A%% um-code-ui.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% The xparse user interface top-level definitions.
+
+% \section{The user interface commands}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macro}{\unimathsetup}
+% This macro can be used in lieu of or later to override
+% options declared when the package is loaded.
+% \begin{macrocode}
+\NewDocumentCommand \unimathsetup {m} { \keys_set:nn {unicode-math} {#1} }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setmathfont}
+% \doarg{font features (first optional argument retained for backwards compatibility)}
+% \darg{font name}
+% \doarg{font features}
+% \begin{macrocode}
+\NewDocumentCommand \setmathfont { O{} m O{} }
+ {
+ \@@_setmathfont:nn {#1,#3} {#2}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\setmathfontface}
+% \begin{macrocode}
+\NewDocumentCommand \setmathfontface { m O{} m O{} }
+ {
+ \@@_setmathfontface:Nnn #1 {#2,#4} {#3}
+ }
+% \end{macrocode}
+%
+% Note that \LaTeX’s \cs{SetMathAlphabet} simply doesn’t work to “reset” a maths alphabet font after \verb”\begin{document}”, so unlike most of the other maths commands around we still restrict this one to the preamble.
+% \begin{macrocode}
+\@onlypreamble \setmathfontface
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\setoperatorfont}
+% TODO: add check?
+% \begin{macrocode}
+\NewDocumentCommand \setoperatorfont {m}
+ {
+ \tl_gset:Nn \g_@@_operator_mathfont_tl {#1}
+ }
+\setoperatorfont{\mathrm}
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\addnolimits}
+% This macro appends material to the macro containing the list of operators
+% that don’t take limits.
+% \begin{macrocode}
+\NewDocumentCommand \addnolimits {m}
+ {
+ \tl_put_right:Nn \l_@@_nolimits_tl {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macro}{\removenolimits}
+% Can this macro be given a better name?
+% It removes an item from the nolimits list.
+% \begin{macrocode}
+\NewDocumentCommand \removenolimits {m}
+ {
+ \tl_remove_all:Nn \l_@@_nolimits_tl {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-usv.dtx b/macros/unicodetex/latex/unicode-math/um-code-usv.dtx
new file mode 100644
index 0000000000..ce24cc4267
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-usv.dtx
@@ -0,0 +1,592 @@
+%%^^A%% um-code-usv.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Mapping of mathematical unicode slots for alphabets.
+
+% \section{Alphabet Unicode positions}
+%
+% Before we begin, let's define the positions of the various Unicode
+% alphabets so that our code is a little more readable.\footnote{`\textsc{u.s.v.}' stands
+% for `Unicode scalar value'.}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \paragraph{Alphabets}
+% `Normal':
+% \begin{macrocode}
+\usv_set:nnn {normal} {num} {48}
+\usv_set:nnn {normal} {Latin} {"1D434}
+\usv_set:nnn {normal} {latin} {"1D44E}
+\usv_set:nnn {normal} {Greek} {"1D6E2}
+\usv_set:nnn {normal} {greek} {"1D6FC}
+\usv_set:nnn {normal} {varTheta} {"1D6F3}
+\usv_set:nnn {normal} {epsilon} {"1D716}
+\usv_set:nnn {normal} {vartheta} {"1D717}
+\usv_set:nnn {normal} {varkappa} {"1D718}
+\usv_set:nnn {normal} {phi} {"1D719}
+\usv_set:nnn {normal} {varrho} {"1D71A}
+\usv_set:nnn {normal} {varpi} {"1D71B}
+\usv_set:nnn {normal} {Nabla} {"1D6FB}
+\usv_set:nnn {normal} {partial} {"1D715}
+% \end{macrocode}
+% Regular weights:
+% \begin{macrocode}
+\usv_set:nnn {up} {num} {48}
+\usv_set:nnn {up} {Latin} {65}
+\usv_set:nnn {up} {latin} {97}
+\usv_set:nnn {up} {Greek} {"391}
+\usv_set:nnn {up} {greek} {"3B1}
+\usv_set:nnn {it} {Latin} {"1D434}
+\usv_set:nnn {it} {latin} {"1D44E}
+\usv_set:nnn {it} {Greek} {"1D6E2}
+\usv_set:nnn {it} {greek} {"1D6FC}
+\usv_set:nnn {bb} {num} {"1D7D8}
+\usv_set:nnn {bb} {Latin} {"1D538}
+\usv_set:nnn {bb} {latin} {"1D552}
+\usv_set:nnn {scr} {Latin} {"1D49C}
+\usv_set:nnn {cal} {Latin} {"1D49C}
+\usv_set:nnn {scr} {latin} {"1D4B6}
+\usv_set:nnn {frak} {Latin} {"1D504}
+\usv_set:nnn {frak} {latin} {"1D51E}
+\usv_set:nnn {sf} {num} {"1D7E2}
+\usv_set:nnn {sfup} {num} {"1D7E2}
+\usv_set:nnn {sfit} {num} {"1D7E2}
+\usv_set:nnn {sfup} {Latin} {"1D5A0}
+\usv_set:nnn {sf} {Latin} {"1D5A0}
+\usv_set:nnn {sfup} {latin} {"1D5BA}
+\usv_set:nnn {sf} {latin} {"1D5BA}
+\usv_set:nnn {sfit} {Latin} {"1D608}
+\usv_set:nnn {sfit} {latin} {"1D622}
+\usv_set:nnn {tt} {num} {"1D7F6}
+\usv_set:nnn {tt} {Latin} {"1D670}
+\usv_set:nnn {tt} {latin} {"1D68A}
+% \end{macrocode}
+% Bold weights:
+% \begin{macrocode}
+\usv_set:nnn {bf} {num} {"1D7CE}
+\usv_set:nnn {bfup} {num} {"1D7CE}
+\usv_set:nnn {bfit} {num} {"1D7CE}
+\usv_set:nnn {bfup} {Latin} {"1D400}
+\usv_set:nnn {bfup} {latin} {"1D41A}
+\usv_set:nnn {bfup} {Greek} {"1D6A8}
+\usv_set:nnn {bfup} {greek} {"1D6C2}
+\usv_set:nnn {bfit} {Latin} {"1D468}
+\usv_set:nnn {bfit} {latin} {"1D482}
+\usv_set:nnn {bfit} {Greek} {"1D71C}
+\usv_set:nnn {bfit} {greek} {"1D736}
+\usv_set:nnn {bffrak} {Latin} {"1D56C}
+\usv_set:nnn {bffrak} {latin} {"1D586}
+\usv_set:nnn {bfscr} {Latin} {"1D4D0}
+\usv_set:nnn {bfcal} {Latin} {"1D4D0}
+\usv_set:nnn {bfscr} {latin} {"1D4EA}
+\usv_set:nnn {bfsf} {num} {"1D7EC}
+\usv_set:nnn {bfsfup} {num} {"1D7EC}
+\usv_set:nnn {bfsfit} {num} {"1D7EC}
+\usv_set:nnn {bfsfup} {Latin} {"1D5D4}
+\usv_set:nnn {bfsfup} {latin} {"1D5EE}
+\usv_set:nnn {bfsfup} {Greek} {"1D756}
+\usv_set:nnn {bfsfup} {greek} {"1D770}
+\usv_set:nnn {bfsfit} {Latin} {"1D63C}
+\usv_set:nnn {bfsfit} {latin} {"1D656}
+\usv_set:nnn {bfsfit} {Greek} {"1D790}
+\usv_set:nnn {bfsfit} {greek} {"1D7AA}
+% \end{macrocode}
+% The `auto' bolds:
+% \begin{macrocode}
+\usv_set:nnn {bfsf} {Latin} { \bool_if:NTF \g_@@_upLatin_bool \g_@@_bfsfup_Latin_usv \g_@@_bfsfit_Latin_usv }
+\usv_set:nnn {bfsf} {latin} { \bool_if:NTF \g_@@_uplatin_bool \g_@@_bfsfup_latin_usv \g_@@_bfsfit_latin_usv }
+\usv_set:nnn {bfsf} {Greek} { \bool_if:NTF \g_@@_upGreek_bool \g_@@_bfsfup_Greek_usv \g_@@_bfsfit_Greek_usv }
+\usv_set:nnn {bfsf} {greek} { \bool_if:NTF \g_@@_upgreek_bool \g_@@_bfsfup_greek_usv \g_@@_bfsfit_greek_usv }
+\usv_set:nnn {bf} {Latin} { \bool_if:NTF \g_@@_bfupLatin_bool \g_@@_bfup_Latin_usv \g_@@_bfit_Latin_usv }
+\usv_set:nnn {bf} {latin} { \bool_if:NTF \g_@@_bfuplatin_bool \g_@@_bfup_latin_usv \g_@@_bfit_latin_usv }
+\usv_set:nnn {bf} {Greek} { \bool_if:NTF \g_@@_bfupGreek_bool \g_@@_bfup_Greek_usv \g_@@_bfit_Greek_usv }
+\usv_set:nnn {bf} {greek} { \bool_if:NTF \g_@@_bfupgreek_bool \g_@@_bfup_greek_usv \g_@@_bfit_greek_usv }
+% \end{macrocode}
+% \paragraph{Greek variants}
+% Upright:
+% \begin{macrocode}
+\usv_set:nnn {up} {varTheta} {"3F4}
+\usv_set:nnn {up} {Digamma} {"3DC}
+\usv_set:nnn {up} {epsilon} {"3F5}
+\usv_set:nnn {up} {vartheta} {"3D1}
+\usv_set:nnn {up} {varkappa} {"3F0}
+\usv_set:nnn {up} {phi} {"3D5}
+\usv_set:nnn {up} {varrho} {"3F1}
+\usv_set:nnn {up} {varpi} {"3D6}
+\usv_set:nnn {up} {digamma} {"3DD}
+% \end{macrocode}
+% Bold:
+% \begin{macrocode}
+\usv_set:nnn {bfup} {varTheta} {"1D6B9}
+\usv_set:nnn {bfup} {Digamma} {"1D7CA}
+\usv_set:nnn {bfup} {epsilon} {"1D6DC}
+\usv_set:nnn {bfup} {vartheta} {"1D6DD}
+\usv_set:nnn {bfup} {varkappa} {"1D6DE}
+\usv_set:nnn {bfup} {phi} {"1D6DF}
+\usv_set:nnn {bfup} {varrho} {"1D6E0}
+\usv_set:nnn {bfup} {varpi} {"1D6E1}
+\usv_set:nnn {bfup} {digamma} {"1D7CB}
+% \end{macrocode}
+% Italic:
+% \begin{macrocode}
+\usv_set:nnn {it} {varTheta} {"1D6F3}
+\usv_set:nnn {it} {epsilon} {"1D716}
+\usv_set:nnn {it} {vartheta} {"1D717}
+\usv_set:nnn {it} {varkappa} {"1D718}
+\usv_set:nnn {it} {phi} {"1D719}
+\usv_set:nnn {it} {varrho} {"1D71A}
+\usv_set:nnn {it} {varpi} {"1D71B}
+% \end{macrocode}
+% Bold italic:
+% \begin{macrocode}
+\usv_set:nnn {bfit} {varTheta} {"1D72D}
+\usv_set:nnn {bfit} {epsilon} {"1D750}
+\usv_set:nnn {bfit} {vartheta} {"1D751}
+\usv_set:nnn {bfit} {varkappa} {"1D752}
+\usv_set:nnn {bfit} {phi} {"1D753}
+\usv_set:nnn {bfit} {varrho} {"1D754}
+\usv_set:nnn {bfit} {varpi} {"1D755}
+% \end{macrocode}
+% Bold sans:
+% \begin{macrocode}
+\usv_set:nnn {bfsfup} {varTheta} {"1D767}
+\usv_set:nnn {bfsfup} {epsilon} {"1D78A}
+\usv_set:nnn {bfsfup} {vartheta} {"1D78B}
+\usv_set:nnn {bfsfup} {varkappa} {"1D78C}
+\usv_set:nnn {bfsfup} {phi} {"1D78D}
+\usv_set:nnn {bfsfup} {varrho} {"1D78E}
+\usv_set:nnn {bfsfup} {varpi} {"1D78F}
+% \end{macrocode}
+% Bold sans italic:
+% \begin{macrocode}
+\usv_set:nnn {bfsfit} {varTheta} {"1D7A1}
+\usv_set:nnn {bfsfit} {epsilon} {"1D7C4}
+\usv_set:nnn {bfsfit} {vartheta} {"1D7C5}
+\usv_set:nnn {bfsfit} {varkappa} {"1D7C6}
+\usv_set:nnn {bfsfit} {phi} {"1D7C7}
+\usv_set:nnn {bfsfit} {varrho} {"1D7C8}
+\usv_set:nnn {bfsfit} {varpi} {"1D7C9}
+% \end{macrocode}
+% Nabla:
+% \begin{macrocode}
+\usv_set:nnn {up} {Nabla} {"02207}
+\usv_set:nnn {it} {Nabla} {"1D6FB}
+\usv_set:nnn {bfup} {Nabla} {"1D6C1}
+\usv_set:nnn {bfit} {Nabla} {"1D735}
+\usv_set:nnn {bfsfup} {Nabla} {"1D76F}
+\usv_set:nnn {bfsfit} {Nabla} {"1D7A9}
+% \end{macrocode}
+% Partial:
+% \begin{macrocode}
+\usv_set:nnn {up} {partial} {"02202}
+\usv_set:nnn {it} {partial} {"1D715}
+\usv_set:nnn {bfup} {partial} {"1D6DB}
+\usv_set:nnn {bfit} {partial} {"1D74F}
+\usv_set:nnn {bfsfup} {partial} {"1D789}
+\usv_set:nnn {bfsfit} {partial} {"1D7C3}
+% \end{macrocode}
+%
+% \paragraph{Exceptions}
+% Upright uppercase:
+% \begin{macrocode}
+\usv_set:nnn {up} {B} {`\B}
+\usv_set:nnn {up} {C} {`\C}
+\usv_set:nnn {up} {D} {`\D}
+\usv_set:nnn {up} {E} {`\E}
+\usv_set:nnn {up} {F} {`\F}
+\usv_set:nnn {up} {H} {`\H}
+\usv_set:nnn {up} {I} {`\I}
+\usv_set:nnn {up} {L} {`\L}
+\usv_set:nnn {up} {M} {`\M}
+\usv_set:nnn {up} {N} {`\N}
+\usv_set:nnn {up} {P} {`\P}
+\usv_set:nnn {up} {Q} {`\Q}
+\usv_set:nnn {up} {R} {`\R}
+\usv_set:nnn {up} {Z} {`\Z}
+% \end{macrocode}
+% Italic uppercase:
+% \begin{macrocode}
+\usv_set:nnn {it} {B} {"1D435}
+\usv_set:nnn {it} {C} {"1D436}
+\usv_set:nnn {it} {D} {"1D437}
+\usv_set:nnn {it} {E} {"1D438}
+\usv_set:nnn {it} {F} {"1D439}
+\usv_set:nnn {it} {H} {"1D43B}
+\usv_set:nnn {it} {I} {"1D43C}
+\usv_set:nnn {it} {L} {"1D43F}
+\usv_set:nnn {it} {M} {"1D440}
+\usv_set:nnn {it} {N} {"1D441}
+\usv_set:nnn {it} {P} {"1D443}
+\usv_set:nnn {it} {Q} {"1D444}
+\usv_set:nnn {it} {R} {"1D445}
+\usv_set:nnn {it} {Z} {"1D44D}
+% \end{macrocode}
+% Upright lowercase (needed for later mappings):
+% \begin{macrocode}
+\usv_set:nnn {up} {d} {`\d}
+\usv_set:nnn {up} {e} {`\e}
+\usv_set:nnn {up} {g} {`\g}
+\usv_set:nnn {up} {h} {`\h}
+\usv_set:nnn {up} {i} {`\i}
+\usv_set:nnn {up} {j} {`\j}
+\usv_set:nnn {up} {o} {`\o}
+% \end{macrocode}
+% Italic lowercase:
+% \begin{macrocode}
+\usv_set:nnn {it} {d} {"1D451}
+\usv_set:nnn {it} {e} {"1D452}
+\usv_set:nnn {it} {g} {"1D454}
+\usv_set:nnn {it} {h} {"0210E}
+\usv_set:nnn {it} {i} {"1D456}
+\usv_set:nnn {it} {j} {"1D457}
+\usv_set:nnn {it} {o} {"1D45C}
+% \end{macrocode}
+% Latin `h':
+% \begin{macrocode}
+\usv_set:nnn {bb} {h} {"1D559}
+\usv_set:nnn {tt} {h} {"1D691}
+\usv_set:nnn {scr} {h} {"1D4BD}
+\usv_set:nnn {frak} {h} {"1D525}
+\usv_set:nnn {bfup} {h} {"1D421}
+\usv_set:nnn {bfit} {h} {"1D489}
+\usv_set:nnn {sfup} {h} {"1D5C1}
+\usv_set:nnn {sfit} {h} {"1D629}
+\usv_set:nnn {bffrak} {h} {"1D58D}
+\usv_set:nnn {bfscr} {h} {"1D4F1}
+\usv_set:nnn {bfsfup} {h} {"1D5F5}
+\usv_set:nnn {bfsfit} {h} {"1D65D}
+% \end{macrocode}
+% Dotless `i' and `j:
+% \begin{macrocode}
+\usv_set:nnn {up} {dotlessi} {"00131}
+\usv_set:nnn {up} {dotlessj} {"00237}
+\usv_set:nnn {it} {dotlessi} {"1D6A4}
+\usv_set:nnn {it} {dotlessj} {"1D6A5}
+% \end{macrocode}
+% Blackboard:
+% \begin{macrocode}
+\usv_set:nnn {bb} {C} {"2102}
+\usv_set:nnn {bb} {H} {"210D}
+\usv_set:nnn {bb} {N} {"2115}
+\usv_set:nnn {bb} {P} {"2119}
+\usv_set:nnn {bb} {Q} {"211A}
+\usv_set:nnn {bb} {R} {"211D}
+\usv_set:nnn {bb} {Z} {"2124}
+\usv_set:nnn {up} {Pi} {"003A0}
+\usv_set:nnn {up} {pi} {"003C0}
+\usv_set:nnn {up} {Gamma} {"00393}
+\usv_set:nnn {up} {gamma} {"003B3}
+\usv_set:nnn {up} {summation} {"02211}
+\usv_set:nnn {it} {Pi} {"1D6F1}
+\usv_set:nnn {it} {pi} {"1D70B}
+\usv_set:nnn {it} {Gamma} {"1D6E4}
+\usv_set:nnn {it} {gamma} {"1D6FE}
+\usv_set:nnn {bb} {Pi} {"0213F}
+\usv_set:nnn {bb} {pi} {"0213C}
+\usv_set:nnn {bb} {Gamma} {"0213E}
+\usv_set:nnn {bb} {gamma} {"0213D}
+\usv_set:nnn {bb} {summation} {"02140}
+% \end{macrocode}
+% Italic blackboard:
+% \begin{macrocode}
+\usv_set:nnn {bbit} {D} {"2145}
+\usv_set:nnn {bbit} {d} {"2146}
+\usv_set:nnn {bbit} {e} {"2147}
+\usv_set:nnn {bbit} {i} {"2148}
+\usv_set:nnn {bbit} {j} {"2149}
+% \end{macrocode}
+% Script:
+% \begin{macrocode}
+\usv_set:nnn {scr} {B} {"212C}
+\usv_set:nnn {scr} {E} {"2130}
+\usv_set:nnn {scr} {F} {"2131}
+\usv_set:nnn {scr} {H} {"210B}
+\usv_set:nnn {scr} {I} {"2110}
+\usv_set:nnn {scr} {L} {"2112}
+\usv_set:nnn {scr} {M} {"2133}
+\usv_set:nnn {scr} {R} {"211B}
+\usv_set:nnn {scr} {e} {"212F}
+\usv_set:nnn {scr} {g} {"210A}
+\usv_set:nnn {scr} {o} {"2134}
+% \end{macrocode}
+% Caligraphic:
+% \begin{macrocode}
+\usv_set:nnn {cal} {B} {"212C}
+\usv_set:nnn {cal} {E} {"2130}
+\usv_set:nnn {cal} {F} {"2131}
+\usv_set:nnn {cal} {H} {"210B}
+\usv_set:nnn {cal} {I} {"2110}
+\usv_set:nnn {cal} {L} {"2112}
+\usv_set:nnn {cal} {M} {"2133}
+\usv_set:nnn {cal} {R} {"211B}
+% \end{macrocode}
+% Fractur:
+% \begin{macrocode}
+\usv_set:nnn {frak} {C} {"212D}
+\usv_set:nnn {frak} {H} {"210C}
+\usv_set:nnn {frak} {I} {"2111}
+\usv_set:nnn {frak} {R} {"211C}
+\usv_set:nnn {frak} {Z} {"2128}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \subsection{STIX fonts}
+%
+% Version 1.0.0 of the STIX fonts contains a number of
+% alphabets in the private use area of Unicode; i.e.,
+% it contains many math glyphs that have not (yet or if ever)
+% been accepted into the Unicode standard.
+%
+% But we still want to be able to use them if possible.
+%
+% \begin{macrocode}
+%<*stix>
+% \end{macrocode}
+%
+% \paragraph{Upright}
+% \begin{macrocode}
+\usv_set:nnn {stixsfup}{partial}{"E17C}
+\usv_set:nnn {stixsfup}{Greek}{"E17D}
+\usv_set:nnn {stixsfup}{greek}{"E196}
+\usv_set:nnn {stixsfup}{varTheta}{"E18E}
+\usv_set:nnn {stixsfup}{epsilon}{"E1AF}
+\usv_set:nnn {stixsfup}{vartheta}{"E1B0}
+\usv_set:nnn {stixsfup}{varkappa}{0000} % ???
+\usv_set:nnn {stixsfup}{phi}{"E1B1}
+\usv_set:nnn {stixsfup}{varrho}{"E1B2}
+\usv_set:nnn {stixsfup}{varpi}{"E1B3}
+\usv_set:nnn {stixupslash}{Greek}{"E2FC}
+% \end{macrocode}
+%
+% \paragraph{Italic}
+% \begin{macrocode}
+\usv_set:nnn {stixbbit}{A}{"E154}
+\usv_set:nnn {stixbbit}{B}{"E155}
+\usv_set:nnn {stixbbit}{E}{"E156}
+\usv_set:nnn {stixbbit}{F}{"E157}
+\usv_set:nnn {stixbbit}{G}{"E158}
+\usv_set:nnn {stixbbit}{I}{"E159}
+\usv_set:nnn {stixbbit}{J}{"E15A}
+\usv_set:nnn {stixbbit}{K}{"E15B}
+\usv_set:nnn {stixbbit}{L}{"E15C}
+\usv_set:nnn {stixbbit}{M}{"E15D}
+\usv_set:nnn {stixbbit}{O}{"E15E}
+\usv_set:nnn {stixbbit}{S}{"E15F}
+\usv_set:nnn {stixbbit}{T}{"E160}
+\usv_set:nnn {stixbbit}{U}{"E161}
+\usv_set:nnn {stixbbit}{V}{"E162}
+\usv_set:nnn {stixbbit}{W}{"E163}
+\usv_set:nnn {stixbbit}{X}{"E164}
+\usv_set:nnn {stixbbit}{Y}{"E165}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbbit}{a}{"E166}
+\usv_set:nnn {stixbbit}{b}{"E167}
+\usv_set:nnn {stixbbit}{c}{"E168}
+\usv_set:nnn {stixbbit}{f}{"E169}
+\usv_set:nnn {stixbbit}{g}{"E16A}
+\usv_set:nnn {stixbbit}{h}{"E16B}
+\usv_set:nnn {stixbbit}{k}{"E16C}
+\usv_set:nnn {stixbbit}{l}{"E16D}
+\usv_set:nnn {stixbbit}{m}{"E16E}
+\usv_set:nnn {stixbbit}{n}{"E16F}
+\usv_set:nnn {stixbbit}{o}{"E170}
+\usv_set:nnn {stixbbit}{p}{"E171}
+\usv_set:nnn {stixbbit}{q}{"E172}
+\usv_set:nnn {stixbbit}{r}{"E173}
+\usv_set:nnn {stixbbit}{s}{"E174}
+\usv_set:nnn {stixbbit}{t}{"E175}
+\usv_set:nnn {stixbbit}{u}{"E176}
+\usv_set:nnn {stixbbit}{v}{"E177}
+\usv_set:nnn {stixbbit}{w}{"E178}
+\usv_set:nnn {stixbbit}{x}{"E179}
+\usv_set:nnn {stixbbit}{y}{"E17A}
+\usv_set:nnn {stixbbit}{z}{"E17B}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixsfit}{Numerals}{"E1B4}
+\usv_set:nnn {stixsfit}{partial}{"E1BE}
+\usv_set:nnn {stixsfit}{Greek}{"E1BF}
+\usv_set:nnn {stixsfit}{greek}{"E1D8}
+\usv_set:nnn {stixsfit}{varTheta}{"E1D0}
+\usv_set:nnn {stixsfit}{epsilon}{"E1F1}
+\usv_set:nnn {stixsfit}{vartheta}{"E1F2}
+\usv_set:nnn {stixsfit}{varkappa}{0000} % ???
+\usv_set:nnn {stixsfit}{phi}{"E1F3}
+\usv_set:nnn {stixsfit}{varrho}{"E1F4}
+\usv_set:nnn {stixsfit}{varpi}{"E1F5}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixcal}{Latin}{"E22D}
+\usv_set:nnn {stixcal}{num}{"E262}
+\usv_set:nnn {scr}{num}{48}
+\usv_set:nnn {it}{num}{48}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixsfitslash}{Latin}{"E294}
+\usv_set:nnn {stixsfitslash}{latin}{"E2C8}
+\usv_set:nnn {stixsfitslash}{greek}{"E32C}
+\usv_set:nnn {stixsfitslash}{epsilon}{"E37A}
+\usv_set:nnn {stixsfitslash}{vartheta}{"E35E}
+\usv_set:nnn {stixsfitslash}{varkappa}{"E374}
+\usv_set:nnn {stixsfitslash}{phi}{"E360}
+\usv_set:nnn {stixsfitslash}{varrho}{"E376}
+\usv_set:nnn {stixsfitslash}{varpi}{"E362}
+\usv_set:nnn {stixsfitslash}{digamma}{"E36A}
+% \end{macrocode}
+%
+% \paragraph{Bold}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfupslash}{Greek}{"E2FD}
+\usv_set:nnn {stixbfupslash}{Digamma}{"E369}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfbb}{A}{"E38A}
+\usv_set:nnn {stixbfbb}{B}{"E38B}
+\usv_set:nnn {stixbfbb}{E}{"E38D}
+\usv_set:nnn {stixbfbb}{F}{"E38E}
+\usv_set:nnn {stixbfbb}{G}{"E38F}
+\usv_set:nnn {stixbfbb}{I}{"E390}
+\usv_set:nnn {stixbfbb}{J}{"E391}
+\usv_set:nnn {stixbfbb}{K}{"E392}
+\usv_set:nnn {stixbfbb}{L}{"E393}
+\usv_set:nnn {stixbfbb}{M}{"E394}
+\usv_set:nnn {stixbfbb}{O}{"E395}
+\usv_set:nnn {stixbfbb}{S}{"E396}
+\usv_set:nnn {stixbfbb}{T}{"E397}
+\usv_set:nnn {stixbfbb}{U}{"E398}
+\usv_set:nnn {stixbfbb}{V}{"E399}
+\usv_set:nnn {stixbfbb}{W}{"E39A}
+\usv_set:nnn {stixbfbb}{X}{"E39B}
+\usv_set:nnn {stixbfbb}{Y}{"E39C}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfbb}{a}{"E39D}
+\usv_set:nnn {stixbfbb}{b}{"E39E}
+\usv_set:nnn {stixbfbb}{c}{"E39F}
+\usv_set:nnn {stixbfbb}{f}{"E3A2}
+\usv_set:nnn {stixbfbb}{g}{"E3A3}
+\usv_set:nnn {stixbfbb}{h}{"E3A4}
+\usv_set:nnn {stixbfbb}{k}{"E3A7}
+\usv_set:nnn {stixbfbb}{l}{"E3A8}
+\usv_set:nnn {stixbfbb}{m}{"E3A9}
+\usv_set:nnn {stixbfbb}{n}{"E3AA}
+\usv_set:nnn {stixbfbb}{o}{"E3AB}
+\usv_set:nnn {stixbfbb}{p}{"E3AC}
+\usv_set:nnn {stixbfbb}{q}{"E3AD}
+\usv_set:nnn {stixbfbb}{r}{"E3AE}
+\usv_set:nnn {stixbfbb}{s}{"E3AF}
+\usv_set:nnn {stixbfbb}{t}{"E3B0}
+\usv_set:nnn {stixbfbb}{u}{"E3B1}
+\usv_set:nnn {stixbfbb}{v}{"E3B2}
+\usv_set:nnn {stixbfbb}{w}{"E3B3}
+\usv_set:nnn {stixbfbb}{x}{"E3B4}
+\usv_set:nnn {stixbfbb}{y}{"E3B5}
+\usv_set:nnn {stixbfbb}{z}{"E3B6}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfsfup}{Numerals}{"E3B7}
+% \end{macrocode}
+%
+% \paragraph{Bold Italic}
+% \begin{macrocode}
+\usv_set:nnn {stixbfsfit}{Numerals}{"E1F6}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfbbit}{A}{"E200}
+\usv_set:nnn {stixbfbbit}{B}{"E201}
+\usv_set:nnn {stixbfbbit}{E}{"E203}
+\usv_set:nnn {stixbfbbit}{F}{"E204}
+\usv_set:nnn {stixbfbbit}{G}{"E205}
+\usv_set:nnn {stixbfbbit}{I}{"E206}
+\usv_set:nnn {stixbfbbit}{J}{"E207}
+\usv_set:nnn {stixbfbbit}{K}{"E208}
+\usv_set:nnn {stixbfbbit}{L}{"E209}
+\usv_set:nnn {stixbfbbit}{M}{"E20A}
+\usv_set:nnn {stixbfbbit}{O}{"E20B}
+\usv_set:nnn {stixbfbbit}{S}{"E20C}
+\usv_set:nnn {stixbfbbit}{T}{"E20D}
+\usv_set:nnn {stixbfbbit}{U}{"E20E}
+\usv_set:nnn {stixbfbbit}{V}{"E20F}
+\usv_set:nnn {stixbfbbit}{W}{"E210}
+\usv_set:nnn {stixbfbbit}{X}{"E211}
+\usv_set:nnn {stixbfbbit}{Y}{"E212}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfbbit}{a}{"E213}
+\usv_set:nnn {stixbfbbit}{b}{"E214}
+\usv_set:nnn {stixbfbbit}{c}{"E215}
+\usv_set:nnn {stixbfbbit}{e}{"E217}
+\usv_set:nnn {stixbfbbit}{f}{"E218}
+\usv_set:nnn {stixbfbbit}{g}{"E219}
+\usv_set:nnn {stixbfbbit}{h}{"E21A}
+\usv_set:nnn {stixbfbbit}{k}{"E21D}
+\usv_set:nnn {stixbfbbit}{l}{"E21E}
+\usv_set:nnn {stixbfbbit}{m}{"E21F}
+\usv_set:nnn {stixbfbbit}{n}{"E220}
+\usv_set:nnn {stixbfbbit}{o}{"E221}
+\usv_set:nnn {stixbfbbit}{p}{"E222}
+\usv_set:nnn {stixbfbbit}{q}{"E223}
+\usv_set:nnn {stixbfbbit}{r}{"E224}
+\usv_set:nnn {stixbfbbit}{s}{"E225}
+\usv_set:nnn {stixbfbbit}{t}{"E226}
+\usv_set:nnn {stixbfbbit}{u}{"E227}
+\usv_set:nnn {stixbfbbit}{v}{"E228}
+\usv_set:nnn {stixbfbbit}{w}{"E229}
+\usv_set:nnn {stixbfbbit}{x}{"E22A}
+\usv_set:nnn {stixbfbbit}{y}{"E22B}
+\usv_set:nnn {stixbfbbit}{z}{"E22C}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfcal}{Latin}{"E247}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\usv_set:nnn {stixbfitslash}{Latin}{"E295}
+\usv_set:nnn {stixbfitslash}{latin}{"E2C9}
+\usv_set:nnn {stixbfitslash}{greek}{"E32D}
+\usv_set:nnn {stixsfitslash}{epsilon}{"E37B}
+\usv_set:nnn {stixsfitslash}{vartheta}{"E35F}
+\usv_set:nnn {stixsfitslash}{varkappa}{"E375}
+\usv_set:nnn {stixsfitslash}{phi}{"E361}
+\usv_set:nnn {stixsfitslash}{varrho}{"E377}
+\usv_set:nnn {stixsfitslash}{varpi}{"E363}
+\usv_set:nnn {stixsfitslash}{digamma}{"E36B}
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</stix>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-code-variables.dtx b/macros/unicodetex/latex/unicode-math/um-code-variables.dtx
new file mode 100644
index 0000000000..840b1ebec5
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-code-variables.dtx
@@ -0,0 +1,257 @@
+%%^^A%% um-code-variables.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Declaration of all code-level variables used in the package.
+
+% \section{Variable initialisation}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+%
+% \subsection{bool}
+%
+% True if using a proper OpenType font with unicode maths
+% \begin{macrocode}
+\bool_new:N \g_@@_ot_math_bool
+% \end{macrocode}
+%
+% Set when \cs{setmathfont} is run to trap the problem of no main font defined.
+% \begin{macrocode}
+\bool_new:N \g_@@_main_font_defined_bool
+% \end{macrocode}
+%
+% \begin{macrocode}
+\bool_new:N \g_@@_init_bool
+\bool_new:N \l_@@_implicit_alph_bool
+% \end{macrocode}
+% For \opt{math-style}:
+% \begin{macrocode}
+\bool_new:N \g_@@_literal_bool
+\bool_new:N \g_@@_upLatin_bool
+\bool_new:N \g_@@_uplatin_bool
+\bool_new:N \g_@@_upGreek_bool
+\bool_new:N \g_@@_upgreek_bool
+% \end{macrocode}
+% For \opt{bold-style}:
+% \begin{macrocode}
+\bool_new:N \g_@@_bfliteral_bool
+\bool_new:N \g_@@_bfupLatin_bool
+\bool_new:N \g_@@_bfuplatin_bool
+\bool_new:N \g_@@_bfupGreek_bool
+\bool_new:N \g_@@_bfupgreek_bool
+% \end{macrocode}
+% For \opt{sans-style}:
+% \begin{macrocode}
+\bool_new:N \g_@@_upsans_bool
+\bool_new:N \g_@@_sfliteral_bool
+% \end{macrocode}
+% For assorted package options:
+% \begin{macrocode}
+\bool_new:N \g_@@_upNabla_bool
+\bool_new:N \g_@@_uppartial_bool
+\bool_new:N \g_@@_literal_Nabla_bool
+\bool_new:N \g_@@_literal_partial_bool
+\bool_new:N \l_@@_smallfrac_bool
+\bool_new:N \g_@@_literal_colon_bool
+\bool_new:N \g_@@_mathrm_text_bool
+\bool_new:N \g_@@_mathit_text_bool
+\bool_new:N \g_@@_mathbf_text_bool
+\bool_new:N \g_@@_mathsf_text_bool
+\bool_new:N \g_@@_mathtt_text_bool
+% \end{macrocode}
+%
+% \subsection{int}
+%
+% \begin{macrocode}
+\int_new:N \g_@@_fam_int
+\int_new:N \g_@@_fonts_used_int
+\int_new:N \l_@@_primecount_int
+% \end{macrocode}
+%
+% \subsection{tl}
+%
+% \begin{macrocode}
+\tl_if_exist:NF \g_@@_secret_hook_tl { \tl_new:N \g_@@_secret_hook_tl }
+% \end{macrocode}
+%
+% For displaying in warning messages, etc.:
+% \begin{macrocode}
+\tl_const:Nn \c_@@_math_alphabet_name_latin_tl {Latin,~lowercase}
+\tl_const:Nn \c_@@_math_alphabet_name_Latin_tl {Latin,~uppercase}
+\tl_const:Nn \c_@@_math_alphabet_name_greek_tl {Greek,~lowercase}
+\tl_const:Nn \c_@@_math_alphabet_name_Greek_tl {Greek,~uppercase}
+\tl_const:Nn \c_@@_math_alphabet_name_num_tl {Numerals}
+\tl_const:Nn \c_@@_math_alphabet_name_misc_tl {Misc.}
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_style_tl
+\tl_new:N \l_@@_family_tl
+\tl_new:N \l_@@_alphabet_tl
+\tl_new:N \l_@@_fontname_tl
+\tl_new:N \l_@@_symfont_label_tl
+\tl_new:N \l_@@_remap_style_tl
+\tl_new:N \l_@@_fam_two_tl
+\tl_new:N \l_@@_fam_three_tl
+\tl_new:N \l_@@_curr_named_slot
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \l_@@_tmpa_tl
+\tl_new:N \l_@@_tmpb_tl
+\tl_new:N \l_@@_tmpc_tl
+\tl_new:N \l_@@_mathstyle_tl
+\tl_new:N \l_@@_radicals_tl
+\tl_new:N \l_@@_nolimits_tl
+\tl_new:N \l_@@_trial_family_tl
+\tl_new:N \l_@@_ss_chain_tl
+\tl_new:N \l_@@_tmpa_key_tl
+% \end{macrocode}
+%
+% Used to store the font switch for the \cs{operator@font}.
+% \begin{macrocode}
+\tl_new:N \g_@@_operator_mathfont_tl
+% \end{macrocode}
+%
+% \begin{macrocode}
+\tl_new:N \g_@@_slash_delimiter_usv
+\tl_new:N \g_@@_mathparam_settings_tl
+\tl_new:N \l_@@_mathtable_tl
+\tl_new:N \g_@@_mathtable_tl
+\tl_new:N \g_@@_fontname_tl
+\tl_new:N \g_@@_mversion_tl
+\tl_new:N \g_@@_symfont_tl
+\tl_new:N \l_@@_font_keyval_tl
+\tl_new:N \g_@@_family_tl
+\tl_new:N \g_@@_style_tl
+\tl_new:N \g_@@_remap_style_tl
+\tl_new:N \l_@@_not_token_name_tl
+\tl_new:N \g_@@_curr_font_cmd_tl
+\tl_new:N \g_@@_sqrt_font_cmd_tl
+\tl_new:N \g_@@_prime_font_cmd_tl
+% \end{macrocode}
+%
+% \begin{macro}{\g_@@_mathparam_store_tl}
+% Used to store and restore the math parameters used in Lua\TeX.
+% This is done to `save' the values of the \emph{first} (or main)
+% maths font loaded, rather than (as per Lua\TeX\ defaults) the last.
+% \begin{macrocode}
+%<*LU>
+\tl_new:N \g_@@_mathparam_store_tl
+%</LU>
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{clist}
+%
+% \begin{macrocode}
+\clist_new:N \g_@@_char_nrange_clist
+\clist_new:N \g_@@_unknown_keys_clist
+\clist_new:N \g_@@_alphabet_clist
+\clist_new:N \l_@@_mathmap_charints_clist
+\clist_new:N \l_@@_unknown_keys_clist
+\clist_new:N \l_@@_keyval_clist
+\clist_new:N \l_@@_alphabet_clist
+% \end{macrocode}
+%
+% \begin{macrocode}
+\clist_new:N \g_@@_bad_alpha_clist
+\clist_gput_right:Nx \g_@@_bad_alpha_clist { \tl_to_str:n {bf} }
+\clist_gput_right:Nx \g_@@_bad_alpha_clist { \tl_to_str:n {sf} }
+\clist_gput_right:Nx \g_@@_bad_alpha_clist { \tl_to_str:n {bfsf} }
+% \end{macrocode}
+%
+% \subsection{seq}
+%
+% \begin{macrocode}
+\seq_new:N \l_@@_missing_alph_seq
+\seq_new:N \g_@@_mathalph_seq
+\seq_new:N \g_@@_char_range_seq
+\seq_new:N \g_@@_mclass_range_seq
+% \end{macrocode}
+%
+% \begin{macro}{\g_@@_mathclasses_seq}
+% Every math class.
+% \begin{macrocode}
+\seq_new:N \g_@@_mathclasses_seq
+\seq_gset_from_clist:Nn \g_@@_mathclasses_seq
+ {
+ \mathord,\mathalpha,\mathbin,\mathrel,\mathpunct,
+ \mathop,
+ \mathopen,\mathclose,
+ \mathfence,\mathover,\mathunder,
+ \mathaccent,\mathaccentoverlay,\mathbotaccent,\mathaccentwide,\mathbotaccentwide
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\g_@@_default_mathalph_seq}
+% This sequence stores the alphabets in each math style.
+% \begin{macrocode}
+\seq_new:N \g_@@_default_mathalph_seq
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\g_@@_mathstyles_seq}
+% This is every `math style' known to \pkg{unicode-math}.
+% A named range is such as "bfit" and "sfit", which are also math styles (with \cs{symbfit} and \cs{symsfit}).
+% `Mathstyles' are a superset of named ranges and also include commands such as \cs{symbf} and \cs{symsf}.
+%
+% N.B. for parsing purposes `named ranges' are defined as strings!
+% \begin{macrocode}
+\seq_new:N \g_@@_mathstyles_seq
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{prop}
+%
+% \begin{macrocode}
+\prop_new:N \g_@@_supers_prop
+\prop_new:N \g_@@_subs_prop
+% \end{macrocode}
+%
+% \subsection{muskip}
+%
+% \begin{macrocode}
+\muskip_new:N \g_@@_primekern_muskip
+\muskip_gset:Nn \g_@@_primekern_muskip { -\thinmuskip/2 }% arbitrary
+% \end{macrocode}
+%
+% \subsection{fp}
+%
+% \begin{macrocode}
+\fp_new:N \g_@@_size_tfsf_fp
+\fp_new:N \g_@@_size_sfssf_fp
+% \end{macrocode}
+%
+% \subsection{quark}
+%
+% \begin{macro}{\q_unicode_math}
+% Used as a flag within control sequences to check they're recognised by the package.
+% \begin{macrocode}
+\quark_new:N \q_unicode_math
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-doc-legacyfontdimen.tex b/macros/unicodetex/latex/unicode-math/um-doc-legacyfontdimen.tex
new file mode 100644
index 0000000000..5adb24e9f6
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-doc-legacyfontdimen.tex
@@ -0,0 +1,76 @@
+%%^^A%% um-doc-legacyfontdimen.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\section{Legacy \TeX\ font dimensions}
+
+\centerline{%
+\begin{tabular}[t]{@{}lp{4cm}@{}}
+\toprule
+\multicolumn{2}{@{}c@{}}{Text fonts} \\
+\midrule
+$\phi_1$ & slant per pt \\
+$\phi_2$ & interword space \\
+$\phi_3$ & interword stretch \\
+$\phi_4$ & interword shrink \\
+$\phi_5$ & x-height \\
+$\phi_6$ & quad width \\
+$\phi_7$ & extra space \\
+$\phi_8$ & cap height (\XeTeX\ only) \\
+\bottomrule
+\end{tabular}
+\quad
+\begin{tabular}[t]{@{}lp{4cm}@{}}
+\toprule
+\multicolumn{2}{@{}c@{}}{Maths font, \cs{fam}2} \\
+\midrule
+$\sigma_5$ & x height \\
+$\sigma_6$ & quad \\
+$\sigma_8$ & num1 \\
+$\sigma_9$ & num2 \\
+$\sigma_{10}$ & num3 \\
+$\sigma_{11}$ & denom1 \\
+$\sigma_{12}$ & denom2 \\
+$\sigma_{13}$ & sup1 \\
+$\sigma_{14}$ & sup2 \\
+$\sigma_{15}$ & sup3 \\
+$\sigma_{16}$ & sub1 \\
+$\sigma_{17}$ & sub2 \\
+$\sigma_{18}$ & sup drop \\
+$\sigma_{19}$ & sub drop \\
+$\sigma_{20}$ & delim1 \\
+$\sigma_{21}$ & delim2 \\
+$\sigma_{22}$ & axis height \\
+\bottomrule
+\end{tabular}
+\quad
+\begin{tabular}[t]{@{}lp{4cm}@{}}
+\toprule
+\multicolumn{2}{@{}c@{}}{Maths font, \cs{fam}3} \\
+\midrule
+$\xi_8$ & default rule thickness \\
+$\xi_9$ & big op spacing1 \\
+$\xi_{10}$ & big op spacing2 \\
+$\xi_{11}$ & big op spacing3 \\
+$\xi_{12}$ & big op spacing4 \\
+$\xi_{13}$ & big op spacing5 \\
+\bottomrule
+\end{tabular}
+}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-doc-main.tex b/macros/unicodetex/latex/unicode-math/um-doc-main.tex
new file mode 100644
index 0000000000..5c0bc22ed1
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-doc-main.tex
@@ -0,0 +1,1238 @@
+%%^^A%% um-doc-main.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\begin{abstract}
+\noindent
+This document describes the \pkg{unicode-math} package, which is
+intended as an implementation of Unicode
+maths for \LaTeX\ using the \XeTeX\ and Lua\TeX\ typesetting engines.
+With this package, changing maths fonts is as easy as changing
+text fonts --- and there are more and more maths fonts appearing now.
+Maths input can also be simplified with Unicode since literal glyphs may be
+entered instead of control sequences in your document source.
+
+The package provides support for both \XeTeX\ and Lua\TeX. The different
+engines provide differing levels of support for Unicode maths.
+Please let us know of any troubles.
+
+Alongside this documentation file, you should be able to find a minimal
+example demonstrating the use of the package,
+`\texttt{unimath-example.ltx}'. It also comes with a separate document,
+`\texttt{unimath-symbols.pdf}',
+containing a complete listing of mathematical symbols defined by
+\pkg{unicode-math}, including comparisons between different fonts.
+
+Finally, while the STIX fonts may be used with this package, accessing
+their alphabets in their `private user area' is not yet supported.
+(Of these additional alphabets there is a separate caligraphic design
+distinct to the script design already included.)
+Better support for the STIX fonts is planned for an upcoming revision of the
+package after any problems have been ironed out with the initial version.
+
+\end{abstract}
+
+\newpage
+\tableofcontents
+
+\clearpage
+\section{Introduction}
+
+This document describes the \pkg{unicode-math} package, which is an
+\emph{experimental} implementation of a macro to Unicode glyph encoding for
+mathematical characters.
+
+Users who desire to specify maths alphabets only (Greek and Latin letters,
+and Arabic numerals)
+may wish to use Andrew Moschou's \pkg{mathspec} package instead.
+(\XeTeX-only at time of writing.)
+Note that \pkg{unicode-math} and \pkg{mathspec} are not compatible with each other.
+
+\section{Acknowledgements}
+
+Many thanks to:
+Microsoft for developing the mathematics extension to OpenType as part of
+Microsoft Office~2007;
+Jonathan Kew for implementing Unicode math support in \XeTeX;
+Taco Hoekwater for implementing Unicode math support in \LuaTeX;
+Barbara Beeton for her prodigious effort compiling the definitive list of Unicode math
+glyphs and their \LaTeX\ names (inventing them where necessary), and also
+for her thoughtful replies to my sometimes incessant questions;
+Philipp Stephani for extending the package to support \LuaTeX.
+Ross Moore and Chris Rowley have provided moral and technical support
+from the very early days with great insight into the issues we face trying
+to extend and use \TeX\ in the future.
+Apostolos Syropoulos, Joel Salomon, Khaled Hosny, and Mariusz Wodzicki
+have been fantastic beta testers.
+
+\section{Getting started}
+
+Load \pkg{unicode-math} as a regular \LaTeX\ package. It should be loaded
+after any other maths or font-related package in case it needs to overwrite
+their definitions. Here's an example using the filename syntax to load the \TeX\ Gyre Pagella Math font: (this works for both \XeLaTeX\ and \LuaLaTeX)
+\begin{Verbatim}
+\usepackage{amsmath}
+\usepackage{unicode-math}
+\setmathfont{texgyrepagella-math.otf}
+\end{Verbatim}
+
+Once the package is loaded, traditional TFM-based maths fonts are no longer supported;
+you can only switch to a different OpenType maths font using the \cs{setmathfont} command.
+If you do not load an OpenType maths font before |\begin{document}|, Latin Modern Math will be loaded automatically.
+
+Note that \pkg{amsmath} should be loaded before \pkg{unicode-math} to avoid conflicts, and
+it will be loaded automatically if not requested earlier in the preamble.
+
+
+\subsection{New commands}
+\LaTeX, since the first version of \LaTeXe, changed the math group
+selection from, say, |{\bf x}| to |\mathbf{x}|. It introduced commands
+such as |\mathbf|, |\mathit|, |\mathsf|, |\mathtt| and |\mathcal|,
+besides |\mathnormal|. This was not only done to maintain the analogy
+with |\textbf|, |\textit| and so on, but with the precise purpose of
+loading the needed math groups (or math families) on demand and not
+allocating them if not required by the document.
+
+The introduction of \pkg{unicode-math} posed some problems fitting into this design. For
+instance, there is a big difference between say |fit| as an operator
+name in boldface type and the product of three boldface variables.
+With legacy \TeX{} engines, |\mathbf{fit}| would use a ligature and
+the same would happen with the input |\mathbf{f}\mathbf{i}\mathbf{t}|.
+For the latter case, the user should probably use |\mathbf{f\/}|.
+
+However, there is another important point from a \emph{conceptual}
+point of view. A boldface variable name should be printed using the
+\emph{math font}, whereas a boldface operator name should be printed
+using the \emph{text font}. OpenType math fonts make this distinction
+feasible, because they contain several math alphabets. Of course a
+boldface text~`x' will not differ much (or at all) from a boldface
+math~`x', but this is not the point: they \emph{should} be considered
+different, because the former is |U+0078| in Unicode, the latter is
+|U+1D431|.
+
+It was clear that \emph{two} different commands are needed: one for using text boldface in math,
+one for using math boldface. Only the document's author can know
+whether one or the other is needed. The decision was to split off
+the two meanings with a command like |\mathbf| for the boldface text font
+in math and a command like |\symbf| (for the bold math font).
+
+The five new symbol font commands that behave in this way are: \cs{symup},
+\cs{symit}, \cs{symbf}, \cs{symsf}, and \cs{symtt}.
+These commands switch to single-letter mathematical symbols
+(generally within the same OpenType font).
+
+The legacy \cs{math..} commands switch to text fonts that are set up to behave
+correctly in mathematics, and should be used for multi-letter identifiers. These
+could be denoted `text math alphabets'; further details are discussed
+in \secref{mathselect}. Additional similar `text math alphabet'
+commands can be defined using the \cs{setmathfontface} command
+discussed in \secref{mathselect}. To control the behaviour of the
+default text math alphabet commands to behave in a
+backwards-compatible mode, see the package options described in
+\secref{textmathlegacy}.
+
+
+\begin{table}[t!]
+ \topcaption{New \pkg{unicode-math} commands which overlap with legacy
+ math commands. For new documents the \texttt{sym} versions are recommended.}
+ \tablabel{symvsmath}
+ \centering
+ \begin{tabular}[t]{ll}
+ \toprule
+ Command & Synonym \\
+ \midrule
+ \cs{symnormal} & \cs{mathnormal} \\
+ \cs{symliteral} & \\
+ & \\
+ & \\
+ & \\
+ \cs{symbb} & \cs{mathbb} \\
+ \cs{symbbit} & \cs{mathbbit} \\
+ \cs{symcal} & \cs{mathcal} \\
+ \cs{symscr} & \cs{mathscr} \\
+ \cs{symfrak} & \cs{mathfrak} \\
+ \cs{symsfup} & \cs{mathsfup} \\
+ \cs{symsfit} & \cs{mathsfit} \\
+ \bottomrule
+ \end{tabular}\qquad
+ \begin{tabular}[t]{ll}
+ \toprule
+ Command & Synonym \\
+ \midrule
+ & \\
+ & \\
+ \cs{symbfsf} & \cs{mathbfsf} \\
+ \cs{symbfup} & \cs{mathbfup} \\
+ \cs{symbfit} & \cs{mathbfit} \\
+ & \\
+ & \\
+ \cs{symbfcal} & \cs{mathbfcal} \\
+ \cs{symbfscr} & \cs{mathbfscr} \\
+ \cs{symbffrak} & \cs{mathbffrak} \\
+ \cs{symbfsfup} & \cs{mathbfsfup} \\
+ \cs{symbfsfit} & \cs{mathbfsfit} \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+In addition, \pkg{unicode-math} also provides a number of commands (such as
+|\symcal|) to select specific `symbol alphabets' within the unicode
+maths font, with usage, e.g., |$\symcal{G}$|${}\to\symcal{G}$. The
+full listing is shown in \Tabref{symvsmath}. For backwards
+compatibility, many of these are also defined with `familiar' synonyms
+such as |\mathcal|. However, where possible the `sym' prefix
+commands should be preferred, as certain synonyms may become
+deprecated in time. The |\symliteral| command is described in
+\secref{math-style}.
+
+Using the |\sym..| commands, the glyphs used to produce PDF output are Unicode-encoded,
+and therefore a symbol such as $\symcal{G}$ can be copy-pasted into another programme
+(or even into the source of another \LaTeX\ document using \pkg{unicode-math}) without
+loss of meaning.
+This is an important aspect of Unicode mathematics, but the \pkg{unicode-math} package
+is not `pure' in the sense that the package also provides other mechanisms to change
+the fonts used in the PDF output; the philosophy of the package is to provide mechanisms
+for technical authors to invent and experiment with new syntaxes for their work.
+
+
+\subsection{Package options}
+Package options may be set when the package as loaded or at any later
+stage with the \cs{unimathsetup} command. Therefore, the following two
+examples are equivalent:
+\begin{Verbatim}
+\usepackage[math-style=TeX]{unicode-math}
+% OR
+\usepackage{unicode-math}
+\unimathsetup{math-style=TeX}
+\end{Verbatim}
+Note, however, that some package options affects how maths is initialised
+and changing an option such as |math-style| will not take effect until a
+new maths font is set up.
+
+Package options may \emph{also} be used when declaring new maths fonts,
+passed via options to the \cs{setmathfont} command.
+Therefore, the following two examples are equivalent:
+\begin{Verbatim}
+\unimathsetup{math-style=TeX}
+\setmathfont{texgyrepagella-math.otf}
+% OR
+\setmathfont{texgyrepagella-math.otf}[math-style=TeX]
+\end{Verbatim}
+
+A summary list of package options is shown in \tabref{pkgopt}.
+See following sections for more information.
+
+\begin{table}\centering
+ \topcaption{Package options.}
+ \tablabel{pkgopt}
+ \begin{tabular}{lll}
+ \toprule
+ Option & Description & See\dots \\
+ \midrule
+ |math-style| & Style of letters & \secref*{math-style} \\
+ |bold-style| & Style of bold letters & \secref*{bold-style} \\
+ |sans-style| & Style of sans serif letters & \secref*{sans-style} \\
+ |nabla| & Style of the nabla symbol & \secref*{nabla} \\
+ |partial| & Style of the partial symbol & \secref*{partial} \\
+ |colon| & Behaviour of \cs{colon} & \secref*{colon} \\
+ |slash-delimiter| & Glyph to use for `stretchy' slash & \secref*{slash-delimiter} \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+
+\section{Unicode maths font setup}
+
+In the ideal case, a single Unicode font will contain all maths glyphs we
+need. The file |unicode-math-table.tex| (based on Barbara Beeton's \STIX\ table)
+provides the mapping between Unicode
+maths glyphs and macro names (all 3298 — or however many — of them!). A
+single command
+\codeline{\cmd\setmathfont\marg{font name}\oarg{font features}}
+implements this for every every symbol and alphabetic variant.
+That means |x| to $x$, |\xi| to $\xi$, |\leq| to $\leq$, etc., |\symscr{H}|
+to $\symscr{H}$ and so on, all for Unicode glyphs within a single font.
+
+This package deals well with Unicode characters for maths
+input. This includes using literal Greek letters in formulae,
+resolving to upright or italic depending on preference.
+
+Font features specific to \pkg{unicode-math} are shown in \tabref{mathfontfeatures}.
+Package options (see \tabref{pkgopt}) may also be used.
+Other \pkg{fontspec} features are also valid.
+
+\begin{table}\centering
+ \topcaption{Maths font options.}
+ \tablabel{mathfontfeatures}
+ \begin{tabular}{lll}
+ \toprule
+ Option & Description & See\dots \\
+ \midrule
+ |range| & Style of letters & \secref{range} \\
+ |script-font| & Font to use for sub- and super-scripts & \secref{sscript} \\
+ |script-features| & Font features for sub- and super-scripts & \secref{sscript} \\
+ |sscript-font| & Font to use for nested sub- and super-scripts & \secref{sscript} \\
+ |sscript-features| & Font features for nested sub- and super-scripts & \secref{sscript} \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+\subsection{Using multiple fonts}
+\seclabel{range}
+
+There will probably be few cases where a single Unicode maths font suffices
+(simply due to glyph coverage). The \STIX\ font comes to mind as a
+possible exception. It will therefore be necessary to delegate specific
+Unicode ranges of glyphs to separate fonts:
+ \codeline{\cmd\setmathfont\marg{font name}|[range=|\meta{unicode range}|,|\meta{font features}|]|}
+where \meta{unicode range} is a comma-separated list of Unicode slot numbers and ranges such as |{"27D0-"27EB,"27FF,"295B-"297F}|.
+Note that \TeX's syntax for accessing the slot number of a character, such as |`\+|, will also work here.
+Only numerical slots can be used in ranged declarations.
+
+Note that, for efficiency, the \pkg{unicode-math} package only loads a default maths setup when absolutely necessary.
+Before you use the |range| option you must first load a `main' maths font in the standard way.
+
+You may also use the macro for accessing the glyph, such as |range=|\cs{int}, or whole collection of symbols with the same math type, such as |range=\mathopen|, or complete math styles such as |range=\symbb| (or just |range=bb|).
+
+\subsubsection{Control over alphabet ranges}
+
+As discussed earlier, Unicode mathematics consists of a number of `alphabet styles' within a single font. In \pkg{unicode-math}, these ranges are indicated with the following (hopefully self-explanatory) labels:
+\begin{quote}\ttfamily
+\ExplSyntaxOn
+\clist_const:Nn \g__um_named_ranges_clist {
+up ,
+it ,
+bb ,
+bbit ,
+scr ,
+cal ,
+bfcal ,
+frak ,
+tt ,
+sfup ,
+sfit ,
+bfup ,
+bfit ,
+bfscr ,
+bffrak,
+bfsfup,
+bfsfit,
+}
+\clist_use:Nn \g__um_named_ranges_clist {\,,\,~}
+\ExplSyntaxOff
+\end{quote}
+Fonts can be selected (for predefined ranges only) using the following syntax, in which case all other maths font setup remains untouched:
+\begin{itemize}
+\item |[range=bb]| to use the font for `|bb|' letters only.
+\item |[range=bfsfit/{greek,Greek}]| for Greek lowercase and uppercase only (also with |latin|, |Latin|, |num| as possible options for Latin lower-/upper-case and numbers, resp.).
+\item |[range=up->sfup]| to map to different output styles.
+\end{itemize}
+
+A common request is to load numerals only from a specific font. This can be
+achieved with an option such as |range=up/{num}|.
+
+Note that `meta-styles' such as `|bf|' and `|sf|' are not included in the list above since they are context dependent. Use |[range=bfup]| and |[range=bfit]| to effect changes to the particular ranges selected by `|bf|' (and similarly for `|sf|').
+
+If a particular math style is not defined in the font, we fall back onto the lower-base plane (i.e., `upright') glyphs.
+Therefore, to use an \ascii-encoded fractur font, for example, write
+\begin{Verbatim}
+ \setmathfont{SomeFracturFont}[range=frak]
+\end{Verbatim}
+and because the math plane fractur glyphs will be missing, \pkg{unicode-math} will know to use the \ascii\ ones instead.
+If necessary this behaviour can be forced with |[range=frak->up]|, since the `|up|' range corresponds to \ascii\ letters.
+
+%If you wanted to swap the maths symbols with sans serif forms, it would be possible to write |[range={up->sfup,it->sfit}]|.
+%Note, however, that at present Unicode does not encode glyphs for sans serif Greek (\tabref{mathalphabets}).
+
+Users of the impressive Minion Math fonts (commercial) may use remapping to access the bold glyphs using:
+\begin{Verbatim}
+ \setmathfont{MinionMath-Regular.otf}
+ \setmathfont{MinionMath-Bold.otf}[range={bfup->up,bfit->it}]
+\end{Verbatim}
+To set up the complete range of optical sizes for these fonts, a font declaration such as the following may be used: (adjust may be desired according to the font size of the document)
+\begin{Verbatim}
+\setmathfont{Minion Math}[
+ SizeFeatures = {
+ {Size = -6.01, Font = MinionMath-Tiny},
+ {Size = 6.01-8.41, Font = MinionMath-Capt},
+ {Size = 8.41-13.01, Font = MinionMath-Regular},
+ {Size = 13.01-19.91, Font = MinionMath-Subh},
+ {Size = 19.91-, Font = MinionMath-Disp}
+ }]
+
+\setmathfont{Minion Math}[range = {bfup->up,bfit->it},
+ SizeFeatures = {
+ {Size = -6.01, Font = MinionMath-BoldTiny},
+ {Size = 6.01-8.41, Font = MinionMath-BoldCapt},
+ {Size = 8.41-13.01, Font = MinionMath-Bold},
+ {Size = 13.01-19.91, Font = MinionMath-BoldSubh},
+ {Size = 19.91-, Font = MinionMath-BoldDisp}
+ }]
+\end{Verbatim}
+
+
+\subsection{Script and scriptscript fonts/features}
+\seclabel{sscript}
+
+Cambria Math uses OpenType font features to activate smaller optical sizes
+for scriptsize and scriptscriptsize symbols (the $B$ and $C$, respectively,
+in $A_{B_C}$).
+Other typefaces (such as Minion Math) may use entirely separate font files.
+
+The features |script-font| and |sscript-font| allow alternate fonts to be
+selected for the script and scriptscript sizes, and |script-features| and
+|sscript-features| to apply different OpenType features to them.
+
+By default |script-features| is defined as |Style=MathScript| and |sscript-features| is |Style=MathScriptScript|.
+These correspond to the two levels of OpenType's |ssty| feature tag.
+If the |(s)script-features| options are specified manually, you must
+additionally specify the |Style| options as above.
+
+
+\subsection{Maths `versions'}
+
+\LaTeX\ uses a concept known as `maths versions' to switch math fonts
+mid-document.
+This is useful because it is more efficient than loading a complete maths
+font from scratch every time---especially with thousands of glyphs in the case of Unicode maths!
+The canonical example for maths versions is to select a `bold' maths font
+which might be suitable for section headings, say.
+(Not everyone agrees with this typesetting choice, though; be careful.)
+
+To select a new maths font in a particular version, use the syntax
+ \codeline{\cmd\setmathfont\marg{font name}|[version=|\meta{version name}|,|\meta{font features}|]|}
+and to switch between maths versions mid-document use the standard \LaTeX\ command
+\cmd\mathversion\marg{version name}.
+
+Note there are currently open issues regarding the interaction between the |version|
+and the |range| features, so please proceed with caution.
+
+\subsection{Legacy maths `alphabet' commands}
+\seclabel{mathselect}
+
+\LaTeX\ traditionally uses \cs{DeclareMathAlphabet} and \cs{SetMathAlphabet} to define document commands such as \cs{mathit}, \cs{mathbf}, and so on.
+While these commands can still be used, \pkg{unicode-math} defines a wrapper command to assist with the creation of new such maths alphabet commands.
+This command is known as \cs{setmathface} in symmetry with \pkg{fontspec}'s \cs{newfontface} command; it takes syntax:
+\begin{quote}
+ \cmd\setmathfontface\meta{command}\marg{font name}|[|\meta{font features}|]|
+
+ \makebox[0pt][l]{\cmd\setmathfontface\meta{command}\marg{font name}|[||version=|\meta{version name}|,|\meta{font features}|]|}
+\end{quote}
+For example, if you want to define a new legacy maths alphabet font \cs{mathittt}:
+\begin{verbatim}
+ \setmathfontface\mathittt{texgyrecursor-italic.otf}
+ ...
+ $\mathittt{foo} = \mathittt{a} + \mathittt{b}$
+\end{verbatim}
+
+
+\subsubsection{Default `text math' fonts}
+
+The five `text math' fonts, discussed above, are: \cs{mathrm}, \cs{mathbf}, \cs{mathit}, \cs{mathsf}, and \cs{mathtt}.
+These commands are also defined with their original definition under synonyms \cs{mathtextrm}, \cs{mathtextbf}, and so on.
+(These definitions hold regardless of package option, in case you need to be sure.)
+
+When selecting document fonts using \pkg{fontspec} commands such as \cs{setmainfont}, \pkg{unicode-math} inserts some additional code into \pkg{fontspec} that keeps the current default fonts `in sync' with their corresponding \cs{mathrm} commands, etc.
+
+For example, in standard \LaTeX, \cs{mathsf} doesn't change even if the main document font is changed using |\renewcommand\sfdefault{...}|. With \pkg{unicode-math} loaded, after writing |\setsansfont{Helvetica}|, \cs{mathsf} will now be set in Helvetica.
+
+If the \cs{mathsf} font is set explicitly at any time in the preamble, this `auto-following' does not occur. The legacy math font switches can be defined either with commands defined by \pkg{fontspec} (|\setmathrm|, |\setmathsf|, etc.) or using the more general |\setmathfontface\mathsf| interface defined by \pkg{unicode-math}.
+
+
+\subsubsection{Replacing `text math' fonts by symbols}
+\seclabel{textmathlegacy}
+
+For certain types of documents that use legacy input syntax, it may be preferable to have |\mathbf| behave as if it were |\symbf| en masse (et cetera respectively).
+A series of package options (\tabref{legacyfontswitch}) are provided to facilitate switching the definition of \cs{mathXYZ} for the five legacy text math font definitions.
+
+For example, if in a particular document |\mathbf| is used only for choosing symbols of vectors and matrices, a dedicated symbol font (|\symbf|) will produce better spacing and will better match the main math font.
+In that case loading |unicode-math| with the |mathbf=sym| will achieve the desired result.
+
+\begin{table}
+ \centering
+ \topcaption{Maths text font configuration options. Note that \cs{mathup} and \cs{mathrm} are aliases of each other and cannot be configured separately.}
+ \tablabel{legacyfontswitch}
+ \begin{tabular}{lll}
+ \toprule
+ Defaults (from `text' font) & From `maths symbols' \\
+ \midrule
+ |mathrm=text| & |mathrm=sym | \\
+ |mathup=text|\rlap{$^\ast$} & |mathup=sym|{}\rlap{$^\ast$} \\
+ |mathit=text| & |mathit=sym | \\
+ |mathsf=text| & |mathsf=sym | \\
+ |mathbf=text| & |mathbf=sym | \\
+ |mathtt=text| & |mathtt=sym | \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+
+\subsubsection{Operator font}
+
+\LaTeX\ defines an internal command \cs{operator@font} for typesetting elements such as |\sin| and |\cos|.
+This font is selected from the legacy |operators| NFSS `MathAlphabet', which is no longer relevant in the context of \pkg{unicode-math}.
+By default, the \cs{operator@font} command is defined to switch to the \cs{mathrm} font.
+You may now change these using the command:
+\begin{Verbatim}
+\setoperatorfont\mathit
+\end{Verbatim}
+Or, to select a \pkg{unicode-math} range:
+\begin{Verbatim}
+\setoperatorfont\symscr
+\end{Verbatim}
+\setoperatorfont\symscr
+For example, after the latter above, |$\sin x$| will produce `$\sin x$'.
+
+\mathversion{normal}
+\setoperatorfont\mathrm
+
+
+\section{Maths input}
+
+\XeTeX's Unicode support allows maths input through two methods. Like
+classical \TeX, macros such as \cmd\alpha, \cmd\sum, \cmd\pm, \cmd\leq, and
+so on, provide verbose access to the entire repertoire of characters defined
+by Unicode. The literal characters themselves may be used instead, for more
+readable input files.
+
+\subsection{Math `style'}
+\seclabel{math-style}
+
+Classically, \TeX\ uses italic lowercase Greek letters and \emph{upright}
+uppercase Greek letters for variables in mathematics. This is contrary to
+the \textsc{iso} standards of using italic forms for both upper- and lowercase.
+Furthermore, in various historical contexts, often associated with French typesetting, it was common to use upright uppercase \emph{Latin} letters as well as upright
+upper- and lowercase Greek, but italic lowercase latin. Finally, it is not unknown to use upright letters
+for all characters, as seen in the Euler fonts.
+
+The \pkg{unicode-math} package accommodates these possibilities with the
+option \opt{math-style} that takes one of five (case sensitive) arguments:
+\opt{TeX}, \opt{ISO}, \opt{french}, \opt{upright}, or \opt{literal}.\footnote{Interface inspired by Walter Schmidt's \pkg{lucimatx} package.}
+The \opt{math-style} options' effects are shown in brief in \tabref{math-style}.
+
+The philosophy behind the interface to the mathematical symbols
+lies in \LaTeX's attempt of separating content and formatting. Because input
+source text may come from a variety of places, the upright and
+`mathematical' italic Latin and Greek alphabets are \emph{unified} from the
+point of view of having a specified meaning in the source text. That is, to
+get a mathematical ‘$x$’, either the \ascii\ (`keyboard') letter |x| may
+be typed, or the actual Unicode character may be used. Similarly for Greek
+letters. The upright or italic forms are then chosen based on the
+|math-style| package option.
+
+If glyphs are desired that do not map as per the package option (for
+example, an upright `g' is desired but typing |$g$| yields `$g$'),
+\emph{markup} is required to specify this; to follow from the example:
+|\symup{g}|.
+Maths style commands such as \cmd\symup\ are detailed later.
+
+For compatibility and consistency, however, upright and italic Greek letters
+can be `forced` using \verb|up| or \verb|it| prefixes before their names.
+For example, \cs{Gamma} will give an upright or italic Gamma depending on the
+\opt{math-style}, but \cs{upGamma} and \cs{itGamma} will always give upright
+or italic Gammas, respectively.
+
+\paragraph{`Literal' interface}
+Some may not like this convention of normalising their input.
+For them, an upright |x| is an upright `x' and that's that.
+(This will be the case when obtaining source text from copy/pasting PDF or
+Microsoft Word documents, for example.)
+For these users, the |literal| option to |math-style| will effect this behaviour.
+The \cs{symliteral}\marg{syms} command can also be used, regardless of package setting, to force the style to match the literal input characters.
+This is a `mirror' to \cs{symnormal}\marg{syms} (also alias \cs{mathnormal}) which `resets' the character mapping in its argument to that originally set up through package options.
+
+
+\begin{table}
+ \centering
+ \topcaption{Effects of the \opt{math-style} package option.}
+ \tablabel{math-style}
+ \begin{tabular}{@{}>{\ttfamily}lcc@{}}
+ \toprule
+ & \multicolumn{2}{c}{Example} \\
+ \cmidrule(l){2-3}
+ \rmfamily Package option & Latin & Greek \\
+ \midrule
+ math-style=ISO & $(a,z,B,X)$ & $\symit{(\alpha,\beta,\Gamma,\Xi)}$ \\
+ math-style=TeX & $(a,z,B,X)$ & $(\symit\alpha,\symit\beta,\symup\Gamma,\symup\Xi)$ \\
+ math-style=french & $(a,z,\symup B,\symup X)$ & $(\symup\alpha,\symup\beta,\symup\Gamma,\symup\Xi)$ \\
+ math-style=upright & $(\symup a,\symup z,\symup B,\symup X)$ & $(\symup\alpha,\symup\beta,\symup\Gamma,\symup\Xi)$ \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+\paragraph{`Full-width' letters}
+Unicode contains `full-width' versions of ASCII from \unichar{FF01}.
+The numerals and latin letters in this range are defined by \pkg{unicode-math}
+to map to their standard ASCII counterparts, which are then controlled by the relevant \opt{math-style} setting.
+Other full-width symbols are not currently included but can be if there is sufficient need or desire.
+
+\subsection{Bold style}
+\seclabel{bold-style}
+
+Similar as in the previous section, ISO standards differ somewhat to \TeX's
+conventions (and classical typesetting) for `boldness' in mathematics. In
+the past, it has been customary to use bold \emph{upright} letters to denote
+things like vectors and matrices. For example, \( \symbfup{M} =
+(\mitM_x,\mitM_y,\mitM_z) \). Presumably, this was due to the relatively
+scarcity of bold italic fonts in the pre-digital typesetting era.
+It has been suggested by some that \emph{italic} bold symbols should be used nowadays instead, but this practise is certainly not widespread.
+
+Bold Greek letters have simply been bold variant glyphs of their regular
+weight, as in \( \mbfitxi = (\mitxi_\mitr,\mitxi_\mitphi,\mitxi_\mittheta)
+\).
+Confusingly, the syntax in \LaTeX\ traditionally has been different for obtaining `normal' bold symbols in Latin and Greek: \cmd\mathbf\ in the former (`$\symbfup{M}$'), and \cmd\bm\ (or
+\cmd\boldsymbol, deprecated) in the latter (`$\mbfitxi$').
+
+In \pkg{unicode-math}, the \cmd\symbf\ command works directly with both
+Greek and Latin maths characters and depending on package option
+either switches to upright for Latin letters (|bold-style=TeX|) as well or
+keeps them italic (|bold-style=ISO|).
+To match the package options for non-bold characters, with option
+|bold-style=upright| all bold characters are upright, and
+|bold-style=literal| does not change the upright/italic shape of the letter.
+The \opt{bold-style} options' effects are shown in brief in \tabref{bold-style}.
+
+Upright and italic bold mathematical letters input as direct Unicode
+characters are normalised with the same rules. For example, with
+|bold-style=TeX|, a literal bold italic latin character will be typeset
+upright.
+
+Note that \opt{bold-style} is independent of \opt{math-style}, although if
+the former is not specified then matching defaults are chosen based on the
+latter.
+
+\begin{table}
+ \centering
+ \topcaption{Effects of the \opt{bold-style} package option.}
+ \tablabel{bold-style}
+ \begin{tabular}{@{}>{\ttfamily}lcc@{}}
+ \toprule
+ & \multicolumn{2}{c}{Example} \\
+ \cmidrule(l){2-3}
+ \rmfamily Package option & Latin & Greek \\
+ \midrule
+ bold-style=ISO & $(\symbfit a, \symbfit z, \symbfit B, \symbfit X)$ & $(\symbfit\alpha, \symbfit\beta, \symbfit\Gamma, \symbfit\Xi)$ \\
+ bold-style=TeX & $(\symbfup a,\symbfup z,\symbfup B,\symbfup X)$ & $(\symbfit\alpha, \symbfit\beta,\symbfup \Gamma,\symbfup \Xi)$ \\
+ bold-style=upright & $(\symbfup a,\symbfup z,\symbfup B,\symbfup X)$ & $(\symbfup \alpha,\symbfup \beta,\symbfup \Gamma,\symbfup \Xi)$ \\
+ \bottomrule
+ \end{tabular}
+\end{table}
+
+
+\subsection{Sans serif style}
+\seclabel{sans-style}
+
+Unicode contains upright and italic, medium and bold mathematical style characters.
+These may be explicitly selected with the \cs{symsfup}, \cs{symsfit}, \cs{symbfsfup}, and \cs{symbfsfit}
+commands discussed in \secref{all-math-alphabets}.
+
+How should the generic \cs{symsf} behave? Unlike bold, sans serif is used much more sparingly
+in mathematics. I've seen recommendations to typeset tensors in sans serif italic
+or sans serif italic bold (e.g., examples in the \pkg{isomath} and \pkg{mattens} packages).
+But \LaTeX's \cs{mathsf} is \textsl{upright} sans serif.
+
+Therefore, the package options |[sans-style=upright]| and |[sans-style=italic]| control the behaviour of \cs{symsf}.
+The |upright| style sets up the command to use upright sans serif, including Greek;
+the |italic| style switches to using italic in both Latin and Greek.
+In other words, this option simply changes the meaning of \cs{symsf} to either \cs{symsfup} or \cs{symsfit}, respectively.
+Please let me know if more granular control is necessary here.
+
+There is also a |[sans-style=literal]| setting, set automatically with |[math-style=literal]|, which retains the uprightness of the input characters used when selecting the sans serif output.
+
+\subsubsection{What about bold sans serif?}
+
+While you might want your bold upright and your sans serif italic, I don't believe you'd also want your bold sans serif upright (etc.).
+Therefore, bold sans serif follows from the setting for sans serif; it is completely independent of the setting for bold.
+
+In other words, \cs{symbfsf} is either \cs{symbfsfup} or \cs{symbfsfit} based on |[sans-style=upright]| or |[sans-style=italic]|, respectively. And \texttt{[sans-style = literal]} causes \cs{symbfsf} to retain the same italic or upright shape as the input, and turns it bold sans serif.
+
+N.B.: there is no medium-weight sans serif Greek range in Unicode.
+Therefore, |\symsf{\alpha}| does not make sense (it produces `$\symsf{\alpha}$'), while |\symbfsf{\alpha}| gives `$\symbfsfup{\alpha}$' or `$\symbfsfit{\alpha}$' according to the |sans-style|.
+
+\subsection{All (the rest) of the mathematical styles}
+\seclabel{all-math-alphabets}
+
+Unicode contains separate codepoints for most if not all variations of style
+shape one may wish to use in mathematical notation. The complete list is shown
+in \tabref{mathalphabets}. Some of these have been covered in the previous sections.
+
+The math font switching commands do not nest; therefore if you want
+sans serif bold, you must write |\symbfsf{...}| rather than |\symbf{\symsf{...}}|.
+This may change in the future.
+
+\begin{table}
+\caption{Mathematical styles defined in Unicode. Closed dots indicate an style exists in the font specified; open dots indicate shapes that should always be taken from the upright font even in the italic style. See main text for description of \cs{mathbbit}.}
+\tablabel{mathalphabets}
+\centering
+\def\Y{\textbullet}
+\def\M{\textopenbullet}
+\begin{tabular}{@{} lll l ccc @{}}
+\toprule
+\multicolumn{3}{c}{Font} & & \multicolumn{3}{c}{Alphabet} \\
+\cmidrule(r){1-3}
+\cmidrule(l){5-7}
+Style & Shape & Series & Switch & Latin & Greek & Numerals \\
+\midrule
+Serif & Upright & Normal & \cs{symup} & \Y & \Y & \Y \\
+ & & Bold & \cs{symbfup} & \Y & \Y & \Y \\
+ & Italic & Normal & \cs{symit} & \Y & \Y & \M \\
+ & & Bold & \cs{symbfit} & \Y & \Y & \M \\
+Sans serif & Upright & Normal & \cs{symsfup} & \Y & & \Y \\
+ & & Bold & \cs{symbfsfup} & \Y & \Y & \Y \\
+ & Italic & Normal & \cs{symsfit} & \Y & & \M \\
+ & & Bold & \cs{symbfsfit} & \Y & \Y & \M \\
+Typewriter & Upright & Normal & \cs{symtt} & \Y & & \Y \\
+Double-struck & Upright & Normal & \cs{symbb} & \Y & & \Y \\
+ & Italic & Normal & \cs{symbbit} & \Y & & \\
+Script & Upright & Normal & \cs{symscr} & \Y & & \\
+ & & Bold & \cs{symbfscr} & \Y & & \\
+Fraktur & Upright & Normal & \cs{symfrak} & \Y & & \\
+ & & Bold & \cs{symbffrac} & \Y & & \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+\subsubsection{Scope of the functionality of the \cs{sym..} commands}
+
+The \cs{sym..} commands are designed to affect only the follow sets of input letters: numerals ($0$--$9$), Latin ($a$--$z$, $A$--$Z$), Greek ($\alpha$--$\omega$, $\Alpha$--$\Omega$,), and the \cs{partial} and \cs{nabla} symbols ($\partial$, $\nabla$).
+These are the only symbols for which Unicode defines separate codepoints with varying mathematical style.
+
+There is currently no scope for including other symbols in the \cs{sym..} commands, such as writing |\symbf{\int}| for a bold integral symbol.
+Therefore the commands provided by \pkg{unicode-math} should not be compared to those provided by the \pkg{bm} package.
+
+\subsubsection{Double-struck}
+
+The double-struck style (also known as `blackboard bold') consists of
+upright Latin letters $\{\symbb{a}$--$\symbb{z}$,$\symbb{A}$$\symbb{Z}\}$,
+numerals $\symbb{0}$--$\symbb{9}$, summation symbol $\symbb\sum$, and four
+Greek letters only: $\{\symbb{\gamma\pi\Gamma\Pi}\}$.
+
+While |\symbb{\sum}| does produce a double-struck summation symbol,
+its limits aren't properly aligned. Therefore,
+either the literal character or the control sequence \cs{Bbbsum} are
+recommended instead.
+
+There are also five Latin \emph{italic} double-struck letters: $\symbbit{Ddeij}$.
+These can be accessed (if not with their literal characters or control sequences)
+with the \cs{mathbbit} style switch, but note that only those five letters
+will give the expected output.
+
+\subsubsection{Caligraphic vs.\ Script variants}
+
+The Unicode maths encoding contains a style for `Script' letters,
+and while by default \cs{mathcal} and \cs{mathscr}
+are synonyms, there are some situations when a
+separate `Caligraphic' style is needed as well.
+
+If a font contains alternate glyphs for a separate caligraphic style,
+they can be selected explicitly as shown below.
+This feature is currently only supported by the XITS~Math font, where
+the caligraphic letters are accessed with the same glyph slots as the
+script letters but with the first stylistic set feature (|ss01|) applied.
+An example is shown below.
+\begin{quote}
+\setmathfont{XITSMath-Regular.otf}
+\setmathfont{XITSMath-Regular.otf}[range=cal,StylisticSet=1]
+The Script style (\cs{mathscr}) in XITS Math is: $\symscr{ABCXYZ}$\par
+The Caligraphic style (\cs{mathcal}) in XITS Math is: $\symcal{ABCXYZ}$
+\end{quote}
+
+
+\subsection{Miscellanea}
+
+\subsubsection{Nabla}
+\seclabel{nabla}
+
+ The symbol $\nabla$ comes in the six forms shown in \tabref{nabla}.
+ We want an individual option to specify whether we want upright or italic
+ nabla by default (when either upright or italic nabla is used in the
+ source). \TeX\ classically uses an upright nabla, and \textsc{iso}
+ standards agree with this convention.
+ The package options |nabla=upright| (default) and
+ |nabla=italic| switch between the two choices, and |nabla=literal| respects
+ the shape of the input character.
+|nabla=literal| is activated automatically after |math-style=literal|.
+
+These settings are then inherited through \cmd\symbf; \cmd\symit\ and \cmd\symup\ can be used to force the shape of the nabla one way or the other.
+
+
+\begin{table}
+ \begin{minipage}[b]{0.49\textwidth}
+ \centering
+ \topcaption{The various forms of nabla.}
+ \tablabel{nabla}
+ \let \tmpshow\empty
+ \begin{tabular}{@{}llc@{}}
+ \toprule
+ \multicolumn{2}{@{}l}{Description} & Glyph \\
+ \cmidrule(r){1-2}\cmidrule(l){3-3}
+ Upright & Serif & $\symup\nabla$ \\
+ & Bold serif & $\symbfup\nabla$ \\
+ & Bold sans & $\symbfsfup\nabla$ \\
+ \cmidrule(lr){1-2}\cmidrule(lr){3-3}
+ Italic & Serif & $\symit\nabla$ \\
+ & Bold serif & $\symbfit\nabla$ \\
+ & Bold sans & $\symbfsfit\nabla$ \\
+ \bottomrule
+ \end{tabular}
+ \end{minipage}\hfill
+ \begin{minipage}[b]{0.49\textwidth}
+ \centering
+ \topcaption{The partial differential.}
+ \tablabel{partial}
+ \begin{tabular}{@{}llc@{}}
+ \toprule
+ \multicolumn{2}{@{}l}{Description} & Glyph \\
+ \cmidrule(r){1-2}\cmidrule(l){3-3}
+ Regular & Upright & $\symup\partial$ \\
+ & Italic & $\symit\partial$ \\
+ Bold & Upright & $\symbfup\partial$ \\
+ & Italic & $\symbfit\partial$ \\
+ Sans bold & Upright & $\symbfsfup\partial$ \\
+ & Italic & $\symbfsfit\partial$ \\
+ \bottomrule
+ \end{tabular}
+ \end{minipage}
+\end{table}
+
+
+\subsubsection{Partial}
+\seclabel{partial}
+
+The same logic as for nabla applies to the symbols \unichar{2202} partial differential and \unichar{1D715} math italic partial differential.
+However, in practice these symbols are often designed identically in an italic style.
+
+If the font you are using supports it, use the |partial=upright| or |partial=italic| (default) package options to specify
+which one you would like, or |partial=literal| to have the same character
+used in the output as was used for the input.
+|partial=literal| is activated following |math-style=literal|.
+
+See \tabref{partial} for the variations on the partial differential symbol.
+
+
+\subsubsection{Primes}
+
+Primes ($x'$) may be input in several ways. You may use any combination
+the \ascii\ straight quote (\texttt{\char`\'}) or the Unicode prime \unichar{2032}
+($'$); when multiple primes occur next to each other, they chain
+together to form double, triple, or quadruple primes if the font contains
+pre-drawn glyphs. The individual prime glyphs are accessed, as usual,
+with the \cs{prime} command, and the double-, triple-, and quadruple-prime
+glyphs are available with \cs{dprime}, \cs{trprime}, and \cs{qprime},
+respectively.
+
+If the font does not contain the pre-drawn glyphs or more than four primes
+are used, the single prime glyph is used multiple times with a negative
+kern to get the spacing right. There is no user interface to adjust this
+negative kern yet (because I haven't decided what it should look like);
+if you need to, write something like this:
+\begin{Verbatim}
+\ExplSyntaxOn
+\muskip_gset:Nn \g_@@_primekern_muskip { -\thinmuskip/2 }
+\ExplySyntaxOff
+\end{Verbatim}
+Backwards or reverse primes behave in exactly the same way; use the \ascii\
+back tick (\texttt{\char`\`}) or the Unicode reverse prime \unichar{2035}
+({\umfont\char"2035}).
+The command to access the backprime is \cs{backprime}, and
+multiple backwards primes can accessed with \cs{backdprime},
+\cs{backtrprime}, and \cs{backqprime}.
+
+In all cases above, no error checking is performed if you attempt to
+access a multi-prime glyph in a font that doesn't contain one. For this
+reason, it may be safer to write |x''''| instead of |x\qprime|
+in general.
+
+If you ever need to enter the straight quote |'| or the backtick |`| in
+maths mode, these glyphs can be accessed with \cs{mathstraightquote} and
+\cs{mathbacktick}.
+
+\subsubsection{Subscripts and superscripts and symbol alphabets}
+
+In traditional \LaTeX, users have for many years exploited a loophole in the implementation
+of |\mathrm| and similar to write expressions such as |x_\mathrm f| to achieve
+$x_{\mathrm{f}}$ instead of writing the more correct |x_{\mathrm{f}}|.
+Shorthand notation such as |x_\mathrm f| is not officially documented \LaTeX\ syntax,
+and due to a particular implementation detail in \pkg{unicode-math} this \emph{incorrect}
+syntax is no longer supported.
+
+
+\subsubsection{Unicode subscripts and superscripts}
+
+You may, if you wish, use Unicode subscripts and superscripts in your
+source document. For basic expressions, the use of these characters
+can make the input more readable.
+Adjacent sub- or super-scripts will be concatenated into a single
+expression.
+
+The range of subscripts and superscripts supported by this package
+are shown in \figref{superscripts,subscripts}. Please request more if
+you think it is appropriate.
+
+\begin{figure}\centering
+\fbox{\fontspec{DejaVuSerif.ttf}\Large
+A
+^^^^2070 ^^^^00b9 ^^^^00b2 ^^^^00b3 ^^^^2074 ^^^^2075 ^^^^2076 ^^^^2077
+^^^^2078 ^^^^2079 ^^^^207a ^^^^207b ^^^^207c ^^^^207d ^^^^207e ^^^^2071
+^^^^207f ^^^^207f ^^^^02b0 ^^^^02b2 ^^^^02b3 ^^^^02b7 ^^^^02b8
+Z}
+\caption{
+ The Unicode superscripts supported as input characters.
+ These are the literal glyphs from the `DejaVu Serif' font,
+ not the output seen when used for maths input.
+ The `A' and `Z' are to provide context for the size and
+ location of the superscript glyphs.
+}
+\figlabel{superscripts}
+\end{figure}
+
+\begin{figure}\centering
+\fbox{\fontspec{DejaVuSerif.ttf}\Large
+A
+^^^^2080 ^^^^2081 ^^^^2082 ^^^^2083 ^^^^2084 ^^^^2085 ^^^^2086 ^^^^2087
+^^^^2088 ^^^^2089 ^^^^208a ^^^^208b ^^^^208c ^^^^208d ^^^^208e ^^^^2090
+^^^^2091 ^^^^1d62 ^^^^2092 ^^^^1d63 ^^^^1d64 ^^^^1d65 ^^^^2093 ^^^^1d66
+^^^^1d67 ^^^^1d68 ^^^^1d69 ^^^^1d6a
+Z}
+\caption{
+ The Unicode subscripts supported as input characters.
+ See note from \figref{superscripts}.
+}
+\figlabel{subscripts}
+\end{figure}
+
+\subsubsection{Colon}
+\seclabel{colon}
+
+The colon is one of the few confusing characters of Unicode maths.
+In \TeX, \texttt{:} is defined as a colon with relation spacing: `$a:b$'.
+While \cs{colon} is defined as a colon with punctuation spacing: `$a\colon b$'.
+
+In Unicode, \unichar{003A} {colon} is defined as a punctuation symbol,
+while \unichar{2236} {ratio} is the colon-like symbol used in mathematics to denote
+ratios and other things.
+
+This breaks the usual straightforward mapping from control sequence to Unicode input character
+to (the same) Unicode glyph.
+
+To preserve input compatibility, we remap the \ascii\ input character `\texttt{:}' to \unichar{2236}.
+Typing a literal \unichar{2236} char will result in the same output.
+If \pkg{amsmath} is loaded, then the definition of \cs{colon} is inherited from there
+(it looks like a punctuation colon with additional space around it).
+Otherwise, \cs{colon} is made to output a colon with \cs{mathpunct} spacing.
+
+The package option |colon=literal| forces \ascii\ input `|:|' to be printed as \cs{mathcolon} instead.
+
+
+\subsubsection{Slashes and backslashes}
+\seclabel{slash-delimiter}
+
+There are several slash-like symbols defined in Unicode. The complete list is shown in \tabref{slashes}.
+
+\begin{table}\centering
+\caption{Slashes and backslashes.}
+\tablabel{slashes}
+\begin{tabular}{@{}cl@{}cl@{}}
+\toprule
+Slot & Name & Glyph & Command \\
+\midrule
+\unichar{002F} & \textsc{solidus} & \umfont \char"002F & \cs{slash} \\
+\unichar{2044} & \textsc{fraction slash} & \umfont \char"2044 & \cs{fracslash} \\
+\unichar{2215} & \textsc{division slash} & \umfont \char"2215 & \cs{divslash} \\
+\unichar{29F8} & \textsc{big solidus} & \umfont \char"29F8 & \cs{xsol} \\
+\midrule
+\unichar{005C} & \textsc{reverse solidus} & \umfont \char"005C & \cs{backslash} \\
+\unichar{2216} & \textsc{set minus} & \umfont \char"2216 & \cs{smallsetminus} \\
+\unichar{29F5} & \textsc{reverse solidus operator}& \umfont \char"29F5 & \cs{setminus} \\
+\unichar{29F9} & \textsc{big reverse solidus} & \umfont \char"29F9 & \cs{xbsol} \\
+\bottomrule
+\end{tabular}
+\end{table}
+
+In regular \LaTeX\ we can write \cs{left}\cs{slash}\dots\cs{right}\cs{backslash}
+and so on and obtain extensible delimiter-like symbols. Not all of the Unicode slashes
+are suitable for this (and do not have the font support to do it).
+
+\paragraph{Slash}
+
+Of \unichar{2044} {fraction slash}, TR25 says that it is:
+\begin{quote}
+\dots used to build up simple fractions in running text\dots
+however parsers of mathematical texts should be prepared to handle fraction slash
+when it is received from other sources.
+\end{quote}
+
+\unichar{2215} {division slash} should be used when division is represented
+without a built-up fraction; $\pi\approx22/7$, for example.
+
+\unichar{29F8} {big solidus} is a `big operator' (like $\sum$).
+
+\paragraph{Backslash}
+
+The \unichar{005C} {reverse solidus} character \cs{backslash} is used for denoting
+double cosets: $A\backslash B$. (So I'm led to believe.)
+It may be used as a `stretchy' delimiter if supported by the font.
+
+MathML uses \unichar{2216} {set minus} like this: $A\smallsetminus B$.\footnote{\S4.4.5.11 \url{http://www.w3.org/TR/MathML3/}}
+The \LaTeX\ command name \cs{smallsetminus} is used for backwards compatibility.
+
+Presumably, \unichar{29F5} {reverse solidus operator} is intended to
+be used in a similar way, but it could also (perhaps?) be used to
+represent `inverse division': $\pi\approx7\mathbin{\backslash}22$.^^A
+\footnote{This is valid syntax in the Octave and Matlab programming languages,
+in which it means matrix inverse pre-multiplication. I.e., $A\mathbin{\backslash} B\equiv A^{-1}B$.}
+The \LaTeX\ name for this character is \cs{setminus}.
+
+Finally, \unichar{29F9} {big reverse solidus} is a `big operator' (like $\sum$).
+
+\paragraph{How to use all of these things}
+
+Unfortunately, font support for the above characters/glyphs is rather inconsistent.
+In Cambria Math, the only slash that grows (say when writing
+\[
+\left.\left[\begin{array}{cc} a & b \\ c & d\end{array}\right]\middle\slash
+ \left[\begin{array}{cc} 1 & 1 \\ 1 & 0\end{array}\right] \right.\quad )
+\]
+is the \textsc{fraction slash}, which we just established above is
+sort of only supposed to be used in text.
+
+Of the above characters, the following are allowed to be used after
+\cs{left}, \cs{middle}, and \cs{right}:
+\begin{itemize}
+\item \cs{fracslash};
+\item \cs{slash}; and,
+\item \cs{backslash} (the only reverse slash).
+\end{itemize}
+
+However, we assume that there is only \emph{one} stretchy slash
+in the font; this is assumed by default to be \unichar{002F} {solidus}.
+Writing \cs{left/} or \cs{left}\cs{slash} or \cs{left}\cs{fracslash}
+will all result in the same stretchy delimiter being used.
+
+The delimiter used can be changed with the |slash-delimiter| package option.
+Allowed values are |ascii|, |frac|, and |div|, corresponding to the respective
+Unicode slots.
+
+For example: as mentioned above, Cambria Math's stretchy slash is
+\unichar{2044} {fraction slash}. When using Cambria Math, then
+\pkg{unicode-math} should be loaded with the |slash-delimiter=frac| option.
+(This should be a font option rather than a package option, but
+it will change soon.)
+
+\subsubsection{Behaviour of hyphens in mathematics}
+\seclabel{hyphen}
+
+Unicode defines the following related characters:
+\begin{itemize}
+\item \unichar{0002D}{hyphen-minus}
+\item \unichar{02212}{minus sign}
+\item \unichar{02010}{hyphen} (\cs{mathhyphen})
+\end{itemize}
+The first two of these characters in the input will all behave as the binary operator
+`minus sign'.
+The third is defined by \pkg{unicode-math} as a `math letter' for constructions
+like \verb|$R‐\text{Mod}$| ($R‐\text{Mod}$).
+If more control is needed surrounding these symbols, additional options can be added to the package;
+please get in touch if this is the case for you.
+
+
+\subsubsection{Growing and non-growing accents}
+\seclabel{growing-accents}
+
+There are a few accents for which \TeX\ has both non-growing and growing
+versions. Among these are \cs{hat} and \cs{tilde}; the corresponding growing
+versions are called \cs{widehat} and \cs{widetilde}, respectively.
+
+Older versions of \XeTeX\ and \LuaTeX\ did not support this distinction,
+however, and \emph{all} accents there were growing automatically. (I.e.,
+\cs{hat} and \cs{widehat} are equivalent.) As of \LuaTeX\ v0.65 and \XeTeX\
+v0.9998, these wide/non-wide commands will again behave in their expected
+manner.
+
+
+\subsubsection{Negations and the \cs{not} command}
+\seclabel{negations}
+
+The \cs{not} command in classic \LaTeXe\ was a mathematical slash modifying glyph that allowed for `negating` maths symbols where pre-built glyphs were not available. While Unicode encodes a slot for this modifying slash, it is only well-supported in \LuaTeX\ and not in \XeTeX.
+
+To provide more flexibility, the \pkg{unicode-math} package defines \cs{not} to search for a predefined `negated' definitions for its argument and use that if available. This method can be used for fine-tuning in cases where spacing needs to be adjusted.
+
+A `negated definition` is any symbol command prefixed by either \verb|n| or \verb|not|. For example, \pkg{unicode-math} by default defines both \cs{leftarrow} ($\leftarrow$) and \cs{nleftarrow} ($\nleftarrow$).
+
+To define custom negated definitions for either symbols (e.g., \verb|\not=|) or commands (e.g., \verb|\not\equal|), use the \cs{NewNotCommand}\marg{symbol or cmd}\marg{definition} command. Its usage is as follows:
+\begin{verbatim}
+\NewNegationCommand {=} {\neq}
+\NewNegationCommand {\equal} {\neq}
+\end{verbatim}
+If the command has already been defined, an error will result and \verb|\RenewNegationCommand| can be used to overwrite the original definition.
+
+
+\subsubsection{Pre-drawn fraction characters}
+
+Pre-drawn fractions \unichar{00BC}--\unichar{00BE}, \unichar{2150}--\unichar{215E}
+are not suitable for use in mathematics output. However, they can be useful
+as input characters to abbreviate common fractions.
+\begin{center}
+\fontspec{DejaVuSerif.ttf} ^^A available in TeX Live 2012 if not earlier
+¼ ½ ¾ ↉ ⅐ ⅑ ⅒ ⅓ ⅔ ⅕ ⅖ ⅗ ⅘ ⅙ ⅚ ⅛ ⅜ ⅝ ⅞
+\end{center}
+For example, instead of writing `|\tfrac12 x|', you may consider it more readable to have
+`|½x|' in the source instead.
+
+If the \cs{tfrac} command exists (i.e., if \pkg{amsmath} is loaded or
+you have specially defined \cs{tfrac} for this purpose), it will be used
+to typeset the fractions. If not, regular \cs{frac} will be used. The command
+to use (\cs{tfrac} or \cs{frac}) can be forced either way with the package
+option |active-frac=small| or |active-frac=normalsize|, respectively.
+
+\subsubsection{Circles}
+
+Unicode defines a large number of different types of circles for a variety
+of mathematical purposes. There are thirteen alone just considering the
+all white and all black ones, shown in \tabref{circles}.
+
+\LaTeX\ defines considerably fewer: \cs{circ} and \cs{bigcirc} for white;
+\cs{bullet} for black. This package maps those commands to \cs{vysmwhtcircle},
+\cs{mdlgwhtcircle}, and \cs{smblkcircle}, respectively.
+
+\begin{table}\centering
+\def\showchar#1#2#3{ \textsc{u}+{\small\ttfamily #1} & \texttt{\string#3} & \umfont \char"#1 \\}
+\begin{tabular}{@{}llc@{}}
+\toprule
+Slot & Command & Glyph \\
+\midrule
+\showchar{00B7}{centerdot}{\cdotp}
+\showchar{22C5}{small middle dot}{\cdot}
+\showchar{2219}{bullet operator}{\vysmblkcircle}
+\showchar{2022}{round bullet, filled}{\smblkcircle}
+\showchar{2981}{z notation spot}{\mdsmblkcircle}
+\showchar{26AB}{medium black circle}{\mdblkcircle}
+\showchar{25CF}{circle, filled}{\mdlgblkcircle}
+\showchar{2B24}{black large circle}{\lgblkcircle}
+\bottomrule
+\end{tabular}
+\def\showchar#1#2#3{ \umfont \char"#1 & \texttt{\string#3} & \textsc{u}+{\small\ttfamily #1} \\}
+\begin{tabular}{@{}cll@{}}
+\toprule
+Glyph & Command & Slot \\
+\midrule
+\\
+\\
+\showchar{2218}{composite function (small circle)}{\vysmwhtcircle}
+\showchar{25E6}{white bullet}{\smwhtcircle}
+\showchar{26AC}{medium small white circle}{\mdsmwhtcircle}
+\showchar{26AA}{medium white circle}{\mdwhtcircle}
+\showchar{25CB}{large circle}{\mdlgwhtcircle}
+\showchar{25EF}{large circle}{\lgwhtcircle}
+\bottomrule
+\end{tabular}
+\caption{Filled and hollow Unicode circles.}
+\tablabel{circles}
+\end{table}
+
+\subsubsection{Triangles}
+
+While there aren't as many different sizes of triangle as there are circle,
+there's some important distinctions to make between a few similar characters. See \tabref{uptriangles} for the full summary.
+
+These triangles all have different intended meanings. Note for backwards
+compatibility with \TeX, \unichar{25B3} has \emph{two} different mappings
+in \pkg{unicode-math}. \cs{bigtriangleup} is intended as a binary operator
+whereas \cs{triangle} is intended to be used as a letter-like symbol.
+
+But you're better off if you're using the latter form to indicate an
+increment to use the glyph intended for this purpose, \unichar{2206}: $\increment x$.
+
+Finally, given that $\triangle$ and $\increment$ are provided for you
+already, it is better off to only use upright Greek Delta $\Delta$ if you're
+actually using it as a symbolic entity such as a variable on its own.
+
+\begin{table}\centering
+\begin{tabular}{@{}llcl@{}}
+\toprule
+Slot & Command & Glyph & Class \\
+\midrule
+\unichar{25B5} & \cs{vartriangle} & \umfont \char"25B5 & binary \\
+\unichar{25B3} & \cs{bigtriangleup} & \umfont \char"25B3 & binary \\
+\unichar{25B3} & \cs{triangle} & \umfont \char"25B3 & ordinary \\
+\unichar{2206} & \cs{increment} & \umfont \char"2206 & ordinary \\
+\unichar{0394} & \cs{mathup}\cs{Delta} & \umfont \char"0394 & ordinary \\
+\bottomrule
+\end{tabular}
+\caption{Different upwards pointing triangles.}
+\tablabel{uptriangles}
+\end{table}
+
+\iffalse
+\subsubsection{Normalising some input characters}
+
+I believe
+all variant forms should be used as legal input that is normalised to
+a consistent output glyph, because we want to be fault-tolerant in the input.
+Here are the duplicates:
+\begin{quote}\obeylines
+\unichar {251} {latin small letter alpha}
+\unichar {25B} {latin small letter epsilon}
+\unichar {263} {latin small letter gamma}
+\unichar {269} {latin small letter iota}
+\unichar {278} {latin small letter phi}
+\unichar {28A} {latin small letter upsilon}
+\unichar {190} {latin capital letter epsilon}
+\unichar {194} {latin capital letter gamma}
+\unichar {196} {latin capital letter iota}
+\unichar {1B1} {latin capital letter upsilon}
+\end{quote}
+
+(Not yet implemented.)
+\fi
+
+\section{Advanced}
+
+\subsection{Warning messages}
+
+This package can produce a number of informational messages to try and inform the user when something might be going wrong due to package conflicts or something else.
+As an experimental feature, these can be turn off on an individual basis with the package option |warnings-off| which takes a comma-separated list of warnings to suppress.
+A warning will give you its name when printed on the console output; e.g.,
+\begin{Verbatim}
+ * unicode-math warning: "mathtools-colon"
+ *
+ * ... <warning message> ...
+\end{Verbatim}
+This warning could be suppressed by loading the package as follows:
+\begin{Verbatim}
+ \usepackage[warnings-off={mathtools-colon}]{unicode-math}
+\end{Verbatim}
+
+\subsection{How to overwrite a macro}
+
+\pkg{unicode-math} defines the macros by \cs{AtBeginDocument},
+namely delays the definition until |\begin{document}| is met.
+If you want to overwrite a macro defined by \pkg{unicode-math},
+please redefine it in \cs{AtBeginDocument} after loading this package.
+
+\subsection{Programmer's interface}
+
+(Tentative and under construction.)
+If you are writing some code that needs to know the current
+maths style (\cs{mathbf}, \cs{mathit}, etc.), you can query the
+variable \cs{l_@@_mathstyle_tl}. It will contain the maths style
+without the leading `math' string; for example,
+|\symbf { \show \l_@@_mathstyle_tl }|
+will produce `bf'.
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-doc-mathfontdimen.tex b/macros/unicodetex/latex/unicode-math/um-doc-mathfontdimen.tex
new file mode 100644
index 0000000000..906a786db3
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-doc-mathfontdimen.tex
@@ -0,0 +1,151 @@
+%%^^A%% um-doc-mathfontdimen.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\section{\Hologo{XeTeX} math font dimensions}
+
+These are the extended \cmd\fontdimen s available for suitable fonts
+in \XeTeX. Note that Lua\TeX\ takes an alternative route, and this package
+will eventually provide a wrapper interface to the two (I hope).
+
+\newcounter{mfdimen}
+\setcounter{mfdimen}{9}
+\newcommand\mathfontdimen[2]{^^A
+ \stepcounter{mfdimen}^^A
+ \themfdimen & {\scshape\small #1} & #2\vspace{0.5ex} \tabularnewline}
+
+\begin{longtable}{
+ @{}c>{\raggedright\parfillskip=0pt}p{4cm}>{\raggedright}p{7cm}@{}}
+\toprule \cmd\fontdimen & Dimension name & Description\tabularnewline\midrule \endhead
+\bottomrule\endfoot
+\mathfontdimen{Script\-Percent\-Scale\-Down}
+{Percentage of scaling down for script level 1. Suggested value: 80\%.}
+\mathfontdimen{Script\-Script\-Percent\-Scale\-Down}
+{Percentage of scaling down for script level 2 (Script\-Script). Suggested value: 60\%.}
+\mathfontdimen{Delimited\-Sub\-Formula\-Min\-Height}
+{Minimum height required for a delimited expression to be treated as a subformula. Suggested value: normal line height\,×\,1.5.}
+\mathfontdimen{Display\-Operator\-Min\-Height}
+{Minimum height of n-ary operators (such as integral and summation) for formulas in display mode.}
+\mathfontdimen{Math\-Leading}
+{White space to be left between math formulas to ensure proper line spacing. For example, for applications that treat line gap as a part of line ascender, formulas with ink going above (os2.sTypoAscender + os2.sTypoLineGap – MathLeading) or with ink going below os2.sTypoDescender will result in increasing line height.}
+\mathfontdimen{Axis\-Height}
+{Axis height of the font. }
+\mathfontdimen{Accent\-Base\-Height}
+{Maximum (ink) height of accent base that does not require raising the accents. Suggested: x-height of the font (os2.sxHeight) plus any possible overshots. }
+\mathfontdimen{Flattened\-Accent\-Base\-Height}
+{Maximum (ink) height of accent base that does not require flattening the accents. Suggested: cap height of the font (os2.sCapHeight).}
+\mathfontdimen{Subscript\-Shift\-Down}
+{The standard shift down applied to subscript elements. Positive for moving in the downward direction. Suggested: os2.ySubscriptYOffset.}
+\mathfontdimen{Subscript\-Top\-Max}
+{Maximum allowed height of the (ink) top of subscripts that does not require moving subscripts further down. Suggested: /5 x-height.}
+\mathfontdimen{Subscript\-Baseline\-Drop\-Min}
+{Minimum allowed drop of the baseline of subscripts relative to the (ink) bottom of the base. Checked for bases that are treated as a box or extended shape. Positive for subscript baseline dropped below the base bottom.}
+\mathfontdimen{Superscript\-Shift\-Up}
+{Standard shift up applied to superscript elements. Suggested: os2.ySuperscriptYOffset.}
+\mathfontdimen{Superscript\-Shift\-Up\-Cramped}
+{Standard shift of superscripts relative to the base, in cramped style.}
+\mathfontdimen{Superscript\-Bottom\-Min}
+{Minimum allowed height of the (ink) bottom of superscripts that does not require moving subscripts further up. Suggested: ¼ x-height.}
+\mathfontdimen{Superscript\-Baseline\-Drop\-Max}
+{Maximum allowed drop of the baseline of superscripts relative to the (ink) top of the base. Checked for bases that are treated as a box or extended shape. Positive for superscript baseline below the base top.}
+\mathfontdimen{Sub\-Superscript\-Gap\-Min}
+{Minimum gap between the superscript and subscript ink. Suggested: 4×default rule thickness.}
+\mathfontdimen{Superscript\-Bottom\-Max\-With\-Subscript}
+{The maximum level to which the (ink) bottom of superscript can be pushed to increase the gap between superscript and subscript, before subscript starts being moved down.
+Suggested: /5 x-height.}
+\mathfontdimen{Space\-After\-Script}
+{Extra white space to be added after each subscript and superscript. Suggested: 0.5pt for a 12 pt font.}
+\mathfontdimen{Upper\-Limit\-Gap\-Min}
+{Minimum gap between the (ink) bottom of the upper limit, and the (ink) top of the base operator. }
+\mathfontdimen{Upper\-Limit\-Baseline\-Rise\-Min}
+{Minimum distance between baseline of upper limit and (ink) top of the base operator.}
+\mathfontdimen{Lower\-Limit\-Gap\-Min}
+{Minimum gap between (ink) top of the lower limit, and (ink) bottom of the base operator.}
+\mathfontdimen{Lower\-Limit\-Baseline\-Drop\-Min}
+{Minimum distance between baseline of the lower limit and (ink) bottom of the base operator.}
+\mathfontdimen{Stack\-Top\-Shift\-Up}
+{Standard shift up applied to the top element of a stack.}
+\mathfontdimen{Stack\-Top\-Display\-Style\-Shift\-Up}
+{Standard shift up applied to the top element of a stack in display style.}
+\mathfontdimen{Stack\-Bottom\-Shift\-Down}
+{Standard shift down applied to the bottom element of a stack. Positive for moving in the downward direction.}
+\mathfontdimen{Stack\-Bottom\-Display\-Style\-Shift\-Down}
+{Standard shift down applied to the bottom element of a stack in display style. Positive for moving in the downward direction.}
+\mathfontdimen{Stack\-Gap\-Min}
+{Minimum gap between (ink) bottom of the top element of a stack, and the (ink) top of the bottom element. Suggested: 3×default rule thickness.}
+\mathfontdimen{Stack\-Display\-Style\-Gap\-Min}
+{Minimum gap between (ink) bottom of the top element of a stack, and the (ink) top of the bottom element in display style. Suggested: 7×default rule thickness.}
+\mathfontdimen{Stretch\-Stack\-Top\-Shift\-Up}
+{Standard shift up applied to the top element of the stretch stack.}
+\mathfontdimen{Stretch\-Stack\-Bottom\-Shift\-Down}
+{Standard shift down applied to the bottom element of the stretch stack. Positive for moving in the downward direction.}
+\mathfontdimen{Stretch\-Stack\-Gap\-Above\-Min}
+{Minimum gap between the ink of the stretched element, and the (ink) bottom of the element above. Suggested: Upper\-Limit\-Gap\-Min}
+\mathfontdimen{Stretch\-Stack\-Gap\-Below\-Min}
+{Minimum gap between the ink of the stretched element, and the (ink) top of the element below. Suggested: Lower\-Limit\-Gap\-Min.}
+\mathfontdimen{Fraction\-Numerator\-Shift\-Up}
+{Standard shift up applied to the numerator. }
+\mathfontdimen{Fraction\-Numerator\-Display\-Style\-Shift\-Up}
+{Standard shift up applied to the numerator in display style. Suggested: Stack\-Top\-Display\-Style\-Shift\-Up.}
+\mathfontdimen{Fraction\-Denominator\-Shift\-Down}
+{Standard shift down applied to the denominator. Positive for moving in the downward direction.}
+\mathfontdimen{Fraction\-Denominator\-Display\-Style\-Shift\-Down}
+{Standard shift down applied to the denominator in display style. Positive for moving in the downward direction. Suggested: Stack\-Bottom\-Display\-Style\-Shift\-Down.}
+\mathfontdimen{Fraction\-Numerator\-Gap\-Min}
+{Minimum tolerated gap between the (ink) bottom of the numerator and the ink of the fraction bar. Suggested: default rule thickness}
+\mathfontdimen{Fraction\-Num\-Display\-Style\-Gap\-Min}
+{Minimum tolerated gap between the (ink) bottom of the numerator and the ink of the fraction bar in display style. Suggested: 3×default rule thickness.}
+\mathfontdimen{Fraction\-Rule\-Thickness}
+{Thickness of the fraction bar. Suggested: default rule thickness.}
+\mathfontdimen{Fraction\-Denominator\-Gap\-Min}
+{Minimum tolerated gap between the (ink) top of the denominator and the ink of the fraction bar. Suggested: default rule thickness}
+\mathfontdimen{Fraction\-Denom\-Display\-Style\-Gap\-Min}
+{Minimum tolerated gap between the (ink) top of the denominator and the ink of the fraction bar in display style. Suggested: 3×default rule thickness.}
+\mathfontdimen{Skewed\-Fraction\-Horizontal\-Gap}
+{Horizontal distance between the top and bottom elements of a skewed fraction.}
+\mathfontdimen{Skewed\-Fraction\-Vertical\-Gap}
+{Vertical distance between the ink of the top and bottom elements of a skewed fraction.}
+\mathfontdimen{Overbar\-Vertical\-Gap}
+{Distance between the overbar and the (ink) top of he base. Suggested: 3×default rule thickness.}
+\mathfontdimen{Overbar\-Rule\-Thickness}
+{Thickness of overbar. Suggested: default rule thickness.}
+\mathfontdimen{Overbar\-Extra\-Ascender}
+{Extra white space reserved above the overbar. Suggested: default rule thickness.}
+\mathfontdimen{Underbar\-Vertical\-Gap}
+{Distance between underbar and (ink) bottom of the base. Suggested: 3×default rule thickness.}
+\mathfontdimen{Underbar\-Rule\-Thickness}
+{Thickness of underbar. Suggested: default rule thickness.}
+\mathfontdimen{Underbar\-Extra\-Descender}
+{Extra white space reserved below the underbar. Always positive. Suggested: default rule thickness.}
+\mathfontdimen{Radical\-Vertical\-Gap}
+{Space between the (ink) top of the expression and the bar over it. Suggested: 1¼ default rule thickness.}
+\mathfontdimen{Radical\-Display\-Style\-Vertical\-Gap}
+{Space between the (ink) top of the expression and the bar over it. Suggested: default rule thickness + ¼ x-height. }
+\mathfontdimen{Radical\-Rule\-Thickness}
+{Thickness of the radical rule. This is the thickness of the rule in designed or constructed radical signs. Suggested: default rule thickness.}
+\mathfontdimen{Radical\-Extra\-Ascender}
+{Extra white space reserved above the radical. Suggested: Radical\-Rule\-Thickness.}
+\mathfontdimen{Radical\-Kern\-Before\-Degree}
+{Extra horizontal kern before the degree of a radical, if such is present. Suggested: 5/18 of em.}
+\mathfontdimen{Radical\-Kern\-After\-Degree}
+{Negative kern after the degree of a radical, if such is present. Suggested: −10/18 of em.}
+\mathfontdimen{Radical\-Degree\-Bottom\-Raise\-Percent}
+{Height of the bottom of the radical degree, if such is present, in proportion to the ascender of the radical sign. Suggested: 60\%.}
+\end{longtable}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-doc-nfsssummary.tex b/macros/unicodetex/latex/unicode-math/um-doc-nfsssummary.tex
new file mode 100644
index 0000000000..a322ac7f42
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-doc-nfsssummary.tex
@@ -0,0 +1,87 @@
+%%^^A%% um-doc-nfsssummary.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\section{Documenting maths support in the NFSS}
+
+In the following, \meta{NFSS decl.} stands for something like |{T1}{lmr}{m}{n}|.
+
+\begin{description}
+\item[Maths symbol fonts]
+Fonts for symbols: $\propto$, $\leq$, $\rightarrow$
+
+\cmd\DeclareSymbolFont\marg{name}\meta{NFSS decl.}\\
+Declares a named maths font such as |operators| from which symbols are defined with \cmd\DeclareMathSymbol.
+
+\item[Maths alphabet fonts]
+Fonts for $\symit{ABC}$\,–\,$\symit{xyz}$,
+$\symfrak{ABC}$\,–\,$\symscr{XYZ}$, etc.
+
+\cmd\DeclareMathAlphabet\marg{cmd}\meta{NFSS decl.}
+
+For commands such as \cmd\mathbf, accessed
+through maths mode that are unaffected by the current text font, and which are used for
+alphabetic symbols in the \ascii\ range.
+
+\cmd\DeclareSymbolFontAlphabet\marg{cmd}\marg{name}
+
+Alternative (and optimisation) for \cmd\DeclareMathAlphabet\ if a single font is being used
+for both alphabetic characters (as above) and symbols.
+
+\item[Maths `versions'] Different maths weights can be defined with the following, switched
+in text with the \cmd\mathversion\marg{maths version} command.
+
+\cmd\SetSymbolFont\marg{name}\marg{maths version}\meta{NFSS decl.}\\
+\cmd\SetMathAlphabet\marg{cmd}\marg{maths version}\meta{NFSS decl.}
+
+\item[Maths symbols] Symbol definitions in maths for both characters (=) and macros (\cmd\eqdef):
+\cmd\DeclareMathSymbol\marg{symbol}\marg{type}\marg{named font}\marg{slot}
+This is the macro that actually defines which font each symbol comes from and how they behave.
+\end{description}
+Delimiters and radicals use wrappers around \TeX's \cmd\delimiter/\cmd\radical\ primitives,
+which are re-designed in \XeTeX. The syntax used in \LaTeX's NFSS is therefore not so relevant here.
+\begin{description}
+\item[Delimiters] A special class of maths symbol which enlarge themselves in certain contexts.
+
+\cmd\DeclareMathDelimiter\marg{symbol}\marg{type}\marg{sym.\ font}\marg{slot}\marg{sym.\ font}\marg{slot}
+
+\item[Radicals] Similar to delimiters (\cmd\DeclareMathRadical\ takes the same syntax) but
+behave `weirdly'.
+\end{description}
+In those cases, glyph slots in \emph{two} symbol fonts are required; one for the small (`regular') case,
+the other for situations when the glyph is larger. This is not the case in \XeTeX.
+
+Accents are not included yet.
+
+\paragraph{Summary}
+
+For symbols, something like:
+\begin{Verbatim}
+\def\DeclareMathSymbol#1#2#3#4{
+ \global\mathchardef#1"\mathchar@type#2
+ \expandafter\hexnumber@\csname sym#2\endcsname
+ {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}}
+\end{Verbatim}
+For characters, something like:
+\begin{Verbatim}
+\def\DeclareMathSymbol#1#2#3#4{
+ \global\mathcode`#1"\mathchar@type#2
+ \expandafter\hexnumber@\csname sym#2\endcsname
+ {\hexnumber@{\count\z@}\hexnumber@{\count\tw@}}}
+\end{Verbatim}
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-doc-stixextract.tex b/macros/unicodetex/latex/unicode-math/um-doc-stixextract.tex
new file mode 100644
index 0000000000..53a86a8ab7
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-doc-stixextract.tex
@@ -0,0 +1,38 @@
+%%^^A%% um-doc-stixextract.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\section{\STIX\ table data extraction}\label{part:awk}
+
+The source for the \TeX\ names for the very large number of mathematical
+glyphs are provided via Barbara Beeton's table file for the \STIX\ project
+(|ams.org/STIX|). A version is located at
+|http://www.ams.org/STIX/bnb/stix-tbl.asc|
+but check |http://www.ams.org/STIX/| for more up-to-date info.
+
+This table is converted into a form suitable for reading by \TeX.
+A single file is produced containing all (more than 3298) symbols.
+Future optimisations might include generating various (possibly overlapping) subsets
+so not all definitions must be read just to redefine a small range of symbols.
+Performance for now seems to be acceptable without such measures.
+
+This file is currently developed outside this DTX file. It will be
+incorporated when the final version is ready. (I know this is not how
+things are supposed to work!)
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/um-doc-style.tex b/macros/unicodetex/latex/unicode-math/um-doc-style.tex
new file mode 100644
index 0000000000..729a102ebe
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/um-doc-style.tex
@@ -0,0 +1,131 @@
+%%^^A%% um-doc-style.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+
+\makeatletter
+\input{unicode-math.dtx}
+
+\CheckSum{0}
+\EnableCrossrefs
+\CodelineIndex
+\setcounter{IndexColumns}{2}
+
+\usepackage[svgnames]{xcolor}
+\usepackage[inline]{enumitem}
+\usepackage{amsmath,array,booktabs,calc,enumitem,fancyvrb,graphicx,ifthen,longtable,refstyle,topcapt,url,varioref,underscore}
+\usepackage[slash-delimiter=frac,nabla=literal]{unicode-math}
+\usepackage{metalogo,hologo}
+
+\usepackage[it]{titlesec}
+
+% fancyvrb
+\fvset{fontsize=\small,xleftmargin=2em}
+
+% longtable
+\setcounter{LTchunksize}{100}
+
+\setmainfont{texgyrepagella}%
+ [
+ Extension = .otf ,
+ UprightFont = *-regular ,
+ ItalicFont = *-italic ,
+ BoldFont = *-bold ,
+ BoldItalicFont = *-bolditalic ,
+ ]
+\setsansfont{Iwona}%
+ [
+ Scale=MatchLowercase,
+ Extension = .otf,
+ UprightFont = *-Regular,
+ ItalicFont = *-Italic,
+ BoldFont = *-Bold,
+ BoldItalicFont = *-BoldItalic,
+ ]
+\setmonofont{Inconsolatazi4-Regular.otf}%
+ [
+ Scale=MatchLowercase,
+ BoldFont=Inconsolatazi4-Bold.otf
+ ]
+
+\setmathfont{texgyrepagella-math.otf}
+\setmathfont[version=xits]{XITSMath-Regular.otf}
+\newfontface\umfont{XITSMath-Regular.otf}
+
+\expandafter\def\csname ver@thumbpdf.sty\endcsname{}
+\usepackage{hypdoc}
+\hypersetup{linktocpage}
+
+% work around some issue turning | into "j" inside mathsf in the definition of \Module:
+% (also prettify)
+\def\Module#1{{\footnotesize\color{red}$\langle$\texttt{#1}$\rangle$}}
+
+\linespread{1.1}
+\frenchspacing
+
+\definecolor{niceblue}{rgb}{0.2,0.4,0.8}
+
+\def\theCodelineNo{\textcolor{niceblue}{\sffamily\tiny\arabic{CodelineNo}}}
+
+\newcommand*\name[1]{{#1}}
+\newcommand*\pkg[1]{\textsf{#1}}
+\newcommand*\feat[1]{\texttt{#1}}
+\newcommand*\opt[1]{\texttt{#1}}
+
+\newcommand*\note[1]{\unskip\footnote{#1}}
+
+\let\latin\textit
+\def\eg{\latin{e.g.}}
+\def\Eg{\latin{E.g.}}
+\def\ie{\latin{i.e.}}
+\def\etc{\@ifnextchar.{\latin{etc}}{\latin{etc.}\@}}
+
+\def\STIX{\textsc{stix}}
+\def\MacOSX{Mac~OS~X}
+\def\ascii{\textsc{ascii}}
+\def\OMEGA{Omega}
+
+\newcounter{argument}
+
+\makeatletter
+\g@addto@macro\endmacro{\setcounter{argument}{0}}
+\makeatother
+
+\newcommand*\darg[1]{%
+ \stepcounter{argument}%
+ {\ttfamily\char`\#\theargument~:~}#1\par\noindent\ignorespaces
+}
+\newcommand*\doarg[1]{%
+ \stepcounter{argument}%
+ {\ttfamily\makebox[0pt][r]{[}\char`\#\theargument]:~}#1\par\noindent\ignorespaces
+}
+
+\newcommand\codeline[1]{\par{\centering#1\par\noindent}\ignorespaces}
+
+\newcommand\unichar[1]{\textsc{u}+\texttt{\small#1}}
+
+\setlength\parindent{2em}
+
+\def \MakePrivateLetters {%
+ \catcode`\@=11\relax
+ \catcode`\_=11\relax
+ \catcode`\:=11\relax
+}
+
+\makeatother
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/unicode-math-code.ltx b/macros/unicodetex/latex/unicode-math/unicode-math-code.ltx
new file mode 100644
index 0000000000..cff887daed
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unicode-math-code.ltx
@@ -0,0 +1,35 @@
+%%^^A%% unicode-math-code.ltx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Typeset code.
+
+\documentclass[a4paper]{ltxdoc}
+\input{um-doc-style.tex}
+\begin{document}
+\maketitle
+\tableofcontents
+
+\def\DTX#1{\clearpage\part{#1}\DocInput{#1}}
+\DTXFILES
+
+\clearpage
+\PrintIndex
+
+\end{document}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/unicode-math-code.pdf b/macros/unicodetex/latex/unicode-math/unicode-math-code.pdf
new file mode 100644
index 0000000000..9d87097173
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unicode-math-code.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/unicode-math/unicode-math-table.tex b/macros/unicodetex/latex/unicode-math/unicode-math-table.tex
new file mode 100644
index 0000000000..511b67e8ce
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unicode-math-table.tex
@@ -0,0 +1,2467 @@
+%%^^A%% unicode-math-table.tex -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Source file of the math symbols.
+
+\UnicodeMathSymbol{"00021}{\mathexclam }{\mathclose}{exclamation mark}%
+\UnicodeMathSymbol{"00023}{\mathoctothorpe }{\mathord}{number sign}%
+\UnicodeMathSymbol{"00024}{\mathdollar }{\mathord}{dollar sign}%
+\UnicodeMathSymbol{"00025}{\mathpercent }{\mathord}{percent sign}%
+\UnicodeMathSymbol{"00026}{\mathampersand }{\mathord}{ampersand}%
+\UnicodeMathSymbol{"00028}{\lparen }{\mathopen}{left parenthesis}%
+\UnicodeMathSymbol{"00029}{\rparen }{\mathclose}{right parenthesis}%
+\UnicodeMathSymbol{"0002B}{\mathplus }{\mathbin}{plus sign b:}%
+\UnicodeMathSymbol{"0002C}{\mathcomma }{\mathpunct}{comma}%
+\UnicodeMathSymbol{"0002E}{\mathperiod }{\mathord}{full stop, period}%
+\UnicodeMathSymbol{"0002F}{\mathslash }{\mathord}{solidus}%
+\UnicodeMathSymbol{"0003A}{\mathcolon }{\mathpunct}{colon}%
+\UnicodeMathSymbol{"0003B}{\mathsemicolon }{\mathpunct}{semicolon p:}%
+\UnicodeMathSymbol{"0003C}{\less }{\mathrel}{less-than sign r:}%
+\UnicodeMathSymbol{"0003D}{\equal }{\mathrel}{equals sign r:}%
+\UnicodeMathSymbol{"0003E}{\greater }{\mathrel}{greater-than sign r:}%
+\UnicodeMathSymbol{"0003F}{\mathquestion }{\mathord}{question mark}%
+\UnicodeMathSymbol{"00040}{\mathatsign }{\mathord}{commercial at}%
+\UnicodeMathSymbol{"0005B}{\lbrack }{\mathopen}{left square bracket}%
+\UnicodeMathSymbol{"0005C}{\backslash }{\mathord}{reverse solidus}%
+\UnicodeMathSymbol{"0005D}{\rbrack }{\mathclose}{right square bracket}%
+\UnicodeMathSymbol{"0007B}{\lbrace }{\mathopen}{left curly bracket}%
+\UnicodeMathSymbol{"0007C}{\vert }{\mathfence}{vertical bar}%
+\UnicodeMathSymbol{"0007D}{\rbrace }{\mathclose}{right curly bracket}%
+\UnicodeMathSymbol{"000A3}{\mathsterling }{\mathord}{pound sign}%
+\UnicodeMathSymbol{"000A5}{\mathyen }{\mathord}{yen sign}%
+\UnicodeMathSymbol{"000A7}{\mathsection }{\mathord}{section symbol}%
+\UnicodeMathSymbol{"000AC}{\neg }{\mathord}{/neg /lnot not sign}%
+\UnicodeMathSymbol{"000B1}{\pm }{\mathbin}{plus-or-minus sign}%
+\UnicodeMathSymbol{"000B6}{\mathparagraph }{\mathord}{paragraph symbol}%
+\UnicodeMathSymbol{"000B7}{\cdotp }{\mathbin}{/centerdot b: middle dot}%
+\UnicodeMathSymbol{"000D7}{\times }{\mathbin}{multiply sign}%
+\UnicodeMathSymbol{"000F0}{\matheth }{\mathalpha}{eth}%
+\UnicodeMathSymbol{"000F7}{\div }{\mathbin}{divide sign}%
+\UnicodeMathSymbol{"001B5}{\Zbar }{\mathord}{impedance (latin capital letter z with stroke)}%
+\UnicodeMathSymbol{"00300}{\grave }{\mathaccent}{grave accent}%
+\UnicodeMathSymbol{"00301}{\acute }{\mathaccent}{acute accent}%
+\UnicodeMathSymbol{"00302}{\hat }{\mathaccent}{circumflex accent}%
+\UnicodeMathSymbol{"00302}{\widehat }{\mathaccentwide}{circumflex accent}%
+\UnicodeMathSymbol{"00303}{\tilde }{\mathaccent}{tilde}%
+\UnicodeMathSymbol{"00303}{\widetilde }{\mathaccentwide}{tilde}%
+\UnicodeMathSymbol{"00304}{\bar }{\mathaccent}{macron}%
+\UnicodeMathSymbol{"00305}{\overbar }{\mathaccent}{overbar embellishment}%
+\UnicodeMathSymbol{"00305}{\wideoverbar }{\mathaccentwide}{stretchy overbar embellishment}%
+\UnicodeMathSymbol{"00306}{\breve }{\mathaccent}{breve}%
+\UnicodeMathSymbol{"00306}{\widebreve }{\mathaccentwide}{stretchy breve}%
+\UnicodeMathSymbol{"00307}{\dot }{\mathaccent}{dot above}%
+\UnicodeMathSymbol{"00308}{\ddot }{\mathaccent}{dieresis}%
+\UnicodeMathSymbol{"00309}{\ovhook }{\mathaccent}{combining hook above}%
+\UnicodeMathSymbol{"0030A}{\ocirc }{\mathaccent}{ring}%
+\UnicodeMathSymbol{"0030C}{\check }{\mathaccent}{caron}%
+\UnicodeMathSymbol{"0030C}{\widecheck }{\mathaccentwide}{stretchy caron}%
+\UnicodeMathSymbol{"00310}{\candra }{\mathaccent}{candrabindu (non-spacing)}%
+\UnicodeMathSymbol{"00312}{\oturnedcomma }{\mathaccent}{combining turned comma above}%
+\UnicodeMathSymbol{"00315}{\ocommatopright }{\mathaccent}{combining comma above right}%
+\UnicodeMathSymbol{"0031A}{\droang }{\mathaccent}{left angle above (non-spacing)}%
+\UnicodeMathSymbol{"00330}{\wideutilde }{\mathbotaccentwide}{under tilde accent (multiple characters and non-spacing)}%
+\UnicodeMathSymbol{"00332}{\mathunderbar }{\mathbotaccentwide}{combining low line}%
+\UnicodeMathSymbol{"00338}{\notaccent }{\mathaccentoverlay}{combining long solidus overlay}%
+\UnicodeMathSymbol{"0034D}{\underleftrightarrow }{\mathbotaccentwide}{underleftrightarrow accent}%
+\UnicodeMathSymbol{"00391}{\mupAlpha }{\mathalpha}{capital alpha, greek}%
+\UnicodeMathSymbol{"00392}{\mupBeta }{\mathalpha}{capital beta, greek}%
+\UnicodeMathSymbol{"00393}{\mupGamma }{\mathalpha}{capital gamma, greek}%
+\UnicodeMathSymbol{"00394}{\mupDelta }{\mathalpha}{capital delta, greek}%
+\UnicodeMathSymbol{"00395}{\mupEpsilon }{\mathalpha}{capital epsilon, greek}%
+\UnicodeMathSymbol{"00396}{\mupZeta }{\mathalpha}{capital zeta, greek}%
+\UnicodeMathSymbol{"00397}{\mupEta }{\mathalpha}{capital eta, greek}%
+\UnicodeMathSymbol{"00398}{\mupTheta }{\mathalpha}{capital theta, greek}%
+\UnicodeMathSymbol{"00399}{\mupIota }{\mathalpha}{capital iota, greek}%
+\UnicodeMathSymbol{"0039A}{\mupKappa }{\mathalpha}{capital kappa, greek}%
+\UnicodeMathSymbol{"0039B}{\mupLambda }{\mathalpha}{capital lambda, greek}%
+\UnicodeMathSymbol{"0039C}{\mupMu }{\mathalpha}{capital mu, greek}%
+\UnicodeMathSymbol{"0039D}{\mupNu }{\mathalpha}{capital nu, greek}%
+\UnicodeMathSymbol{"0039E}{\mupXi }{\mathalpha}{capital xi, greek}%
+\UnicodeMathSymbol{"0039F}{\mupOmicron }{\mathalpha}{capital omicron, greek}%
+\UnicodeMathSymbol{"003A0}{\mupPi }{\mathalpha}{capital pi, greek}%
+\UnicodeMathSymbol{"003A1}{\mupRho }{\mathalpha}{capital rho, greek}%
+\UnicodeMathSymbol{"003A3}{\mupSigma }{\mathalpha}{capital sigma, greek}%
+\UnicodeMathSymbol{"003A4}{\mupTau }{\mathalpha}{capital tau, greek}%
+\UnicodeMathSymbol{"003A5}{\mupUpsilon }{\mathalpha}{capital upsilon, greek}%
+\UnicodeMathSymbol{"003A6}{\mupPhi }{\mathalpha}{capital phi, greek}%
+\UnicodeMathSymbol{"003A7}{\mupChi }{\mathalpha}{capital chi, greek}%
+\UnicodeMathSymbol{"003A8}{\mupPsi }{\mathalpha}{capital psi, greek}%
+\UnicodeMathSymbol{"003A9}{\mupOmega }{\mathalpha}{capital omega, greek}%
+\UnicodeMathSymbol{"003B1}{\mupalpha }{\mathalpha}{small alpha, greek}%
+\UnicodeMathSymbol{"003B2}{\mupbeta }{\mathalpha}{small beta, greek}%
+\UnicodeMathSymbol{"003B3}{\mupgamma }{\mathalpha}{small gamma, greek}%
+\UnicodeMathSymbol{"003B4}{\mupdelta }{\mathalpha}{small delta, greek}%
+\UnicodeMathSymbol{"003B5}{\mupvarepsilon }{\mathalpha}{rounded small varepsilon, greek}%
+\UnicodeMathSymbol{"003B6}{\mupzeta }{\mathalpha}{small zeta, greek}%
+\UnicodeMathSymbol{"003B7}{\mupeta }{\mathalpha}{small eta, greek}%
+\UnicodeMathSymbol{"003B8}{\muptheta }{\mathalpha}{straight theta, small theta, greek}%
+\UnicodeMathSymbol{"003B9}{\mupiota }{\mathalpha}{small iota, greek}%
+\UnicodeMathSymbol{"003BA}{\mupkappa }{\mathalpha}{small kappa, greek}%
+\UnicodeMathSymbol{"003BB}{\muplambda }{\mathalpha}{small lambda, greek}%
+\UnicodeMathSymbol{"003BC}{\mupmu }{\mathalpha}{small mu, greek}%
+\UnicodeMathSymbol{"003BD}{\mupnu }{\mathalpha}{small nu, greek}%
+\UnicodeMathSymbol{"003BE}{\mupxi }{\mathalpha}{small xi, greek}%
+\UnicodeMathSymbol{"003BF}{\mupomicron }{\mathalpha}{small omicron, greek}%
+\UnicodeMathSymbol{"003C0}{\muppi }{\mathalpha}{small pi, greek}%
+\UnicodeMathSymbol{"003C1}{\muprho }{\mathalpha}{small rho, greek}%
+\UnicodeMathSymbol{"003C2}{\mupvarsigma }{\mathalpha}{terminal sigma, greek}%
+\UnicodeMathSymbol{"003C3}{\mupsigma }{\mathalpha}{small sigma, greek}%
+\UnicodeMathSymbol{"003C4}{\muptau }{\mathalpha}{small tau, greek}%
+\UnicodeMathSymbol{"003C5}{\mupupsilon }{\mathalpha}{small upsilon, greek}%
+\UnicodeMathSymbol{"003C6}{\mupvarphi }{\mathalpha}{curly or open small phi, greek}%
+\UnicodeMathSymbol{"003C7}{\mupchi }{\mathalpha}{small chi, greek}%
+\UnicodeMathSymbol{"003C8}{\muppsi }{\mathalpha}{small psi, greek}%
+\UnicodeMathSymbol{"003C9}{\mupomega }{\mathalpha}{small omega, greek}%
+\UnicodeMathSymbol{"003D1}{\mupvartheta }{\mathalpha}{/vartheta - curly or open theta}%
+\UnicodeMathSymbol{"003D5}{\mupphi }{\mathalpha}{/straightphi - small phi, greek}%
+\UnicodeMathSymbol{"003D6}{\mupvarpi }{\mathalpha}{rounded small pi (pomega), greek}%
+\UnicodeMathSymbol{"003DC}{\upDigamma }{\mathalpha}{capital digamma}%
+\UnicodeMathSymbol{"003DD}{\updigamma }{\mathalpha}{old greek small letter digamma}%
+\UnicodeMathSymbol{"003F0}{\mupvarkappa }{\mathalpha}{rounded small kappa, greek}%
+\UnicodeMathSymbol{"003F1}{\mupvarrho }{\mathalpha}{rounded small rho, greek}%
+\UnicodeMathSymbol{"003F4}{\mupvarTheta }{\mathalpha}{greek capital theta symbol}%
+\UnicodeMathSymbol{"003F5}{\mupepsilon }{\mathalpha}{greek lunate varepsilon symbol}%
+\UnicodeMathSymbol{"003F6}{\upbackepsilon }{\mathord}{greek reversed lunate epsilon symbol}%
+\UnicodeMathSymbol{"02010}{\mathhyphen }{\mathalpha}{hyphen}%
+\UnicodeMathSymbol{"02015}{\horizbar }{\mathord}{horizontal bar}%
+\UnicodeMathSymbol{"02016}{\Vert }{\mathfence}{double vertical bar}%
+\UnicodeMathSymbol{"02017}{\twolowline }{\mathord}{double low line (spacing)}%
+\UnicodeMathSymbol{"02020}{\dagger }{\mathbin}{dagger relation}%
+\UnicodeMathSymbol{"02021}{\ddagger }{\mathbin}{double dagger relation}%
+\UnicodeMathSymbol{"02022}{\smblkcircle }{\mathbin}{/bullet b: round bullet, filled}%
+\UnicodeMathSymbol{"02025}{\enleadertwodots }{\mathord}{double baseline dot (en leader)}%
+\UnicodeMathSymbol{"02026}{\unicodeellipsis }{\mathord}{ellipsis (horizontal)}%
+\UnicodeMathSymbol{"02032}{\prime }{\mathord}{prime or minute, not superscripted}%
+\UnicodeMathSymbol{"02033}{\dprime }{\mathord}{double prime or second, not superscripted}%
+\UnicodeMathSymbol{"02034}{\trprime }{\mathord}{triple prime (not superscripted)}%
+\UnicodeMathSymbol{"02035}{\backprime }{\mathord}{reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02036}{\backdprime }{\mathord}{double reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02037}{\backtrprime }{\mathord}{triple reverse prime, not superscripted}%
+\UnicodeMathSymbol{"02038}{\caretinsert }{\mathord}{caret (insertion mark)}%
+\UnicodeMathSymbol{"0203C}{\Exclam }{\mathord}{double exclamation mark}%
+\UnicodeMathSymbol{"02040}{\tieconcat }{\mathbin}{character tie, z notation sequence concatenation}%
+\UnicodeMathSymbol{"02043}{\hyphenbullet }{\mathord}{rectangle, filled (hyphen bullet)}%
+\UnicodeMathSymbol{"02044}{\fracslash }{\mathbin}{fraction slash}%
+\UnicodeMathSymbol{"02047}{\Question }{\mathord}{double question mark}%
+\UnicodeMathSymbol{"02050}{\closure }{\mathrel}{close up}%
+\UnicodeMathSymbol{"02057}{\qprime }{\mathord}{quadruple prime, not superscripted}%
+\UnicodeMathSymbol{"020AC}{\euro }{\mathord}{euro sign}%
+\UnicodeMathSymbol{"020D0}{\leftharpoonaccent }{\mathaccent}{combining left harpoon above}%
+\UnicodeMathSymbol{"020D0}{\overleftharpoon }{\mathaccentwide}{combining left harpoon above}%
+\UnicodeMathSymbol{"020D1}{\rightharpoonaccent }{\mathaccent}{combining right harpoon above}%
+\UnicodeMathSymbol{"020D1}{\overrightharpoon }{\mathaccentwide}{combining right harpoon above}%
+\UnicodeMathSymbol{"020D2}{\vertoverlay }{\mathaccent}{combining long vertical line overlay}%
+\UnicodeMathSymbol{"020D6}{\overleftarrow }{\mathaccentwide}{combining left arrow above}%
+\UnicodeMathSymbol{"020D7}{\overrightarrow }{\mathaccentwide}{combining left arrow above}%
+\UnicodeMathSymbol{"020D7}{\vec }{\mathaccent}{combining right arrow above}%
+\UnicodeMathSymbol{"020DB}{\dddot }{\mathaccent}{combining three dots above}%
+\UnicodeMathSymbol{"020DC}{\ddddot }{\mathaccent}{combining four dots above}%
+\UnicodeMathSymbol{"020DD}{\enclosecircle }{\mathord}{combining enclosing circle}%
+\UnicodeMathSymbol{"020DE}{\enclosesquare }{\mathord}{combining enclosing square}%
+\UnicodeMathSymbol{"020DF}{\enclosediamond }{\mathord}{combining enclosing diamond}%
+\UnicodeMathSymbol{"020E1}{\overleftrightarrow }{\mathaccentwide}{combining left right arrow above}%
+\UnicodeMathSymbol{"020E4}{\enclosetriangle }{\mathord}{combining enclosing upward pointing triangle}%
+\UnicodeMathSymbol{"020E7}{\annuity }{\mathaccent}{combining annuity symbol}%
+\UnicodeMathSymbol{"020E8}{\threeunderdot }{\mathbotaccent}{combining triple underdot}%
+\UnicodeMathSymbol{"020E9}{\widebridgeabove }{\mathaccent}{combining wide bridge above}%
+\UnicodeMathSymbol{"020EC}{\underrightharpoondown }{\mathbotaccentwide}{combining rightwards harpoon with barb downwards}%
+\UnicodeMathSymbol{"020ED}{\underleftharpoondown }{\mathbotaccentwide}{combining leftwards harpoon with barb downwards}%
+\UnicodeMathSymbol{"020EE}{\underleftarrow }{\mathbotaccentwide}{combining left arrow below}%
+\UnicodeMathSymbol{"020EF}{\underrightarrow }{\mathbotaccentwide}{combining right arrow below}%
+\UnicodeMathSymbol{"020F0}{\asteraccent }{\mathaccent}{combining asterisk above}%
+\UnicodeMathSymbol{"02102}{\BbbC }{\mathalpha}{/bbb c, open face c}%
+\UnicodeMathSymbol{"02107}{\Eulerconst }{\mathord}{euler constant}%
+\UnicodeMathSymbol{"0210A}{\mscrg }{\mathalpha}{/scr g, script letter g}%
+\UnicodeMathSymbol{"0210B}{\mscrH }{\mathalpha}{hamiltonian (script capital h)}%
+\UnicodeMathSymbol{"0210C}{\mfrakH }{\mathalpha}{/frak h, upper case h}%
+\UnicodeMathSymbol{"0210D}{\BbbH }{\mathalpha}{/bbb h, open face h}%
+\UnicodeMathSymbol{"0210E}{\Planckconst }{\mathord}{planck constant}%
+\UnicodeMathSymbol{"0210F}{\hslash }{\mathalpha}{/hslash - variant planck's over 2pi}%
+\UnicodeMathSymbol{"02110}{\mscrI }{\mathalpha}{/scr i, script letter i}%
+\UnicodeMathSymbol{"02111}{\Im }{\mathalpha}{imaginary part}%
+\UnicodeMathSymbol{"02112}{\mscrL }{\mathalpha}{lagrangian (script capital l)}%
+\UnicodeMathSymbol{"02113}{\ell }{\mathalpha}{cursive small l}%
+\UnicodeMathSymbol{"02115}{\BbbN }{\mathalpha}{/bbb n, open face n}%
+\UnicodeMathSymbol{"02118}{\wp }{\mathalpha}{weierstrass p}%
+\UnicodeMathSymbol{"02119}{\BbbP }{\mathalpha}{/bbb p, open face p}%
+\UnicodeMathSymbol{"0211A}{\BbbQ }{\mathalpha}{/bbb q, open face q}%
+\UnicodeMathSymbol{"0211B}{\mscrR }{\mathalpha}{/scr r, script letter r}%
+\UnicodeMathSymbol{"0211C}{\Re }{\mathalpha}{real part}%
+\UnicodeMathSymbol{"0211D}{\BbbR }{\mathalpha}{/bbb r, open face r}%
+\UnicodeMathSymbol{"02124}{\BbbZ }{\mathalpha}{/bbb z, open face z}%
+\UnicodeMathSymbol{"02127}{\mho }{\mathord}{conductance}%
+\UnicodeMathSymbol{"02128}{\mfrakZ }{\mathalpha}{/frak z, upper case z}%
+\UnicodeMathSymbol{"02129}{\turnediota }{\mathalpha}{turned iota}%
+\UnicodeMathSymbol{"0212B}{\Angstrom }{\mathalpha}{angstrom capital a, ring}%
+\UnicodeMathSymbol{"0212C}{\mscrB }{\mathalpha}{bernoulli function (script capital b)}%
+\UnicodeMathSymbol{"0212D}{\mfrakC }{\mathalpha}{black-letter capital c}%
+\UnicodeMathSymbol{"0212F}{\mscre }{\mathalpha}{/scr e, script letter e}%
+\UnicodeMathSymbol{"02130}{\mscrE }{\mathalpha}{/scr e, script letter e}%
+\UnicodeMathSymbol{"02131}{\mscrF }{\mathalpha}{/scr f, script letter f}%
+\UnicodeMathSymbol{"02132}{\Finv }{\mathord}{turned capital f}%
+\UnicodeMathSymbol{"02133}{\mscrM }{\mathalpha}{physics m-matrix (script capital m)}%
+\UnicodeMathSymbol{"02134}{\mscro }{\mathalpha}{order of (script small o)}%
+\UnicodeMathSymbol{"02135}{\aleph }{\mathalpha}{aleph, hebrew}%
+\UnicodeMathSymbol{"02136}{\beth }{\mathalpha}{beth, hebrew}%
+\UnicodeMathSymbol{"02137}{\gimel }{\mathalpha}{gimel, hebrew}%
+\UnicodeMathSymbol{"02138}{\daleth }{\mathalpha}{daleth, hebrew}%
+\UnicodeMathSymbol{"0213C}{\Bbbpi }{\mathord}{double-struck small pi}%
+\UnicodeMathSymbol{"0213D}{\Bbbgamma }{\mathalpha}{double-struck small gamma}%
+\UnicodeMathSymbol{"0213E}{\BbbGamma }{\mathalpha}{double-struck capital gamma}%
+\UnicodeMathSymbol{"0213F}{\BbbPi }{\mathalpha}{double-struck capital pi}%
+\UnicodeMathSymbol{"02140}{\Bbbsum }{\mathop}{double-struck n-ary summation}%
+\UnicodeMathSymbol{"02141}{\Game }{\mathord}{turned sans-serif capital g}%
+\UnicodeMathSymbol{"02142}{\sansLturned }{\mathord}{turned sans-serif capital l}%
+\UnicodeMathSymbol{"02143}{\sansLmirrored }{\mathord}{reversed sans-serif capital l}%
+\UnicodeMathSymbol{"02144}{\Yup }{\mathord}{turned sans-serif capital y}%
+\UnicodeMathSymbol{"02145}{\mitBbbD }{\mathord}{double-struck italic capital d}%
+\UnicodeMathSymbol{"02146}{\mitBbbd }{\mathord}{double-struck italic small d}%
+\UnicodeMathSymbol{"02147}{\mitBbbe }{\mathord}{double-struck italic small e}%
+\UnicodeMathSymbol{"02148}{\mitBbbi }{\mathord}{double-struck italic small i}%
+\UnicodeMathSymbol{"02149}{\mitBbbj }{\mathord}{double-struck italic small j}%
+\UnicodeMathSymbol{"0214A}{\PropertyLine }{\mathord}{property line}%
+\UnicodeMathSymbol{"0214B}{\upand }{\mathbin}{turned ampersand}%
+\UnicodeMathSymbol{"02190}{\leftarrow }{\mathrel}{/leftarrow /gets a: leftward arrow}%
+\UnicodeMathSymbol{"02191}{\uparrow }{\mathrel}{upward arrow}%
+\UnicodeMathSymbol{"02192}{\rightarrow }{\mathrel}{/rightarrow /to a: rightward arrow}%
+\UnicodeMathSymbol{"02193}{\downarrow }{\mathrel}{downward arrow}%
+\UnicodeMathSymbol{"02194}{\leftrightarrow }{\mathrel}{left and right arrow}%
+\UnicodeMathSymbol{"02195}{\updownarrow }{\mathrel}{up and down arrow}%
+\UnicodeMathSymbol{"02196}{\nwarrow }{\mathrel}{nw pointing arrow}%
+\UnicodeMathSymbol{"02197}{\nearrow }{\mathrel}{ne pointing arrow}%
+\UnicodeMathSymbol{"02198}{\searrow }{\mathrel}{se pointing arrow}%
+\UnicodeMathSymbol{"02199}{\swarrow }{\mathrel}{sw pointing arrow}%
+\UnicodeMathSymbol{"0219A}{\nleftarrow }{\mathrel}{not left arrow}%
+\UnicodeMathSymbol{"0219B}{\nrightarrow }{\mathrel}{not right arrow}%
+\UnicodeMathSymbol{"0219C}{\leftwavearrow }{\mathrel}{left arrow-wavy}%
+\UnicodeMathSymbol{"0219D}{\rightwavearrow }{\mathrel}{right arrow-wavy}%
+\UnicodeMathSymbol{"0219E}{\twoheadleftarrow }{\mathrel}{left two-headed arrow}%
+\UnicodeMathSymbol{"0219F}{\twoheaduparrow }{\mathrel}{up two-headed arrow}%
+\UnicodeMathSymbol{"021A0}{\twoheadrightarrow }{\mathrel}{right two-headed arrow}%
+\UnicodeMathSymbol{"021A1}{\twoheaddownarrow }{\mathrel}{down two-headed arrow}%
+\UnicodeMathSymbol{"021A2}{\leftarrowtail }{\mathrel}{left arrow-tailed}%
+\UnicodeMathSymbol{"021A3}{\rightarrowtail }{\mathrel}{right arrow-tailed}%
+\UnicodeMathSymbol{"021A4}{\mapsfrom }{\mathrel}{maps to, leftward}%
+\UnicodeMathSymbol{"021A5}{\mapsup }{\mathrel}{maps to, upward}%
+\UnicodeMathSymbol{"021A6}{\mapsto }{\mathrel}{maps to, rightward}%
+\UnicodeMathSymbol{"021A7}{\mapsdown }{\mathrel}{maps to, downward}%
+\UnicodeMathSymbol{"021A8}{\updownarrowbar }{\mathord}{up down arrow with base (perpendicular)}%
+\UnicodeMathSymbol{"021A9}{\hookleftarrow }{\mathrel}{left arrow-hooked}%
+\UnicodeMathSymbol{"021AA}{\hookrightarrow }{\mathrel}{right arrow-hooked}%
+\UnicodeMathSymbol{"021AB}{\looparrowleft }{\mathrel}{left arrow-looped}%
+\UnicodeMathSymbol{"021AC}{\looparrowright }{\mathrel}{right arrow-looped}%
+\UnicodeMathSymbol{"021AD}{\leftrightsquigarrow }{\mathrel}{left and right arr-wavy}%
+\UnicodeMathSymbol{"021AE}{\nleftrightarrow }{\mathrel}{not left and right arrow}%
+\UnicodeMathSymbol{"021AF}{\downzigzagarrow }{\mathrel}{downwards zigzag arrow}%
+\UnicodeMathSymbol{"021B0}{\Lsh }{\mathrel}{/lsh a:}%
+\UnicodeMathSymbol{"021B1}{\Rsh }{\mathrel}{/rsh a:}%
+\UnicodeMathSymbol{"021B2}{\Ldsh }{\mathrel}{left down angled arrow}%
+\UnicodeMathSymbol{"021B3}{\Rdsh }{\mathrel}{right down angled arrow}%
+\UnicodeMathSymbol{"021B4}{\linefeed }{\mathord}{rightwards arrow with corner downwards}%
+\UnicodeMathSymbol{"021B5}{\carriagereturn }{\mathord}{downwards arrow with corner leftward = carriage return}%
+\UnicodeMathSymbol{"021B6}{\curvearrowleft }{\mathrel}{left curved arrow}%
+\UnicodeMathSymbol{"021B7}{\curvearrowright }{\mathrel}{right curved arrow}%
+\UnicodeMathSymbol{"021B8}{\barovernorthwestarrow }{\mathord}{north west arrow to long bar}%
+\UnicodeMathSymbol{"021B9}{\barleftarrowrightarrowbar}{\mathord}{leftwards arrow to bar over rightwards arrow to bar}%
+\UnicodeMathSymbol{"021BA}{\acwopencirclearrow }{\mathord}{anticlockwise open circle arrow}%
+\UnicodeMathSymbol{"021BB}{\cwopencirclearrow }{\mathord}{clockwise open circle arrow}%
+\UnicodeMathSymbol{"021BC}{\leftharpoonup }{\mathrel}{left harpoon-up}%
+\UnicodeMathSymbol{"021BD}{\leftharpoondown }{\mathrel}{left harpoon-down}%
+\UnicodeMathSymbol{"021BE}{\upharpoonright }{\mathrel}{/upharpoonright /restriction a: up harpoon-right}%
+\UnicodeMathSymbol{"021BF}{\upharpoonleft }{\mathrel}{up harpoon-left}%
+\UnicodeMathSymbol{"021C0}{\rightharpoonup }{\mathrel}{right harpoon-up}%
+\UnicodeMathSymbol{"021C1}{\rightharpoondown }{\mathrel}{right harpoon-down}%
+\UnicodeMathSymbol{"021C2}{\downharpoonright }{\mathrel}{down harpoon-right}%
+\UnicodeMathSymbol{"021C3}{\downharpoonleft }{\mathrel}{down harpoon-left}%
+\UnicodeMathSymbol{"021C4}{\rightleftarrows }{\mathrel}{right arrow over left arrow}%
+\UnicodeMathSymbol{"021C5}{\updownarrows }{\mathrel}{up arrow, down arrow}%
+\UnicodeMathSymbol{"021C6}{\leftrightarrows }{\mathrel}{left arrow over right arrow}%
+\UnicodeMathSymbol{"021C7}{\leftleftarrows }{\mathrel}{two left arrows}%
+\UnicodeMathSymbol{"021C8}{\upuparrows }{\mathrel}{two up arrows}%
+\UnicodeMathSymbol{"021C9}{\rightrightarrows }{\mathrel}{two right arrows}%
+\UnicodeMathSymbol{"021CA}{\downdownarrows }{\mathrel}{two down arrows}%
+\UnicodeMathSymbol{"021CB}{\leftrightharpoons }{\mathrel}{left harpoon over right}%
+\UnicodeMathSymbol{"021CC}{\rightleftharpoons }{\mathrel}{right harpoon over left}%
+\UnicodeMathSymbol{"021CD}{\nLeftarrow }{\mathrel}{not implied by}%
+\UnicodeMathSymbol{"021CE}{\nLeftrightarrow }{\mathrel}{not left and right double arrows}%
+\UnicodeMathSymbol{"021CF}{\nRightarrow }{\mathrel}{not implies}%
+\UnicodeMathSymbol{"021D0}{\Leftarrow }{\mathrel}{is implied by}%
+\UnicodeMathSymbol{"021D1}{\Uparrow }{\mathrel}{up double arrow}%
+\UnicodeMathSymbol{"021D2}{\Rightarrow }{\mathrel}{implies}%
+\UnicodeMathSymbol{"021D3}{\Downarrow }{\mathrel}{down double arrow}%
+\UnicodeMathSymbol{"021D4}{\Leftrightarrow }{\mathrel}{left and right double arrow}%
+\UnicodeMathSymbol{"021D5}{\Updownarrow }{\mathrel}{up and down double arrow}%
+\UnicodeMathSymbol{"021D6}{\Nwarrow }{\mathrel}{nw pointing double arrow}%
+\UnicodeMathSymbol{"021D7}{\Nearrow }{\mathrel}{ne pointing double arrow}%
+\UnicodeMathSymbol{"021D8}{\Searrow }{\mathrel}{se pointing double arrow}%
+\UnicodeMathSymbol{"021D9}{\Swarrow }{\mathrel}{sw pointing double arrow}%
+\UnicodeMathSymbol{"021DA}{\Lleftarrow }{\mathrel}{left triple arrow}%
+\UnicodeMathSymbol{"021DB}{\Rrightarrow }{\mathrel}{right triple arrow}%
+\UnicodeMathSymbol{"021DC}{\leftsquigarrow }{\mathrel}{leftwards squiggle arrow}%
+\UnicodeMathSymbol{"021DD}{\rightsquigarrow }{\mathrel}{rightwards squiggle arrow}%
+\UnicodeMathSymbol{"021DE}{\nHuparrow }{\mathord}{upwards arrow with double stroke}%
+\UnicodeMathSymbol{"021DF}{\nHdownarrow }{\mathord}{downwards arrow with double stroke}%
+\UnicodeMathSymbol{"021E0}{\leftdasharrow }{\mathord}{leftwards dashed arrow}%
+\UnicodeMathSymbol{"021E1}{\updasharrow }{\mathord}{upwards dashed arrow}%
+\UnicodeMathSymbol{"021E2}{\rightdasharrow }{\mathord}{rightwards dashed arrow}%
+\UnicodeMathSymbol{"021E3}{\downdasharrow }{\mathord}{downwards dashed arrow}%
+\UnicodeMathSymbol{"021E4}{\barleftarrow }{\mathrel}{leftwards arrow to bar}%
+\UnicodeMathSymbol{"021E5}{\rightarrowbar }{\mathrel}{rightwards arrow to bar}%
+\UnicodeMathSymbol{"021E6}{\leftwhitearrow }{\mathord}{leftwards white arrow}%
+\UnicodeMathSymbol{"021E7}{\upwhitearrow }{\mathord}{upwards white arrow}%
+\UnicodeMathSymbol{"021E8}{\rightwhitearrow }{\mathord}{rightwards white arrow}%
+\UnicodeMathSymbol{"021E9}{\downwhitearrow }{\mathord}{downwards white arrow}%
+\UnicodeMathSymbol{"021EA}{\whitearrowupfrombar }{\mathord}{upwards white arrow from bar}%
+\UnicodeMathSymbol{"021F4}{\circleonrightarrow }{\mathrel}{right arrow with small circle}%
+\UnicodeMathSymbol{"021F5}{\downuparrows }{\mathrel}{downwards arrow leftwards of upwards arrow}%
+\UnicodeMathSymbol{"021F6}{\rightthreearrows }{\mathrel}{three rightwards arrows}%
+\UnicodeMathSymbol{"021F7}{\nvleftarrow }{\mathrel}{leftwards arrow with vertical stroke}%
+\UnicodeMathSymbol{"021F8}{\nvrightarrow }{\mathrel}{rightwards arrow with vertical stroke}%
+\UnicodeMathSymbol{"021F9}{\nvleftrightarrow }{\mathrel}{left right arrow with vertical stroke}%
+\UnicodeMathSymbol{"021FA}{\nVleftarrow }{\mathrel}{leftwards arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FB}{\nVrightarrow }{\mathrel}{rightwards arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FC}{\nVleftrightarrow }{\mathrel}{left right arrow with double vertical stroke}%
+\UnicodeMathSymbol{"021FD}{\leftarrowtriangle }{\mathrel}{leftwards open-headed arrow}%
+\UnicodeMathSymbol{"021FE}{\rightarrowtriangle }{\mathrel}{rightwards open-headed arrow}%
+\UnicodeMathSymbol{"021FF}{\leftrightarrowtriangle }{\mathrel}{left right open-headed arrow}%
+\UnicodeMathSymbol{"02200}{\forall }{\mathord}{for all}%
+\UnicodeMathSymbol{"02201}{\complement }{\mathord}{complement sign}%
+\UnicodeMathSymbol{"02202}{\partial }{\mathalpha}{partial differential}%
+\UnicodeMathSymbol{"02203}{\exists }{\mathord}{at least one exists}%
+\UnicodeMathSymbol{"02204}{\nexists }{\mathord}{negated exists}%
+\UnicodeMathSymbol{"02205}{\varnothing }{\mathord}{circle, slash}%
+\UnicodeMathSymbol{"02206}{\increment }{\mathord}{laplacian (delta; nabla\string^2)}%
+\UnicodeMathSymbol{"02207}{\nabla }{\mathalpha}{nabla, del, hamilton operator}%
+\UnicodeMathSymbol{"02208}{\in }{\mathrel}{set membership, variant}%
+\UnicodeMathSymbol{"02209}{\notin }{\mathrel}{negated set membership}%
+\UnicodeMathSymbol{"0220A}{\smallin }{\mathrel}{set membership (small set membership)}%
+\UnicodeMathSymbol{"0220B}{\ni }{\mathrel}{contains, variant}%
+\UnicodeMathSymbol{"0220C}{\nni }{\mathrel}{negated contains, variant}%
+\UnicodeMathSymbol{"0220D}{\smallni }{\mathrel}{/ni /owns r: contains (small contains as member)}%
+\UnicodeMathSymbol{"0220E}{\QED }{\mathord}{end of proof}%
+\UnicodeMathSymbol{"0220F}{\prod }{\mathop}{product operator}%
+\UnicodeMathSymbol{"02210}{\coprod }{\mathop}{coproduct operator}%
+\UnicodeMathSymbol{"02211}{\sum }{\mathop}{summation operator}%
+\UnicodeMathSymbol{"02212}{\minus }{\mathbin}{minus sign}%
+\UnicodeMathSymbol{"02213}{\mp }{\mathbin}{minus-or-plus sign}%
+\UnicodeMathSymbol{"02214}{\dotplus }{\mathbin}{plus sign, dot above}%
+\UnicodeMathSymbol{"02215}{\divslash }{\mathbin}{division slash}%
+\UnicodeMathSymbol{"02216}{\smallsetminus }{\mathbin}{small set minus (cf. reverse solidus)}%
+\UnicodeMathSymbol{"02217}{\ast }{\mathbin}{centered asterisk}%
+\UnicodeMathSymbol{"02218}{\vysmwhtcircle }{\mathbin}{composite function (small circle)}%
+\UnicodeMathSymbol{"02219}{\vysmblkcircle }{\mathbin}{bullet operator}%
+\UnicodeMathSymbol{"0221A}{\sqrt }{\mathopen}{radical}%
+\UnicodeMathSymbol{"0221A}{\surd }{\mathord}{radical}%
+\UnicodeMathSymbol{"0221B}{\cuberoot }{\mathopen}{cube root}%
+\UnicodeMathSymbol{"0221C}{\fourthroot }{\mathopen}{fourth root}%
+\UnicodeMathSymbol{"0221D}{\propto }{\mathrel}{is proportional to}%
+\UnicodeMathSymbol{"0221E}{\infty }{\mathord}{infinity}%
+\UnicodeMathSymbol{"0221F}{\rightangle }{\mathord}{right (90 degree) angle}%
+\UnicodeMathSymbol{"02220}{\angle }{\mathord}{angle}%
+\UnicodeMathSymbol{"02221}{\measuredangle }{\mathord}{angle-measured}%
+\UnicodeMathSymbol{"02222}{\sphericalangle }{\mathord}{angle-spherical}%
+\UnicodeMathSymbol{"02223}{\mid }{\mathrel}{/mid r:}%
+\UnicodeMathSymbol{"02224}{\nmid }{\mathrel}{negated mid}%
+\UnicodeMathSymbol{"02225}{\parallel }{\mathrel}{parallel}%
+\UnicodeMathSymbol{"02226}{\nparallel }{\mathrel}{not parallel}%
+\UnicodeMathSymbol{"02227}{\wedge }{\mathbin}{/wedge /land b: logical and}%
+\UnicodeMathSymbol{"02228}{\vee }{\mathbin}{/vee /lor b: logical or}%
+\UnicodeMathSymbol{"02229}{\cap }{\mathbin}{intersection}%
+\UnicodeMathSymbol{"0222A}{\cup }{\mathbin}{union or logical sum}%
+\UnicodeMathSymbol{"0222B}{\int }{\mathop}{integral operator}%
+\UnicodeMathSymbol{"0222C}{\iint }{\mathop}{double integral operator}%
+\UnicodeMathSymbol{"0222D}{\iiint }{\mathop}{triple integral operator}%
+\UnicodeMathSymbol{"0222E}{\oint }{\mathop}{contour integral operator}%
+\UnicodeMathSymbol{"0222F}{\oiint }{\mathop}{double contour integral operator}%
+\UnicodeMathSymbol{"02230}{\oiiint }{\mathop}{triple contour integral operator}%
+\UnicodeMathSymbol{"02231}{\intclockwise }{\mathop}{clockwise integral}%
+\UnicodeMathSymbol{"02232}{\varointclockwise }{\mathop}{contour integral, clockwise}%
+\UnicodeMathSymbol{"02233}{\ointctrclockwise }{\mathop}{contour integral, anticlockwise}%
+\UnicodeMathSymbol{"02234}{\therefore }{\mathord}{therefore}%
+\UnicodeMathSymbol{"02235}{\because }{\mathord}{because}%
+\UnicodeMathSymbol{"02236}{\mathratio }{\mathrel}{ratio}%
+\UnicodeMathSymbol{"02237}{\Colon }{\mathrel}{two colons}%
+\UnicodeMathSymbol{"02238}{\dotminus }{\mathbin}{minus sign, dot above}%
+\UnicodeMathSymbol{"02239}{\dashcolon }{\mathrel}{excess (-:)}%
+\UnicodeMathSymbol{"0223A}{\dotsminusdots }{\mathrel}{minus with four dots, geometric properties}%
+\UnicodeMathSymbol{"0223B}{\kernelcontraction }{\mathrel}{homothetic}%
+\UnicodeMathSymbol{"0223C}{\sim }{\mathrel}{similar}%
+\UnicodeMathSymbol{"0223D}{\backsim }{\mathrel}{reverse similar}%
+\UnicodeMathSymbol{"0223E}{\invlazys }{\mathbin}{most positive [inverted lazy s]}%
+\UnicodeMathSymbol{"0223F}{\sinewave }{\mathord}{sine wave}%
+\UnicodeMathSymbol{"02240}{\wr }{\mathbin}{wreath product}%
+\UnicodeMathSymbol{"02241}{\nsim }{\mathrel}{not similar}%
+\UnicodeMathSymbol{"02242}{\eqsim }{\mathrel}{equals, similar}%
+\UnicodeMathSymbol{"02243}{\simeq }{\mathrel}{similar, equals}%
+\UnicodeMathSymbol{"02244}{\nsime }{\mathrel}{not similar, equals}%
+\UnicodeMathSymbol{"02243}{\sime }{\mathrel}{similar, equals (alias)}%
+\UnicodeMathSymbol{"02244}{\nsimeq }{\mathrel}{not similar, equals (alias)}%
+\UnicodeMathSymbol{"02245}{\cong }{\mathrel}{congruent with}%
+\UnicodeMathSymbol{"02246}{\simneqq }{\mathrel}{similar, not equals [vert only for 9573 entity]}%
+\UnicodeMathSymbol{"02247}{\ncong }{\mathrel}{not congruent with}%
+\UnicodeMathSymbol{"02248}{\approx }{\mathrel}{approximate}%
+\UnicodeMathSymbol{"02249}{\napprox }{\mathrel}{not approximate}%
+\UnicodeMathSymbol{"0224A}{\approxeq }{\mathrel}{approximate, equals}%
+\UnicodeMathSymbol{"0224B}{\approxident }{\mathrel}{approximately identical to}%
+\UnicodeMathSymbol{"0224C}{\backcong }{\mathrel}{all equal to}%
+\UnicodeMathSymbol{"0224D}{\asymp }{\mathrel}{asymptotically equal to}%
+\UnicodeMathSymbol{"0224E}{\Bumpeq }{\mathrel}{bumpy equals}%
+\UnicodeMathSymbol{"0224F}{\bumpeq }{\mathrel}{bumpy equals, equals}%
+\UnicodeMathSymbol{"02250}{\doteq }{\mathrel}{equals, single dot above}%
+\UnicodeMathSymbol{"02251}{\Doteq }{\mathrel}{/doteqdot /doteq r: equals, even dots}%
+\UnicodeMathSymbol{"02252}{\fallingdotseq }{\mathrel}{equals, falling dots}%
+\UnicodeMathSymbol{"02253}{\risingdotseq }{\mathrel}{equals, rising dots}%
+\UnicodeMathSymbol{"02254}{\coloneq }{\mathrel}{colon, equals}%
+\UnicodeMathSymbol{"02255}{\eqcolon }{\mathrel}{equals, colon}%
+\UnicodeMathSymbol{"02256}{\eqcirc }{\mathrel}{circle on equals sign}%
+\UnicodeMathSymbol{"02257}{\circeq }{\mathrel}{circle, equals}%
+\UnicodeMathSymbol{"02258}{\arceq }{\mathrel}{arc, equals; corresponds to}%
+\UnicodeMathSymbol{"02259}{\wedgeq }{\mathrel}{corresponds to (wedge, equals)}%
+\UnicodeMathSymbol{"0225A}{\veeeq }{\mathrel}{logical or, equals}%
+\UnicodeMathSymbol{"0225B}{\stareq }{\mathrel}{star equals}%
+\UnicodeMathSymbol{"0225C}{\triangleq }{\mathrel}{triangle, equals}%
+\UnicodeMathSymbol{"0225D}{\eqdef }{\mathrel}{equals by definition}%
+\UnicodeMathSymbol{"0225E}{\measeq }{\mathrel}{measured by (m over equals)}%
+\UnicodeMathSymbol{"0225F}{\questeq }{\mathrel}{equal with questionmark}%
+\UnicodeMathSymbol{"02260}{\ne }{\mathrel}{/ne /neq r: not equal}%
+\UnicodeMathSymbol{"02261}{\equiv }{\mathrel}{identical with}%
+\UnicodeMathSymbol{"02262}{\nequiv }{\mathrel}{not identical with}%
+\UnicodeMathSymbol{"02263}{\Equiv }{\mathrel}{strict equivalence (4 lines)}%
+\UnicodeMathSymbol{"02264}{\leq }{\mathrel}{/leq /le r: less-than-or-equal}%
+\UnicodeMathSymbol{"02265}{\geq }{\mathrel}{/geq /ge r: greater-than-or-equal}%
+\UnicodeMathSymbol{"02266}{\leqq }{\mathrel}{less, double equals}%
+\UnicodeMathSymbol{"02267}{\geqq }{\mathrel}{greater, double equals}%
+\UnicodeMathSymbol{"02268}{\lneqq }{\mathrel}{less, not double equals}%
+\UnicodeMathSymbol{"02269}{\gneqq }{\mathrel}{greater, not double equals}%
+\UnicodeMathSymbol{"0226A}{\ll }{\mathrel}{much less than, type 2}%
+\UnicodeMathSymbol{"0226B}{\gg }{\mathrel}{much greater than, type 2}%
+\UnicodeMathSymbol{"0226C}{\between }{\mathrel}{between}%
+\UnicodeMathSymbol{"0226D}{\nasymp }{\mathrel}{not asymptotically equal to}%
+\UnicodeMathSymbol{"0226E}{\nless }{\mathrel}{not less-than}%
+\UnicodeMathSymbol{"0226F}{\ngtr }{\mathrel}{not greater-than}%
+\UnicodeMathSymbol{"02270}{\nleq }{\mathrel}{not less-than-or-equal}%
+\UnicodeMathSymbol{"02271}{\ngeq }{\mathrel}{not greater-than-or-equal}%
+\UnicodeMathSymbol{"02272}{\lesssim }{\mathrel}{less, similar}%
+\UnicodeMathSymbol{"02273}{\gtrsim }{\mathrel}{greater, similar}%
+\UnicodeMathSymbol{"02274}{\nlesssim }{\mathrel}{not less, similar}%
+\UnicodeMathSymbol{"02275}{\ngtrsim }{\mathrel}{not greater, similar}%
+\UnicodeMathSymbol{"02276}{\lessgtr }{\mathrel}{less, greater}%
+\UnicodeMathSymbol{"02277}{\gtrless }{\mathrel}{greater, less}%
+\UnicodeMathSymbol{"02278}{\nlessgtr }{\mathrel}{not less, greater}%
+\UnicodeMathSymbol{"02279}{\ngtrless }{\mathrel}{not greater, less}%
+\UnicodeMathSymbol{"0227A}{\prec }{\mathrel}{precedes}%
+\UnicodeMathSymbol{"0227B}{\succ }{\mathrel}{succeeds}%
+\UnicodeMathSymbol{"0227C}{\preccurlyeq }{\mathrel}{precedes, curly equals}%
+\UnicodeMathSymbol{"0227D}{\succcurlyeq }{\mathrel}{succeeds, curly equals}%
+\UnicodeMathSymbol{"0227E}{\precsim }{\mathrel}{precedes, similar}%
+\UnicodeMathSymbol{"0227F}{\succsim }{\mathrel}{succeeds, similar}%
+\UnicodeMathSymbol{"02280}{\nprec }{\mathrel}{not precedes}%
+\UnicodeMathSymbol{"02281}{\nsucc }{\mathrel}{not succeeds}%
+\UnicodeMathSymbol{"02282}{\subset }{\mathrel}{subset or is implied by}%
+\UnicodeMathSymbol{"02283}{\supset }{\mathrel}{superset or implies}%
+\UnicodeMathSymbol{"02284}{\nsubset }{\mathrel}{not subset, variant [slash negation]}%
+\UnicodeMathSymbol{"02285}{\nsupset }{\mathrel}{not superset, variant [slash negation]}%
+\UnicodeMathSymbol{"02286}{\subseteq }{\mathrel}{subset, equals}%
+\UnicodeMathSymbol{"02287}{\supseteq }{\mathrel}{superset, equals}%
+\UnicodeMathSymbol{"02288}{\nsubseteq }{\mathrel}{not subset, equals}%
+\UnicodeMathSymbol{"02289}{\nsupseteq }{\mathrel}{not superset, equals}%
+\UnicodeMathSymbol{"0228A}{\subsetneq }{\mathrel}{subset, not equals}%
+\UnicodeMathSymbol{"0228B}{\supsetneq }{\mathrel}{superset, not equals}%
+\UnicodeMathSymbol{"0228C}{\cupleftarrow }{\mathbin}{multiset}%
+\UnicodeMathSymbol{"0228D}{\cupdot }{\mathbin}{union, with dot}%
+\UnicodeMathSymbol{"0228E}{\uplus }{\mathbin}{plus sign in union}%
+\UnicodeMathSymbol{"0228F}{\sqsubset }{\mathrel}{square subset}%
+\UnicodeMathSymbol{"02290}{\sqsupset }{\mathrel}{square superset}%
+\UnicodeMathSymbol{"02291}{\sqsubseteq }{\mathrel}{square subset, equals}%
+\UnicodeMathSymbol{"02292}{\sqsupseteq }{\mathrel}{square superset, equals}%
+\UnicodeMathSymbol{"02293}{\sqcap }{\mathbin}{square intersection}%
+\UnicodeMathSymbol{"02294}{\sqcup }{\mathbin}{square union}%
+\UnicodeMathSymbol{"02295}{\oplus }{\mathbin}{plus sign in circle}%
+\UnicodeMathSymbol{"02296}{\ominus }{\mathbin}{minus sign in circle}%
+\UnicodeMathSymbol{"02297}{\otimes }{\mathbin}{multiply sign in circle}%
+\UnicodeMathSymbol{"02298}{\oslash }{\mathbin}{solidus in circle}%
+\UnicodeMathSymbol{"02299}{\odot }{\mathbin}{middle dot in circle}%
+\UnicodeMathSymbol{"0229A}{\circledcirc }{\mathbin}{small circle in circle}%
+\UnicodeMathSymbol{"0229B}{\circledast }{\mathbin}{asterisk in circle}%
+\UnicodeMathSymbol{"0229C}{\circledequal }{\mathbin}{equal in circle}%
+\UnicodeMathSymbol{"0229D}{\circleddash }{\mathbin}{hyphen in circle}%
+\UnicodeMathSymbol{"0229E}{\boxplus }{\mathbin}{plus sign in box}%
+\UnicodeMathSymbol{"0229F}{\boxminus }{\mathbin}{minus sign in box}%
+\UnicodeMathSymbol{"022A0}{\boxtimes }{\mathbin}{multiply sign in box}%
+\UnicodeMathSymbol{"022A1}{\boxdot }{\mathbin}{/dotsquare /boxdot b: small dot in box}%
+\UnicodeMathSymbol{"022A2}{\vdash }{\mathrel}{vertical, dash}%
+\UnicodeMathSymbol{"022A3}{\dashv }{\mathrel}{dash, vertical}%
+\UnicodeMathSymbol{"022A4}{\top }{\mathord}{top}%
+\UnicodeMathSymbol{"022A5}{\bot }{\mathord}{bottom}%
+\UnicodeMathSymbol{"022A6}{\assert }{\mathrel}{assertion (vertical, short dash)}%
+\UnicodeMathSymbol{"022A7}{\models }{\mathrel}{models (vertical, short double dash)}%
+\UnicodeMathSymbol{"022A8}{\vDash }{\mathrel}{vertical, double dash}%
+\UnicodeMathSymbol{"022A9}{\Vdash }{\mathrel}{double vertical, dash}%
+\UnicodeMathSymbol{"022AA}{\Vvdash }{\mathrel}{triple vertical, dash}%
+\UnicodeMathSymbol{"022AB}{\VDash }{\mathrel}{double vert, double dash}%
+\UnicodeMathSymbol{"022AC}{\nvdash }{\mathrel}{not vertical, dash}%
+\UnicodeMathSymbol{"022AD}{\nvDash }{\mathrel}{not vertical, double dash}%
+\UnicodeMathSymbol{"022AE}{\nVdash }{\mathrel}{not double vertical, dash}%
+\UnicodeMathSymbol{"022AF}{\nVDash }{\mathrel}{not double vert, double dash}%
+\UnicodeMathSymbol{"022B0}{\prurel }{\mathrel}{element precedes under relation}%
+\UnicodeMathSymbol{"022B1}{\scurel }{\mathrel}{succeeds under relation}%
+\UnicodeMathSymbol{"022B2}{\vartriangleleft }{\mathrel}{left triangle, open, variant}%
+\UnicodeMathSymbol{"022B3}{\vartriangleright }{\mathrel}{right triangle, open, variant}%
+\UnicodeMathSymbol{"022B4}{\trianglelefteq }{\mathrel}{left triangle, equals}%
+\UnicodeMathSymbol{"022B5}{\trianglerighteq }{\mathrel}{right triangle, equals}%
+\UnicodeMathSymbol{"022B6}{\origof }{\mathrel}{original of}%
+\UnicodeMathSymbol{"022B7}{\imageof }{\mathrel}{image of}%
+\UnicodeMathSymbol{"022B8}{\multimap }{\mathrel}{/multimap a:}%
+\UnicodeMathSymbol{"022B9}{\hermitmatrix }{\mathord}{hermitian conjugate matrix}%
+\UnicodeMathSymbol{"022BA}{\intercal }{\mathbin}{intercal}%
+\UnicodeMathSymbol{"022BB}{\veebar }{\mathbin}{logical or, bar below (large vee); exclusive disjunction}%
+\UnicodeMathSymbol{"022BC}{\barwedge }{\mathbin}{bar, wedge (large wedge)}%
+\UnicodeMathSymbol{"022BD}{\barvee }{\mathbin}{bar, vee (large vee)}%
+\UnicodeMathSymbol{"022BE}{\measuredrightangle }{\mathord}{right angle-measured [with arc]}%
+\UnicodeMathSymbol{"022BF}{\varlrtriangle }{\mathord}{right triangle}%
+\UnicodeMathSymbol{"022C0}{\bigwedge }{\mathop}{logical and operator}%
+\UnicodeMathSymbol{"022C1}{\bigvee }{\mathop}{logical or operator}%
+\UnicodeMathSymbol{"022C2}{\bigcap }{\mathop}{intersection operator}%
+\UnicodeMathSymbol{"022C3}{\bigcup }{\mathop}{union operator}%
+\UnicodeMathSymbol{"022C4}{\smwhtdiamond }{\mathbin}{white diamond}%
+\UnicodeMathSymbol{"022C5}{\cdot }{\mathbin}{small middle dot}%
+\UnicodeMathSymbol{"022C6}{\star }{\mathbin}{small star, filled, low}%
+\UnicodeMathSymbol{"022C7}{\divideontimes }{\mathbin}{division on times}%
+\UnicodeMathSymbol{"022C8}{\bowtie }{\mathrel}{bowtie}%
+\UnicodeMathSymbol{"022C9}{\ltimes }{\mathbin}{times sign, left closed}%
+\UnicodeMathSymbol{"022CA}{\rtimes }{\mathbin}{times sign, right closed}%
+\UnicodeMathSymbol{"022CB}{\leftthreetimes }{\mathbin}{left semidirect product}%
+\UnicodeMathSymbol{"022CC}{\rightthreetimes }{\mathbin}{right semidirect product}%
+\UnicodeMathSymbol{"022CD}{\backsimeq }{\mathrel}{reverse similar, equals}%
+\UnicodeMathSymbol{"022CE}{\curlyvee }{\mathbin}{curly logical or}%
+\UnicodeMathSymbol{"022CF}{\curlywedge }{\mathbin}{curly logical and}%
+\UnicodeMathSymbol{"022D0}{\Subset }{\mathrel}{double subset}%
+\UnicodeMathSymbol{"022D1}{\Supset }{\mathrel}{double superset}%
+\UnicodeMathSymbol{"022D2}{\Cap }{\mathbin}{/cap /doublecap b: double intersection}%
+\UnicodeMathSymbol{"022D3}{\Cup }{\mathbin}{/cup /doublecup b: double union}%
+\UnicodeMathSymbol{"022D4}{\pitchfork }{\mathrel}{pitchfork}%
+\UnicodeMathSymbol{"022D5}{\equalparallel }{\mathrel}{parallel, equal; equal or parallel}%
+\UnicodeMathSymbol{"022D6}{\lessdot }{\mathrel}{less than, with dot}%
+\UnicodeMathSymbol{"022D7}{\gtrdot }{\mathrel}{greater than, with dot}%
+\UnicodeMathSymbol{"022D8}{\lll }{\mathrel}{/ll /lll /llless r: triple less-than}%
+\UnicodeMathSymbol{"022D9}{\ggg }{\mathrel}{/ggg /gg /gggtr r: triple greater-than}%
+\UnicodeMathSymbol{"022DA}{\lesseqgtr }{\mathrel}{less, equals, greater}%
+\UnicodeMathSymbol{"022DB}{\gtreqless }{\mathrel}{greater, equals, less}%
+\UnicodeMathSymbol{"022DC}{\eqless }{\mathrel}{equal-or-less}%
+\UnicodeMathSymbol{"022DD}{\eqgtr }{\mathrel}{equal-or-greater}%
+\UnicodeMathSymbol{"022DE}{\curlyeqprec }{\mathrel}{curly equals, precedes}%
+\UnicodeMathSymbol{"022DF}{\curlyeqsucc }{\mathrel}{curly equals, succeeds}%
+\UnicodeMathSymbol{"022E0}{\npreccurlyeq }{\mathrel}{not precedes, curly equals}%
+\UnicodeMathSymbol{"022E1}{\nsucccurlyeq }{\mathrel}{not succeeds, curly equals}%
+\UnicodeMathSymbol{"022E2}{\nsqsubseteq }{\mathrel}{not, square subset, equals}%
+\UnicodeMathSymbol{"022E3}{\nsqsupseteq }{\mathrel}{not, square superset, equals}%
+\UnicodeMathSymbol{"022E4}{\sqsubsetneq }{\mathrel}{square subset, not equals}%
+\UnicodeMathSymbol{"022E5}{\sqsupsetneq }{\mathrel}{square superset, not equals}%
+\UnicodeMathSymbol{"022E6}{\lnsim }{\mathrel}{less, not similar}%
+\UnicodeMathSymbol{"022E7}{\gnsim }{\mathrel}{greater, not similar}%
+\UnicodeMathSymbol{"022E8}{\precnsim }{\mathrel}{precedes, not similar}%
+\UnicodeMathSymbol{"022E9}{\succnsim }{\mathrel}{succeeds, not similar}%
+\UnicodeMathSymbol{"022EA}{\nvartriangleleft }{\mathrel}{not left triangle}%
+\UnicodeMathSymbol{"022EB}{\nvartriangleright }{\mathrel}{not right triangle}%
+\UnicodeMathSymbol{"022EC}{\ntrianglelefteq }{\mathrel}{not left triangle, equals}%
+\UnicodeMathSymbol{"022ED}{\ntrianglerighteq }{\mathrel}{not right triangle, equals}%
+\UnicodeMathSymbol{"022EE}{\vdots }{\mathrel}{vertical ellipsis}%
+\UnicodeMathSymbol{"022EF}{\unicodecdots }{\mathord}{three dots, centered}%
+\UnicodeMathSymbol{"022F0}{\adots }{\mathrel}{three dots, ascending}%
+\UnicodeMathSymbol{"022F1}{\ddots }{\mathrel}{three dots, descending}%
+\UnicodeMathSymbol{"022F2}{\disin }{\mathrel}{element of with long horizontal stroke}%
+\UnicodeMathSymbol{"022F3}{\varisins }{\mathrel}{element of with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022F4}{\isins }{\mathrel}{small element of with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022F5}{\isindot }{\mathrel}{element of with dot above}%
+\UnicodeMathSymbol{"022F6}{\varisinobar }{\mathrel}{element of with overbar}%
+\UnicodeMathSymbol{"022F7}{\isinobar }{\mathrel}{small element of with overbar}%
+\UnicodeMathSymbol{"022F8}{\isinvb }{\mathrel}{element of with underbar}%
+\UnicodeMathSymbol{"022F9}{\isinE }{\mathrel}{element of with two horizontal strokes}%
+\UnicodeMathSymbol{"022FA}{\nisd }{\mathrel}{contains with long horizontal stroke}%
+\UnicodeMathSymbol{"022FB}{\varnis }{\mathrel}{contains with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022FC}{\nis }{\mathrel}{small contains with vertical bar at end of horizontal stroke}%
+\UnicodeMathSymbol{"022FD}{\varniobar }{\mathrel}{contains with overbar}%
+\UnicodeMathSymbol{"022FE}{\niobar }{\mathrel}{small contains with overbar}%
+\UnicodeMathSymbol{"022FF}{\bagmember }{\mathrel}{z notation bag membership}%
+\UnicodeMathSymbol{"02300}{\diameter }{\mathord}{diameter sign}%
+\UnicodeMathSymbol{"02302}{\house }{\mathord}{house}%
+\UnicodeMathSymbol{"02305}{\varbarwedge }{\mathbin}{/barwedge b: logical and, bar above [projective (bar over small wedge)]}%
+\UnicodeMathSymbol{"02306}{\vardoublebarwedge }{\mathbin}{/doublebarwedge b: logical and, double bar above [perspective (double bar over small wedge)]}%
+\UnicodeMathSymbol{"02308}{\lceil }{\mathopen}{left ceiling}%
+\UnicodeMathSymbol{"02309}{\rceil }{\mathclose}{right ceiling}%
+\UnicodeMathSymbol{"0230A}{\lfloor }{\mathopen}{left floor}%
+\UnicodeMathSymbol{"0230B}{\rfloor }{\mathclose}{right floor}%
+\UnicodeMathSymbol{"02310}{\invnot }{\mathord}{reverse not}%
+\UnicodeMathSymbol{"02311}{\sqlozenge }{\mathord}{square lozenge}%
+\UnicodeMathSymbol{"02312}{\profline }{\mathord}{profile of a line}%
+\UnicodeMathSymbol{"02313}{\profsurf }{\mathord}{profile of a surface}%
+\UnicodeMathSymbol{"02317}{\viewdata }{\mathord}{viewdata square}%
+\UnicodeMathSymbol{"02319}{\turnednot }{\mathord}{turned not sign}%
+\UnicodeMathSymbol{"0231C}{\ulcorner }{\mathopen}{upper left corner}%
+\UnicodeMathSymbol{"0231D}{\urcorner }{\mathclose}{upper right corner}%
+\UnicodeMathSymbol{"0231E}{\llcorner }{\mathopen}{lower left corner}%
+\UnicodeMathSymbol{"0231F}{\lrcorner }{\mathclose}{lower right corner}%
+\UnicodeMathSymbol{"02320}{\inttop }{\mathord}{top half integral}%
+\UnicodeMathSymbol{"02321}{\intbottom }{\mathord}{bottom half integral}%
+\UnicodeMathSymbol{"02322}{\frown }{\mathrel}{down curve}%
+\UnicodeMathSymbol{"02323}{\smile }{\mathrel}{up curve}%
+\UnicodeMathSymbol{"0232C}{\varhexagonlrbonds }{\mathord}{six carbon ring, corner down, double bonds lower right etc}%
+\UnicodeMathSymbol{"02332}{\conictaper }{\mathord}{conical taper }%
+\UnicodeMathSymbol{"02336}{\topbot }{\mathord}{top and bottom}%
+\UnicodeMathSymbol{"0233D}{\obar }{\mathbin}{circle with vertical bar}%
+\UnicodeMathSymbol{"0233F}{\APLnotslash }{\mathrel}{solidus, bar through (apl functional symbol slash bar)}%
+\UnicodeMathSymbol{"02340}{\APLnotbackslash }{\mathord}{apl functional symbol backslash bar}%
+\UnicodeMathSymbol{"02353}{\APLboxupcaret }{\mathord}{boxed up caret}%
+\UnicodeMathSymbol{"02370}{\APLboxquestion }{\mathord}{boxed question mark}%
+\UnicodeMathSymbol{"0237C}{\rangledownzigzagarrow }{\mathord}{right angle with downwards zigzag arrow}%
+\UnicodeMathSymbol{"02394}{\hexagon }{\mathord}{horizontal benzene ring [hexagon flat open]}%
+\UnicodeMathSymbol{"0239B}{\lparenuend }{\mathord}{left parenthesis upper hook}%
+\UnicodeMathSymbol{"0239C}{\lparenextender }{\mathord}{left parenthesis extension}%
+\UnicodeMathSymbol{"0239D}{\lparenlend }{\mathord}{left parenthesis lower hook}%
+\UnicodeMathSymbol{"0239E}{\rparenuend }{\mathord}{right parenthesis upper hook}%
+\UnicodeMathSymbol{"0239F}{\rparenextender }{\mathord}{right parenthesis extension}%
+\UnicodeMathSymbol{"023A0}{\rparenlend }{\mathord}{right parenthesis lower hook}%
+\UnicodeMathSymbol{"023A1}{\lbrackuend }{\mathord}{left square bracket upper corner}%
+\UnicodeMathSymbol{"023A2}{\lbrackextender }{\mathord}{left square bracket extension}%
+\UnicodeMathSymbol{"023A3}{\lbracklend }{\mathord}{left square bracket lower corner}%
+\UnicodeMathSymbol{"023A4}{\rbrackuend }{\mathord}{right square bracket upper corner}%
+\UnicodeMathSymbol{"023A5}{\rbrackextender }{\mathord}{right square bracket extension}%
+\UnicodeMathSymbol{"023A6}{\rbracklend }{\mathord}{right square bracket lower corner}%
+\UnicodeMathSymbol{"023A7}{\lbraceuend }{\mathord}{left curly bracket upper hook}%
+\UnicodeMathSymbol{"023A8}{\lbracemid }{\mathord}{left curly bracket middle piece}%
+\UnicodeMathSymbol{"023A9}{\lbracelend }{\mathord}{left curly bracket lower hook}%
+\UnicodeMathSymbol{"023AA}{\vbraceextender }{\mathord}{curly bracket extension}%
+\UnicodeMathSymbol{"023AB}{\rbraceuend }{\mathord}{right curly bracket upper hook}%
+\UnicodeMathSymbol{"023AC}{\rbracemid }{\mathord}{right curly bracket middle piece}%
+\UnicodeMathSymbol{"023AD}{\rbracelend }{\mathord}{right curly bracket lower hook}%
+\UnicodeMathSymbol{"023AE}{\intextender }{\mathord}{integral extension}%
+\UnicodeMathSymbol{"023AF}{\harrowextender }{\mathord}{horizontal line extension (used to extend arrows)}%
+\UnicodeMathSymbol{"023B0}{\lmoustache }{\mathopen}{upper left or lower right curly bracket section}%
+\UnicodeMathSymbol{"023B1}{\rmoustache }{\mathclose}{upper right or lower left curly bracket section}%
+\UnicodeMathSymbol{"023B2}{\sumtop }{\mathord}{summation top}%
+\UnicodeMathSymbol{"023B3}{\sumbottom }{\mathord}{summation bottom}%
+\UnicodeMathSymbol{"023B4}{\overbracket }{\mathover}{top square bracket}%
+\UnicodeMathSymbol{"023B5}{\underbracket }{\mathunder}{bottom square bracket}%
+\UnicodeMathSymbol{"023B6}{\bbrktbrk }{\mathord}{bottom square bracket over top square bracket}%
+\UnicodeMathSymbol{"023B7}{\sqrtbottom }{\mathord}{radical symbol bottom}%
+\UnicodeMathSymbol{"023B8}{\lvboxline }{\mathord}{left vertical box line}%
+\UnicodeMathSymbol{"023B9}{\rvboxline }{\mathord}{right vertical box line}%
+\UnicodeMathSymbol{"023CE}{\varcarriagereturn }{\mathord}{return symbol}%
+\UnicodeMathSymbol{"023DC}{\overparen }{\mathover}{top parenthesis (mathematical use)}%
+\UnicodeMathSymbol{"023DD}{\underparen }{\mathunder}{bottom parenthesis (mathematical use)}%
+\UnicodeMathSymbol{"023DE}{\overbrace }{\mathover}{top curly bracket (mathematical use)}%
+\UnicodeMathSymbol{"023DF}{\underbrace }{\mathunder}{bottom curly bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E0}{\obrbrak }{\mathord}{top tortoise shell bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E1}{\ubrbrak }{\mathord}{bottom tortoise shell bracket (mathematical use)}%
+\UnicodeMathSymbol{"023E2}{\trapezium }{\mathord}{white trapezium}%
+\UnicodeMathSymbol{"023E3}{\benzenr }{\mathord}{benzene ring with circle}%
+\UnicodeMathSymbol{"023E4}{\strns }{\mathord}{straightness}%
+\UnicodeMathSymbol{"023E5}{\fltns }{\mathord}{flatness}%
+\UnicodeMathSymbol{"023E6}{\accurrent }{\mathord}{ac current}%
+\UnicodeMathSymbol{"023E7}{\elinters }{\mathord}{electrical intersection}%
+\UnicodeMathSymbol{"02422}{\blanksymbol }{\mathord}{blank symbol}%
+\UnicodeMathSymbol{"02423}{\mathvisiblespace }{\mathord}{open box}%
+\UnicodeMathSymbol{"02506}{\bdtriplevdash }{\mathord}{doubly broken vert}%
+\UnicodeMathSymbol{"02580}{\blockuphalf }{\mathord}{upper half block}%
+\UnicodeMathSymbol{"02584}{\blocklowhalf }{\mathord}{lower half block}%
+\UnicodeMathSymbol{"02588}{\blockfull }{\mathord}{full block}%
+\UnicodeMathSymbol{"0258C}{\blocklefthalf }{\mathord}{left half block}%
+\UnicodeMathSymbol{"02590}{\blockrighthalf }{\mathord}{right half block}%
+\UnicodeMathSymbol{"02591}{\blockqtrshaded }{\mathord}{25\% shaded block}%
+\UnicodeMathSymbol{"02592}{\blockhalfshaded }{\mathord}{50\% shaded block}%
+\UnicodeMathSymbol{"02593}{\blockthreeqtrshaded }{\mathord}{75\% shaded block}%
+\UnicodeMathSymbol{"025A0}{\mdlgblksquare }{\mathord}{square, filled}%
+\UnicodeMathSymbol{"025A1}{\mdlgwhtsquare }{\mathord}{square, open}%
+\UnicodeMathSymbol{"025A2}{\squoval }{\mathord}{white square with rounded corners}%
+\UnicodeMathSymbol{"025A3}{\blackinwhitesquare }{\mathord}{white square containing black small square}%
+\UnicodeMathSymbol{"025A4}{\squarehfill }{\mathord}{square, horizontal rule filled}%
+\UnicodeMathSymbol{"025A5}{\squarevfill }{\mathord}{square, vertical rule filled}%
+\UnicodeMathSymbol{"025A6}{\squarehvfill }{\mathord}{square with orthogonal crosshatch fill}%
+\UnicodeMathSymbol{"025A7}{\squarenwsefill }{\mathord}{square, nw-to-se rule filled}%
+\UnicodeMathSymbol{"025A8}{\squareneswfill }{\mathord}{square, ne-to-sw rule filled}%
+\UnicodeMathSymbol{"025A9}{\squarecrossfill }{\mathord}{square with diagonal crosshatch fill}%
+\UnicodeMathSymbol{"025AA}{\smblksquare }{\mathord}{/blacksquare - sq bullet, filled}%
+\UnicodeMathSymbol{"025AB}{\smwhtsquare }{\mathord}{white small square}%
+\UnicodeMathSymbol{"025AC}{\hrectangleblack }{\mathord}{black rectangle}%
+\UnicodeMathSymbol{"025AD}{\hrectangle }{\mathord}{horizontal rectangle, open}%
+\UnicodeMathSymbol{"025AE}{\vrectangleblack }{\mathord}{black vertical rectangle}%
+\UnicodeMathSymbol{"025AF}{\vrectangle }{\mathord}{rectangle, white (vertical)}%
+\UnicodeMathSymbol{"025B0}{\parallelogramblack }{\mathord}{black parallelogram}%
+\UnicodeMathSymbol{"025B1}{\parallelogram }{\mathord}{parallelogram, open}%
+\UnicodeMathSymbol{"025B2}{\bigblacktriangleup }{\mathord}{black up-pointing triangle}%
+\UnicodeMathSymbol{"025B3}{\bigtriangleup }{\mathbin}{big up triangle, open}%
+\UnicodeMathSymbol{"025B4}{\blacktriangle }{\mathord}{up triangle, filled}%
+\UnicodeMathSymbol{"025B5}{\vartriangle }{\mathrel}{/triangle - up triangle, open}%
+\UnicodeMathSymbol{"025B6}{\blacktriangleright }{\mathord}{(large) right triangle, filled}%
+\UnicodeMathSymbol{"025B7}{\triangleright }{\mathbin}{(large) right triangle, open; z notation range restriction}%
+\UnicodeMathSymbol{"025B8}{\smallblacktriangleright }{\mathord}{right triangle, filled}%
+\UnicodeMathSymbol{"025B9}{\smalltriangleright }{\mathord}{right triangle, open}%
+\UnicodeMathSymbol{"025BA}{\blackpointerright }{\mathord}{black right-pointing pointer}%
+\UnicodeMathSymbol{"025BB}{\whitepointerright }{\mathord}{white right-pointing pointer}%
+\UnicodeMathSymbol{"025BC}{\bigblacktriangledown }{\mathord}{big down triangle, filled}%
+\UnicodeMathSymbol{"025BD}{\bigtriangledown }{\mathord}{big down triangle, open}%
+\UnicodeMathSymbol{"025BE}{\blacktriangledown }{\mathord}{down triangle, filled}%
+\UnicodeMathSymbol{"025BF}{\triangledown }{\mathord}{down triangle, open}%
+\UnicodeMathSymbol{"025C0}{\blacktriangleleft }{\mathord}{(large) left triangle, filled}%
+\UnicodeMathSymbol{"025C1}{\triangleleft }{\mathbin}{(large) left triangle, open; z notation domain restriction}%
+\UnicodeMathSymbol{"025C2}{\smallblacktriangleleft }{\mathord}{left triangle, filled}%
+\UnicodeMathSymbol{"025C3}{\smalltriangleleft }{\mathord}{left triangle, open}%
+\UnicodeMathSymbol{"025C4}{\blackpointerleft }{\mathord}{black left-pointing pointer}%
+\UnicodeMathSymbol{"025C5}{\whitepointerleft }{\mathord}{white left-pointing pointer}%
+\UnicodeMathSymbol{"025C6}{\mdlgblkdiamond }{\mathord}{black diamond}%
+\UnicodeMathSymbol{"025C7}{\mdlgwhtdiamond }{\mathord}{white diamond; diamond, open}%
+\UnicodeMathSymbol{"025C8}{\blackinwhitediamond }{\mathord}{white diamond containing black small diamond}%
+\UnicodeMathSymbol{"025C9}{\fisheye }{\mathord}{fisheye}%
+\UnicodeMathSymbol{"025CA}{\mdlgwhtlozenge }{\mathord}{lozenge or total mark}%
+\UnicodeMathSymbol{"025CB}{\mdlgwhtcircle }{\mathbin}{medium large circle}%
+\UnicodeMathSymbol{"025CC}{\dottedcircle }{\mathord}{dotted circle}%
+\UnicodeMathSymbol{"025CD}{\circlevertfill }{\mathord}{circle with vertical fill}%
+\UnicodeMathSymbol{"025CE}{\bullseye }{\mathord}{bullseye}%
+\UnicodeMathSymbol{"025CF}{\mdlgblkcircle }{\mathord}{circle, filled}%
+\UnicodeMathSymbol{"025D0}{\circlelefthalfblack }{\mathord}{circle, filled left half [harvey ball]}%
+\UnicodeMathSymbol{"025D1}{\circlerighthalfblack }{\mathord}{circle, filled right half}%
+\UnicodeMathSymbol{"025D2}{\circlebottomhalfblack }{\mathord}{circle, filled bottom half}%
+\UnicodeMathSymbol{"025D3}{\circletophalfblack }{\mathord}{circle, filled top half}%
+\UnicodeMathSymbol{"025D4}{\circleurquadblack }{\mathord}{circle with upper right quadrant black}%
+\UnicodeMathSymbol{"025D5}{\blackcircleulquadwhite }{\mathord}{circle with all but upper left quadrant black}%
+\UnicodeMathSymbol{"025D6}{\blacklefthalfcircle }{\mathord}{left half black circle}%
+\UnicodeMathSymbol{"025D7}{\blackrighthalfcircle }{\mathord}{right half black circle}%
+\UnicodeMathSymbol{"025D8}{\inversebullet }{\mathord}{inverse bullet }%
+\UnicodeMathSymbol{"025D9}{\inversewhitecircle }{\mathord}{inverse white circle}%
+\UnicodeMathSymbol{"025DA}{\invwhiteupperhalfcircle }{\mathord}{upper half inverse white circle}%
+\UnicodeMathSymbol{"025DB}{\invwhitelowerhalfcircle }{\mathord}{lower half inverse white circle}%
+\UnicodeMathSymbol{"025DC}{\ularc }{\mathord}{upper left quadrant circular arc}%
+\UnicodeMathSymbol{"025DD}{\urarc }{\mathord}{upper right quadrant circular arc}%
+\UnicodeMathSymbol{"025DE}{\lrarc }{\mathord}{lower right quadrant circular arc}%
+\UnicodeMathSymbol{"025DF}{\llarc }{\mathord}{lower left quadrant circular arc}%
+\UnicodeMathSymbol{"025E0}{\topsemicircle }{\mathord}{upper half circle}%
+\UnicodeMathSymbol{"025E1}{\botsemicircle }{\mathord}{lower half circle}%
+\UnicodeMathSymbol{"025E2}{\lrblacktriangle }{\mathord}{lower right triangle, filled}%
+\UnicodeMathSymbol{"025E3}{\llblacktriangle }{\mathord}{lower left triangle, filled}%
+\UnicodeMathSymbol{"025E4}{\ulblacktriangle }{\mathord}{upper left triangle, filled}%
+\UnicodeMathSymbol{"025E5}{\urblacktriangle }{\mathord}{upper right triangle, filled}%
+\UnicodeMathSymbol{"025E6}{\smwhtcircle }{\mathord}{white bullet}%
+\UnicodeMathSymbol{"025E7}{\squareleftblack }{\mathord}{square, filled left half}%
+\UnicodeMathSymbol{"025E8}{\squarerightblack }{\mathord}{square, filled right half}%
+\UnicodeMathSymbol{"025E9}{\squareulblack }{\mathord}{square, filled top left corner}%
+\UnicodeMathSymbol{"025EA}{\squarelrblack }{\mathord}{square, filled bottom right corner}%
+\UnicodeMathSymbol{"025EB}{\boxbar }{\mathbin}{vertical bar in box}%
+\UnicodeMathSymbol{"025EC}{\trianglecdot }{\mathord}{triangle with centered dot}%
+\UnicodeMathSymbol{"025ED}{\triangleleftblack }{\mathord}{up-pointing triangle with left half black}%
+\UnicodeMathSymbol{"025EE}{\trianglerightblack }{\mathord}{up-pointing triangle with right half black}%
+\UnicodeMathSymbol{"025EF}{\lgwhtcircle }{\mathord}{large circle}%
+\UnicodeMathSymbol{"025F0}{\squareulquad }{\mathord}{white square with upper left quadrant}%
+\UnicodeMathSymbol{"025F1}{\squarellquad }{\mathord}{white square with lower left quadrant}%
+\UnicodeMathSymbol{"025F2}{\squarelrquad }{\mathord}{white square with lower right quadrant}%
+\UnicodeMathSymbol{"025F3}{\squareurquad }{\mathord}{white square with upper right quadrant}%
+\UnicodeMathSymbol{"025F4}{\circleulquad }{\mathord}{white circle with upper left quadrant}%
+\UnicodeMathSymbol{"025F5}{\circlellquad }{\mathord}{white circle with lower left quadrant}%
+\UnicodeMathSymbol{"025F6}{\circlelrquad }{\mathord}{white circle with lower right quadrant}%
+\UnicodeMathSymbol{"025F7}{\circleurquad }{\mathord}{white circle with upper right quadrant}%
+\UnicodeMathSymbol{"025F8}{\ultriangle }{\mathord}{upper left triangle}%
+\UnicodeMathSymbol{"025F9}{\urtriangle }{\mathord}{upper right triangle}%
+\UnicodeMathSymbol{"025FA}{\lltriangle }{\mathord}{lower left triangle}%
+\UnicodeMathSymbol{"025FB}{\mdwhtsquare }{\mathord}{white medium square}%
+\UnicodeMathSymbol{"025FC}{\mdblksquare }{\mathord}{black medium square}%
+\UnicodeMathSymbol{"025FD}{\mdsmwhtsquare }{\mathord}{white medium small square}%
+\UnicodeMathSymbol{"025FE}{\mdsmblksquare }{\mathord}{black medium small square}%
+\UnicodeMathSymbol{"025FF}{\lrtriangle }{\mathord}{lower right triangle}%
+\UnicodeMathSymbol{"02605}{\bigstar }{\mathord}{star, filled}%
+\UnicodeMathSymbol{"02606}{\bigwhitestar }{\mathord}{star, open}%
+\UnicodeMathSymbol{"02609}{\astrosun }{\mathord}{sun}%
+\UnicodeMathSymbol{"02621}{\danger }{\mathord}{dangerous bend (caution sign)}%
+\UnicodeMathSymbol{"0263B}{\blacksmiley }{\mathord}{black smiling face}%
+\UnicodeMathSymbol{"0263C}{\sun }{\mathord}{white sun with rays}%
+\UnicodeMathSymbol{"0263D}{\rightmoon }{\mathord}{first quarter moon}%
+\UnicodeMathSymbol{"0263E}{\leftmoon }{\mathord}{last quarter moon}%
+\UnicodeMathSymbol{"02640}{\female }{\mathord}{venus, female}%
+\UnicodeMathSymbol{"02642}{\male }{\mathord}{mars, male}%
+\UnicodeMathSymbol{"02660}{\spadesuit }{\mathord}{spades suit symbol}%
+\UnicodeMathSymbol{"02661}{\heartsuit }{\mathord}{heart suit symbol}%
+\UnicodeMathSymbol{"02662}{\diamondsuit }{\mathord}{diamond suit symbol}%
+\UnicodeMathSymbol{"02663}{\clubsuit }{\mathord}{club suit symbol}%
+\UnicodeMathSymbol{"02664}{\varspadesuit }{\mathord}{spade, white (card suit)}%
+\UnicodeMathSymbol{"02665}{\varheartsuit }{\mathord}{filled heart (card suit)}%
+\UnicodeMathSymbol{"02666}{\vardiamondsuit }{\mathord}{filled diamond (card suit)}%
+\UnicodeMathSymbol{"02667}{\varclubsuit }{\mathord}{club, white (card suit)}%
+\UnicodeMathSymbol{"02669}{\quarternote }{\mathord}{music note (sung text sign)}%
+\UnicodeMathSymbol{"0266A}{\eighthnote }{\mathord}{eighth note}%
+\UnicodeMathSymbol{"0266B}{\twonotes }{\mathord}{beamed eighth notes}%
+\UnicodeMathSymbol{"0266D}{\flat }{\mathord}{musical flat}%
+\UnicodeMathSymbol{"0266E}{\natural }{\mathord}{music natural}%
+\UnicodeMathSymbol{"0266F}{\sharp }{\mathord}{musical sharp}%
+\UnicodeMathSymbol{"0267E}{\acidfree }{\mathord}{permanent paper sign}%
+\UnicodeMathSymbol{"02680}{\dicei }{\mathord}{die face-1}%
+\UnicodeMathSymbol{"02681}{\diceii }{\mathord}{die face-2}%
+\UnicodeMathSymbol{"02682}{\diceiii }{\mathord}{die face-3}%
+\UnicodeMathSymbol{"02683}{\diceiv }{\mathord}{die face-4}%
+\UnicodeMathSymbol{"02684}{\dicev }{\mathord}{die face-5}%
+\UnicodeMathSymbol{"02685}{\dicevi }{\mathord}{die face-6}%
+\UnicodeMathSymbol{"02686}{\circledrightdot }{\mathord}{white circle with dot right}%
+\UnicodeMathSymbol{"02687}{\circledtwodots }{\mathord}{white circle with two dots}%
+\UnicodeMathSymbol{"02688}{\blackcircledrightdot }{\mathord}{black circle with white dot right}%
+\UnicodeMathSymbol{"02689}{\blackcircledtwodots }{\mathord}{black circle with two white dots}%
+\UnicodeMathSymbol{"026A5}{\Hermaphrodite }{\mathord}{male and female sign}%
+\UnicodeMathSymbol{"026AA}{\mdwhtcircle }{\mathord}{medium white circle}%
+\UnicodeMathSymbol{"026AB}{\mdblkcircle }{\mathord}{medium black circle}%
+\UnicodeMathSymbol{"026AC}{\mdsmwhtcircle }{\mathord}{medium small white circle}%
+\UnicodeMathSymbol{"026B2}{\neuter }{\mathord}{neuter}%
+\UnicodeMathSymbol{"02713}{\checkmark }{\mathord}{tick, check mark}%
+\UnicodeMathSymbol{"02720}{\maltese }{\mathord}{maltese cross}%
+\UnicodeMathSymbol{"0272A}{\circledstar }{\mathord}{circled white star}%
+\UnicodeMathSymbol{"02736}{\varstar }{\mathord}{six pointed black star}%
+\UnicodeMathSymbol{"0273D}{\dingasterisk }{\mathord}{heavy teardrop-spoked asterisk}%
+\UnicodeMathSymbol{"02772}{\lbrbrak }{\mathopen}{light left tortoise shell bracket ornament}%
+\UnicodeMathSymbol{"02773}{\rbrbrak }{\mathclose}{light right tortoise shell bracket ornament}%
+\UnicodeMathSymbol{"0279B}{\draftingarrow }{\mathord}{right arrow with bold head (drafting)}%
+\UnicodeMathSymbol{"027C0}{\threedangle }{\mathord}{three dimensional angle}%
+\UnicodeMathSymbol{"027C1}{\whiteinwhitetriangle }{\mathord}{white triangle containing small white triangle}%
+\UnicodeMathSymbol{"027C2}{\perp }{\mathrel}{perpendicular}%
+\UnicodeMathSymbol{"027C3}{\subsetcirc }{\mathord}{open subset}%
+\UnicodeMathSymbol{"027C4}{\supsetcirc }{\mathord}{open superset}%
+\UnicodeMathSymbol{"027C5}{\lbag }{\mathopen}{left s-shaped bag delimiter}%
+\UnicodeMathSymbol{"027C6}{\rbag }{\mathclose}{right s-shaped bag delimiter}%
+\UnicodeMathSymbol{"027C7}{\veedot }{\mathbin}{or with dot inside}%
+\UnicodeMathSymbol{"027C8}{\bsolhsub }{\mathrel}{reverse solidus preceding subset}%
+\UnicodeMathSymbol{"027C9}{\suphsol }{\mathrel}{superset preceding solidus}%
+\UnicodeMathSymbol{"027CC}{\longdivision }{\mathopen}{long division}%
+\UnicodeMathSymbol{"027D0}{\diamondcdot }{\mathord}{white diamond with centred dot}%
+\UnicodeMathSymbol{"027D1}{\wedgedot }{\mathbin}{and with dot}%
+\UnicodeMathSymbol{"027D2}{\upin }{\mathrel}{element of opening upwards}%
+\UnicodeMathSymbol{"027D3}{\pullback }{\mathrel}{lower right corner with dot}%
+\UnicodeMathSymbol{"027D4}{\pushout }{\mathrel}{upper left corner with dot}%
+\UnicodeMathSymbol{"027D5}{\leftouterjoin }{\mathop}{left outer join}%
+\UnicodeMathSymbol{"027D6}{\rightouterjoin }{\mathop}{right outer join}%
+\UnicodeMathSymbol{"027D7}{\fullouterjoin }{\mathop}{full outer join}%
+\UnicodeMathSymbol{"027D8}{\bigbot }{\mathop}{large up tack}%
+\UnicodeMathSymbol{"027D9}{\bigtop }{\mathop}{large down tack}%
+\UnicodeMathSymbol{"027DA}{\DashVDash }{\mathrel}{left and right double turnstile}%
+\UnicodeMathSymbol{"027DB}{\dashVdash }{\mathrel}{left and right tack}%
+\UnicodeMathSymbol{"027DC}{\multimapinv }{\mathrel}{left multimap}%
+\UnicodeMathSymbol{"027DD}{\vlongdash }{\mathrel}{long left tack}%
+\UnicodeMathSymbol{"027DE}{\longdashv }{\mathrel}{long right tack}%
+\UnicodeMathSymbol{"027DF}{\cirbot }{\mathrel}{up tack with circle above}%
+\UnicodeMathSymbol{"027E0}{\lozengeminus }{\mathbin}{lozenge divided by horizontal rule}%
+\UnicodeMathSymbol{"027E1}{\concavediamond }{\mathbin}{white concave-sided diamond}%
+\UnicodeMathSymbol{"027E2}{\concavediamondtickleft }{\mathbin}{white concave-sided diamond with leftwards tick}%
+\UnicodeMathSymbol{"027E3}{\concavediamondtickright }{\mathbin}{white concave-sided diamond with rightwards tick}%
+\UnicodeMathSymbol{"027E4}{\whitesquaretickleft }{\mathbin}{white square with leftwards tick}%
+\UnicodeMathSymbol{"027E5}{\whitesquaretickright }{\mathbin}{white square with rightwards tick}%
+\UnicodeMathSymbol{"027E6}{\lBrack }{\mathopen}{mathematical left white square bracket}%
+\UnicodeMathSymbol{"027E7}{\rBrack }{\mathclose}{mathematical right white square bracket}%
+\UnicodeMathSymbol{"027E8}{\langle }{\mathopen}{mathematical left angle bracket}%
+\UnicodeMathSymbol{"027E9}{\rangle }{\mathclose}{mathematical right angle bracket}%
+\UnicodeMathSymbol{"027EA}{\lAngle }{\mathopen}{mathematical left double angle bracket}%
+\UnicodeMathSymbol{"027EB}{\rAngle }{\mathclose}{mathematical right double angle bracket}%
+\UnicodeMathSymbol{"027EC}{\Lbrbrak }{\mathopen}{mathematical left white tortoise shell bracket}%
+\UnicodeMathSymbol{"027ED}{\Rbrbrak }{\mathclose}{mathematical right white tortoise shell bracket}%
+\UnicodeMathSymbol{"027EE}{\lgroup }{\mathopen}{mathematical left flattened parenthesis}%
+\UnicodeMathSymbol{"027EF}{\rgroup }{\mathclose}{mathematical right flattened parenthesis}%
+\UnicodeMathSymbol{"027F0}{\UUparrow }{\mathrel}{upwards quadruple arrow}%
+\UnicodeMathSymbol{"027F1}{\DDownarrow }{\mathrel}{downwards quadruple arrow}%
+\UnicodeMathSymbol{"027F2}{\acwgapcirclearrow }{\mathrel}{anticlockwise gapped circle arrow}%
+\UnicodeMathSymbol{"027F3}{\cwgapcirclearrow }{\mathrel}{clockwise gapped circle arrow}%
+\UnicodeMathSymbol{"027F4}{\rightarrowonoplus }{\mathrel}{right arrow with circled plus}%
+\UnicodeMathSymbol{"027F5}{\longleftarrow }{\mathrel}{long leftwards arrow}%
+\UnicodeMathSymbol{"027F6}{\longrightarrow }{\mathrel}{long rightwards arrow}%
+\UnicodeMathSymbol{"027F7}{\longleftrightarrow }{\mathrel}{long left right arrow}%
+\UnicodeMathSymbol{"027F8}{\Longleftarrow }{\mathrel}{long leftwards double arrow}%
+\UnicodeMathSymbol{"027F9}{\Longrightarrow }{\mathrel}{long rightwards double arrow}%
+\UnicodeMathSymbol{"027FA}{\Longleftrightarrow }{\mathrel}{long left right double arrow}%
+\UnicodeMathSymbol{"027FB}{\longmapsfrom }{\mathrel}{long leftwards arrow from bar}%
+\UnicodeMathSymbol{"027FC}{\longmapsto }{\mathrel}{long rightwards arrow from bar}%
+\UnicodeMathSymbol{"027FD}{\Longmapsfrom }{\mathrel}{long leftwards double arrow from bar}%
+\UnicodeMathSymbol{"027FE}{\Longmapsto }{\mathrel}{long rightwards double arrow from bar}%
+\UnicodeMathSymbol{"027FF}{\longrightsquigarrow }{\mathrel}{long rightwards squiggle arrow}%
+\UnicodeMathSymbol{"02900}{\nvtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with vertical stroke}%
+\UnicodeMathSymbol{"02901}{\nVtwoheadrightarrow }{\mathrel}{rightwards two-headed arrow with double vertical stroke}%
+\UnicodeMathSymbol{"02902}{\nvLeftarrow }{\mathrel}{leftwards double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02903}{\nvRightarrow }{\mathrel}{rightwards double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02904}{\nvLeftrightarrow }{\mathrel}{left right double arrow with vertical stroke}%
+\UnicodeMathSymbol{"02905}{\twoheadmapsto }{\mathrel}{rightwards two-headed arrow from bar}%
+\UnicodeMathSymbol{"02906}{\Mapsfrom }{\mathrel}{leftwards double arrow from bar}%
+\UnicodeMathSymbol{"02907}{\Mapsto }{\mathrel}{rightwards double arrow from bar}%
+\UnicodeMathSymbol{"02908}{\downarrowbarred }{\mathrel}{downwards arrow with horizontal stroke}%
+\UnicodeMathSymbol{"02909}{\uparrowbarred }{\mathrel}{upwards arrow with horizontal stroke}%
+\UnicodeMathSymbol{"0290A}{\Uuparrow }{\mathrel}{upwards triple arrow}%
+\UnicodeMathSymbol{"0290B}{\Ddownarrow }{\mathrel}{downwards triple arrow}%
+\UnicodeMathSymbol{"0290C}{\leftbkarrow }{\mathrel}{leftwards double dash arrow}%
+\UnicodeMathSymbol{"0290D}{\rightbkarrow }{\mathrel}{rightwards double dash arrow}%
+\UnicodeMathSymbol{"0290E}{\leftdbkarrow }{\mathrel}{leftwards triple dash arrow}%
+\UnicodeMathSymbol{"0290F}{\dbkarrow }{\mathrel}{rightwards triple dash arrow}%
+\UnicodeMathSymbol{"02910}{\drbkarrow }{\mathrel}{rightwards two-headed triple dash arrow}%
+\UnicodeMathSymbol{"02911}{\rightdotarrow }{\mathrel}{rightwards arrow with dotted stem}%
+\UnicodeMathSymbol{"02912}{\baruparrow }{\mathrel}{upwards arrow to bar}%
+\UnicodeMathSymbol{"02913}{\downarrowbar }{\mathrel}{downwards arrow to bar}%
+\UnicodeMathSymbol{"02914}{\nvrightarrowtail }{\mathrel}{rightwards arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02915}{\nVrightarrowtail }{\mathrel}{rightwards arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02916}{\twoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail}%
+\UnicodeMathSymbol{"02917}{\nvtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02918}{\nVtwoheadrightarrowtail }{\mathrel}{rightwards two-headed arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02919}{\lefttail }{\mathrel}{leftwards arrow-tail}%
+\UnicodeMathSymbol{"0291A}{\righttail }{\mathrel}{rightwards arrow-tail}%
+\UnicodeMathSymbol{"0291B}{\leftdbltail }{\mathrel}{leftwards double arrow-tail}%
+\UnicodeMathSymbol{"0291C}{\rightdbltail }{\mathrel}{rightwards double arrow-tail}%
+\UnicodeMathSymbol{"0291D}{\diamondleftarrow }{\mathrel}{leftwards arrow to black diamond}%
+\UnicodeMathSymbol{"0291E}{\rightarrowdiamond }{\mathrel}{rightwards arrow to black diamond}%
+\UnicodeMathSymbol{"0291F}{\diamondleftarrowbar }{\mathrel}{leftwards arrow from bar to black diamond}%
+\UnicodeMathSymbol{"02920}{\barrightarrowdiamond }{\mathrel}{rightwards arrow from bar to black diamond}%
+\UnicodeMathSymbol{"02921}{\nwsearrow }{\mathrel}{north west and south east arrow}%
+\UnicodeMathSymbol{"02922}{\neswarrow }{\mathrel}{north east and south west arrow}%
+\UnicodeMathSymbol{"02923}{\hknwarrow }{\mathrel}{north west arrow with hook}%
+\UnicodeMathSymbol{"02924}{\hknearrow }{\mathrel}{north east arrow with hook}%
+\UnicodeMathSymbol{"02925}{\hksearrow }{\mathrel}{south east arrow with hook}%
+\UnicodeMathSymbol{"02926}{\hkswarrow }{\mathrel}{south west arrow with hook}%
+\UnicodeMathSymbol{"02927}{\tona }{\mathrel}{north west arrow and north east arrow}%
+\UnicodeMathSymbol{"02928}{\toea }{\mathrel}{north east arrow and south east arrow}%
+\UnicodeMathSymbol{"02929}{\tosa }{\mathrel}{south east arrow and south west arrow}%
+\UnicodeMathSymbol{"0292A}{\towa }{\mathrel}{south west arrow and north west arrow}%
+\UnicodeMathSymbol{"0292B}{\rdiagovfdiag }{\mathord}{rising diagonal crossing falling diagonal}%
+\UnicodeMathSymbol{"0292C}{\fdiagovrdiag }{\mathord}{falling diagonal crossing rising diagonal}%
+\UnicodeMathSymbol{"0292D}{\seovnearrow }{\mathord}{south east arrow crossing north east arrow}%
+\UnicodeMathSymbol{"0292E}{\neovsearrow }{\mathord}{north east arrow crossing south east arrow}%
+\UnicodeMathSymbol{"0292F}{\fdiagovnearrow }{\mathord}{falling diagonal crossing north east arrow}%
+\UnicodeMathSymbol{"02930}{\rdiagovsearrow }{\mathord}{rising diagonal crossing south east arrow}%
+\UnicodeMathSymbol{"02931}{\neovnwarrow }{\mathord}{north east arrow crossing north west arrow}%
+\UnicodeMathSymbol{"02932}{\nwovnearrow }{\mathord}{north west arrow crossing north east arrow}%
+\UnicodeMathSymbol{"02933}{\rightcurvedarrow }{\mathrel}{wave arrow pointing directly right}%
+\UnicodeMathSymbol{"02934}{\uprightcurvearrow }{\mathord}{arrow pointing rightwards then curving upwards}%
+\UnicodeMathSymbol{"02935}{\downrightcurvedarrow }{\mathord}{arrow pointing rightwards then curving downwards}%
+\UnicodeMathSymbol{"02936}{\leftdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving leftwards}%
+\UnicodeMathSymbol{"02937}{\rightdowncurvedarrow }{\mathrel}{arrow pointing downwards then curving rightwards}%
+\UnicodeMathSymbol{"02938}{\cwrightarcarrow }{\mathrel}{right-side arc clockwise arrow}%
+\UnicodeMathSymbol{"02939}{\acwleftarcarrow }{\mathrel}{left-side arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293A}{\acwoverarcarrow }{\mathrel}{top arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293B}{\acwunderarcarrow }{\mathrel}{bottom arc anticlockwise arrow}%
+\UnicodeMathSymbol{"0293C}{\curvearrowrightminus }{\mathrel}{top arc clockwise arrow with minus}%
+\UnicodeMathSymbol{"0293D}{\curvearrowleftplus }{\mathrel}{top arc anticlockwise arrow with plus}%
+\UnicodeMathSymbol{"0293E}{\cwundercurvearrow }{\mathrel}{lower right semicircular clockwise arrow}%
+\UnicodeMathSymbol{"0293F}{\ccwundercurvearrow }{\mathrel}{lower left semicircular anticlockwise arrow}%
+\UnicodeMathSymbol{"02940}{\acwcirclearrow }{\mathrel}{anticlockwise closed circle arrow}%
+\UnicodeMathSymbol{"02941}{\cwcirclearrow }{\mathrel}{clockwise closed circle arrow}%
+\UnicodeMathSymbol{"02942}{\rightarrowshortleftarrow }{\mathrel}{rightwards arrow above short leftwards arrow}%
+\UnicodeMathSymbol{"02943}{\leftarrowshortrightarrow }{\mathrel}{leftwards arrow above short rightwards arrow}%
+\UnicodeMathSymbol{"02944}{\shortrightarrowleftarrow }{\mathrel}{short rightwards arrow above leftwards arrow}%
+\UnicodeMathSymbol{"02945}{\rightarrowplus }{\mathrel}{rightwards arrow with plus below}%
+\UnicodeMathSymbol{"02946}{\leftarrowplus }{\mathrel}{leftwards arrow with plus below}%
+\UnicodeMathSymbol{"02947}{\rightarrowx }{\mathrel}{rightwards arrow through x}%
+\UnicodeMathSymbol{"02948}{\leftrightarrowcircle }{\mathrel}{left right arrow through small circle}%
+\UnicodeMathSymbol{"02949}{\twoheaduparrowcircle }{\mathrel}{upwards two-headed arrow from small circle}%
+\UnicodeMathSymbol{"0294A}{\leftrightharpoonupdown }{\mathrel}{left barb up right barb down harpoon}%
+\UnicodeMathSymbol{"0294B}{\leftrightharpoondownup }{\mathrel}{left barb down right barb up harpoon}%
+\UnicodeMathSymbol{"0294C}{\updownharpoonrightleft }{\mathrel}{up barb right down barb left harpoon}%
+\UnicodeMathSymbol{"0294D}{\updownharpoonleftright }{\mathrel}{up barb left down barb right harpoon}%
+\UnicodeMathSymbol{"0294E}{\leftrightharpoonupup }{\mathrel}{left barb up right barb up harpoon}%
+\UnicodeMathSymbol{"0294F}{\updownharpoonrightright }{\mathrel}{up barb right down barb right harpoon}%
+\UnicodeMathSymbol{"02950}{\leftrightharpoondowndown }{\mathrel}{left barb down right barb down harpoon}%
+\UnicodeMathSymbol{"02951}{\updownharpoonleftleft }{\mathrel}{up barb left down barb left harpoon}%
+\UnicodeMathSymbol{"02952}{\barleftharpoonup }{\mathrel}{leftwards harpoon with barb up to bar}%
+\UnicodeMathSymbol{"02953}{\rightharpoonupbar }{\mathrel}{rightwards harpoon with barb up to bar}%
+\UnicodeMathSymbol{"02954}{\barupharpoonright }{\mathrel}{upwards harpoon with barb right to bar}%
+\UnicodeMathSymbol{"02955}{\downharpoonrightbar }{\mathrel}{downwards harpoon with barb right to bar}%
+\UnicodeMathSymbol{"02956}{\barleftharpoondown }{\mathrel}{leftwards harpoon with barb down to bar}%
+\UnicodeMathSymbol{"02957}{\rightharpoondownbar }{\mathrel}{rightwards harpoon with barb down to bar}%
+\UnicodeMathSymbol{"02958}{\barupharpoonleft }{\mathrel}{upwards harpoon with barb left to bar}%
+\UnicodeMathSymbol{"02959}{\downharpoonleftbar }{\mathrel}{downwards harpoon with barb left to bar}%
+\UnicodeMathSymbol{"0295A}{\leftharpoonupbar }{\mathrel}{leftwards harpoon with barb up from bar}%
+\UnicodeMathSymbol{"0295B}{\barrightharpoonup }{\mathrel}{rightwards harpoon with barb up from bar}%
+\UnicodeMathSymbol{"0295C}{\upharpoonrightbar }{\mathrel}{upwards harpoon with barb right from bar}%
+\UnicodeMathSymbol{"0295D}{\bardownharpoonright }{\mathrel}{downwards harpoon with barb right from bar}%
+\UnicodeMathSymbol{"0295E}{\leftharpoondownbar }{\mathrel}{leftwards harpoon with barb down from bar}%
+\UnicodeMathSymbol{"0295F}{\barrightharpoondown }{\mathrel}{rightwards harpoon with barb down from bar}%
+\UnicodeMathSymbol{"02960}{\upharpoonleftbar }{\mathrel}{upwards harpoon with barb left from bar}%
+\UnicodeMathSymbol{"02961}{\bardownharpoonleft }{\mathrel}{downwards harpoon with barb left from bar}%
+\UnicodeMathSymbol{"02962}{\leftharpoonsupdown }{\mathrel}{leftwards harpoon with barb up above leftwards harpoon with barb down}%
+\UnicodeMathSymbol{"02963}{\upharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside upwards harpoon with barb right}%
+\UnicodeMathSymbol{"02964}{\rightharpoonsupdown }{\mathrel}{rightwards harpoon with barb up above rightwards harpoon with barb down}%
+\UnicodeMathSymbol{"02965}{\downharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside downwards harpoon with barb right}%
+\UnicodeMathSymbol{"02966}{\leftrightharpoonsup }{\mathrel}{leftwards harpoon with barb up above rightwards harpoon with barb up}%
+\UnicodeMathSymbol{"02967}{\leftrightharpoonsdown }{\mathrel}{leftwards harpoon with barb down above rightwards harpoon with barb down}%
+\UnicodeMathSymbol{"02968}{\rightleftharpoonsup }{\mathrel}{rightwards harpoon with barb up above leftwards harpoon with barb up}%
+\UnicodeMathSymbol{"02969}{\rightleftharpoonsdown }{\mathrel}{rightwards harpoon with barb down above leftwards harpoon with barb down}%
+\UnicodeMathSymbol{"0296A}{\leftharpoonupdash }{\mathrel}{leftwards harpoon with barb up above long dash}%
+\UnicodeMathSymbol{"0296B}{\dashleftharpoondown }{\mathrel}{leftwards harpoon with barb down below long dash}%
+\UnicodeMathSymbol{"0296C}{\rightharpoonupdash }{\mathrel}{rightwards harpoon with barb up above long dash}%
+\UnicodeMathSymbol{"0296D}{\dashrightharpoondown }{\mathrel}{rightwards harpoon with barb down below long dash}%
+\UnicodeMathSymbol{"0296E}{\updownharpoonsleftright }{\mathrel}{upwards harpoon with barb left beside downwards harpoon with barb right}%
+\UnicodeMathSymbol{"0296F}{\downupharpoonsleftright }{\mathrel}{downwards harpoon with barb left beside upwards harpoon with barb right}%
+\UnicodeMathSymbol{"02970}{\rightimply }{\mathrel}{right double arrow with rounded head}%
+\UnicodeMathSymbol{"02971}{\equalrightarrow }{\mathrel}{equals sign above rightwards arrow}%
+\UnicodeMathSymbol{"02972}{\similarrightarrow }{\mathrel}{tilde operator above rightwards arrow}%
+\UnicodeMathSymbol{"02973}{\leftarrowsimilar }{\mathrel}{leftwards arrow above tilde operator}%
+\UnicodeMathSymbol{"02974}{\rightarrowsimilar }{\mathrel}{rightwards arrow above tilde operator}%
+\UnicodeMathSymbol{"02975}{\rightarrowapprox }{\mathrel}{rightwards arrow above almost equal to}%
+\UnicodeMathSymbol{"02976}{\ltlarr }{\mathrel}{less-than above leftwards arrow}%
+\UnicodeMathSymbol{"02977}{\leftarrowless }{\mathrel}{leftwards arrow through less-than}%
+\UnicodeMathSymbol{"02978}{\gtrarr }{\mathrel}{greater-than above rightwards arrow}%
+\UnicodeMathSymbol{"02979}{\subrarr }{\mathrel}{subset above rightwards arrow}%
+\UnicodeMathSymbol{"0297A}{\leftarrowsubset }{\mathrel}{leftwards arrow through subset}%
+\UnicodeMathSymbol{"0297B}{\suplarr }{\mathrel}{superset above leftwards arrow}%
+\UnicodeMathSymbol{"0297C}{\leftfishtail }{\mathrel}{left fish tail}%
+\UnicodeMathSymbol{"0297D}{\rightfishtail }{\mathrel}{right fish tail}%
+\UnicodeMathSymbol{"0297E}{\upfishtail }{\mathrel}{up fish tail}%
+\UnicodeMathSymbol{"0297F}{\downfishtail }{\mathrel}{down fish tail}%
+\UnicodeMathSymbol{"02980}{\Vvert }{\mathfence}{triple vertical bar delimiter}%
+\UnicodeMathSymbol{"02981}{\mdsmblkcircle }{\mathord}{z notation spot}%
+\UnicodeMathSymbol{"02982}{\typecolon }{\mathrel}{z notation type colon}%
+\UnicodeMathSymbol{"02983}{\lBrace }{\mathopen}{left white curly bracket}%
+\UnicodeMathSymbol{"02984}{\rBrace }{\mathclose}{right white curly bracket}%
+\UnicodeMathSymbol{"02985}{\lParen }{\mathopen}{left white parenthesis}%
+\UnicodeMathSymbol{"02986}{\rParen }{\mathclose}{right white parenthesis}%
+\UnicodeMathSymbol{"02987}{\llparenthesis }{\mathopen}{z notation left image bracket}%
+\UnicodeMathSymbol{"02988}{\rrparenthesis }{\mathclose}{z notation right image bracket}%
+\UnicodeMathSymbol{"02989}{\llangle }{\mathopen}{z notation left binding bracket}%
+\UnicodeMathSymbol{"0298A}{\rrangle }{\mathclose}{z notation right binding bracket}%
+\UnicodeMathSymbol{"0298B}{\lbrackubar }{\mathopen}{left square bracket with underbar}%
+\UnicodeMathSymbol{"0298C}{\rbrackubar }{\mathclose}{right square bracket with underbar}%
+\UnicodeMathSymbol{"0298D}{\lbrackultick }{\mathopen}{left square bracket with tick in top corner}%
+\UnicodeMathSymbol{"0298E}{\rbracklrtick }{\mathclose}{right square bracket with tick in bottom corner}%
+\UnicodeMathSymbol{"0298F}{\lbracklltick }{\mathopen}{left square bracket with tick in bottom corner}%
+\UnicodeMathSymbol{"02990}{\rbrackurtick }{\mathclose}{right square bracket with tick in top corner}%
+\UnicodeMathSymbol{"02991}{\langledot }{\mathopen}{left angle bracket with dot}%
+\UnicodeMathSymbol{"02992}{\rangledot }{\mathclose}{right angle bracket with dot}%
+\UnicodeMathSymbol{"02993}{\lparenless }{\mathopen}{left arc less-than bracket}%
+\UnicodeMathSymbol{"02994}{\rparengtr }{\mathclose}{right arc greater-than bracket}%
+\UnicodeMathSymbol{"02995}{\Lparengtr }{\mathopen}{double left arc greater-than bracket}%
+\UnicodeMathSymbol{"02996}{\Rparenless }{\mathclose}{double right arc less-than bracket}%
+\UnicodeMathSymbol{"02997}{\lblkbrbrak }{\mathopen}{left black tortoise shell bracket}%
+\UnicodeMathSymbol{"02998}{\rblkbrbrak }{\mathclose}{right black tortoise shell bracket}%
+\UnicodeMathSymbol{"02999}{\fourvdots }{\mathord}{dotted fence}%
+\UnicodeMathSymbol{"0299A}{\vzigzag }{\mathord}{vertical zigzag line}%
+\UnicodeMathSymbol{"0299B}{\measuredangleleft }{\mathord}{measured angle opening left}%
+\UnicodeMathSymbol{"0299C}{\rightanglesqr }{\mathord}{right angle variant with square}%
+\UnicodeMathSymbol{"0299D}{\rightanglemdot }{\mathord}{measured right angle with dot}%
+\UnicodeMathSymbol{"0299E}{\angles }{\mathord}{angle with s inside}%
+\UnicodeMathSymbol{"0299F}{\angdnr }{\mathord}{acute angle}%
+\UnicodeMathSymbol{"029A0}{\gtlpar }{\mathord}{spherical angle opening left}%
+\UnicodeMathSymbol{"029A1}{\sphericalangleup }{\mathord}{spherical angle opening up}%
+\UnicodeMathSymbol{"029A2}{\turnangle }{\mathord}{turned angle}%
+\UnicodeMathSymbol{"029A3}{\revangle }{\mathord}{reversed angle}%
+\UnicodeMathSymbol{"029A4}{\angleubar }{\mathord}{angle with underbar}%
+\UnicodeMathSymbol{"029A5}{\revangleubar }{\mathord}{reversed angle with underbar}%
+\UnicodeMathSymbol{"029A6}{\wideangledown }{\mathord}{oblique angle opening up}%
+\UnicodeMathSymbol{"029A7}{\wideangleup }{\mathord}{oblique angle opening down}%
+\UnicodeMathSymbol{"029A8}{\measanglerutone }{\mathord}{measured angle with open arm ending in arrow pointing up and right}%
+\UnicodeMathSymbol{"029A9}{\measanglelutonw }{\mathord}{measured angle with open arm ending in arrow pointing up and left}%
+\UnicodeMathSymbol{"029AA}{\measanglerdtose }{\mathord}{measured angle with open arm ending in arrow pointing down and right}%
+\UnicodeMathSymbol{"029AB}{\measangleldtosw }{\mathord}{measured angle with open arm ending in arrow pointing down and left}%
+\UnicodeMathSymbol{"029AC}{\measangleurtone }{\mathord}{measured angle with open arm ending in arrow pointing right and up}%
+\UnicodeMathSymbol{"029AD}{\measangleultonw }{\mathord}{measured angle with open arm ending in arrow pointing left and up}%
+\UnicodeMathSymbol{"029AE}{\measangledrtose }{\mathord}{measured angle with open arm ending in arrow pointing right and down}%
+\UnicodeMathSymbol{"029AF}{\measangledltosw }{\mathord}{measured angle with open arm ending in arrow pointing left and down}%
+\UnicodeMathSymbol{"029B0}{\revemptyset }{\mathord}{reversed empty set}%
+\UnicodeMathSymbol{"029B1}{\emptysetobar }{\mathord}{empty set with overbar}%
+\UnicodeMathSymbol{"029B2}{\emptysetocirc }{\mathord}{empty set with small circle above}%
+\UnicodeMathSymbol{"029B3}{\emptysetoarr }{\mathord}{empty set with right arrow above}%
+\UnicodeMathSymbol{"029B4}{\emptysetoarrl }{\mathord}{empty set with left arrow above}%
+\UnicodeMathSymbol{"029B5}{\circlehbar }{\mathbin}{circle with horizontal bar}%
+\UnicodeMathSymbol{"029B6}{\circledvert }{\mathbin}{circled vertical bar}%
+\UnicodeMathSymbol{"029B7}{\circledparallel }{\mathbin}{circled parallel}%
+\UnicodeMathSymbol{"029B8}{\obslash }{\mathbin}{circled reverse solidus}%
+\UnicodeMathSymbol{"029B9}{\operp }{\mathbin}{circled perpendicular}%
+\UnicodeMathSymbol{"029BA}{\obot }{\mathord}{circle divided by horizontal bar and top half divided by vertical bar}%
+\UnicodeMathSymbol{"029BB}{\olcross }{\mathord}{circle with superimposed x}%
+\UnicodeMathSymbol{"029BC}{\odotslashdot }{\mathord}{circled anticlockwise-rotated division sign}%
+\UnicodeMathSymbol{"029BD}{\uparrowoncircle }{\mathord}{up arrow through circle}%
+\UnicodeMathSymbol{"029BE}{\circledwhitebullet }{\mathord}{circled white bullet}%
+\UnicodeMathSymbol{"029BF}{\circledbullet }{\mathord}{circled bullet}%
+\UnicodeMathSymbol{"029C0}{\olessthan }{\mathbin}{circled less-than}%
+\UnicodeMathSymbol{"029C1}{\ogreaterthan }{\mathbin}{circled greater-than}%
+\UnicodeMathSymbol{"029C2}{\cirscir }{\mathord}{circle with small circle to the right}%
+\UnicodeMathSymbol{"029C3}{\cirE }{\mathord}{circle with two horizontal strokes to the right}%
+\UnicodeMathSymbol{"029C4}{\boxdiag }{\mathbin}{squared rising diagonal slash}%
+\UnicodeMathSymbol{"029C5}{\boxbslash }{\mathbin}{squared falling diagonal slash}%
+\UnicodeMathSymbol{"029C6}{\boxast }{\mathbin}{squared asterisk}%
+\UnicodeMathSymbol{"029C7}{\boxcircle }{\mathbin}{squared small circle}%
+\UnicodeMathSymbol{"029C8}{\boxbox }{\mathbin}{squared square}%
+\UnicodeMathSymbol{"029C9}{\boxonbox }{\mathord}{two joined squares}%
+\UnicodeMathSymbol{"029CA}{\triangleodot }{\mathord}{triangle with dot above}%
+\UnicodeMathSymbol{"029CB}{\triangleubar }{\mathord}{triangle with underbar}%
+\UnicodeMathSymbol{"029CC}{\triangles }{\mathord}{s in triangle}%
+\UnicodeMathSymbol{"029CD}{\triangleserifs }{\mathbin}{triangle with serifs at bottom}%
+\UnicodeMathSymbol{"029CE}{\rtriltri }{\mathrel}{right triangle above left triangle}%
+\UnicodeMathSymbol{"029CF}{\ltrivb }{\mathrel}{left triangle beside vertical bar}%
+\UnicodeMathSymbol{"029D0}{\vbrtri }{\mathrel}{vertical bar beside right triangle}%
+\UnicodeMathSymbol{"029D1}{\lfbowtie }{\mathrel}{left black bowtie}%
+\UnicodeMathSymbol{"029D2}{\rfbowtie }{\mathrel}{right black bowtie}%
+\UnicodeMathSymbol{"029D3}{\fbowtie }{\mathrel}{black bowtie}%
+\UnicodeMathSymbol{"029D4}{\lftimes }{\mathrel}{left black times}%
+\UnicodeMathSymbol{"029D5}{\rftimes }{\mathrel}{right black times}%
+\UnicodeMathSymbol{"029D6}{\hourglass }{\mathbin}{white hourglass}%
+\UnicodeMathSymbol{"029D7}{\blackhourglass }{\mathbin}{black hourglass}%
+\UnicodeMathSymbol{"029D8}{\lvzigzag }{\mathopen}{left wiggly fence}%
+\UnicodeMathSymbol{"029D9}{\rvzigzag }{\mathclose}{right wiggly fence}%
+\UnicodeMathSymbol{"029DA}{\Lvzigzag }{\mathopen}{left double wiggly fence}%
+\UnicodeMathSymbol{"029DB}{\Rvzigzag }{\mathclose}{right double wiggly fence}%
+\UnicodeMathSymbol{"029DC}{\iinfin }{\mathord}{incomplete infinity}%
+\UnicodeMathSymbol{"029DD}{\tieinfty }{\mathord}{tie over infinity}%
+\UnicodeMathSymbol{"029DE}{\nvinfty }{\mathord}{infinity negated with vertical bar}%
+\UnicodeMathSymbol{"029DF}{\dualmap }{\mathrel}{double-ended multimap}%
+\UnicodeMathSymbol{"029E0}{\laplac }{\mathord}{square with contoured outline}%
+\UnicodeMathSymbol{"029E1}{\lrtriangleeq }{\mathrel}{increases as}%
+\UnicodeMathSymbol{"029E2}{\shuffle }{\mathbin}{shuffle product}%
+\UnicodeMathSymbol{"029E3}{\eparsl }{\mathrel}{equals sign and slanted parallel}%
+\UnicodeMathSymbol{"029E4}{\smeparsl }{\mathrel}{equals sign and slanted parallel with tilde above}%
+\UnicodeMathSymbol{"029E5}{\eqvparsl }{\mathrel}{identical to and slanted parallel}%
+\UnicodeMathSymbol{"029E6}{\gleichstark }{\mathrel}{gleich stark}%
+\UnicodeMathSymbol{"029E7}{\thermod }{\mathord}{thermodynamic}%
+\UnicodeMathSymbol{"029E8}{\downtriangleleftblack }{\mathord}{down-pointing triangle with left half black}%
+\UnicodeMathSymbol{"029E9}{\downtrianglerightblack }{\mathord}{down-pointing triangle with right half black}%
+\UnicodeMathSymbol{"029EA}{\blackdiamonddownarrow }{\mathord}{black diamond with down arrow}%
+\UnicodeMathSymbol{"029EB}{\mdlgblklozenge }{\mathbin}{black lozenge}%
+\UnicodeMathSymbol{"029EC}{\circledownarrow }{\mathord}{white circle with down arrow}%
+\UnicodeMathSymbol{"029ED}{\blackcircledownarrow }{\mathord}{black circle with down arrow}%
+\UnicodeMathSymbol{"029EE}{\errbarsquare }{\mathord}{error-barred white square}%
+\UnicodeMathSymbol{"029EF}{\errbarblacksquare }{\mathord}{error-barred black square}%
+\UnicodeMathSymbol{"029F0}{\errbardiamond }{\mathord}{error-barred white diamond}%
+\UnicodeMathSymbol{"029F1}{\errbarblackdiamond }{\mathord}{error-barred black diamond}%
+\UnicodeMathSymbol{"029F2}{\errbarcircle }{\mathord}{error-barred white circle}%
+\UnicodeMathSymbol{"029F3}{\errbarblackcircle }{\mathord}{error-barred black circle}%
+\UnicodeMathSymbol{"029F4}{\ruledelayed }{\mathrel}{rule-delayed}%
+\UnicodeMathSymbol{"029F5}{\setminus }{\mathbin}{reverse solidus operator}%
+\UnicodeMathSymbol{"029F6}{\dsol }{\mathbin}{solidus with overbar}%
+\UnicodeMathSymbol{"029F7}{\rsolbar }{\mathbin}{reverse solidus with horizontal stroke}%
+\UnicodeMathSymbol{"029F8}{\xsol }{\mathop}{big solidus}%
+\UnicodeMathSymbol{"029F9}{\xbsol }{\mathop}{big reverse solidus}%
+\UnicodeMathSymbol{"029FA}{\doubleplus }{\mathbin}{double plus}%
+\UnicodeMathSymbol{"029FB}{\tripleplus }{\mathbin}{triple plus}%
+\UnicodeMathSymbol{"029FC}{\lcurvyangle }{\mathopen}{left pointing curved angle bracket}%
+\UnicodeMathSymbol{"029FD}{\rcurvyangle }{\mathclose}{right pointing curved angle bracket}%
+\UnicodeMathSymbol{"029FE}{\tplus }{\mathbin}{tiny}%
+\UnicodeMathSymbol{"029FF}{\tminus }{\mathbin}{miny}%
+\UnicodeMathSymbol{"02A00}{\bigodot }{\mathop}{n-ary circled dot operator}%
+\UnicodeMathSymbol{"02A01}{\bigoplus }{\mathop}{n-ary circled plus operator}%
+\UnicodeMathSymbol{"02A02}{\bigotimes }{\mathop}{n-ary circled times operator}%
+\UnicodeMathSymbol{"02A03}{\bigcupdot }{\mathop}{n-ary union operator with dot}%
+\UnicodeMathSymbol{"02A04}{\biguplus }{\mathop}{n-ary union operator with plus}%
+\UnicodeMathSymbol{"02A05}{\bigsqcap }{\mathop}{n-ary square intersection operator}%
+\UnicodeMathSymbol{"02A06}{\bigsqcup }{\mathop}{n-ary square union operator}%
+\UnicodeMathSymbol{"02A07}{\conjquant }{\mathop}{two logical and operator}%
+\UnicodeMathSymbol{"02A08}{\disjquant }{\mathop}{two logical or operator}%
+\UnicodeMathSymbol{"02A09}{\bigtimes }{\mathop}{n-ary times operator}%
+\UnicodeMathSymbol{"02A0A}{\modtwosum }{\mathop}{modulo two sum}%
+\UnicodeMathSymbol{"02A0B}{\sumint }{\mathop}{summation with integral}%
+\UnicodeMathSymbol{"02A0C}{\iiiint }{\mathop}{quadruple integral operator}%
+\UnicodeMathSymbol{"02A0D}{\intbar }{\mathop}{finite part integral}%
+\UnicodeMathSymbol{"02A0E}{\intBar }{\mathop}{integral with double stroke}%
+\UnicodeMathSymbol{"02A0F}{\fint }{\mathop}{integral average with slash}%
+\UnicodeMathSymbol{"02A10}{\cirfnint }{\mathop}{circulation function}%
+\UnicodeMathSymbol{"02A11}{\awint }{\mathop}{anticlockwise integration}%
+\UnicodeMathSymbol{"02A12}{\rppolint }{\mathop}{line integration with rectangular path around pole}%
+\UnicodeMathSymbol{"02A13}{\scpolint }{\mathop}{line integration with semicircular path around pole}%
+\UnicodeMathSymbol{"02A14}{\npolint }{\mathop}{line integration not including the pole}%
+\UnicodeMathSymbol{"02A15}{\pointint }{\mathop}{integral around a point operator}%
+\UnicodeMathSymbol{"02A16}{\sqint }{\mathop}{quaternion integral operator}%
+\UnicodeMathSymbol{"02A17}{\intlarhk }{\mathop}{integral with leftwards arrow with hook}%
+\UnicodeMathSymbol{"02A18}{\intx }{\mathop}{integral with times sign}%
+\UnicodeMathSymbol{"02A19}{\intcap }{\mathop}{integral with intersection}%
+\UnicodeMathSymbol{"02A1A}{\intcup }{\mathop}{integral with union}%
+\UnicodeMathSymbol{"02A1B}{\upint }{\mathop}{integral with overbar}%
+\UnicodeMathSymbol{"02A1C}{\lowint }{\mathop}{integral with underbar}%
+\UnicodeMathSymbol{"02A1D}{\Join }{\mathop}{join}%
+\UnicodeMathSymbol{"02A1E}{\bigtriangleleft }{\mathop}{large left triangle operator}%
+\UnicodeMathSymbol{"02A1F}{\zcmp }{\mathop}{z notation schema composition}%
+\UnicodeMathSymbol{"02A20}{\zpipe }{\mathop}{z notation schema piping}%
+\UnicodeMathSymbol{"02A21}{\zproject }{\mathop}{z notation schema projection}%
+\UnicodeMathSymbol{"02A22}{\ringplus }{\mathbin}{plus sign with small circle above}%
+\UnicodeMathSymbol{"02A23}{\plushat }{\mathbin}{plus sign with circumflex accent above}%
+\UnicodeMathSymbol{"02A24}{\simplus }{\mathbin}{plus sign with tilde above}%
+\UnicodeMathSymbol{"02A25}{\plusdot }{\mathbin}{plus sign with dot below}%
+\UnicodeMathSymbol{"02A26}{\plussim }{\mathbin}{plus sign with tilde below}%
+\UnicodeMathSymbol{"02A27}{\plussubtwo }{\mathbin}{plus sign with subscript two}%
+\UnicodeMathSymbol{"02A28}{\plustrif }{\mathbin}{plus sign with black triangle}%
+\UnicodeMathSymbol{"02A29}{\commaminus }{\mathbin}{minus sign with comma above}%
+\UnicodeMathSymbol{"02A2A}{\minusdot }{\mathbin}{minus sign with dot below}%
+\UnicodeMathSymbol{"02A2B}{\minusfdots }{\mathbin}{minus sign with falling dots}%
+\UnicodeMathSymbol{"02A2C}{\minusrdots }{\mathbin}{minus sign with rising dots}%
+\UnicodeMathSymbol{"02A2D}{\opluslhrim }{\mathbin}{plus sign in left half circle}%
+\UnicodeMathSymbol{"02A2E}{\oplusrhrim }{\mathbin}{plus sign in right half circle}%
+\UnicodeMathSymbol{"02A2F}{\vectimes }{\mathbin}{vector or cross product}%
+\UnicodeMathSymbol{"02A30}{\dottimes }{\mathbin}{multiplication sign with dot above}%
+\UnicodeMathSymbol{"02A31}{\timesbar }{\mathbin}{multiplication sign with underbar}%
+\UnicodeMathSymbol{"02A32}{\btimes }{\mathbin}{semidirect product with bottom closed}%
+\UnicodeMathSymbol{"02A33}{\smashtimes }{\mathbin}{smash product}%
+\UnicodeMathSymbol{"02A34}{\otimeslhrim }{\mathbin}{multiplication sign in left half circle}%
+\UnicodeMathSymbol{"02A35}{\otimesrhrim }{\mathbin}{multiplication sign in right half circle}%
+\UnicodeMathSymbol{"02A36}{\otimeshat }{\mathbin}{circled multiplication sign with circumflex accent}%
+\UnicodeMathSymbol{"02A37}{\Otimes }{\mathbin}{multiplication sign in double circle}%
+\UnicodeMathSymbol{"02A38}{\odiv }{\mathbin}{circled division sign}%
+\UnicodeMathSymbol{"02A39}{\triangleplus }{\mathbin}{plus sign in triangle}%
+\UnicodeMathSymbol{"02A3A}{\triangleminus }{\mathbin}{minus sign in triangle}%
+\UnicodeMathSymbol{"02A3B}{\triangletimes }{\mathbin}{multiplication sign in triangle}%
+\UnicodeMathSymbol{"02A3C}{\intprod }{\mathbin}{interior product}%
+\UnicodeMathSymbol{"02A3D}{\intprodr }{\mathbin}{righthand interior product}%
+\UnicodeMathSymbol{"02A3E}{\fcmp }{\mathbin}{z notation relational composition}%
+\UnicodeMathSymbol{"02A3F}{\amalg }{\mathbin}{amalgamation or coproduct}%
+\UnicodeMathSymbol{"02A40}{\capdot }{\mathbin}{intersection with dot}%
+\UnicodeMathSymbol{"02A41}{\uminus }{\mathbin}{union with minus sign}%
+\UnicodeMathSymbol{"02A42}{\barcup }{\mathbin}{union with overbar}%
+\UnicodeMathSymbol{"02A43}{\barcap }{\mathbin}{intersection with overbar}%
+\UnicodeMathSymbol{"02A44}{\capwedge }{\mathbin}{intersection with logical and}%
+\UnicodeMathSymbol{"02A45}{\cupvee }{\mathbin}{union with logical or}%
+\UnicodeMathSymbol{"02A46}{\cupovercap }{\mathbin}{union above intersection}%
+\UnicodeMathSymbol{"02A47}{\capovercup }{\mathbin}{intersection above union}%
+\UnicodeMathSymbol{"02A48}{\cupbarcap }{\mathbin}{union above bar above intersection}%
+\UnicodeMathSymbol{"02A49}{\capbarcup }{\mathbin}{intersection above bar above union}%
+\UnicodeMathSymbol{"02A4A}{\twocups }{\mathbin}{union beside and joined with union}%
+\UnicodeMathSymbol{"02A4B}{\twocaps }{\mathbin}{intersection beside and joined with intersection}%
+\UnicodeMathSymbol{"02A4C}{\closedvarcup }{\mathbin}{closed union with serifs}%
+\UnicodeMathSymbol{"02A4D}{\closedvarcap }{\mathbin}{closed intersection with serifs}%
+\UnicodeMathSymbol{"02A4E}{\Sqcap }{\mathbin}{double square intersection}%
+\UnicodeMathSymbol{"02A4F}{\Sqcup }{\mathbin}{double square union}%
+\UnicodeMathSymbol{"02A50}{\closedvarcupsmashprod }{\mathbin}{closed union with serifs and smash product}%
+\UnicodeMathSymbol{"02A51}{\wedgeodot }{\mathbin}{logical and with dot above}%
+\UnicodeMathSymbol{"02A52}{\veeodot }{\mathbin}{logical or with dot above}%
+\UnicodeMathSymbol{"02A53}{\Wedge }{\mathbin}{double logical and}%
+\UnicodeMathSymbol{"02A54}{\Vee }{\mathbin}{double logical or}%
+\UnicodeMathSymbol{"02A55}{\wedgeonwedge }{\mathbin}{two intersecting logical and}%
+\UnicodeMathSymbol{"02A56}{\veeonvee }{\mathbin}{two intersecting logical or}%
+\UnicodeMathSymbol{"02A57}{\bigslopedvee }{\mathbin}{sloping large or}%
+\UnicodeMathSymbol{"02A58}{\bigslopedwedge }{\mathbin}{sloping large and}%
+\UnicodeMathSymbol{"02A59}{\veeonwedge }{\mathrel}{logical or overlapping logical and}%
+\UnicodeMathSymbol{"02A5A}{\wedgemidvert }{\mathbin}{logical and with middle stem}%
+\UnicodeMathSymbol{"02A5B}{\veemidvert }{\mathbin}{logical or with middle stem}%
+\UnicodeMathSymbol{"02A5C}{\midbarwedge }{\mathbin}{ogical and with horizontal dash}%
+\UnicodeMathSymbol{"02A5D}{\midbarvee }{\mathbin}{logical or with horizontal dash}%
+\UnicodeMathSymbol{"02A5E}{\doublebarwedge }{\mathbin}{logical and with double overbar}%
+\UnicodeMathSymbol{"02A5F}{\wedgebar }{\mathbin}{logical and with underbar}%
+\UnicodeMathSymbol{"02A60}{\wedgedoublebar }{\mathbin}{logical and with double underbar}%
+\UnicodeMathSymbol{"02A61}{\varveebar }{\mathbin}{small vee with underbar}%
+\UnicodeMathSymbol{"02A62}{\doublebarvee }{\mathbin}{logical or with double overbar}%
+\UnicodeMathSymbol{"02A63}{\veedoublebar }{\mathbin}{logical or with double underbar}%
+\UnicodeMathSymbol{"02A64}{\dsub }{\mathbin}{z notation domain antirestriction}%
+\UnicodeMathSymbol{"02A65}{\rsub }{\mathbin}{z notation range antirestriction}%
+\UnicodeMathSymbol{"02A66}{\eqdot }{\mathrel}{equals sign with dot below}%
+\UnicodeMathSymbol{"02A67}{\dotequiv }{\mathrel}{identical with dot above}%
+\UnicodeMathSymbol{"02A68}{\equivVert }{\mathrel}{triple horizontal bar with double vertical stroke}%
+\UnicodeMathSymbol{"02A69}{\equivVvert }{\mathrel}{triple horizontal bar with triple vertical stroke}%
+\UnicodeMathSymbol{"02A6A}{\dotsim }{\mathrel}{tilde operator with dot above}%
+\UnicodeMathSymbol{"02A6B}{\simrdots }{\mathrel}{tilde operator with rising dots}%
+\UnicodeMathSymbol{"02A6C}{\simminussim }{\mathrel}{similar minus similar}%
+\UnicodeMathSymbol{"02A6D}{\congdot }{\mathrel}{congruent with dot above}%
+\UnicodeMathSymbol{"02A6E}{\asteq }{\mathrel}{equals with asterisk}%
+\UnicodeMathSymbol{"02A6F}{\hatapprox }{\mathrel}{almost equal to with circumflex accent}%
+\UnicodeMathSymbol{"02A70}{\approxeqq }{\mathrel}{approximately equal or equal to}%
+\UnicodeMathSymbol{"02A71}{\eqqplus }{\mathbin}{equals sign above plus sign}%
+\UnicodeMathSymbol{"02A72}{\pluseqq }{\mathbin}{plus sign above equals sign}%
+\UnicodeMathSymbol{"02A73}{\eqqsim }{\mathrel}{equals sign above tilde operator}%
+\UnicodeMathSymbol{"02A74}{\Coloneq }{\mathrel}{double colon equal}%
+\UnicodeMathSymbol{"02A75}{\eqeq }{\mathrel}{two consecutive equals signs}%
+\UnicodeMathSymbol{"02A76}{\eqeqeq }{\mathrel}{three consecutive equals signs}%
+\UnicodeMathSymbol{"02A77}{\ddotseq }{\mathrel}{equals sign with two dots above and two dots below}%
+\UnicodeMathSymbol{"02A78}{\equivDD }{\mathrel}{equivalent with four dots above}%
+\UnicodeMathSymbol{"02A79}{\ltcir }{\mathrel}{less-than with circle inside}%
+\UnicodeMathSymbol{"02A7A}{\gtcir }{\mathrel}{greater-than with circle inside}%
+\UnicodeMathSymbol{"02A7B}{\ltquest }{\mathrel}{less-than with question mark above}%
+\UnicodeMathSymbol{"02A7C}{\gtquest }{\mathrel}{greater-than with question mark above}%
+\UnicodeMathSymbol{"02A7D}{\leqslant }{\mathrel}{less-than or slanted equal to}%
+\UnicodeMathSymbol{"02A7E}{\geqslant }{\mathrel}{greater-than or slanted equal to}%
+\UnicodeMathSymbol{"02A7F}{\lesdot }{\mathrel}{less-than or slanted equal to with dot inside}%
+\UnicodeMathSymbol{"02A80}{\gesdot }{\mathrel}{greater-than or slanted equal to with dot inside}%
+\UnicodeMathSymbol{"02A81}{\lesdoto }{\mathrel}{less-than or slanted equal to with dot above}%
+\UnicodeMathSymbol{"02A82}{\gesdoto }{\mathrel}{greater-than or slanted equal to with dot above}%
+\UnicodeMathSymbol{"02A83}{\lesdotor }{\mathrel}{less-than or slanted equal to with dot above right}%
+\UnicodeMathSymbol{"02A84}{\gesdotol }{\mathrel}{greater-than or slanted equal to with dot above left}%
+\UnicodeMathSymbol{"02A85}{\lessapprox }{\mathrel}{less-than or approximate}%
+\UnicodeMathSymbol{"02A86}{\gtrapprox }{\mathrel}{greater-than or approximate}%
+\UnicodeMathSymbol{"02A87}{\lneq }{\mathrel}{less-than and single-line not equal to}%
+\UnicodeMathSymbol{"02A88}{\gneq }{\mathrel}{greater-than and single-line not equal to}%
+\UnicodeMathSymbol{"02A89}{\lnapprox }{\mathrel}{less-than and not approximate}%
+\UnicodeMathSymbol{"02A8A}{\gnapprox }{\mathrel}{greater-than and not approximate}%
+\UnicodeMathSymbol{"02A8B}{\lesseqqgtr }{\mathrel}{less-than above double-line equal above greater-than}%
+\UnicodeMathSymbol{"02A8C}{\gtreqqless }{\mathrel}{greater-than above double-line equal above less-than}%
+\UnicodeMathSymbol{"02A8D}{\lsime }{\mathrel}{less-than above similar or equal}%
+\UnicodeMathSymbol{"02A8E}{\gsime }{\mathrel}{greater-than above similar or equal}%
+\UnicodeMathSymbol{"02A8F}{\lsimg }{\mathrel}{less-than above similar above greater-than}%
+\UnicodeMathSymbol{"02A90}{\gsiml }{\mathrel}{greater-than above similar above less-than}%
+\UnicodeMathSymbol{"02A91}{\lgE }{\mathrel}{less-than above greater-than above double-line equal}%
+\UnicodeMathSymbol{"02A92}{\glE }{\mathrel}{greater-than above less-than above double-line equal}%
+\UnicodeMathSymbol{"02A93}{\lesges }{\mathrel}{less-than above slanted equal above greater-than above slanted equal}%
+\UnicodeMathSymbol{"02A94}{\gesles }{\mathrel}{greater-than above slanted equal above less-than above slanted equal}%
+\UnicodeMathSymbol{"02A95}{\eqslantless }{\mathrel}{slanted equal to or less-than}%
+\UnicodeMathSymbol{"02A96}{\eqslantgtr }{\mathrel}{slanted equal to or greater-than}%
+\UnicodeMathSymbol{"02A97}{\elsdot }{\mathrel}{slanted equal to or less-than with dot inside}%
+\UnicodeMathSymbol{"02A98}{\egsdot }{\mathrel}{slanted equal to or greater-than with dot inside}%
+\UnicodeMathSymbol{"02A99}{\eqqless }{\mathrel}{double-line equal to or less-than}%
+\UnicodeMathSymbol{"02A9A}{\eqqgtr }{\mathrel}{double-line equal to or greater-than}%
+\UnicodeMathSymbol{"02A9B}{\eqqslantless }{\mathrel}{double-line slanted equal to or less-than}%
+\UnicodeMathSymbol{"02A9C}{\eqqslantgtr }{\mathrel}{double-line slanted equal to or greater-than}%
+\UnicodeMathSymbol{"02A9D}{\simless }{\mathrel}{similar or less-than}%
+\UnicodeMathSymbol{"02A9E}{\simgtr }{\mathrel}{similar or greater-than}%
+\UnicodeMathSymbol{"02A9F}{\simlE }{\mathrel}{similar above less-than above equals sign}%
+\UnicodeMathSymbol{"02AA0}{\simgE }{\mathrel}{similar above greater-than above equals sign}%
+\UnicodeMathSymbol{"02AA1}{\Lt }{\mathrel}{double nested less-than}%
+\UnicodeMathSymbol{"02AA2}{\Gt }{\mathrel}{double nested greater-than}%
+\UnicodeMathSymbol{"02AA3}{\partialmeetcontraction }{\mathrel}{double less-than with underbar}%
+\UnicodeMathSymbol{"02AA4}{\glj }{\mathrel}{greater-than overlapping less-than}%
+\UnicodeMathSymbol{"02AA5}{\gla }{\mathrel}{greater-than beside less-than}%
+\UnicodeMathSymbol{"02AA6}{\ltcc }{\mathrel}{less-than closed by curve}%
+\UnicodeMathSymbol{"02AA7}{\gtcc }{\mathrel}{greater-than closed by curve}%
+\UnicodeMathSymbol{"02AA8}{\lescc }{\mathrel}{less-than closed by curve above slanted equal}%
+\UnicodeMathSymbol{"02AA9}{\gescc }{\mathrel}{greater-than closed by curve above slanted equal}%
+\UnicodeMathSymbol{"02AAA}{\smt }{\mathrel}{smaller than}%
+\UnicodeMathSymbol{"02AAB}{\lat }{\mathrel}{larger than}%
+\UnicodeMathSymbol{"02AAC}{\smte }{\mathrel}{smaller than or equal to}%
+\UnicodeMathSymbol{"02AAD}{\late }{\mathrel}{larger than or equal to}%
+\UnicodeMathSymbol{"02AAE}{\bumpeqq }{\mathrel}{equals sign with bumpy above}%
+\UnicodeMathSymbol{"02AAF}{\preceq }{\mathrel}{precedes above single-line equals sign}%
+\UnicodeMathSymbol{"02AB0}{\succeq }{\mathrel}{succeeds above single-line equals sign}%
+\UnicodeMathSymbol{"02AB1}{\precneq }{\mathrel}{precedes above single-line not equal to}%
+\UnicodeMathSymbol{"02AB2}{\succneq }{\mathrel}{succeeds above single-line not equal to}%
+\UnicodeMathSymbol{"02AB3}{\preceqq }{\mathrel}{precedes above equals sign}%
+\UnicodeMathSymbol{"02AB4}{\succeqq }{\mathrel}{succeeds above equals sign}%
+\UnicodeMathSymbol{"02AB5}{\precneqq }{\mathrel}{precedes above not equal to}%
+\UnicodeMathSymbol{"02AB6}{\succneqq }{\mathrel}{succeeds above not equal to}%
+\UnicodeMathSymbol{"02AB7}{\precapprox }{\mathrel}{precedes above almost equal to}%
+\UnicodeMathSymbol{"02AB8}{\succapprox }{\mathrel}{succeeds above almost equal to}%
+\UnicodeMathSymbol{"02AB9}{\precnapprox }{\mathrel}{precedes above not almost equal to}%
+\UnicodeMathSymbol{"02ABA}{\succnapprox }{\mathrel}{succeeds above not almost equal to}%
+\UnicodeMathSymbol{"02ABB}{\Prec }{\mathrel}{double precedes}%
+\UnicodeMathSymbol{"02ABC}{\Succ }{\mathrel}{double succeeds}%
+\UnicodeMathSymbol{"02ABD}{\subsetdot }{\mathrel}{subset with dot}%
+\UnicodeMathSymbol{"02ABE}{\supsetdot }{\mathrel}{superset with dot}%
+\UnicodeMathSymbol{"02ABF}{\subsetplus }{\mathrel}{subset with plus sign below}%
+\UnicodeMathSymbol{"02AC0}{\supsetplus }{\mathrel}{superset with plus sign below}%
+\UnicodeMathSymbol{"02AC1}{\submult }{\mathrel}{subset with multiplication sign below}%
+\UnicodeMathSymbol{"02AC2}{\supmult }{\mathrel}{superset with multiplication sign below}%
+\UnicodeMathSymbol{"02AC3}{\subedot }{\mathrel}{subset of or equal to with dot above}%
+\UnicodeMathSymbol{"02AC4}{\supedot }{\mathrel}{superset of or equal to with dot above}%
+\UnicodeMathSymbol{"02AC5}{\subseteqq }{\mathrel}{subset of above equals sign}%
+\UnicodeMathSymbol{"02AC6}{\supseteqq }{\mathrel}{superset of above equals sign}%
+\UnicodeMathSymbol{"02AC7}{\subsim }{\mathrel}{subset of above tilde operator}%
+\UnicodeMathSymbol{"02AC8}{\supsim }{\mathrel}{superset of above tilde operator}%
+\UnicodeMathSymbol{"02AC9}{\subsetapprox }{\mathrel}{subset of above almost equal to}%
+\UnicodeMathSymbol{"02ACA}{\supsetapprox }{\mathrel}{superset of above almost equal to}%
+\UnicodeMathSymbol{"02ACB}{\subsetneqq }{\mathrel}{subset of above not equal to}%
+\UnicodeMathSymbol{"02ACC}{\supsetneqq }{\mathrel}{superset of above not equal to}%
+\UnicodeMathSymbol{"02ACD}{\lsqhook }{\mathrel}{square left open box operator}%
+\UnicodeMathSymbol{"02ACE}{\rsqhook }{\mathrel}{square right open box operator}%
+\UnicodeMathSymbol{"02ACF}{\csub }{\mathrel}{closed subset}%
+\UnicodeMathSymbol{"02AD0}{\csup }{\mathrel}{closed superset}%
+\UnicodeMathSymbol{"02AD1}{\csube }{\mathrel}{closed subset or equal to}%
+\UnicodeMathSymbol{"02AD2}{\csupe }{\mathrel}{closed superset or equal to}%
+\UnicodeMathSymbol{"02AD3}{\subsup }{\mathrel}{subset above superset}%
+\UnicodeMathSymbol{"02AD4}{\supsub }{\mathrel}{superset above subset}%
+\UnicodeMathSymbol{"02AD5}{\subsub }{\mathrel}{subset above subset}%
+\UnicodeMathSymbol{"02AD6}{\supsup }{\mathrel}{superset above superset}%
+\UnicodeMathSymbol{"02AD7}{\suphsub }{\mathrel}{superset beside subset}%
+\UnicodeMathSymbol{"02AD8}{\supdsub }{\mathrel}{superset beside and joined by dash with subset}%
+\UnicodeMathSymbol{"02AD9}{\forkv }{\mathrel}{element of opening downwards}%
+\UnicodeMathSymbol{"02ADA}{\topfork }{\mathrel}{pitchfork with tee top}%
+\UnicodeMathSymbol{"02ADB}{\mlcp }{\mathrel}{transversal intersection}%
+\UnicodeMathSymbol{"02ADC}{\forks }{\mathrel}{forking}%
+\UnicodeMathSymbol{"02ADD}{\forksnot }{\mathrel}{nonforking}%
+\UnicodeMathSymbol{"02ADE}{\shortlefttack }{\mathrel}{short left tack}%
+\UnicodeMathSymbol{"02ADF}{\shortdowntack }{\mathrel}{short down tack}%
+\UnicodeMathSymbol{"02AE0}{\shortuptack }{\mathrel}{short up tack}%
+\UnicodeMathSymbol{"02AE1}{\perps }{\mathord}{perpendicular with s}%
+\UnicodeMathSymbol{"02AE2}{\vDdash }{\mathrel}{vertical bar triple right turnstile}%
+\UnicodeMathSymbol{"02AE3}{\dashV }{\mathrel}{double vertical bar left turnstile}%
+\UnicodeMathSymbol{"02AE4}{\Dashv }{\mathrel}{vertical bar double left turnstile}%
+\UnicodeMathSymbol{"02AE5}{\DashV }{\mathrel}{double vertical bar double left turnstile}%
+\UnicodeMathSymbol{"02AE6}{\varVdash }{\mathrel}{long dash from left member of double vertical}%
+\UnicodeMathSymbol{"02AE7}{\Barv }{\mathrel}{short down tack with overbar}%
+\UnicodeMathSymbol{"02AE8}{\vBar }{\mathrel}{short up tack with underbar}%
+\UnicodeMathSymbol{"02AE9}{\vBarv }{\mathrel}{short up tack above short down tack}%
+\UnicodeMathSymbol{"02AEA}{\barV }{\mathrel}{double down tack}%
+\UnicodeMathSymbol{"02AEB}{\Vbar }{\mathrel}{double up tack}%
+\UnicodeMathSymbol{"02AEC}{\Not }{\mathrel}{double stroke not sign}%
+\UnicodeMathSymbol{"02AED}{\bNot }{\mathrel}{reversed double stroke not sign}%
+\UnicodeMathSymbol{"02AEE}{\revnmid }{\mathrel}{does not divide with reversed negation slash}%
+\UnicodeMathSymbol{"02AEF}{\cirmid }{\mathrel}{vertical line with circle above}%
+\UnicodeMathSymbol{"02AF0}{\midcir }{\mathrel}{vertical line with circle below}%
+\UnicodeMathSymbol{"02AF1}{\topcir }{\mathord}{down tack with circle below}%
+\UnicodeMathSymbol{"02AF2}{\nhpar }{\mathrel}{parallel with horizontal stroke}%
+\UnicodeMathSymbol{"02AF3}{\parsim }{\mathrel}{parallel with tilde operator}%
+\UnicodeMathSymbol{"02AF4}{\interleave }{\mathbin}{triple vertical bar binary relation}%
+\UnicodeMathSymbol{"02AF5}{\nhVvert }{\mathbin}{triple vertical bar with horizontal stroke}%
+\UnicodeMathSymbol{"02AF6}{\threedotcolon }{\mathbin}{triple colon operator}%
+\UnicodeMathSymbol{"02AF7}{\lllnest }{\mathrel}{stacked very much less-than}%
+\UnicodeMathSymbol{"02AF8}{\gggnest }{\mathrel}{stacked very much greater-than}%
+\UnicodeMathSymbol{"02AF9}{\leqqslant }{\mathrel}{double-line slanted less-than or equal to}%
+\UnicodeMathSymbol{"02AFA}{\geqqslant }{\mathrel}{double-line slanted greater-than or equal to}%
+\UnicodeMathSymbol{"02AFB}{\trslash }{\mathbin}{triple solidus binary relation}%
+\UnicodeMathSymbol{"02AFC}{\biginterleave }{\mathop}{large triple vertical bar operator}%
+\UnicodeMathSymbol{"02AFD}{\sslash }{\mathbin}{double solidus operator}%
+\UnicodeMathSymbol{"02AFE}{\talloblong }{\mathbin}{white vertical bar}%
+\UnicodeMathSymbol{"02AFF}{\bigtalloblong }{\mathop}{n-ary white vertical bar}%
+\UnicodeMathSymbol{"02B12}{\squaretopblack }{\mathord}{square with top half black}%
+\UnicodeMathSymbol{"02B13}{\squarebotblack }{\mathord}{square with bottom half black}%
+\UnicodeMathSymbol{"02B14}{\squareurblack }{\mathord}{square with upper right diagonal half black}%
+\UnicodeMathSymbol{"02B15}{\squarellblack }{\mathord}{square with lower left diagonal half black}%
+\UnicodeMathSymbol{"02B16}{\diamondleftblack }{\mathord}{diamond with left half black}%
+\UnicodeMathSymbol{"02B17}{\diamondrightblack }{\mathord}{diamond with right half black}%
+\UnicodeMathSymbol{"02B18}{\diamondtopblack }{\mathord}{diamond with top half black}%
+\UnicodeMathSymbol{"02B19}{\diamondbotblack }{\mathord}{diamond with bottom half black}%
+\UnicodeMathSymbol{"02B1A}{\dottedsquare }{\mathord}{dotted square}%
+\UnicodeMathSymbol{"02B1B}{\lgblksquare }{\mathord}{black large square}%
+\UnicodeMathSymbol{"02B1C}{\lgwhtsquare }{\mathord}{white large square}%
+\UnicodeMathSymbol{"02B1D}{\vysmblksquare }{\mathord}{black very small square}%
+\UnicodeMathSymbol{"02B1E}{\vysmwhtsquare }{\mathord}{white very small square}%
+\UnicodeMathSymbol{"02B1F}{\pentagonblack }{\mathord}{black pentagon}%
+\UnicodeMathSymbol{"02B20}{\pentagon }{\mathord}{white pentagon}%
+\UnicodeMathSymbol{"02B21}{\varhexagon }{\mathord}{white hexagon}%
+\UnicodeMathSymbol{"02B22}{\varhexagonblack }{\mathord}{black hexagon}%
+\UnicodeMathSymbol{"02B23}{\hexagonblack }{\mathord}{horizontal black hexagon}%
+\UnicodeMathSymbol{"02B24}{\lgblkcircle }{\mathord}{black large circle}%
+\UnicodeMathSymbol{"02B25}{\mdblkdiamond }{\mathord}{black medium diamond}%
+\UnicodeMathSymbol{"02B26}{\mdwhtdiamond }{\mathord}{white medium diamond}%
+\UnicodeMathSymbol{"02B27}{\mdblklozenge }{\mathord}{black medium lozenge}%
+\UnicodeMathSymbol{"02B28}{\mdwhtlozenge }{\mathord}{white medium lozenge}%
+\UnicodeMathSymbol{"02B29}{\smblkdiamond }{\mathord}{black small diamond}%
+\UnicodeMathSymbol{"02B2A}{\smblklozenge }{\mathord}{black small lozenge}%
+\UnicodeMathSymbol{"02B2B}{\smwhtlozenge }{\mathord}{white small lozenge}%
+\UnicodeMathSymbol{"02B2C}{\blkhorzoval }{\mathord}{black horizontal ellipse}%
+\UnicodeMathSymbol{"02B2D}{\whthorzoval }{\mathord}{white horizontal ellipse}%
+\UnicodeMathSymbol{"02B2E}{\blkvertoval }{\mathord}{black vertical ellipse}%
+\UnicodeMathSymbol{"02B2F}{\whtvertoval }{\mathord}{white vertical ellipse}%
+\UnicodeMathSymbol{"02B30}{\circleonleftarrow }{\mathrel}{left arrow with small circle}%
+\UnicodeMathSymbol{"02B31}{\leftthreearrows }{\mathrel}{three leftwards arrows}%
+\UnicodeMathSymbol{"02B32}{\leftarrowonoplus }{\mathrel}{left arrow with circled plus}%
+\UnicodeMathSymbol{"02B33}{\longleftsquigarrow }{\mathrel}{long leftwards squiggle arrow}%
+\UnicodeMathSymbol{"02B34}{\nvtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with vertical stroke}%
+\UnicodeMathSymbol{"02B35}{\nVtwoheadleftarrow }{\mathrel}{leftwards two-headed arrow with double vertical stroke}%
+\UnicodeMathSymbol{"02B36}{\twoheadmapsfrom }{\mathrel}{leftwards two-headed arrow from bar}%
+\UnicodeMathSymbol{"02B37}{\twoheadleftdbkarrow }{\mathrel}{leftwards two-headed triple-dash arrow}%
+\UnicodeMathSymbol{"02B38}{\leftdotarrow }{\mathrel}{leftwards arrow with dotted stem}%
+\UnicodeMathSymbol{"02B39}{\nvleftarrowtail }{\mathrel}{leftwards arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02B3A}{\nVleftarrowtail }{\mathrel}{leftwards arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02B3B}{\twoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail}%
+\UnicodeMathSymbol{"02B3C}{\nvtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with vertical stroke}%
+\UnicodeMathSymbol{"02B3D}{\nVtwoheadleftarrowtail }{\mathrel}{leftwards two-headed arrow with tail with double vertical stroke}%
+\UnicodeMathSymbol{"02B3E}{\leftarrowx }{\mathrel}{leftwards arrow through x}%
+\UnicodeMathSymbol{"02B3F}{\leftcurvedarrow }{\mathrel}{wave arrow pointing directly left}%
+\UnicodeMathSymbol{"02B40}{\equalleftarrow }{\mathrel}{equals sign above leftwards arrow}%
+\UnicodeMathSymbol{"02B41}{\bsimilarleftarrow }{\mathrel}{reverse tilde operator above leftwards arrow}%
+\UnicodeMathSymbol{"02B42}{\leftarrowbackapprox }{\mathrel}{leftwards arrow above reverse almost equal to}%
+\UnicodeMathSymbol{"02B43}{\rightarrowgtr }{\mathrel}{rightwards arrow through greater-than}%
+\UnicodeMathSymbol{"02B44}{\rightarrowsupset }{\mathrel}{rightwards arrow through subset}%
+\UnicodeMathSymbol{"02B45}{\LLeftarrow }{\mathrel}{leftwards quadruple arrow}%
+\UnicodeMathSymbol{"02B46}{\RRightarrow }{\mathrel}{rightwards quadruple arrow}%
+\UnicodeMathSymbol{"02B47}{\bsimilarrightarrow }{\mathrel}{reverse tilde operator above rightwards arrow}%
+\UnicodeMathSymbol{"02B48}{\rightarrowbackapprox }{\mathrel}{rightwards arrow above reverse almost equal to}%
+\UnicodeMathSymbol{"02B49}{\similarleftarrow }{\mathrel}{tilde operator above leftwards arrow}%
+\UnicodeMathSymbol{"02B4A}{\leftarrowapprox }{\mathrel}{leftwards arrow above almost equal to}%
+\UnicodeMathSymbol{"02B4B}{\leftarrowbsimilar }{\mathrel}{leftwards arrow above reverse tilde operator}%
+\UnicodeMathSymbol{"02B4C}{\rightarrowbsimilar }{\mathrel}{righttwards arrow above reverse tilde operator}%
+\UnicodeMathSymbol{"02B50}{\medwhitestar }{\mathord}{white medium star}%
+\UnicodeMathSymbol{"02B51}{\medblackstar }{\mathord}{black medium star}%
+\UnicodeMathSymbol{"02B52}{\smwhitestar }{\mathord}{white small star}%
+\UnicodeMathSymbol{"02B53}{\rightpentagonblack }{\mathord}{black right-pointing pentagon}%
+\UnicodeMathSymbol{"02B54}{\rightpentagon }{\mathord}{white right-pointing pentagon}%
+\UnicodeMathSymbol{"03012}{\postalmark }{\mathord}{postal mark}%
+\UnicodeMathSymbol{"03030}{\hzigzag }{\mathord}{zigzag}%
+\UnicodeMathSymbol{"1D400}{\mbfA }{\mathalpha}{mathematical bold capital a}%
+\UnicodeMathSymbol{"1D401}{\mbfB }{\mathalpha}{mathematical bold capital b}%
+\UnicodeMathSymbol{"1D402}{\mbfC }{\mathalpha}{mathematical bold capital c}%
+\UnicodeMathSymbol{"1D403}{\mbfD }{\mathalpha}{mathematical bold capital d}%
+\UnicodeMathSymbol{"1D404}{\mbfE }{\mathalpha}{mathematical bold capital e}%
+\UnicodeMathSymbol{"1D405}{\mbfF }{\mathalpha}{mathematical bold capital f}%
+\UnicodeMathSymbol{"1D406}{\mbfG }{\mathalpha}{mathematical bold capital g}%
+\UnicodeMathSymbol{"1D407}{\mbfH }{\mathalpha}{mathematical bold capital h}%
+\UnicodeMathSymbol{"1D408}{\mbfI }{\mathalpha}{mathematical bold capital i}%
+\UnicodeMathSymbol{"1D409}{\mbfJ }{\mathalpha}{mathematical bold capital j}%
+\UnicodeMathSymbol{"1D40A}{\mbfK }{\mathalpha}{mathematical bold capital k}%
+\UnicodeMathSymbol{"1D40B}{\mbfL }{\mathalpha}{mathematical bold capital l}%
+\UnicodeMathSymbol{"1D40C}{\mbfM }{\mathalpha}{mathematical bold capital m}%
+\UnicodeMathSymbol{"1D40D}{\mbfN }{\mathalpha}{mathematical bold capital n}%
+\UnicodeMathSymbol{"1D40E}{\mbfO }{\mathalpha}{mathematical bold capital o}%
+\UnicodeMathSymbol{"1D40F}{\mbfP }{\mathalpha}{mathematical bold capital p}%
+\UnicodeMathSymbol{"1D410}{\mbfQ }{\mathalpha}{mathematical bold capital q}%
+\UnicodeMathSymbol{"1D411}{\mbfR }{\mathalpha}{mathematical bold capital r}%
+\UnicodeMathSymbol{"1D412}{\mbfS }{\mathalpha}{mathematical bold capital s}%
+\UnicodeMathSymbol{"1D413}{\mbfT }{\mathalpha}{mathematical bold capital t}%
+\UnicodeMathSymbol{"1D414}{\mbfU }{\mathalpha}{mathematical bold capital u}%
+\UnicodeMathSymbol{"1D415}{\mbfV }{\mathalpha}{mathematical bold capital v}%
+\UnicodeMathSymbol{"1D416}{\mbfW }{\mathalpha}{mathematical bold capital w}%
+\UnicodeMathSymbol{"1D417}{\mbfX }{\mathalpha}{mathematical bold capital x}%
+\UnicodeMathSymbol{"1D418}{\mbfY }{\mathalpha}{mathematical bold capital y}%
+\UnicodeMathSymbol{"1D419}{\mbfZ }{\mathalpha}{mathematical bold capital z}%
+\UnicodeMathSymbol{"1D41A}{\mbfa }{\mathalpha}{mathematical bold small a}%
+\UnicodeMathSymbol{"1D41B}{\mbfb }{\mathalpha}{mathematical bold small b}%
+\UnicodeMathSymbol{"1D41C}{\mbfc }{\mathalpha}{mathematical bold small c}%
+\UnicodeMathSymbol{"1D41D}{\mbfd }{\mathalpha}{mathematical bold small d}%
+\UnicodeMathSymbol{"1D41E}{\mbfe }{\mathalpha}{mathematical bold small e}%
+\UnicodeMathSymbol{"1D41F}{\mbff }{\mathalpha}{mathematical bold small f}%
+\UnicodeMathSymbol{"1D420}{\mbfg }{\mathalpha}{mathematical bold small g}%
+\UnicodeMathSymbol{"1D421}{\mbfh }{\mathalpha}{mathematical bold small h}%
+\UnicodeMathSymbol{"1D422}{\mbfi }{\mathalpha}{mathematical bold small i}%
+\UnicodeMathSymbol{"1D423}{\mbfj }{\mathalpha}{mathematical bold small j}%
+\UnicodeMathSymbol{"1D424}{\mbfk }{\mathalpha}{mathematical bold small k}%
+\UnicodeMathSymbol{"1D425}{\mbfl }{\mathalpha}{mathematical bold small l}%
+\UnicodeMathSymbol{"1D426}{\mbfm }{\mathalpha}{mathematical bold small m}%
+\UnicodeMathSymbol{"1D427}{\mbfn }{\mathalpha}{mathematical bold small n}%
+\UnicodeMathSymbol{"1D428}{\mbfo }{\mathalpha}{mathematical bold small o}%
+\UnicodeMathSymbol{"1D429}{\mbfp }{\mathalpha}{mathematical bold small p}%
+\UnicodeMathSymbol{"1D42A}{\mbfq }{\mathalpha}{mathematical bold small q}%
+\UnicodeMathSymbol{"1D42B}{\mbfr }{\mathalpha}{mathematical bold small r}%
+\UnicodeMathSymbol{"1D42C}{\mbfs }{\mathalpha}{mathematical bold small s}%
+\UnicodeMathSymbol{"1D42D}{\mbft }{\mathalpha}{mathematical bold small t}%
+\UnicodeMathSymbol{"1D42E}{\mbfu }{\mathalpha}{mathematical bold small u}%
+\UnicodeMathSymbol{"1D42F}{\mbfv }{\mathalpha}{mathematical bold small v}%
+\UnicodeMathSymbol{"1D430}{\mbfw }{\mathalpha}{mathematical bold small w}%
+\UnicodeMathSymbol{"1D431}{\mbfx }{\mathalpha}{mathematical bold small x}%
+\UnicodeMathSymbol{"1D432}{\mbfy }{\mathalpha}{mathematical bold small y}%
+\UnicodeMathSymbol{"1D433}{\mbfz }{\mathalpha}{mathematical bold small z}%
+\UnicodeMathSymbol{"1D434}{\mitA }{\mathalpha}{mathematical italic capital a}%
+\UnicodeMathSymbol{"1D435}{\mitB }{\mathalpha}{mathematical italic capital b}%
+\UnicodeMathSymbol{"1D436}{\mitC }{\mathalpha}{mathematical italic capital c}%
+\UnicodeMathSymbol{"1D437}{\mitD }{\mathalpha}{mathematical italic capital d}%
+\UnicodeMathSymbol{"1D438}{\mitE }{\mathalpha}{mathematical italic capital e}%
+\UnicodeMathSymbol{"1D439}{\mitF }{\mathalpha}{mathematical italic capital f}%
+\UnicodeMathSymbol{"1D43A}{\mitG }{\mathalpha}{mathematical italic capital g}%
+\UnicodeMathSymbol{"1D43B}{\mitH }{\mathalpha}{mathematical italic capital h}%
+\UnicodeMathSymbol{"1D43C}{\mitI }{\mathalpha}{mathematical italic capital i}%
+\UnicodeMathSymbol{"1D43D}{\mitJ }{\mathalpha}{mathematical italic capital j}%
+\UnicodeMathSymbol{"1D43E}{\mitK }{\mathalpha}{mathematical italic capital k}%
+\UnicodeMathSymbol{"1D43F}{\mitL }{\mathalpha}{mathematical italic capital l}%
+\UnicodeMathSymbol{"1D440}{\mitM }{\mathalpha}{mathematical italic capital m}%
+\UnicodeMathSymbol{"1D441}{\mitN }{\mathalpha}{mathematical italic capital n}%
+\UnicodeMathSymbol{"1D442}{\mitO }{\mathalpha}{mathematical italic capital o}%
+\UnicodeMathSymbol{"1D443}{\mitP }{\mathalpha}{mathematical italic capital p}%
+\UnicodeMathSymbol{"1D444}{\mitQ }{\mathalpha}{mathematical italic capital q}%
+\UnicodeMathSymbol{"1D445}{\mitR }{\mathalpha}{mathematical italic capital r}%
+\UnicodeMathSymbol{"1D446}{\mitS }{\mathalpha}{mathematical italic capital s}%
+\UnicodeMathSymbol{"1D447}{\mitT }{\mathalpha}{mathematical italic capital t}%
+\UnicodeMathSymbol{"1D448}{\mitU }{\mathalpha}{mathematical italic capital u}%
+\UnicodeMathSymbol{"1D449}{\mitV }{\mathalpha}{mathematical italic capital v}%
+\UnicodeMathSymbol{"1D44A}{\mitW }{\mathalpha}{mathematical italic capital w}%
+\UnicodeMathSymbol{"1D44B}{\mitX }{\mathalpha}{mathematical italic capital x}%
+\UnicodeMathSymbol{"1D44C}{\mitY }{\mathalpha}{mathematical italic capital y}%
+\UnicodeMathSymbol{"1D44D}{\mitZ }{\mathalpha}{mathematical italic capital z}%
+\UnicodeMathSymbol{"1D44E}{\mita }{\mathalpha}{mathematical italic small a}%
+\UnicodeMathSymbol{"1D44F}{\mitb }{\mathalpha}{mathematical italic small b}%
+\UnicodeMathSymbol{"1D450}{\mitc }{\mathalpha}{mathematical italic small c}%
+\UnicodeMathSymbol{"1D451}{\mitd }{\mathalpha}{mathematical italic small d}%
+\UnicodeMathSymbol{"1D452}{\mite }{\mathalpha}{mathematical italic small e}%
+\UnicodeMathSymbol{"1D453}{\mitf }{\mathalpha}{mathematical italic small f}%
+\UnicodeMathSymbol{"1D454}{\mitg }{\mathalpha}{mathematical italic small g}%
+\UnicodeMathSymbol{"1D456}{\miti }{\mathalpha}{mathematical italic small i}%
+\UnicodeMathSymbol{"1D457}{\mitj }{\mathalpha}{mathematical italic small j}%
+\UnicodeMathSymbol{"1D458}{\mitk }{\mathalpha}{mathematical italic small k}%
+\UnicodeMathSymbol{"1D459}{\mitl }{\mathalpha}{mathematical italic small l}%
+\UnicodeMathSymbol{"1D45A}{\mitm }{\mathalpha}{mathematical italic small m}%
+\UnicodeMathSymbol{"1D45B}{\mitn }{\mathalpha}{mathematical italic small n}%
+\UnicodeMathSymbol{"1D45C}{\mito }{\mathalpha}{mathematical italic small o}%
+\UnicodeMathSymbol{"1D45D}{\mitp }{\mathalpha}{mathematical italic small p}%
+\UnicodeMathSymbol{"1D45E}{\mitq }{\mathalpha}{mathematical italic small q}%
+\UnicodeMathSymbol{"1D45F}{\mitr }{\mathalpha}{mathematical italic small r}%
+\UnicodeMathSymbol{"1D460}{\mits }{\mathalpha}{mathematical italic small s}%
+\UnicodeMathSymbol{"1D461}{\mitt }{\mathalpha}{mathematical italic small t}%
+\UnicodeMathSymbol{"1D462}{\mitu }{\mathalpha}{mathematical italic small u}%
+\UnicodeMathSymbol{"1D463}{\mitv }{\mathalpha}{mathematical italic small v}%
+\UnicodeMathSymbol{"1D464}{\mitw }{\mathalpha}{mathematical italic small w}%
+\UnicodeMathSymbol{"1D465}{\mitx }{\mathalpha}{mathematical italic small x}%
+\UnicodeMathSymbol{"1D466}{\mity }{\mathalpha}{mathematical italic small y}%
+\UnicodeMathSymbol{"1D467}{\mitz }{\mathalpha}{mathematical italic small z}%
+\UnicodeMathSymbol{"1D468}{\mbfitA }{\mathalpha}{mathematical bold italic capital a}%
+\UnicodeMathSymbol{"1D469}{\mbfitB }{\mathalpha}{mathematical bold italic capital b}%
+\UnicodeMathSymbol{"1D46A}{\mbfitC }{\mathalpha}{mathematical bold italic capital c}%
+\UnicodeMathSymbol{"1D46B}{\mbfitD }{\mathalpha}{mathematical bold italic capital d}%
+\UnicodeMathSymbol{"1D46C}{\mbfitE }{\mathalpha}{mathematical bold italic capital e}%
+\UnicodeMathSymbol{"1D46D}{\mbfitF }{\mathalpha}{mathematical bold italic capital f}%
+\UnicodeMathSymbol{"1D46E}{\mbfitG }{\mathalpha}{mathematical bold italic capital g}%
+\UnicodeMathSymbol{"1D46F}{\mbfitH }{\mathalpha}{mathematical bold italic capital h}%
+\UnicodeMathSymbol{"1D470}{\mbfitI }{\mathalpha}{mathematical bold italic capital i}%
+\UnicodeMathSymbol{"1D471}{\mbfitJ }{\mathalpha}{mathematical bold italic capital j}%
+\UnicodeMathSymbol{"1D472}{\mbfitK }{\mathalpha}{mathematical bold italic capital k}%
+\UnicodeMathSymbol{"1D473}{\mbfitL }{\mathalpha}{mathematical bold italic capital l}%
+\UnicodeMathSymbol{"1D474}{\mbfitM }{\mathalpha}{mathematical bold italic capital m}%
+\UnicodeMathSymbol{"1D475}{\mbfitN }{\mathalpha}{mathematical bold italic capital n}%
+\UnicodeMathSymbol{"1D476}{\mbfitO }{\mathalpha}{mathematical bold italic capital o}%
+\UnicodeMathSymbol{"1D477}{\mbfitP }{\mathalpha}{mathematical bold italic capital p}%
+\UnicodeMathSymbol{"1D478}{\mbfitQ }{\mathalpha}{mathematical bold italic capital q}%
+\UnicodeMathSymbol{"1D479}{\mbfitR }{\mathalpha}{mathematical bold italic capital r}%
+\UnicodeMathSymbol{"1D47A}{\mbfitS }{\mathalpha}{mathematical bold italic capital s}%
+\UnicodeMathSymbol{"1D47B}{\mbfitT }{\mathalpha}{mathematical bold italic capital t}%
+\UnicodeMathSymbol{"1D47C}{\mbfitU }{\mathalpha}{mathematical bold italic capital u}%
+\UnicodeMathSymbol{"1D47D}{\mbfitV }{\mathalpha}{mathematical bold italic capital v}%
+\UnicodeMathSymbol{"1D47E}{\mbfitW }{\mathalpha}{mathematical bold italic capital w}%
+\UnicodeMathSymbol{"1D47F}{\mbfitX }{\mathalpha}{mathematical bold italic capital x}%
+\UnicodeMathSymbol{"1D480}{\mbfitY }{\mathalpha}{mathematical bold italic capital y}%
+\UnicodeMathSymbol{"1D481}{\mbfitZ }{\mathalpha}{mathematical bold italic capital z}%
+\UnicodeMathSymbol{"1D482}{\mbfita }{\mathalpha}{mathematical bold italic small a}%
+\UnicodeMathSymbol{"1D483}{\mbfitb }{\mathalpha}{mathematical bold italic small b}%
+\UnicodeMathSymbol{"1D484}{\mbfitc }{\mathalpha}{mathematical bold italic small c}%
+\UnicodeMathSymbol{"1D485}{\mbfitd }{\mathalpha}{mathematical bold italic small d}%
+\UnicodeMathSymbol{"1D486}{\mbfite }{\mathalpha}{mathematical bold italic small e}%
+\UnicodeMathSymbol{"1D487}{\mbfitf }{\mathalpha}{mathematical bold italic small f}%
+\UnicodeMathSymbol{"1D488}{\mbfitg }{\mathalpha}{mathematical bold italic small g}%
+\UnicodeMathSymbol{"1D489}{\mbfith }{\mathalpha}{mathematical bold italic small h}%
+\UnicodeMathSymbol{"1D48A}{\mbfiti }{\mathalpha}{mathematical bold italic small i}%
+\UnicodeMathSymbol{"1D48B}{\mbfitj }{\mathalpha}{mathematical bold italic small j}%
+\UnicodeMathSymbol{"1D48C}{\mbfitk }{\mathalpha}{mathematical bold italic small k}%
+\UnicodeMathSymbol{"1D48D}{\mbfitl }{\mathalpha}{mathematical bold italic small l}%
+\UnicodeMathSymbol{"1D48E}{\mbfitm }{\mathalpha}{mathematical bold italic small m}%
+\UnicodeMathSymbol{"1D48F}{\mbfitn }{\mathalpha}{mathematical bold italic small n}%
+\UnicodeMathSymbol{"1D490}{\mbfito }{\mathalpha}{mathematical bold italic small o}%
+\UnicodeMathSymbol{"1D491}{\mbfitp }{\mathalpha}{mathematical bold italic small p}%
+\UnicodeMathSymbol{"1D492}{\mbfitq }{\mathalpha}{mathematical bold italic small q}%
+\UnicodeMathSymbol{"1D493}{\mbfitr }{\mathalpha}{mathematical bold italic small r}%
+\UnicodeMathSymbol{"1D494}{\mbfits }{\mathalpha}{mathematical bold italic small s}%
+\UnicodeMathSymbol{"1D495}{\mbfitt }{\mathalpha}{mathematical bold italic small t}%
+\UnicodeMathSymbol{"1D496}{\mbfitu }{\mathalpha}{mathematical bold italic small u}%
+\UnicodeMathSymbol{"1D497}{\mbfitv }{\mathalpha}{mathematical bold italic small v}%
+\UnicodeMathSymbol{"1D498}{\mbfitw }{\mathalpha}{mathematical bold italic small w}%
+\UnicodeMathSymbol{"1D499}{\mbfitx }{\mathalpha}{mathematical bold italic small x}%
+\UnicodeMathSymbol{"1D49A}{\mbfity }{\mathalpha}{mathematical bold italic small y}%
+\UnicodeMathSymbol{"1D49B}{\mbfitz }{\mathalpha}{mathematical bold italic small z}%
+\UnicodeMathSymbol{"1D49C}{\mscrA }{\mathalpha}{mathematical script capital a}%
+\UnicodeMathSymbol{"1D49E}{\mscrC }{\mathalpha}{mathematical script capital c}%
+\UnicodeMathSymbol{"1D49F}{\mscrD }{\mathalpha}{mathematical script capital d}%
+\UnicodeMathSymbol{"1D4A2}{\mscrG }{\mathalpha}{mathematical script capital g}%
+\UnicodeMathSymbol{"1D4A5}{\mscrJ }{\mathalpha}{mathematical script capital j}%
+\UnicodeMathSymbol{"1D4A6}{\mscrK }{\mathalpha}{mathematical script capital k}%
+\UnicodeMathSymbol{"1D4A9}{\mscrN }{\mathalpha}{mathematical script capital n}%
+\UnicodeMathSymbol{"1D4AA}{\mscrO }{\mathalpha}{mathematical script capital o}%
+\UnicodeMathSymbol{"1D4AB}{\mscrP }{\mathalpha}{mathematical script capital p}%
+\UnicodeMathSymbol{"1D4AC}{\mscrQ }{\mathalpha}{mathematical script capital q}%
+\UnicodeMathSymbol{"1D4AE}{\mscrS }{\mathalpha}{mathematical script capital s}%
+\UnicodeMathSymbol{"1D4AF}{\mscrT }{\mathalpha}{mathematical script capital t}%
+\UnicodeMathSymbol{"1D4B0}{\mscrU }{\mathalpha}{mathematical script capital u}%
+\UnicodeMathSymbol{"1D4B1}{\mscrV }{\mathalpha}{mathematical script capital v}%
+\UnicodeMathSymbol{"1D4B2}{\mscrW }{\mathalpha}{mathematical script capital w}%
+\UnicodeMathSymbol{"1D4B3}{\mscrX }{\mathalpha}{mathematical script capital x}%
+\UnicodeMathSymbol{"1D4B4}{\mscrY }{\mathalpha}{mathematical script capital y}%
+\UnicodeMathSymbol{"1D4B5}{\mscrZ }{\mathalpha}{mathematical script capital z}%
+\UnicodeMathSymbol{"1D4B6}{\mscra }{\mathalpha}{mathematical script small a}%
+\UnicodeMathSymbol{"1D4B7}{\mscrb }{\mathalpha}{mathematical script small b}%
+\UnicodeMathSymbol{"1D4B8}{\mscrc }{\mathalpha}{mathematical script small c}%
+\UnicodeMathSymbol{"1D4B9}{\mscrd }{\mathalpha}{mathematical script small d}%
+\UnicodeMathSymbol{"1D4BB}{\mscrf }{\mathalpha}{mathematical script small f}%
+\UnicodeMathSymbol{"1D4BD}{\mscrh }{\mathalpha}{mathematical script small h}%
+\UnicodeMathSymbol{"1D4BE}{\mscri }{\mathalpha}{mathematical script small i}%
+\UnicodeMathSymbol{"1D4BF}{\mscrj }{\mathalpha}{mathematical script small j}%
+\UnicodeMathSymbol{"1D4C0}{\mscrk }{\mathalpha}{mathematical script small k}%
+\UnicodeMathSymbol{"1D4C1}{\mscrl }{\mathalpha}{mathematical script small l}%
+\UnicodeMathSymbol{"1D4C2}{\mscrm }{\mathalpha}{mathematical script small m}%
+\UnicodeMathSymbol{"1D4C3}{\mscrn }{\mathalpha}{mathematical script small n}%
+\UnicodeMathSymbol{"1D4C5}{\mscrp }{\mathalpha}{mathematical script small p}%
+\UnicodeMathSymbol{"1D4C6}{\mscrq }{\mathalpha}{mathematical script small q}%
+\UnicodeMathSymbol{"1D4C7}{\mscrr }{\mathalpha}{mathematical script small r}%
+\UnicodeMathSymbol{"1D4C8}{\mscrs }{\mathalpha}{mathematical script small s}%
+\UnicodeMathSymbol{"1D4C9}{\mscrt }{\mathalpha}{mathematical script small t}%
+\UnicodeMathSymbol{"1D4CA}{\mscru }{\mathalpha}{mathematical script small u}%
+\UnicodeMathSymbol{"1D4CB}{\mscrv }{\mathalpha}{mathematical script small v}%
+\UnicodeMathSymbol{"1D4CC}{\mscrw }{\mathalpha}{mathematical script small w}%
+\UnicodeMathSymbol{"1D4CD}{\mscrx }{\mathalpha}{mathematical script small x}%
+\UnicodeMathSymbol{"1D4CE}{\mscry }{\mathalpha}{mathematical script small y}%
+\UnicodeMathSymbol{"1D4CF}{\mscrz }{\mathalpha}{mathematical script small z}%
+\UnicodeMathSymbol{"1D4D0}{\mbfscrA }{\mathalpha}{mathematical bold script capital a}%
+\UnicodeMathSymbol{"1D4D1}{\mbfscrB }{\mathalpha}{mathematical bold script capital b}%
+\UnicodeMathSymbol{"1D4D2}{\mbfscrC }{\mathalpha}{mathematical bold script capital c}%
+\UnicodeMathSymbol{"1D4D3}{\mbfscrD }{\mathalpha}{mathematical bold script capital d}%
+\UnicodeMathSymbol{"1D4D4}{\mbfscrE }{\mathalpha}{mathematical bold script capital e}%
+\UnicodeMathSymbol{"1D4D5}{\mbfscrF }{\mathalpha}{mathematical bold script capital f}%
+\UnicodeMathSymbol{"1D4D6}{\mbfscrG }{\mathalpha}{mathematical bold script capital g}%
+\UnicodeMathSymbol{"1D4D7}{\mbfscrH }{\mathalpha}{mathematical bold script capital h}%
+\UnicodeMathSymbol{"1D4D8}{\mbfscrI }{\mathalpha}{mathematical bold script capital i}%
+\UnicodeMathSymbol{"1D4D9}{\mbfscrJ }{\mathalpha}{mathematical bold script capital j}%
+\UnicodeMathSymbol{"1D4DA}{\mbfscrK }{\mathalpha}{mathematical bold script capital k}%
+\UnicodeMathSymbol{"1D4DB}{\mbfscrL }{\mathalpha}{mathematical bold script capital l}%
+\UnicodeMathSymbol{"1D4DC}{\mbfscrM }{\mathalpha}{mathematical bold script capital m}%
+\UnicodeMathSymbol{"1D4DD}{\mbfscrN }{\mathalpha}{mathematical bold script capital n}%
+\UnicodeMathSymbol{"1D4DE}{\mbfscrO }{\mathalpha}{mathematical bold script capital o}%
+\UnicodeMathSymbol{"1D4DF}{\mbfscrP }{\mathalpha}{mathematical bold script capital p}%
+\UnicodeMathSymbol{"1D4E0}{\mbfscrQ }{\mathalpha}{mathematical bold script capital q}%
+\UnicodeMathSymbol{"1D4E1}{\mbfscrR }{\mathalpha}{mathematical bold script capital r}%
+\UnicodeMathSymbol{"1D4E2}{\mbfscrS }{\mathalpha}{mathematical bold script capital s}%
+\UnicodeMathSymbol{"1D4E3}{\mbfscrT }{\mathalpha}{mathematical bold script capital t}%
+\UnicodeMathSymbol{"1D4E4}{\mbfscrU }{\mathalpha}{mathematical bold script capital u}%
+\UnicodeMathSymbol{"1D4E5}{\mbfscrV }{\mathalpha}{mathematical bold script capital v}%
+\UnicodeMathSymbol{"1D4E6}{\mbfscrW }{\mathalpha}{mathematical bold script capital w}%
+\UnicodeMathSymbol{"1D4E7}{\mbfscrX }{\mathalpha}{mathematical bold script capital x}%
+\UnicodeMathSymbol{"1D4E8}{\mbfscrY }{\mathalpha}{mathematical bold script capital y}%
+\UnicodeMathSymbol{"1D4E9}{\mbfscrZ }{\mathalpha}{mathematical bold script capital z}%
+\UnicodeMathSymbol{"1D4EA}{\mbfscra }{\mathalpha}{mathematical bold script small a}%
+\UnicodeMathSymbol{"1D4EB}{\mbfscrb }{\mathalpha}{mathematical bold script small b}%
+\UnicodeMathSymbol{"1D4EC}{\mbfscrc }{\mathalpha}{mathematical bold script small c}%
+\UnicodeMathSymbol{"1D4ED}{\mbfscrd }{\mathalpha}{mathematical bold script small d}%
+\UnicodeMathSymbol{"1D4EE}{\mbfscre }{\mathalpha}{mathematical bold script small e}%
+\UnicodeMathSymbol{"1D4EF}{\mbfscrf }{\mathalpha}{mathematical bold script small f}%
+\UnicodeMathSymbol{"1D4F0}{\mbfscrg }{\mathalpha}{mathematical bold script small g}%
+\UnicodeMathSymbol{"1D4F1}{\mbfscrh }{\mathalpha}{mathematical bold script small h}%
+\UnicodeMathSymbol{"1D4F2}{\mbfscri }{\mathalpha}{mathematical bold script small i}%
+\UnicodeMathSymbol{"1D4F3}{\mbfscrj }{\mathalpha}{mathematical bold script small j}%
+\UnicodeMathSymbol{"1D4F4}{\mbfscrk }{\mathalpha}{mathematical bold script small k}%
+\UnicodeMathSymbol{"1D4F5}{\mbfscrl }{\mathalpha}{mathematical bold script small l}%
+\UnicodeMathSymbol{"1D4F6}{\mbfscrm }{\mathalpha}{mathematical bold script small m}%
+\UnicodeMathSymbol{"1D4F7}{\mbfscrn }{\mathalpha}{mathematical bold script small n}%
+\UnicodeMathSymbol{"1D4F8}{\mbfscro }{\mathalpha}{mathematical bold script small o}%
+\UnicodeMathSymbol{"1D4F9}{\mbfscrp }{\mathalpha}{mathematical bold script small p}%
+\UnicodeMathSymbol{"1D4FA}{\mbfscrq }{\mathalpha}{mathematical bold script small q}%
+\UnicodeMathSymbol{"1D4FB}{\mbfscrr }{\mathalpha}{mathematical bold script small r}%
+\UnicodeMathSymbol{"1D4FC}{\mbfscrs }{\mathalpha}{mathematical bold script small s}%
+\UnicodeMathSymbol{"1D4FD}{\mbfscrt }{\mathalpha}{mathematical bold script small t}%
+\UnicodeMathSymbol{"1D4FE}{\mbfscru }{\mathalpha}{mathematical bold script small u}%
+\UnicodeMathSymbol{"1D4FF}{\mbfscrv }{\mathalpha}{mathematical bold script small v}%
+\UnicodeMathSymbol{"1D500}{\mbfscrw }{\mathalpha}{mathematical bold script small w}%
+\UnicodeMathSymbol{"1D501}{\mbfscrx }{\mathalpha}{mathematical bold script small x}%
+\UnicodeMathSymbol{"1D502}{\mbfscry }{\mathalpha}{mathematical bold script small y}%
+\UnicodeMathSymbol{"1D503}{\mbfscrz }{\mathalpha}{mathematical bold script small z}%
+\UnicodeMathSymbol{"1D504}{\mfrakA }{\mathalpha}{mathematical fraktur capital a}%
+\UnicodeMathSymbol{"1D505}{\mfrakB }{\mathalpha}{mathematical fraktur capital b}%
+\UnicodeMathSymbol{"1D507}{\mfrakD }{\mathalpha}{mathematical fraktur capital d}%
+\UnicodeMathSymbol{"1D508}{\mfrakE }{\mathalpha}{mathematical fraktur capital e}%
+\UnicodeMathSymbol{"1D509}{\mfrakF }{\mathalpha}{mathematical fraktur capital f}%
+\UnicodeMathSymbol{"1D50A}{\mfrakG }{\mathalpha}{mathematical fraktur capital g}%
+\UnicodeMathSymbol{"1D50D}{\mfrakJ }{\mathalpha}{mathematical fraktur capital j}%
+\UnicodeMathSymbol{"1D50E}{\mfrakK }{\mathalpha}{mathematical fraktur capital k}%
+\UnicodeMathSymbol{"1D50F}{\mfrakL }{\mathalpha}{mathematical fraktur capital l}%
+\UnicodeMathSymbol{"1D510}{\mfrakM }{\mathalpha}{mathematical fraktur capital m}%
+\UnicodeMathSymbol{"1D511}{\mfrakN }{\mathalpha}{mathematical fraktur capital n}%
+\UnicodeMathSymbol{"1D512}{\mfrakO }{\mathalpha}{mathematical fraktur capital o}%
+\UnicodeMathSymbol{"1D513}{\mfrakP }{\mathalpha}{mathematical fraktur capital p}%
+\UnicodeMathSymbol{"1D514}{\mfrakQ }{\mathalpha}{mathematical fraktur capital q}%
+\UnicodeMathSymbol{"1D516}{\mfrakS }{\mathalpha}{mathematical fraktur capital s}%
+\UnicodeMathSymbol{"1D517}{\mfrakT }{\mathalpha}{mathematical fraktur capital t}%
+\UnicodeMathSymbol{"1D518}{\mfrakU }{\mathalpha}{mathematical fraktur capital u}%
+\UnicodeMathSymbol{"1D519}{\mfrakV }{\mathalpha}{mathematical fraktur capital v}%
+\UnicodeMathSymbol{"1D51A}{\mfrakW }{\mathalpha}{mathematical fraktur capital w}%
+\UnicodeMathSymbol{"1D51B}{\mfrakX }{\mathalpha}{mathematical fraktur capital x}%
+\UnicodeMathSymbol{"1D51C}{\mfrakY }{\mathalpha}{mathematical fraktur capital y}%
+\UnicodeMathSymbol{"1D51E}{\mfraka }{\mathalpha}{mathematical fraktur small a}%
+\UnicodeMathSymbol{"1D51F}{\mfrakb }{\mathalpha}{mathematical fraktur small b}%
+\UnicodeMathSymbol{"1D520}{\mfrakc }{\mathalpha}{mathematical fraktur small c}%
+\UnicodeMathSymbol{"1D521}{\mfrakd }{\mathalpha}{mathematical fraktur small d}%
+\UnicodeMathSymbol{"1D522}{\mfrake }{\mathalpha}{mathematical fraktur small e}%
+\UnicodeMathSymbol{"1D523}{\mfrakf }{\mathalpha}{mathematical fraktur small f}%
+\UnicodeMathSymbol{"1D524}{\mfrakg }{\mathalpha}{mathematical fraktur small g}%
+\UnicodeMathSymbol{"1D525}{\mfrakh }{\mathalpha}{mathematical fraktur small h}%
+\UnicodeMathSymbol{"1D526}{\mfraki }{\mathalpha}{mathematical fraktur small i}%
+\UnicodeMathSymbol{"1D527}{\mfrakj }{\mathalpha}{mathematical fraktur small j}%
+\UnicodeMathSymbol{"1D528}{\mfrakk }{\mathalpha}{mathematical fraktur small k}%
+\UnicodeMathSymbol{"1D529}{\mfrakl }{\mathalpha}{mathematical fraktur small l}%
+\UnicodeMathSymbol{"1D52A}{\mfrakm }{\mathalpha}{mathematical fraktur small m}%
+\UnicodeMathSymbol{"1D52B}{\mfrakn }{\mathalpha}{mathematical fraktur small n}%
+\UnicodeMathSymbol{"1D52C}{\mfrako }{\mathalpha}{mathematical fraktur small o}%
+\UnicodeMathSymbol{"1D52D}{\mfrakp }{\mathalpha}{mathematical fraktur small p}%
+\UnicodeMathSymbol{"1D52E}{\mfrakq }{\mathalpha}{mathematical fraktur small q}%
+\UnicodeMathSymbol{"1D52F}{\mfrakr }{\mathalpha}{mathematical fraktur small r}%
+\UnicodeMathSymbol{"1D530}{\mfraks }{\mathalpha}{mathematical fraktur small s}%
+\UnicodeMathSymbol{"1D531}{\mfrakt }{\mathalpha}{mathematical fraktur small t}%
+\UnicodeMathSymbol{"1D532}{\mfraku }{\mathalpha}{mathematical fraktur small u}%
+\UnicodeMathSymbol{"1D533}{\mfrakv }{\mathalpha}{mathematical fraktur small v}%
+\UnicodeMathSymbol{"1D534}{\mfrakw }{\mathalpha}{mathematical fraktur small w}%
+\UnicodeMathSymbol{"1D535}{\mfrakx }{\mathalpha}{mathematical fraktur small x}%
+\UnicodeMathSymbol{"1D536}{\mfraky }{\mathalpha}{mathematical fraktur small y}%
+\UnicodeMathSymbol{"1D537}{\mfrakz }{\mathalpha}{mathematical fraktur small z}%
+\UnicodeMathSymbol{"1D538}{\BbbA }{\mathalpha}{mathematical double-struck capital a}%
+\UnicodeMathSymbol{"1D539}{\BbbB }{\mathalpha}{mathematical double-struck capital b}%
+\UnicodeMathSymbol{"1D53B}{\BbbD }{\mathalpha}{mathematical double-struck capital d}%
+\UnicodeMathSymbol{"1D53C}{\BbbE }{\mathalpha}{mathematical double-struck capital e}%
+\UnicodeMathSymbol{"1D53D}{\BbbF }{\mathalpha}{mathematical double-struck capital f}%
+\UnicodeMathSymbol{"1D53E}{\BbbG }{\mathalpha}{mathematical double-struck capital g}%
+\UnicodeMathSymbol{"1D540}{\BbbI }{\mathalpha}{mathematical double-struck capital i}%
+\UnicodeMathSymbol{"1D541}{\BbbJ }{\mathalpha}{mathematical double-struck capital j}%
+\UnicodeMathSymbol{"1D542}{\BbbK }{\mathalpha}{mathematical double-struck capital k}%
+\UnicodeMathSymbol{"1D543}{\BbbL }{\mathalpha}{mathematical double-struck capital l}%
+\UnicodeMathSymbol{"1D544}{\BbbM }{\mathalpha}{mathematical double-struck capital m}%
+\UnicodeMathSymbol{"1D546}{\BbbO }{\mathalpha}{mathematical double-struck capital o}%
+\UnicodeMathSymbol{"1D54A}{\BbbS }{\mathalpha}{mathematical double-struck capital s}%
+\UnicodeMathSymbol{"1D54B}{\BbbT }{\mathalpha}{mathematical double-struck capital t}%
+\UnicodeMathSymbol{"1D54C}{\BbbU }{\mathalpha}{mathematical double-struck capital u}%
+\UnicodeMathSymbol{"1D54D}{\BbbV }{\mathalpha}{mathematical double-struck capital v}%
+\UnicodeMathSymbol{"1D54E}{\BbbW }{\mathalpha}{mathematical double-struck capital w}%
+\UnicodeMathSymbol{"1D54F}{\BbbX }{\mathalpha}{mathematical double-struck capital x}%
+\UnicodeMathSymbol{"1D550}{\BbbY }{\mathalpha}{mathematical double-struck capital y}%
+\UnicodeMathSymbol{"1D552}{\Bbba }{\mathalpha}{mathematical double-struck small a}%
+\UnicodeMathSymbol{"1D553}{\Bbbb }{\mathalpha}{mathematical double-struck small b}%
+\UnicodeMathSymbol{"1D554}{\Bbbc }{\mathalpha}{mathematical double-struck small c}%
+\UnicodeMathSymbol{"1D555}{\Bbbd }{\mathalpha}{mathematical double-struck small d}%
+\UnicodeMathSymbol{"1D556}{\Bbbe }{\mathalpha}{mathematical double-struck small e}%
+\UnicodeMathSymbol{"1D557}{\Bbbf }{\mathalpha}{mathematical double-struck small f}%
+\UnicodeMathSymbol{"1D558}{\Bbbg }{\mathalpha}{mathematical double-struck small g}%
+\UnicodeMathSymbol{"1D559}{\Bbbh }{\mathalpha}{mathematical double-struck small h}%
+\UnicodeMathSymbol{"1D55A}{\Bbbi }{\mathalpha}{mathematical double-struck small i}%
+\UnicodeMathSymbol{"1D55B}{\Bbbj }{\mathalpha}{mathematical double-struck small j}%
+\UnicodeMathSymbol{"1D55C}{\Bbbk }{\mathalpha}{mathematical double-struck small k}%
+\UnicodeMathSymbol{"1D55D}{\Bbbl }{\mathalpha}{mathematical double-struck small l}%
+\UnicodeMathSymbol{"1D55E}{\Bbbm }{\mathalpha}{mathematical double-struck small m}%
+\UnicodeMathSymbol{"1D55F}{\Bbbn }{\mathalpha}{mathematical double-struck small n}%
+\UnicodeMathSymbol{"1D560}{\Bbbo }{\mathalpha}{mathematical double-struck small o}%
+\UnicodeMathSymbol{"1D561}{\Bbbp }{\mathalpha}{mathematical double-struck small p}%
+\UnicodeMathSymbol{"1D562}{\Bbbq }{\mathalpha}{mathematical double-struck small q}%
+\UnicodeMathSymbol{"1D563}{\Bbbr }{\mathalpha}{mathematical double-struck small r}%
+\UnicodeMathSymbol{"1D564}{\Bbbs }{\mathalpha}{mathematical double-struck small s}%
+\UnicodeMathSymbol{"1D565}{\Bbbt }{\mathalpha}{mathematical double-struck small t}%
+\UnicodeMathSymbol{"1D566}{\Bbbu }{\mathalpha}{mathematical double-struck small u}%
+\UnicodeMathSymbol{"1D567}{\Bbbv }{\mathalpha}{mathematical double-struck small v}%
+\UnicodeMathSymbol{"1D568}{\Bbbw }{\mathalpha}{mathematical double-struck small w}%
+\UnicodeMathSymbol{"1D569}{\Bbbx }{\mathalpha}{mathematical double-struck small x}%
+\UnicodeMathSymbol{"1D56A}{\Bbby }{\mathalpha}{mathematical double-struck small y}%
+\UnicodeMathSymbol{"1D56B}{\Bbbz }{\mathalpha}{mathematical double-struck small z}%
+\UnicodeMathSymbol{"1D56C}{\mbffrakA }{\mathalpha}{mathematical bold fraktur capital a}%
+\UnicodeMathSymbol{"1D56D}{\mbffrakB }{\mathalpha}{mathematical bold fraktur capital b}%
+\UnicodeMathSymbol{"1D56E}{\mbffrakC }{\mathalpha}{mathematical bold fraktur capital c}%
+\UnicodeMathSymbol{"1D56F}{\mbffrakD }{\mathalpha}{mathematical bold fraktur capital d}%
+\UnicodeMathSymbol{"1D570}{\mbffrakE }{\mathalpha}{mathematical bold fraktur capital e}%
+\UnicodeMathSymbol{"1D571}{\mbffrakF }{\mathalpha}{mathematical bold fraktur capital f}%
+\UnicodeMathSymbol{"1D572}{\mbffrakG }{\mathalpha}{mathematical bold fraktur capital g}%
+\UnicodeMathSymbol{"1D573}{\mbffrakH }{\mathalpha}{mathematical bold fraktur capital h}%
+\UnicodeMathSymbol{"1D574}{\mbffrakI }{\mathalpha}{mathematical bold fraktur capital i}%
+\UnicodeMathSymbol{"1D575}{\mbffrakJ }{\mathalpha}{mathematical bold fraktur capital j}%
+\UnicodeMathSymbol{"1D576}{\mbffrakK }{\mathalpha}{mathematical bold fraktur capital k}%
+\UnicodeMathSymbol{"1D577}{\mbffrakL }{\mathalpha}{mathematical bold fraktur capital l}%
+\UnicodeMathSymbol{"1D578}{\mbffrakM }{\mathalpha}{mathematical bold fraktur capital m}%
+\UnicodeMathSymbol{"1D579}{\mbffrakN }{\mathalpha}{mathematical bold fraktur capital n}%
+\UnicodeMathSymbol{"1D57A}{\mbffrakO }{\mathalpha}{mathematical bold fraktur capital o}%
+\UnicodeMathSymbol{"1D57B}{\mbffrakP }{\mathalpha}{mathematical bold fraktur capital p}%
+\UnicodeMathSymbol{"1D57C}{\mbffrakQ }{\mathalpha}{mathematical bold fraktur capital q}%
+\UnicodeMathSymbol{"1D57D}{\mbffrakR }{\mathalpha}{mathematical bold fraktur capital r}%
+\UnicodeMathSymbol{"1D57E}{\mbffrakS }{\mathalpha}{mathematical bold fraktur capital s}%
+\UnicodeMathSymbol{"1D57F}{\mbffrakT }{\mathalpha}{mathematical bold fraktur capital t}%
+\UnicodeMathSymbol{"1D580}{\mbffrakU }{\mathalpha}{mathematical bold fraktur capital u}%
+\UnicodeMathSymbol{"1D581}{\mbffrakV }{\mathalpha}{mathematical bold fraktur capital v}%
+\UnicodeMathSymbol{"1D582}{\mbffrakW }{\mathalpha}{mathematical bold fraktur capital w}%
+\UnicodeMathSymbol{"1D583}{\mbffrakX }{\mathalpha}{mathematical bold fraktur capital x}%
+\UnicodeMathSymbol{"1D584}{\mbffrakY }{\mathalpha}{mathematical bold fraktur capital y}%
+\UnicodeMathSymbol{"1D585}{\mbffrakZ }{\mathalpha}{mathematical bold fraktur capital z}%
+\UnicodeMathSymbol{"1D586}{\mbffraka }{\mathalpha}{mathematical bold fraktur small a}%
+\UnicodeMathSymbol{"1D587}{\mbffrakb }{\mathalpha}{mathematical bold fraktur small b}%
+\UnicodeMathSymbol{"1D588}{\mbffrakc }{\mathalpha}{mathematical bold fraktur small c}%
+\UnicodeMathSymbol{"1D589}{\mbffrakd }{\mathalpha}{mathematical bold fraktur small d}%
+\UnicodeMathSymbol{"1D58A}{\mbffrake }{\mathalpha}{mathematical bold fraktur small e}%
+\UnicodeMathSymbol{"1D58B}{\mbffrakf }{\mathalpha}{mathematical bold fraktur small f}%
+\UnicodeMathSymbol{"1D58C}{\mbffrakg }{\mathalpha}{mathematical bold fraktur small g}%
+\UnicodeMathSymbol{"1D58D}{\mbffrakh }{\mathalpha}{mathematical bold fraktur small h}%
+\UnicodeMathSymbol{"1D58E}{\mbffraki }{\mathalpha}{mathematical bold fraktur small i}%
+\UnicodeMathSymbol{"1D58F}{\mbffrakj }{\mathalpha}{mathematical bold fraktur small j}%
+\UnicodeMathSymbol{"1D590}{\mbffrakk }{\mathalpha}{mathematical bold fraktur small k}%
+\UnicodeMathSymbol{"1D591}{\mbffrakl }{\mathalpha}{mathematical bold fraktur small l}%
+\UnicodeMathSymbol{"1D592}{\mbffrakm }{\mathalpha}{mathematical bold fraktur small m}%
+\UnicodeMathSymbol{"1D593}{\mbffrakn }{\mathalpha}{mathematical bold fraktur small n}%
+\UnicodeMathSymbol{"1D594}{\mbffrako }{\mathalpha}{mathematical bold fraktur small o}%
+\UnicodeMathSymbol{"1D595}{\mbffrakp }{\mathalpha}{mathematical bold fraktur small p}%
+\UnicodeMathSymbol{"1D596}{\mbffrakq }{\mathalpha}{mathematical bold fraktur small q}%
+\UnicodeMathSymbol{"1D597}{\mbffrakr }{\mathalpha}{mathematical bold fraktur small r}%
+\UnicodeMathSymbol{"1D598}{\mbffraks }{\mathalpha}{mathematical bold fraktur small s}%
+\UnicodeMathSymbol{"1D599}{\mbffrakt }{\mathalpha}{mathematical bold fraktur small t}%
+\UnicodeMathSymbol{"1D59A}{\mbffraku }{\mathalpha}{mathematical bold fraktur small u}%
+\UnicodeMathSymbol{"1D59B}{\mbffrakv }{\mathalpha}{mathematical bold fraktur small v}%
+\UnicodeMathSymbol{"1D59C}{\mbffrakw }{\mathalpha}{mathematical bold fraktur small w}%
+\UnicodeMathSymbol{"1D59D}{\mbffrakx }{\mathalpha}{mathematical bold fraktur small x}%
+\UnicodeMathSymbol{"1D59E}{\mbffraky }{\mathalpha}{mathematical bold fraktur small y}%
+\UnicodeMathSymbol{"1D59F}{\mbffrakz }{\mathalpha}{mathematical bold fraktur small z}%
+\UnicodeMathSymbol{"1D5A0}{\msansA }{\mathalpha}{mathematical sans-serif capital a}%
+\UnicodeMathSymbol{"1D5A1}{\msansB }{\mathalpha}{mathematical sans-serif capital b}%
+\UnicodeMathSymbol{"1D5A2}{\msansC }{\mathalpha}{mathematical sans-serif capital c}%
+\UnicodeMathSymbol{"1D5A3}{\msansD }{\mathalpha}{mathematical sans-serif capital d}%
+\UnicodeMathSymbol{"1D5A4}{\msansE }{\mathalpha}{mathematical sans-serif capital e}%
+\UnicodeMathSymbol{"1D5A5}{\msansF }{\mathalpha}{mathematical sans-serif capital f}%
+\UnicodeMathSymbol{"1D5A6}{\msansG }{\mathalpha}{mathematical sans-serif capital g}%
+\UnicodeMathSymbol{"1D5A7}{\msansH }{\mathalpha}{mathematical sans-serif capital h}%
+\UnicodeMathSymbol{"1D5A8}{\msansI }{\mathalpha}{mathematical sans-serif capital i}%
+\UnicodeMathSymbol{"1D5A9}{\msansJ }{\mathalpha}{mathematical sans-serif capital j}%
+\UnicodeMathSymbol{"1D5AA}{\msansK }{\mathalpha}{mathematical sans-serif capital k}%
+\UnicodeMathSymbol{"1D5AB}{\msansL }{\mathalpha}{mathematical sans-serif capital l}%
+\UnicodeMathSymbol{"1D5AC}{\msansM }{\mathalpha}{mathematical sans-serif capital m}%
+\UnicodeMathSymbol{"1D5AD}{\msansN }{\mathalpha}{mathematical sans-serif capital n}%
+\UnicodeMathSymbol{"1D5AE}{\msansO }{\mathalpha}{mathematical sans-serif capital o}%
+\UnicodeMathSymbol{"1D5AF}{\msansP }{\mathalpha}{mathematical sans-serif capital p}%
+\UnicodeMathSymbol{"1D5B0}{\msansQ }{\mathalpha}{mathematical sans-serif capital q}%
+\UnicodeMathSymbol{"1D5B1}{\msansR }{\mathalpha}{mathematical sans-serif capital r}%
+\UnicodeMathSymbol{"1D5B2}{\msansS }{\mathalpha}{mathematical sans-serif capital s}%
+\UnicodeMathSymbol{"1D5B3}{\msansT }{\mathalpha}{mathematical sans-serif capital t}%
+\UnicodeMathSymbol{"1D5B4}{\msansU }{\mathalpha}{mathematical sans-serif capital u}%
+\UnicodeMathSymbol{"1D5B5}{\msansV }{\mathalpha}{mathematical sans-serif capital v}%
+\UnicodeMathSymbol{"1D5B6}{\msansW }{\mathalpha}{mathematical sans-serif capital w}%
+\UnicodeMathSymbol{"1D5B7}{\msansX }{\mathalpha}{mathematical sans-serif capital x}%
+\UnicodeMathSymbol{"1D5B8}{\msansY }{\mathalpha}{mathematical sans-serif capital y}%
+\UnicodeMathSymbol{"1D5B9}{\msansZ }{\mathalpha}{mathematical sans-serif capital z}%
+\UnicodeMathSymbol{"1D5BA}{\msansa }{\mathalpha}{mathematical sans-serif small a}%
+\UnicodeMathSymbol{"1D5BB}{\msansb }{\mathalpha}{mathematical sans-serif small b}%
+\UnicodeMathSymbol{"1D5BC}{\msansc }{\mathalpha}{mathematical sans-serif small c}%
+\UnicodeMathSymbol{"1D5BD}{\msansd }{\mathalpha}{mathematical sans-serif small d}%
+\UnicodeMathSymbol{"1D5BE}{\msanse }{\mathalpha}{mathematical sans-serif small e}%
+\UnicodeMathSymbol{"1D5BF}{\msansf }{\mathalpha}{mathematical sans-serif small f}%
+\UnicodeMathSymbol{"1D5C0}{\msansg }{\mathalpha}{mathematical sans-serif small g}%
+\UnicodeMathSymbol{"1D5C1}{\msansh }{\mathalpha}{mathematical sans-serif small h}%
+\UnicodeMathSymbol{"1D5C2}{\msansi }{\mathalpha}{mathematical sans-serif small i}%
+\UnicodeMathSymbol{"1D5C3}{\msansj }{\mathalpha}{mathematical sans-serif small j}%
+\UnicodeMathSymbol{"1D5C4}{\msansk }{\mathalpha}{mathematical sans-serif small k}%
+\UnicodeMathSymbol{"1D5C5}{\msansl }{\mathalpha}{mathematical sans-serif small l}%
+\UnicodeMathSymbol{"1D5C6}{\msansm }{\mathalpha}{mathematical sans-serif small m}%
+\UnicodeMathSymbol{"1D5C7}{\msansn }{\mathalpha}{mathematical sans-serif small n}%
+\UnicodeMathSymbol{"1D5C8}{\msanso }{\mathalpha}{mathematical sans-serif small o}%
+\UnicodeMathSymbol{"1D5C9}{\msansp }{\mathalpha}{mathematical sans-serif small p}%
+\UnicodeMathSymbol{"1D5CA}{\msansq }{\mathalpha}{mathematical sans-serif small q}%
+\UnicodeMathSymbol{"1D5CB}{\msansr }{\mathalpha}{mathematical sans-serif small r}%
+\UnicodeMathSymbol{"1D5CC}{\msanss }{\mathalpha}{mathematical sans-serif small s}%
+\UnicodeMathSymbol{"1D5CD}{\msanst }{\mathalpha}{mathematical sans-serif small t}%
+\UnicodeMathSymbol{"1D5CE}{\msansu }{\mathalpha}{mathematical sans-serif small u}%
+\UnicodeMathSymbol{"1D5CF}{\msansv }{\mathalpha}{mathematical sans-serif small v}%
+\UnicodeMathSymbol{"1D5D0}{\msansw }{\mathalpha}{mathematical sans-serif small w}%
+\UnicodeMathSymbol{"1D5D1}{\msansx }{\mathalpha}{mathematical sans-serif small x}%
+\UnicodeMathSymbol{"1D5D2}{\msansy }{\mathalpha}{mathematical sans-serif small y}%
+\UnicodeMathSymbol{"1D5D3}{\msansz }{\mathalpha}{mathematical sans-serif small z}%
+\UnicodeMathSymbol{"1D5D4}{\mbfsansA }{\mathalpha}{mathematical sans-serif bold capital a}%
+\UnicodeMathSymbol{"1D5D5}{\mbfsansB }{\mathalpha}{mathematical sans-serif bold capital b}%
+\UnicodeMathSymbol{"1D5D6}{\mbfsansC }{\mathalpha}{mathematical sans-serif bold capital c}%
+\UnicodeMathSymbol{"1D5D7}{\mbfsansD }{\mathalpha}{mathematical sans-serif bold capital d}%
+\UnicodeMathSymbol{"1D5D8}{\mbfsansE }{\mathalpha}{mathematical sans-serif bold capital e}%
+\UnicodeMathSymbol{"1D5D9}{\mbfsansF }{\mathalpha}{mathematical sans-serif bold capital f}%
+\UnicodeMathSymbol{"1D5DA}{\mbfsansG }{\mathalpha}{mathematical sans-serif bold capital g}%
+\UnicodeMathSymbol{"1D5DB}{\mbfsansH }{\mathalpha}{mathematical sans-serif bold capital h}%
+\UnicodeMathSymbol{"1D5DC}{\mbfsansI }{\mathalpha}{mathematical sans-serif bold capital i}%
+\UnicodeMathSymbol{"1D5DD}{\mbfsansJ }{\mathalpha}{mathematical sans-serif bold capital j}%
+\UnicodeMathSymbol{"1D5DE}{\mbfsansK }{\mathalpha}{mathematical sans-serif bold capital k}%
+\UnicodeMathSymbol{"1D5DF}{\mbfsansL }{\mathalpha}{mathematical sans-serif bold capital l}%
+\UnicodeMathSymbol{"1D5E0}{\mbfsansM }{\mathalpha}{mathematical sans-serif bold capital m}%
+\UnicodeMathSymbol{"1D5E1}{\mbfsansN }{\mathalpha}{mathematical sans-serif bold capital n}%
+\UnicodeMathSymbol{"1D5E2}{\mbfsansO }{\mathalpha}{mathematical sans-serif bold capital o}%
+\UnicodeMathSymbol{"1D5E3}{\mbfsansP }{\mathalpha}{mathematical sans-serif bold capital p}%
+\UnicodeMathSymbol{"1D5E4}{\mbfsansQ }{\mathalpha}{mathematical sans-serif bold capital q}%
+\UnicodeMathSymbol{"1D5E5}{\mbfsansR }{\mathalpha}{mathematical sans-serif bold capital r}%
+\UnicodeMathSymbol{"1D5E6}{\mbfsansS }{\mathalpha}{mathematical sans-serif bold capital s}%
+\UnicodeMathSymbol{"1D5E7}{\mbfsansT }{\mathalpha}{mathematical sans-serif bold capital t}%
+\UnicodeMathSymbol{"1D5E8}{\mbfsansU }{\mathalpha}{mathematical sans-serif bold capital u}%
+\UnicodeMathSymbol{"1D5E9}{\mbfsansV }{\mathalpha}{mathematical sans-serif bold capital v}%
+\UnicodeMathSymbol{"1D5EA}{\mbfsansW }{\mathalpha}{mathematical sans-serif bold capital w}%
+\UnicodeMathSymbol{"1D5EB}{\mbfsansX }{\mathalpha}{mathematical sans-serif bold capital x}%
+\UnicodeMathSymbol{"1D5EC}{\mbfsansY }{\mathalpha}{mathematical sans-serif bold capital y}%
+\UnicodeMathSymbol{"1D5ED}{\mbfsansZ }{\mathalpha}{mathematical sans-serif bold capital z}%
+\UnicodeMathSymbol{"1D5EE}{\mbfsansa }{\mathalpha}{mathematical sans-serif bold small a}%
+\UnicodeMathSymbol{"1D5EF}{\mbfsansb }{\mathalpha}{mathematical sans-serif bold small b}%
+\UnicodeMathSymbol{"1D5F0}{\mbfsansc }{\mathalpha}{mathematical sans-serif bold small c}%
+\UnicodeMathSymbol{"1D5F1}{\mbfsansd }{\mathalpha}{mathematical sans-serif bold small d}%
+\UnicodeMathSymbol{"1D5F2}{\mbfsanse }{\mathalpha}{mathematical sans-serif bold small e}%
+\UnicodeMathSymbol{"1D5F3}{\mbfsansf }{\mathalpha}{mathematical sans-serif bold small f}%
+\UnicodeMathSymbol{"1D5F4}{\mbfsansg }{\mathalpha}{mathematical sans-serif bold small g}%
+\UnicodeMathSymbol{"1D5F5}{\mbfsansh }{\mathalpha}{mathematical sans-serif bold small h}%
+\UnicodeMathSymbol{"1D5F6}{\mbfsansi }{\mathalpha}{mathematical sans-serif bold small i}%
+\UnicodeMathSymbol{"1D5F7}{\mbfsansj }{\mathalpha}{mathematical sans-serif bold small j}%
+\UnicodeMathSymbol{"1D5F8}{\mbfsansk }{\mathalpha}{mathematical sans-serif bold small k}%
+\UnicodeMathSymbol{"1D5F9}{\mbfsansl }{\mathalpha}{mathematical sans-serif bold small l}%
+\UnicodeMathSymbol{"1D5FA}{\mbfsansm }{\mathalpha}{mathematical sans-serif bold small m}%
+\UnicodeMathSymbol{"1D5FB}{\mbfsansn }{\mathalpha}{mathematical sans-serif bold small n}%
+\UnicodeMathSymbol{"1D5FC}{\mbfsanso }{\mathalpha}{mathematical sans-serif bold small o}%
+\UnicodeMathSymbol{"1D5FD}{\mbfsansp }{\mathalpha}{mathematical sans-serif bold small p}%
+\UnicodeMathSymbol{"1D5FE}{\mbfsansq }{\mathalpha}{mathematical sans-serif bold small q}%
+\UnicodeMathSymbol{"1D5FF}{\mbfsansr }{\mathalpha}{mathematical sans-serif bold small r}%
+\UnicodeMathSymbol{"1D600}{\mbfsanss }{\mathalpha}{mathematical sans-serif bold small s}%
+\UnicodeMathSymbol{"1D601}{\mbfsanst }{\mathalpha}{mathematical sans-serif bold small t}%
+\UnicodeMathSymbol{"1D602}{\mbfsansu }{\mathalpha}{mathematical sans-serif bold small u}%
+\UnicodeMathSymbol{"1D603}{\mbfsansv }{\mathalpha}{mathematical sans-serif bold small v}%
+\UnicodeMathSymbol{"1D604}{\mbfsansw }{\mathalpha}{mathematical sans-serif bold small w}%
+\UnicodeMathSymbol{"1D605}{\mbfsansx }{\mathalpha}{mathematical sans-serif bold small x}%
+\UnicodeMathSymbol{"1D606}{\mbfsansy }{\mathalpha}{mathematical sans-serif bold small y}%
+\UnicodeMathSymbol{"1D607}{\mbfsansz }{\mathalpha}{mathematical sans-serif bold small z}%
+\UnicodeMathSymbol{"1D608}{\mitsansA }{\mathalpha}{mathematical sans-serif italic capital a}%
+\UnicodeMathSymbol{"1D609}{\mitsansB }{\mathalpha}{mathematical sans-serif italic capital b}%
+\UnicodeMathSymbol{"1D60A}{\mitsansC }{\mathalpha}{mathematical sans-serif italic capital c}%
+\UnicodeMathSymbol{"1D60B}{\mitsansD }{\mathalpha}{mathematical sans-serif italic capital d}%
+\UnicodeMathSymbol{"1D60C}{\mitsansE }{\mathalpha}{mathematical sans-serif italic capital e}%
+\UnicodeMathSymbol{"1D60D}{\mitsansF }{\mathalpha}{mathematical sans-serif italic capital f}%
+\UnicodeMathSymbol{"1D60E}{\mitsansG }{\mathalpha}{mathematical sans-serif italic capital g}%
+\UnicodeMathSymbol{"1D60F}{\mitsansH }{\mathalpha}{mathematical sans-serif italic capital h}%
+\UnicodeMathSymbol{"1D610}{\mitsansI }{\mathalpha}{mathematical sans-serif italic capital i}%
+\UnicodeMathSymbol{"1D611}{\mitsansJ }{\mathalpha}{mathematical sans-serif italic capital j}%
+\UnicodeMathSymbol{"1D612}{\mitsansK }{\mathalpha}{mathematical sans-serif italic capital k}%
+\UnicodeMathSymbol{"1D613}{\mitsansL }{\mathalpha}{mathematical sans-serif italic capital l}%
+\UnicodeMathSymbol{"1D614}{\mitsansM }{\mathalpha}{mathematical sans-serif italic capital m}%
+\UnicodeMathSymbol{"1D615}{\mitsansN }{\mathalpha}{mathematical sans-serif italic capital n}%
+\UnicodeMathSymbol{"1D616}{\mitsansO }{\mathalpha}{mathematical sans-serif italic capital o}%
+\UnicodeMathSymbol{"1D617}{\mitsansP }{\mathalpha}{mathematical sans-serif italic capital p}%
+\UnicodeMathSymbol{"1D618}{\mitsansQ }{\mathalpha}{mathematical sans-serif italic capital q}%
+\UnicodeMathSymbol{"1D619}{\mitsansR }{\mathalpha}{mathematical sans-serif italic capital r}%
+\UnicodeMathSymbol{"1D61A}{\mitsansS }{\mathalpha}{mathematical sans-serif italic capital s}%
+\UnicodeMathSymbol{"1D61B}{\mitsansT }{\mathalpha}{mathematical sans-serif italic capital t}%
+\UnicodeMathSymbol{"1D61C}{\mitsansU }{\mathalpha}{mathematical sans-serif italic capital u}%
+\UnicodeMathSymbol{"1D61D}{\mitsansV }{\mathalpha}{mathematical sans-serif italic capital v}%
+\UnicodeMathSymbol{"1D61E}{\mitsansW }{\mathalpha}{mathematical sans-serif italic capital w}%
+\UnicodeMathSymbol{"1D61F}{\mitsansX }{\mathalpha}{mathematical sans-serif italic capital x}%
+\UnicodeMathSymbol{"1D620}{\mitsansY }{\mathalpha}{mathematical sans-serif italic capital y}%
+\UnicodeMathSymbol{"1D621}{\mitsansZ }{\mathalpha}{mathematical sans-serif italic capital z}%
+\UnicodeMathSymbol{"1D622}{\mitsansa }{\mathalpha}{mathematical sans-serif italic small a}%
+\UnicodeMathSymbol{"1D623}{\mitsansb }{\mathalpha}{mathematical sans-serif italic small b}%
+\UnicodeMathSymbol{"1D624}{\mitsansc }{\mathalpha}{mathematical sans-serif italic small c}%
+\UnicodeMathSymbol{"1D625}{\mitsansd }{\mathalpha}{mathematical sans-serif italic small d}%
+\UnicodeMathSymbol{"1D626}{\mitsanse }{\mathalpha}{mathematical sans-serif italic small e}%
+\UnicodeMathSymbol{"1D627}{\mitsansf }{\mathalpha}{mathematical sans-serif italic small f}%
+\UnicodeMathSymbol{"1D628}{\mitsansg }{\mathalpha}{mathematical sans-serif italic small g}%
+\UnicodeMathSymbol{"1D629}{\mitsansh }{\mathalpha}{mathematical sans-serif italic small h}%
+\UnicodeMathSymbol{"1D62A}{\mitsansi }{\mathalpha}{mathematical sans-serif italic small i}%
+\UnicodeMathSymbol{"1D62B}{\mitsansj }{\mathalpha}{mathematical sans-serif italic small j}%
+\UnicodeMathSymbol{"1D62C}{\mitsansk }{\mathalpha}{mathematical sans-serif italic small k}%
+\UnicodeMathSymbol{"1D62D}{\mitsansl }{\mathalpha}{mathematical sans-serif italic small l}%
+\UnicodeMathSymbol{"1D62E}{\mitsansm }{\mathalpha}{mathematical sans-serif italic small m}%
+\UnicodeMathSymbol{"1D62F}{\mitsansn }{\mathalpha}{mathematical sans-serif italic small n}%
+\UnicodeMathSymbol{"1D630}{\mitsanso }{\mathalpha}{mathematical sans-serif italic small o}%
+\UnicodeMathSymbol{"1D631}{\mitsansp }{\mathalpha}{mathematical sans-serif italic small p}%
+\UnicodeMathSymbol{"1D632}{\mitsansq }{\mathalpha}{mathematical sans-serif italic small q}%
+\UnicodeMathSymbol{"1D633}{\mitsansr }{\mathalpha}{mathematical sans-serif italic small r}%
+\UnicodeMathSymbol{"1D634}{\mitsanss }{\mathalpha}{mathematical sans-serif italic small s}%
+\UnicodeMathSymbol{"1D635}{\mitsanst }{\mathalpha}{mathematical sans-serif italic small t}%
+\UnicodeMathSymbol{"1D636}{\mitsansu }{\mathalpha}{mathematical sans-serif italic small u}%
+\UnicodeMathSymbol{"1D637}{\mitsansv }{\mathalpha}{mathematical sans-serif italic small v}%
+\UnicodeMathSymbol{"1D638}{\mitsansw }{\mathalpha}{mathematical sans-serif italic small w}%
+\UnicodeMathSymbol{"1D639}{\mitsansx }{\mathalpha}{mathematical sans-serif italic small x}%
+\UnicodeMathSymbol{"1D63A}{\mitsansy }{\mathalpha}{mathematical sans-serif italic small y}%
+\UnicodeMathSymbol{"1D63B}{\mitsansz }{\mathalpha}{mathematical sans-serif italic small z}%
+\UnicodeMathSymbol{"1D63C}{\mbfitsansA }{\mathalpha}{mathematical sans-serif bold italic capital a}%
+\UnicodeMathSymbol{"1D63D}{\mbfitsansB }{\mathalpha}{mathematical sans-serif bold italic capital b}%
+\UnicodeMathSymbol{"1D63E}{\mbfitsansC }{\mathalpha}{mathematical sans-serif bold italic capital c}%
+\UnicodeMathSymbol{"1D63F}{\mbfitsansD }{\mathalpha}{mathematical sans-serif bold italic capital d}%
+\UnicodeMathSymbol{"1D640}{\mbfitsansE }{\mathalpha}{mathematical sans-serif bold italic capital e}%
+\UnicodeMathSymbol{"1D641}{\mbfitsansF }{\mathalpha}{mathematical sans-serif bold italic capital f}%
+\UnicodeMathSymbol{"1D642}{\mbfitsansG }{\mathalpha}{mathematical sans-serif bold italic capital g}%
+\UnicodeMathSymbol{"1D643}{\mbfitsansH }{\mathalpha}{mathematical sans-serif bold italic capital h}%
+\UnicodeMathSymbol{"1D644}{\mbfitsansI }{\mathalpha}{mathematical sans-serif bold italic capital i}%
+\UnicodeMathSymbol{"1D645}{\mbfitsansJ }{\mathalpha}{mathematical sans-serif bold italic capital j}%
+\UnicodeMathSymbol{"1D646}{\mbfitsansK }{\mathalpha}{mathematical sans-serif bold italic capital k}%
+\UnicodeMathSymbol{"1D647}{\mbfitsansL }{\mathalpha}{mathematical sans-serif bold italic capital l}%
+\UnicodeMathSymbol{"1D648}{\mbfitsansM }{\mathalpha}{mathematical sans-serif bold italic capital m}%
+\UnicodeMathSymbol{"1D649}{\mbfitsansN }{\mathalpha}{mathematical sans-serif bold italic capital n}%
+\UnicodeMathSymbol{"1D64A}{\mbfitsansO }{\mathalpha}{mathematical sans-serif bold italic capital o}%
+\UnicodeMathSymbol{"1D64B}{\mbfitsansP }{\mathalpha}{mathematical sans-serif bold italic capital p}%
+\UnicodeMathSymbol{"1D64C}{\mbfitsansQ }{\mathalpha}{mathematical sans-serif bold italic capital q}%
+\UnicodeMathSymbol{"1D64D}{\mbfitsansR }{\mathalpha}{mathematical sans-serif bold italic capital r}%
+\UnicodeMathSymbol{"1D64E}{\mbfitsansS }{\mathalpha}{mathematical sans-serif bold italic capital s}%
+\UnicodeMathSymbol{"1D64F}{\mbfitsansT }{\mathalpha}{mathematical sans-serif bold italic capital t}%
+\UnicodeMathSymbol{"1D650}{\mbfitsansU }{\mathalpha}{mathematical sans-serif bold italic capital u}%
+\UnicodeMathSymbol{"1D651}{\mbfitsansV }{\mathalpha}{mathematical sans-serif bold italic capital v}%
+\UnicodeMathSymbol{"1D652}{\mbfitsansW }{\mathalpha}{mathematical sans-serif bold italic capital w}%
+\UnicodeMathSymbol{"1D653}{\mbfitsansX }{\mathalpha}{mathematical sans-serif bold italic capital x}%
+\UnicodeMathSymbol{"1D654}{\mbfitsansY }{\mathalpha}{mathematical sans-serif bold italic capital y}%
+\UnicodeMathSymbol{"1D655}{\mbfitsansZ }{\mathalpha}{mathematical sans-serif bold italic capital z}%
+\UnicodeMathSymbol{"1D656}{\mbfitsansa }{\mathalpha}{mathematical sans-serif bold italic small a}%
+\UnicodeMathSymbol{"1D657}{\mbfitsansb }{\mathalpha}{mathematical sans-serif bold italic small b}%
+\UnicodeMathSymbol{"1D658}{\mbfitsansc }{\mathalpha}{mathematical sans-serif bold italic small c}%
+\UnicodeMathSymbol{"1D659}{\mbfitsansd }{\mathalpha}{mathematical sans-serif bold italic small d}%
+\UnicodeMathSymbol{"1D65A}{\mbfitsanse }{\mathalpha}{mathematical sans-serif bold italic small e}%
+\UnicodeMathSymbol{"1D65B}{\mbfitsansf }{\mathalpha}{mathematical sans-serif bold italic small f}%
+\UnicodeMathSymbol{"1D65C}{\mbfitsansg }{\mathalpha}{mathematical sans-serif bold italic small g}%
+\UnicodeMathSymbol{"1D65D}{\mbfitsansh }{\mathalpha}{mathematical sans-serif bold italic small h}%
+\UnicodeMathSymbol{"1D65E}{\mbfitsansi }{\mathalpha}{mathematical sans-serif bold italic small i}%
+\UnicodeMathSymbol{"1D65F}{\mbfitsansj }{\mathalpha}{mathematical sans-serif bold italic small j}%
+\UnicodeMathSymbol{"1D660}{\mbfitsansk }{\mathalpha}{mathematical sans-serif bold italic small k}%
+\UnicodeMathSymbol{"1D661}{\mbfitsansl }{\mathalpha}{mathematical sans-serif bold italic small l}%
+\UnicodeMathSymbol{"1D662}{\mbfitsansm }{\mathalpha}{mathematical sans-serif bold italic small m}%
+\UnicodeMathSymbol{"1D663}{\mbfitsansn }{\mathalpha}{mathematical sans-serif bold italic small n}%
+\UnicodeMathSymbol{"1D664}{\mbfitsanso }{\mathalpha}{mathematical sans-serif bold italic small o}%
+\UnicodeMathSymbol{"1D665}{\mbfitsansp }{\mathalpha}{mathematical sans-serif bold italic small p}%
+\UnicodeMathSymbol{"1D666}{\mbfitsansq }{\mathalpha}{mathematical sans-serif bold italic small q}%
+\UnicodeMathSymbol{"1D667}{\mbfitsansr }{\mathalpha}{mathematical sans-serif bold italic small r}%
+\UnicodeMathSymbol{"1D668}{\mbfitsanss }{\mathalpha}{mathematical sans-serif bold italic small s}%
+\UnicodeMathSymbol{"1D669}{\mbfitsanst }{\mathalpha}{mathematical sans-serif bold italic small t}%
+\UnicodeMathSymbol{"1D66A}{\mbfitsansu }{\mathalpha}{mathematical sans-serif bold italic small u}%
+\UnicodeMathSymbol{"1D66B}{\mbfitsansv }{\mathalpha}{mathematical sans-serif bold italic small v}%
+\UnicodeMathSymbol{"1D66C}{\mbfitsansw }{\mathalpha}{mathematical sans-serif bold italic small w}%
+\UnicodeMathSymbol{"1D66D}{\mbfitsansx }{\mathalpha}{mathematical sans-serif bold italic small x}%
+\UnicodeMathSymbol{"1D66E}{\mbfitsansy }{\mathalpha}{mathematical sans-serif bold italic small y}%
+\UnicodeMathSymbol{"1D66F}{\mbfitsansz }{\mathalpha}{mathematical sans-serif bold italic small z}%
+\UnicodeMathSymbol{"1D670}{\mttA }{\mathalpha}{mathematical monospace capital a}%
+\UnicodeMathSymbol{"1D671}{\mttB }{\mathalpha}{mathematical monospace capital b}%
+\UnicodeMathSymbol{"1D672}{\mttC }{\mathalpha}{mathematical monospace capital c}%
+\UnicodeMathSymbol{"1D673}{\mttD }{\mathalpha}{mathematical monospace capital d}%
+\UnicodeMathSymbol{"1D674}{\mttE }{\mathalpha}{mathematical monospace capital e}%
+\UnicodeMathSymbol{"1D675}{\mttF }{\mathalpha}{mathematical monospace capital f}%
+\UnicodeMathSymbol{"1D676}{\mttG }{\mathalpha}{mathematical monospace capital g}%
+\UnicodeMathSymbol{"1D677}{\mttH }{\mathalpha}{mathematical monospace capital h}%
+\UnicodeMathSymbol{"1D678}{\mttI }{\mathalpha}{mathematical monospace capital i}%
+\UnicodeMathSymbol{"1D679}{\mttJ }{\mathalpha}{mathematical monospace capital j}%
+\UnicodeMathSymbol{"1D67A}{\mttK }{\mathalpha}{mathematical monospace capital k}%
+\UnicodeMathSymbol{"1D67B}{\mttL }{\mathalpha}{mathematical monospace capital l}%
+\UnicodeMathSymbol{"1D67C}{\mttM }{\mathalpha}{mathematical monospace capital m}%
+\UnicodeMathSymbol{"1D67D}{\mttN }{\mathalpha}{mathematical monospace capital n}%
+\UnicodeMathSymbol{"1D67E}{\mttO }{\mathalpha}{mathematical monospace capital o}%
+\UnicodeMathSymbol{"1D67F}{\mttP }{\mathalpha}{mathematical monospace capital p}%
+\UnicodeMathSymbol{"1D680}{\mttQ }{\mathalpha}{mathematical monospace capital q}%
+\UnicodeMathSymbol{"1D681}{\mttR }{\mathalpha}{mathematical monospace capital r}%
+\UnicodeMathSymbol{"1D682}{\mttS }{\mathalpha}{mathematical monospace capital s}%
+\UnicodeMathSymbol{"1D683}{\mttT }{\mathalpha}{mathematical monospace capital t}%
+\UnicodeMathSymbol{"1D684}{\mttU }{\mathalpha}{mathematical monospace capital u}%
+\UnicodeMathSymbol{"1D685}{\mttV }{\mathalpha}{mathematical monospace capital v}%
+\UnicodeMathSymbol{"1D686}{\mttW }{\mathalpha}{mathematical monospace capital w}%
+\UnicodeMathSymbol{"1D687}{\mttX }{\mathalpha}{mathematical monospace capital x}%
+\UnicodeMathSymbol{"1D688}{\mttY }{\mathalpha}{mathematical monospace capital y}%
+\UnicodeMathSymbol{"1D689}{\mttZ }{\mathalpha}{mathematical monospace capital z}%
+\UnicodeMathSymbol{"1D68A}{\mtta }{\mathalpha}{mathematical monospace small a}%
+\UnicodeMathSymbol{"1D68B}{\mttb }{\mathalpha}{mathematical monospace small b}%
+\UnicodeMathSymbol{"1D68C}{\mttc }{\mathalpha}{mathematical monospace small c}%
+\UnicodeMathSymbol{"1D68D}{\mttd }{\mathalpha}{mathematical monospace small d}%
+\UnicodeMathSymbol{"1D68E}{\mtte }{\mathalpha}{mathematical monospace small e}%
+\UnicodeMathSymbol{"1D68F}{\mttf }{\mathalpha}{mathematical monospace small f}%
+\UnicodeMathSymbol{"1D690}{\mttg }{\mathalpha}{mathematical monospace small g}%
+\UnicodeMathSymbol{"1D691}{\mtth }{\mathalpha}{mathematical monospace small h}%
+\UnicodeMathSymbol{"1D692}{\mtti }{\mathalpha}{mathematical monospace small i}%
+\UnicodeMathSymbol{"1D693}{\mttj }{\mathalpha}{mathematical monospace small j}%
+\UnicodeMathSymbol{"1D694}{\mttk }{\mathalpha}{mathematical monospace small k}%
+\UnicodeMathSymbol{"1D695}{\mttl }{\mathalpha}{mathematical monospace small l}%
+\UnicodeMathSymbol{"1D696}{\mttm }{\mathalpha}{mathematical monospace small m}%
+\UnicodeMathSymbol{"1D697}{\mttn }{\mathalpha}{mathematical monospace small n}%
+\UnicodeMathSymbol{"1D698}{\mtto }{\mathalpha}{mathematical monospace small o}%
+\UnicodeMathSymbol{"1D699}{\mttp }{\mathalpha}{mathematical monospace small p}%
+\UnicodeMathSymbol{"1D69A}{\mttq }{\mathalpha}{mathematical monospace small q}%
+\UnicodeMathSymbol{"1D69B}{\mttr }{\mathalpha}{mathematical monospace small r}%
+\UnicodeMathSymbol{"1D69C}{\mtts }{\mathalpha}{mathematical monospace small s}%
+\UnicodeMathSymbol{"1D69D}{\mttt }{\mathalpha}{mathematical monospace small t}%
+\UnicodeMathSymbol{"1D69E}{\mttu }{\mathalpha}{mathematical monospace small u}%
+\UnicodeMathSymbol{"1D69F}{\mttv }{\mathalpha}{mathematical monospace small v}%
+\UnicodeMathSymbol{"1D6A0}{\mttw }{\mathalpha}{mathematical monospace small w}%
+\UnicodeMathSymbol{"1D6A1}{\mttx }{\mathalpha}{mathematical monospace small x}%
+\UnicodeMathSymbol{"1D6A2}{\mtty }{\mathalpha}{mathematical monospace small y}%
+\UnicodeMathSymbol{"1D6A3}{\mttz }{\mathalpha}{mathematical monospace small z}%
+\UnicodeMathSymbol{"1D6A4}{\imath }{\mathalpha}{mathematical italic small dotless i}%
+\UnicodeMathSymbol{"1D6A5}{\jmath }{\mathalpha}{mathematical italic small dotless j}%
+\UnicodeMathSymbol{"1D6A8}{\mbfAlpha }{\mathalpha}{mathematical bold capital alpha}%
+\UnicodeMathSymbol{"1D6A9}{\mbfBeta }{\mathalpha}{mathematical bold capital beta}%
+\UnicodeMathSymbol{"1D6AA}{\mbfGamma }{\mathalpha}{mathematical bold capital gamma}%
+\UnicodeMathSymbol{"1D6AB}{\mbfDelta }{\mathalpha}{mathematical bold capital delta}%
+\UnicodeMathSymbol{"1D6AC}{\mbfEpsilon }{\mathalpha}{mathematical bold capital epsilon}%
+\UnicodeMathSymbol{"1D6AD}{\mbfZeta }{\mathalpha}{mathematical bold capital zeta}%
+\UnicodeMathSymbol{"1D6AE}{\mbfEta }{\mathalpha}{mathematical bold capital eta}%
+\UnicodeMathSymbol{"1D6AF}{\mbfTheta }{\mathalpha}{mathematical bold capital theta}%
+\UnicodeMathSymbol{"1D6B0}{\mbfIota }{\mathalpha}{mathematical bold capital iota}%
+\UnicodeMathSymbol{"1D6B1}{\mbfKappa }{\mathalpha}{mathematical bold capital kappa}%
+\UnicodeMathSymbol{"1D6B2}{\mbfLambda }{\mathalpha}{mathematical bold capital lambda}%
+\UnicodeMathSymbol{"1D6B3}{\mbfMu }{\mathalpha}{mathematical bold capital mu}%
+\UnicodeMathSymbol{"1D6B4}{\mbfNu }{\mathalpha}{mathematical bold capital nu}%
+\UnicodeMathSymbol{"1D6B5}{\mbfXi }{\mathalpha}{mathematical bold capital xi}%
+\UnicodeMathSymbol{"1D6B6}{\mbfOmicron }{\mathalpha}{mathematical bold capital omicron}%
+\UnicodeMathSymbol{"1D6B7}{\mbfPi }{\mathalpha}{mathematical bold capital pi}%
+\UnicodeMathSymbol{"1D6B8}{\mbfRho }{\mathalpha}{mathematical bold capital rho}%
+\UnicodeMathSymbol{"1D6B9}{\mbfvarTheta }{\mathalpha}{mathematical bold capital theta symbol}%
+\UnicodeMathSymbol{"1D6BA}{\mbfSigma }{\mathalpha}{mathematical bold capital sigma}%
+\UnicodeMathSymbol{"1D6BB}{\mbfTau }{\mathalpha}{mathematical bold capital tau}%
+\UnicodeMathSymbol{"1D6BC}{\mbfUpsilon }{\mathalpha}{mathematical bold capital upsilon}%
+\UnicodeMathSymbol{"1D6BD}{\mbfPhi }{\mathalpha}{mathematical bold capital phi}%
+\UnicodeMathSymbol{"1D6BE}{\mbfChi }{\mathalpha}{mathematical bold capital chi}%
+\UnicodeMathSymbol{"1D6BF}{\mbfPsi }{\mathalpha}{mathematical bold capital psi}%
+\UnicodeMathSymbol{"1D6C0}{\mbfOmega }{\mathalpha}{mathematical bold capital omega}%
+\UnicodeMathSymbol{"1D6C1}{\mbfnabla }{\mathalpha}{mathematical bold nabla}%
+\UnicodeMathSymbol{"1D6C2}{\mbfalpha }{\mathalpha}{mathematical bold small alpha}%
+\UnicodeMathSymbol{"1D6C3}{\mbfbeta }{\mathalpha}{mathematical bold small beta}%
+\UnicodeMathSymbol{"1D6C4}{\mbfgamma }{\mathalpha}{mathematical bold small gamma}%
+\UnicodeMathSymbol{"1D6C5}{\mbfdelta }{\mathalpha}{mathematical bold small delta}%
+\UnicodeMathSymbol{"1D6C6}{\mbfvarepsilon }{\mathalpha}{mathematical bold small varepsilon}%
+\UnicodeMathSymbol{"1D6C7}{\mbfzeta }{\mathalpha}{mathematical bold small zeta}%
+\UnicodeMathSymbol{"1D6C8}{\mbfeta }{\mathalpha}{mathematical bold small eta}%
+\UnicodeMathSymbol{"1D6C9}{\mbftheta }{\mathalpha}{mathematical bold small theta}%
+\UnicodeMathSymbol{"1D6CA}{\mbfiota }{\mathalpha}{mathematical bold small iota}%
+\UnicodeMathSymbol{"1D6CB}{\mbfkappa }{\mathalpha}{mathematical bold small kappa}%
+\UnicodeMathSymbol{"1D6CC}{\mbflambda }{\mathalpha}{mathematical bold small lambda}%
+\UnicodeMathSymbol{"1D6CD}{\mbfmu }{\mathalpha}{mathematical bold small mu}%
+\UnicodeMathSymbol{"1D6CE}{\mbfnu }{\mathalpha}{mathematical bold small nu}%
+\UnicodeMathSymbol{"1D6CF}{\mbfxi }{\mathalpha}{mathematical bold small xi}%
+\UnicodeMathSymbol{"1D6D0}{\mbfomicron }{\mathalpha}{mathematical bold small omicron}%
+\UnicodeMathSymbol{"1D6D1}{\mbfpi }{\mathalpha}{mathematical bold small pi}%
+\UnicodeMathSymbol{"1D6D2}{\mbfrho }{\mathalpha}{mathematical bold small rho}%
+\UnicodeMathSymbol{"1D6D3}{\mbfvarsigma }{\mathalpha}{mathematical bold small final sigma}%
+\UnicodeMathSymbol{"1D6D4}{\mbfsigma }{\mathalpha}{mathematical bold small sigma}%
+\UnicodeMathSymbol{"1D6D5}{\mbftau }{\mathalpha}{mathematical bold small tau}%
+\UnicodeMathSymbol{"1D6D6}{\mbfupsilon }{\mathalpha}{mathematical bold small upsilon}%
+\UnicodeMathSymbol{"1D6D7}{\mbfvarphi }{\mathalpha}{mathematical bold small phi}%
+\UnicodeMathSymbol{"1D6D8}{\mbfchi }{\mathalpha}{mathematical bold small chi}%
+\UnicodeMathSymbol{"1D6D9}{\mbfpsi }{\mathalpha}{mathematical bold small psi}%
+\UnicodeMathSymbol{"1D6DA}{\mbfomega }{\mathalpha}{mathematical bold small omega}%
+\UnicodeMathSymbol{"1D6DB}{\mbfpartial }{\mathalpha}{mathematical bold partial differential}%
+\UnicodeMathSymbol{"1D6DC}{\mbfepsilon }{\mathalpha}{mathematical bold varepsilon symbol}%
+\UnicodeMathSymbol{"1D6DD}{\mbfvartheta }{\mathalpha}{mathematical bold theta symbol}%
+\UnicodeMathSymbol{"1D6DE}{\mbfvarkappa }{\mathalpha}{mathematical bold kappa symbol}%
+\UnicodeMathSymbol{"1D6DF}{\mbfphi }{\mathalpha}{mathematical bold phi symbol}%
+\UnicodeMathSymbol{"1D6E0}{\mbfvarrho }{\mathalpha}{mathematical bold rho symbol}%
+\UnicodeMathSymbol{"1D6E1}{\mbfvarpi }{\mathalpha}{mathematical bold pi symbol}%
+\UnicodeMathSymbol{"1D6E2}{\mitAlpha }{\mathalpha}{mathematical italic capital alpha}%
+\UnicodeMathSymbol{"1D6E3}{\mitBeta }{\mathalpha}{mathematical italic capital beta}%
+\UnicodeMathSymbol{"1D6E4}{\mitGamma }{\mathalpha}{mathematical italic capital gamma}%
+\UnicodeMathSymbol{"1D6E5}{\mitDelta }{\mathalpha}{mathematical italic capital delta}%
+\UnicodeMathSymbol{"1D6E6}{\mitEpsilon }{\mathalpha}{mathematical italic capital epsilon}%
+\UnicodeMathSymbol{"1D6E7}{\mitZeta }{\mathalpha}{mathematical italic capital zeta}%
+\UnicodeMathSymbol{"1D6E8}{\mitEta }{\mathalpha}{mathematical italic capital eta}%
+\UnicodeMathSymbol{"1D6E9}{\mitTheta }{\mathalpha}{mathematical italic capital theta}%
+\UnicodeMathSymbol{"1D6EA}{\mitIota }{\mathalpha}{mathematical italic capital iota}%
+\UnicodeMathSymbol{"1D6EB}{\mitKappa }{\mathalpha}{mathematical italic capital kappa}%
+\UnicodeMathSymbol{"1D6EC}{\mitLambda }{\mathalpha}{mathematical italic capital lambda}%
+\UnicodeMathSymbol{"1D6ED}{\mitMu }{\mathalpha}{mathematical italic capital mu}%
+\UnicodeMathSymbol{"1D6EE}{\mitNu }{\mathalpha}{mathematical italic capital nu}%
+\UnicodeMathSymbol{"1D6EF}{\mitXi }{\mathalpha}{mathematical italic capital xi}%
+\UnicodeMathSymbol{"1D6F0}{\mitOmicron }{\mathalpha}{mathematical italic capital omicron}%
+\UnicodeMathSymbol{"1D6F1}{\mitPi }{\mathalpha}{mathematical italic capital pi}%
+\UnicodeMathSymbol{"1D6F2}{\mitRho }{\mathalpha}{mathematical italic capital rho}%
+\UnicodeMathSymbol{"1D6F3}{\mitvarTheta }{\mathalpha}{mathematical italic capital theta symbol}%
+\UnicodeMathSymbol{"1D6F4}{\mitSigma }{\mathalpha}{mathematical italic capital sigma}%
+\UnicodeMathSymbol{"1D6F5}{\mitTau }{\mathalpha}{mathematical italic capital tau}%
+\UnicodeMathSymbol{"1D6F6}{\mitUpsilon }{\mathalpha}{mathematical italic capital upsilon}%
+\UnicodeMathSymbol{"1D6F7}{\mitPhi }{\mathalpha}{mathematical italic capital phi}%
+\UnicodeMathSymbol{"1D6F8}{\mitChi }{\mathalpha}{mathematical italic capital chi}%
+\UnicodeMathSymbol{"1D6F9}{\mitPsi }{\mathalpha}{mathematical italic capital psi}%
+\UnicodeMathSymbol{"1D6FA}{\mitOmega }{\mathalpha}{mathematical italic capital omega}%
+\UnicodeMathSymbol{"1D6FB}{\mitnabla }{\mathalpha}{mathematical italic nabla}%
+\UnicodeMathSymbol{"1D6FC}{\mitalpha }{\mathalpha}{mathematical italic small alpha}%
+\UnicodeMathSymbol{"1D6FD}{\mitbeta }{\mathalpha}{mathematical italic small beta}%
+\UnicodeMathSymbol{"1D6FE}{\mitgamma }{\mathalpha}{mathematical italic small gamma}%
+\UnicodeMathSymbol{"1D6FF}{\mitdelta }{\mathalpha}{mathematical italic small delta}%
+\UnicodeMathSymbol{"1D700}{\mitvarepsilon }{\mathalpha}{mathematical italic small varepsilon}%
+\UnicodeMathSymbol{"1D701}{\mitzeta }{\mathalpha}{mathematical italic small zeta}%
+\UnicodeMathSymbol{"1D702}{\miteta }{\mathalpha}{mathematical italic small eta}%
+\UnicodeMathSymbol{"1D703}{\mittheta }{\mathalpha}{mathematical italic small theta}%
+\UnicodeMathSymbol{"1D704}{\mitiota }{\mathalpha}{mathematical italic small iota}%
+\UnicodeMathSymbol{"1D705}{\mitkappa }{\mathalpha}{mathematical italic small kappa}%
+\UnicodeMathSymbol{"1D706}{\mitlambda }{\mathalpha}{mathematical italic small lambda}%
+\UnicodeMathSymbol{"1D707}{\mitmu }{\mathalpha}{mathematical italic small mu}%
+\UnicodeMathSymbol{"1D708}{\mitnu }{\mathalpha}{mathematical italic small nu}%
+\UnicodeMathSymbol{"1D709}{\mitxi }{\mathalpha}{mathematical italic small xi}%
+\UnicodeMathSymbol{"1D70A}{\mitomicron }{\mathalpha}{mathematical italic small omicron}%
+\UnicodeMathSymbol{"1D70B}{\mitpi }{\mathalpha}{mathematical italic small pi}%
+\UnicodeMathSymbol{"1D70C}{\mitrho }{\mathalpha}{mathematical italic small rho}%
+\UnicodeMathSymbol{"1D70D}{\mitvarsigma }{\mathalpha}{mathematical italic small final sigma}%
+\UnicodeMathSymbol{"1D70E}{\mitsigma }{\mathalpha}{mathematical italic small sigma}%
+\UnicodeMathSymbol{"1D70F}{\mittau }{\mathalpha}{mathematical italic small tau}%
+\UnicodeMathSymbol{"1D710}{\mitupsilon }{\mathalpha}{mathematical italic small upsilon}%
+\UnicodeMathSymbol{"1D711}{\mitvarphi }{\mathalpha}{mathematical italic small phi}%
+\UnicodeMathSymbol{"1D712}{\mitchi }{\mathalpha}{mathematical italic small chi}%
+\UnicodeMathSymbol{"1D713}{\mitpsi }{\mathalpha}{mathematical italic small psi}%
+\UnicodeMathSymbol{"1D714}{\mitomega }{\mathalpha}{mathematical italic small omega}%
+\UnicodeMathSymbol{"1D715}{\mitpartial }{\mathalpha}{mathematical italic partial differential}%
+\UnicodeMathSymbol{"1D716}{\mitepsilon }{\mathalpha}{mathematical italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D717}{\mitvartheta }{\mathalpha}{mathematical italic theta symbol}%
+\UnicodeMathSymbol{"1D718}{\mitvarkappa }{\mathalpha}{mathematical italic kappa symbol}%
+\UnicodeMathSymbol{"1D719}{\mitphi }{\mathalpha}{mathematical italic phi symbol}%
+\UnicodeMathSymbol{"1D71A}{\mitvarrho }{\mathalpha}{mathematical italic rho symbol}%
+\UnicodeMathSymbol{"1D71B}{\mitvarpi }{\mathalpha}{mathematical italic pi symbol}%
+\UnicodeMathSymbol{"1D71C}{\mbfitAlpha }{\mathalpha}{mathematical bold italic capital alpha}%
+\UnicodeMathSymbol{"1D71D}{\mbfitBeta }{\mathalpha}{mathematical bold italic capital beta}%
+\UnicodeMathSymbol{"1D71E}{\mbfitGamma }{\mathalpha}{mathematical bold italic capital gamma}%
+\UnicodeMathSymbol{"1D71F}{\mbfitDelta }{\mathalpha}{mathematical bold italic capital delta}%
+\UnicodeMathSymbol{"1D720}{\mbfitEpsilon }{\mathalpha}{mathematical bold italic capital epsilon}%
+\UnicodeMathSymbol{"1D721}{\mbfitZeta }{\mathalpha}{mathematical bold italic capital zeta}%
+\UnicodeMathSymbol{"1D722}{\mbfitEta }{\mathalpha}{mathematical bold italic capital eta}%
+\UnicodeMathSymbol{"1D723}{\mbfitTheta }{\mathalpha}{mathematical bold italic capital theta}%
+\UnicodeMathSymbol{"1D724}{\mbfitIota }{\mathalpha}{mathematical bold italic capital iota}%
+\UnicodeMathSymbol{"1D725}{\mbfitKappa }{\mathalpha}{mathematical bold italic capital kappa}%
+\UnicodeMathSymbol{"1D726}{\mbfitLambda }{\mathalpha}{mathematical bold italic capital lambda}%
+\UnicodeMathSymbol{"1D727}{\mbfitMu }{\mathalpha}{mathematical bold italic capital mu}%
+\UnicodeMathSymbol{"1D728}{\mbfitNu }{\mathalpha}{mathematical bold italic capital nu}%
+\UnicodeMathSymbol{"1D729}{\mbfitXi }{\mathalpha}{mathematical bold italic capital xi}%
+\UnicodeMathSymbol{"1D72A}{\mbfitOmicron }{\mathalpha}{mathematical bold italic capital omicron}%
+\UnicodeMathSymbol{"1D72B}{\mbfitPi }{\mathalpha}{mathematical bold italic capital pi}%
+\UnicodeMathSymbol{"1D72C}{\mbfitRho }{\mathalpha}{mathematical bold italic capital rho}%
+\UnicodeMathSymbol{"1D72D}{\mbfitvarTheta }{\mathalpha}{mathematical bold italic capital theta symbol}%
+\UnicodeMathSymbol{"1D72E}{\mbfitSigma }{\mathalpha}{mathematical bold italic capital sigma}%
+\UnicodeMathSymbol{"1D72F}{\mbfitTau }{\mathalpha}{mathematical bold italic capital tau}%
+\UnicodeMathSymbol{"1D730}{\mbfitUpsilon }{\mathalpha}{mathematical bold italic capital upsilon}%
+\UnicodeMathSymbol{"1D731}{\mbfitPhi }{\mathalpha}{mathematical bold italic capital phi}%
+\UnicodeMathSymbol{"1D732}{\mbfitChi }{\mathalpha}{mathematical bold italic capital chi}%
+\UnicodeMathSymbol{"1D733}{\mbfitPsi }{\mathalpha}{mathematical bold italic capital psi}%
+\UnicodeMathSymbol{"1D734}{\mbfitOmega }{\mathalpha}{mathematical bold italic capital omega}%
+\UnicodeMathSymbol{"1D735}{\mbfitnabla }{\mathalpha}{mathematical bold italic nabla}%
+\UnicodeMathSymbol{"1D736}{\mbfitalpha }{\mathalpha}{mathematical bold italic small alpha}%
+\UnicodeMathSymbol{"1D737}{\mbfitbeta }{\mathalpha}{mathematical bold italic small beta}%
+\UnicodeMathSymbol{"1D738}{\mbfitgamma }{\mathalpha}{mathematical bold italic small gamma}%
+\UnicodeMathSymbol{"1D739}{\mbfitdelta }{\mathalpha}{mathematical bold italic small delta}%
+\UnicodeMathSymbol{"1D73A}{\mbfitvarepsilon }{\mathalpha}{mathematical bold italic small varepsilon}%
+\UnicodeMathSymbol{"1D73B}{\mbfitzeta }{\mathalpha}{mathematical bold italic small zeta}%
+\UnicodeMathSymbol{"1D73C}{\mbfiteta }{\mathalpha}{mathematical bold italic small eta}%
+\UnicodeMathSymbol{"1D73D}{\mbfittheta }{\mathalpha}{mathematical bold italic small theta}%
+\UnicodeMathSymbol{"1D73E}{\mbfitiota }{\mathalpha}{mathematical bold italic small iota}%
+\UnicodeMathSymbol{"1D73F}{\mbfitkappa }{\mathalpha}{mathematical bold italic small kappa}%
+\UnicodeMathSymbol{"1D740}{\mbfitlambda }{\mathalpha}{mathematical bold italic small lambda}%
+\UnicodeMathSymbol{"1D741}{\mbfitmu }{\mathalpha}{mathematical bold italic small mu}%
+\UnicodeMathSymbol{"1D742}{\mbfitnu }{\mathalpha}{mathematical bold italic small nu}%
+\UnicodeMathSymbol{"1D743}{\mbfitxi }{\mathalpha}{mathematical bold italic small xi}%
+\UnicodeMathSymbol{"1D744}{\mbfitomicron }{\mathalpha}{mathematical bold italic small omicron}%
+\UnicodeMathSymbol{"1D745}{\mbfitpi }{\mathalpha}{mathematical bold italic small pi}%
+\UnicodeMathSymbol{"1D746}{\mbfitrho }{\mathalpha}{mathematical bold italic small rho}%
+\UnicodeMathSymbol{"1D747}{\mbfitvarsigma }{\mathalpha}{mathematical bold italic small final sigma}%
+\UnicodeMathSymbol{"1D748}{\mbfitsigma }{\mathalpha}{mathematical bold italic small sigma}%
+\UnicodeMathSymbol{"1D749}{\mbfittau }{\mathalpha}{mathematical bold italic small tau}%
+\UnicodeMathSymbol{"1D74A}{\mbfitupsilon }{\mathalpha}{mathematical bold italic small upsilon}%
+\UnicodeMathSymbol{"1D74B}{\mbfitvarphi }{\mathalpha}{mathematical bold italic small phi}%
+\UnicodeMathSymbol{"1D74C}{\mbfitchi }{\mathalpha}{mathematical bold italic small chi}%
+\UnicodeMathSymbol{"1D74D}{\mbfitpsi }{\mathalpha}{mathematical bold italic small psi}%
+\UnicodeMathSymbol{"1D74E}{\mbfitomega }{\mathalpha}{mathematical bold italic small omega}%
+\UnicodeMathSymbol{"1D74F}{\mbfitpartial }{\mathalpha}{mathematical bold italic partial differential}%
+\UnicodeMathSymbol{"1D750}{\mbfitepsilon }{\mathalpha}{mathematical bold italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D751}{\mbfitvartheta }{\mathalpha}{mathematical bold italic theta symbol}%
+\UnicodeMathSymbol{"1D752}{\mbfitvarkappa }{\mathalpha}{mathematical bold italic kappa symbol}%
+\UnicodeMathSymbol{"1D753}{\mbfitphi }{\mathalpha}{mathematical bold italic phi symbol}%
+\UnicodeMathSymbol{"1D754}{\mbfitvarrho }{\mathalpha}{mathematical bold italic rho symbol}%
+\UnicodeMathSymbol{"1D755}{\mbfitvarpi }{\mathalpha}{mathematical bold italic pi symbol}%
+\UnicodeMathSymbol{"1D756}{\mbfsansAlpha }{\mathalpha}{mathematical sans-serif bold capital alpha}%
+\UnicodeMathSymbol{"1D757}{\mbfsansBeta }{\mathalpha}{mathematical sans-serif bold capital beta}%
+\UnicodeMathSymbol{"1D758}{\mbfsansGamma }{\mathalpha}{mathematical sans-serif bold capital gamma}%
+\UnicodeMathSymbol{"1D759}{\mbfsansDelta }{\mathalpha}{mathematical sans-serif bold capital delta}%
+\UnicodeMathSymbol{"1D75A}{\mbfsansEpsilon }{\mathalpha}{mathematical sans-serif bold capital epsilon}%
+\UnicodeMathSymbol{"1D75B}{\mbfsansZeta }{\mathalpha}{mathematical sans-serif bold capital zeta}%
+\UnicodeMathSymbol{"1D75C}{\mbfsansEta }{\mathalpha}{mathematical sans-serif bold capital eta}%
+\UnicodeMathSymbol{"1D75D}{\mbfsansTheta }{\mathalpha}{mathematical sans-serif bold capital theta}%
+\UnicodeMathSymbol{"1D75E}{\mbfsansIota }{\mathalpha}{mathematical sans-serif bold capital iota}%
+\UnicodeMathSymbol{"1D75F}{\mbfsansKappa }{\mathalpha}{mathematical sans-serif bold capital kappa}%
+\UnicodeMathSymbol{"1D760}{\mbfsansLambda }{\mathalpha}{mathematical sans-serif bold capital lambda}%
+\UnicodeMathSymbol{"1D761}{\mbfsansMu }{\mathalpha}{mathematical sans-serif bold capital mu}%
+\UnicodeMathSymbol{"1D762}{\mbfsansNu }{\mathalpha}{mathematical sans-serif bold capital nu}%
+\UnicodeMathSymbol{"1D763}{\mbfsansXi }{\mathalpha}{mathematical sans-serif bold capital xi}%
+\UnicodeMathSymbol{"1D764}{\mbfsansOmicron }{\mathalpha}{mathematical sans-serif bold capital omicron}%
+\UnicodeMathSymbol{"1D765}{\mbfsansPi }{\mathalpha}{mathematical sans-serif bold capital pi}%
+\UnicodeMathSymbol{"1D766}{\mbfsansRho }{\mathalpha}{mathematical sans-serif bold capital rho}%
+\UnicodeMathSymbol{"1D767}{\mbfsansvarTheta }{\mathalpha}{mathematical sans-serif bold capital theta symbol}%
+\UnicodeMathSymbol{"1D768}{\mbfsansSigma }{\mathalpha}{mathematical sans-serif bold capital sigma}%
+\UnicodeMathSymbol{"1D769}{\mbfsansTau }{\mathalpha}{mathematical sans-serif bold capital tau}%
+\UnicodeMathSymbol{"1D76A}{\mbfsansUpsilon }{\mathalpha}{mathematical sans-serif bold capital upsilon}%
+\UnicodeMathSymbol{"1D76B}{\mbfsansPhi }{\mathalpha}{mathematical sans-serif bold capital phi}%
+\UnicodeMathSymbol{"1D76C}{\mbfsansChi }{\mathalpha}{mathematical sans-serif bold capital chi}%
+\UnicodeMathSymbol{"1D76D}{\mbfsansPsi }{\mathalpha}{mathematical sans-serif bold capital psi}%
+\UnicodeMathSymbol{"1D76E}{\mbfsansOmega }{\mathalpha}{mathematical sans-serif bold capital omega}%
+\UnicodeMathSymbol{"1D76F}{\mbfsansnabla }{\mathalpha}{mathematical sans-serif bold nabla}%
+\UnicodeMathSymbol{"1D770}{\mbfsansalpha }{\mathalpha}{mathematical sans-serif bold small alpha}%
+\UnicodeMathSymbol{"1D771}{\mbfsansbeta }{\mathalpha}{mathematical sans-serif bold small beta}%
+\UnicodeMathSymbol{"1D772}{\mbfsansgamma }{\mathalpha}{mathematical sans-serif bold small gamma}%
+\UnicodeMathSymbol{"1D773}{\mbfsansdelta }{\mathalpha}{mathematical sans-serif bold small delta}%
+\UnicodeMathSymbol{"1D774}{\mbfsansvarepsilon }{\mathalpha}{mathematical sans-serif bold small varepsilon}%
+\UnicodeMathSymbol{"1D775}{\mbfsanszeta }{\mathalpha}{mathematical sans-serif bold small zeta}%
+\UnicodeMathSymbol{"1D776}{\mbfsanseta }{\mathalpha}{mathematical sans-serif bold small eta}%
+\UnicodeMathSymbol{"1D777}{\mbfsanstheta }{\mathalpha}{mathematical sans-serif bold small theta}%
+\UnicodeMathSymbol{"1D778}{\mbfsansiota }{\mathalpha}{mathematical sans-serif bold small iota}%
+\UnicodeMathSymbol{"1D779}{\mbfsanskappa }{\mathalpha}{mathematical sans-serif bold small kappa}%
+\UnicodeMathSymbol{"1D77A}{\mbfsanslambda }{\mathalpha}{mathematical sans-serif bold small lambda}%
+\UnicodeMathSymbol{"1D77B}{\mbfsansmu }{\mathalpha}{mathematical sans-serif bold small mu}%
+\UnicodeMathSymbol{"1D77C}{\mbfsansnu }{\mathalpha}{mathematical sans-serif bold small nu}%
+\UnicodeMathSymbol{"1D77D}{\mbfsansxi }{\mathalpha}{mathematical sans-serif bold small xi}%
+\UnicodeMathSymbol{"1D77E}{\mbfsansomicron }{\mathalpha}{mathematical sans-serif bold small omicron}%
+\UnicodeMathSymbol{"1D77F}{\mbfsanspi }{\mathalpha}{mathematical sans-serif bold small pi}%
+\UnicodeMathSymbol{"1D780}{\mbfsansrho }{\mathalpha}{mathematical sans-serif bold small rho}%
+\UnicodeMathSymbol{"1D781}{\mbfsansvarsigma }{\mathalpha}{mathematical sans-serif bold small final sigma}%
+\UnicodeMathSymbol{"1D782}{\mbfsanssigma }{\mathalpha}{mathematical sans-serif bold small sigma}%
+\UnicodeMathSymbol{"1D783}{\mbfsanstau }{\mathalpha}{mathematical sans-serif bold small tau}%
+\UnicodeMathSymbol{"1D784}{\mbfsansupsilon }{\mathalpha}{mathematical sans-serif bold small upsilon}%
+\UnicodeMathSymbol{"1D785}{\mbfsansvarphi }{\mathalpha}{mathematical sans-serif bold small phi}%
+\UnicodeMathSymbol{"1D786}{\mbfsanschi }{\mathalpha}{mathematical sans-serif bold small chi}%
+\UnicodeMathSymbol{"1D787}{\mbfsanspsi }{\mathalpha}{mathematical sans-serif bold small psi}%
+\UnicodeMathSymbol{"1D788}{\mbfsansomega }{\mathalpha}{mathematical sans-serif bold small omega}%
+\UnicodeMathSymbol{"1D789}{\mbfsanspartial }{\mathalpha}{mathematical sans-serif bold partial differential}%
+\UnicodeMathSymbol{"1D78A}{\mbfsansepsilon }{\mathalpha}{mathematical sans-serif bold varepsilon symbol}%
+\UnicodeMathSymbol{"1D78B}{\mbfsansvartheta }{\mathalpha}{mathematical sans-serif bold theta symbol}%
+\UnicodeMathSymbol{"1D78C}{\mbfsansvarkappa }{\mathalpha}{mathematical sans-serif bold kappa symbol}%
+\UnicodeMathSymbol{"1D78D}{\mbfsansphi }{\mathalpha}{mathematical sans-serif bold phi symbol}%
+\UnicodeMathSymbol{"1D78E}{\mbfsansvarrho }{\mathalpha}{mathematical sans-serif bold rho symbol}%
+\UnicodeMathSymbol{"1D78F}{\mbfsansvarpi }{\mathalpha}{mathematical sans-serif bold pi symbol}%
+\UnicodeMathSymbol{"1D790}{\mbfitsansAlpha }{\mathalpha}{mathematical sans-serif bold italic capital alpha}%
+\UnicodeMathSymbol{"1D791}{\mbfitsansBeta }{\mathalpha}{mathematical sans-serif bold italic capital beta}%
+\UnicodeMathSymbol{"1D792}{\mbfitsansGamma }{\mathalpha}{mathematical sans-serif bold italic capital gamma}%
+\UnicodeMathSymbol{"1D793}{\mbfitsansDelta }{\mathalpha}{mathematical sans-serif bold italic capital delta}%
+\UnicodeMathSymbol{"1D794}{\mbfitsansEpsilon }{\mathalpha}{mathematical sans-serif bold italic capital epsilon}%
+\UnicodeMathSymbol{"1D795}{\mbfitsansZeta }{\mathalpha}{mathematical sans-serif bold italic capital zeta}%
+\UnicodeMathSymbol{"1D796}{\mbfitsansEta }{\mathalpha}{mathematical sans-serif bold italic capital eta}%
+\UnicodeMathSymbol{"1D797}{\mbfitsansTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta}%
+\UnicodeMathSymbol{"1D798}{\mbfitsansIota }{\mathalpha}{mathematical sans-serif bold italic capital iota}%
+\UnicodeMathSymbol{"1D799}{\mbfitsansKappa }{\mathalpha}{mathematical sans-serif bold italic capital kappa}%
+\UnicodeMathSymbol{"1D79A}{\mbfitsansLambda }{\mathalpha}{mathematical sans-serif bold italic capital lambda}%
+\UnicodeMathSymbol{"1D79B}{\mbfitsansMu }{\mathalpha}{mathematical sans-serif bold italic capital mu}%
+\UnicodeMathSymbol{"1D79C}{\mbfitsansNu }{\mathalpha}{mathematical sans-serif bold italic capital nu}%
+\UnicodeMathSymbol{"1D79D}{\mbfitsansXi }{\mathalpha}{mathematical sans-serif bold italic capital xi}%
+\UnicodeMathSymbol{"1D79E}{\mbfitsansOmicron }{\mathalpha}{mathematical sans-serif bold italic capital omicron}%
+\UnicodeMathSymbol{"1D79F}{\mbfitsansPi }{\mathalpha}{mathematical sans-serif bold italic capital pi}%
+\UnicodeMathSymbol{"1D7A0}{\mbfitsansRho }{\mathalpha}{mathematical sans-serif bold italic capital rho}%
+\UnicodeMathSymbol{"1D7A1}{\mbfitsansvarTheta }{\mathalpha}{mathematical sans-serif bold italic capital theta symbol}%
+\UnicodeMathSymbol{"1D7A2}{\mbfitsansSigma }{\mathalpha}{mathematical sans-serif bold italic capital sigma}%
+\UnicodeMathSymbol{"1D7A3}{\mbfitsansTau }{\mathalpha}{mathematical sans-serif bold italic capital tau}%
+\UnicodeMathSymbol{"1D7A4}{\mbfitsansUpsilon }{\mathalpha}{mathematical sans-serif bold italic capital upsilon}%
+\UnicodeMathSymbol{"1D7A5}{\mbfitsansPhi }{\mathalpha}{mathematical sans-serif bold italic capital phi}%
+\UnicodeMathSymbol{"1D7A6}{\mbfitsansChi }{\mathalpha}{mathematical sans-serif bold italic capital chi}%
+\UnicodeMathSymbol{"1D7A7}{\mbfitsansPsi }{\mathalpha}{mathematical sans-serif bold italic capital psi}%
+\UnicodeMathSymbol{"1D7A8}{\mbfitsansOmega }{\mathalpha}{mathematical sans-serif bold italic capital omega}%
+\UnicodeMathSymbol{"1D7A9}{\mbfitsansnabla }{\mathalpha}{mathematical sans-serif bold italic nabla}%
+\UnicodeMathSymbol{"1D7AA}{\mbfitsansalpha }{\mathalpha}{mathematical sans-serif bold italic small alpha}%
+\UnicodeMathSymbol{"1D7AB}{\mbfitsansbeta }{\mathalpha}{mathematical sans-serif bold italic small beta}%
+\UnicodeMathSymbol{"1D7AC}{\mbfitsansgamma }{\mathalpha}{mathematical sans-serif bold italic small gamma}%
+\UnicodeMathSymbol{"1D7AD}{\mbfitsansdelta }{\mathalpha}{mathematical sans-serif bold italic small delta}%
+\UnicodeMathSymbol{"1D7AE}{\mbfitsansvarepsilon }{\mathalpha}{mathematical sans-serif bold italic small varepsilon}%
+\UnicodeMathSymbol{"1D7AF}{\mbfitsanszeta }{\mathalpha}{mathematical sans-serif bold italic small zeta}%
+\UnicodeMathSymbol{"1D7B0}{\mbfitsanseta }{\mathalpha}{mathematical sans-serif bold italic small eta}%
+\UnicodeMathSymbol{"1D7B1}{\mbfitsanstheta }{\mathalpha}{mathematical sans-serif bold italic small theta}%
+\UnicodeMathSymbol{"1D7B2}{\mbfitsansiota }{\mathalpha}{mathematical sans-serif bold italic small iota}%
+\UnicodeMathSymbol{"1D7B3}{\mbfitsanskappa }{\mathalpha}{mathematical sans-serif bold italic small kappa}%
+\UnicodeMathSymbol{"1D7B4}{\mbfitsanslambda }{\mathalpha}{mathematical sans-serif bold italic small lambda}%
+\UnicodeMathSymbol{"1D7B5}{\mbfitsansmu }{\mathalpha}{mathematical sans-serif bold italic small mu}%
+\UnicodeMathSymbol{"1D7B6}{\mbfitsansnu }{\mathalpha}{mathematical sans-serif bold italic small nu}%
+\UnicodeMathSymbol{"1D7B7}{\mbfitsansxi }{\mathalpha}{mathematical sans-serif bold italic small xi}%
+\UnicodeMathSymbol{"1D7B8}{\mbfitsansomicron }{\mathalpha}{mathematical sans-serif bold italic small omicron}%
+\UnicodeMathSymbol{"1D7B9}{\mbfitsanspi }{\mathalpha}{mathematical sans-serif bold italic small pi}%
+\UnicodeMathSymbol{"1D7BA}{\mbfitsansrho }{\mathalpha}{mathematical sans-serif bold italic small rho}%
+\UnicodeMathSymbol{"1D7BB}{\mbfitsansvarsigma }{\mathalpha}{mathematical sans-serif bold italic small final sigma}%
+\UnicodeMathSymbol{"1D7BC}{\mbfitsanssigma }{\mathalpha}{mathematical sans-serif bold italic small sigma}%
+\UnicodeMathSymbol{"1D7BD}{\mbfitsanstau }{\mathalpha}{mathematical sans-serif bold italic small tau}%
+\UnicodeMathSymbol{"1D7BE}{\mbfitsansupsilon }{\mathalpha}{mathematical sans-serif bold italic small upsilon}%
+\UnicodeMathSymbol{"1D7BF}{\mbfitsansvarphi }{\mathalpha}{mathematical sans-serif bold italic small phi}%
+\UnicodeMathSymbol{"1D7C0}{\mbfitsanschi }{\mathalpha}{mathematical sans-serif bold italic small chi}%
+\UnicodeMathSymbol{"1D7C1}{\mbfitsanspsi }{\mathalpha}{mathematical sans-serif bold italic small psi}%
+\UnicodeMathSymbol{"1D7C2}{\mbfitsansomega }{\mathalpha}{mathematical sans-serif bold italic small omega}%
+\UnicodeMathSymbol{"1D7C3}{\mbfitsanspartial }{\mathalpha}{mathematical sans-serif bold italic partial differential}%
+\UnicodeMathSymbol{"1D7C4}{\mbfitsansepsilon }{\mathalpha}{mathematical sans-serif bold italic varepsilon symbol}%
+\UnicodeMathSymbol{"1D7C5}{\mbfitsansvartheta }{\mathalpha}{mathematical sans-serif bold italic theta symbol}%
+\UnicodeMathSymbol{"1D7C6}{\mbfitsansvarkappa }{\mathalpha}{mathematical sans-serif bold italic kappa symbol}%
+\UnicodeMathSymbol{"1D7C7}{\mbfitsansphi }{\mathalpha}{mathematical sans-serif bold italic phi symbol}%
+\UnicodeMathSymbol{"1D7C8}{\mbfitsansvarrho }{\mathalpha}{mathematical sans-serif bold italic rho symbol}%
+\UnicodeMathSymbol{"1D7C9}{\mbfitsansvarpi }{\mathalpha}{mathematical sans-serif bold italic pi symbol}%
+\UnicodeMathSymbol{"1D7CA}{\mbfDigamma }{\mathalpha}{mathematical bold capital digamma}%
+\UnicodeMathSymbol{"1D7CB}{\mbfdigamma }{\mathalpha}{mathematical bold small digamma}%
+\UnicodeMathSymbol{"1D7CE}{\mbfzero }{\mathord}{mathematical bold digit 0}%
+\UnicodeMathSymbol{"1D7CF}{\mbfone }{\mathord}{mathematical bold digit 1}%
+\UnicodeMathSymbol{"1D7D0}{\mbftwo }{\mathord}{mathematical bold digit 2}%
+\UnicodeMathSymbol{"1D7D1}{\mbfthree }{\mathord}{mathematical bold digit 3}%
+\UnicodeMathSymbol{"1D7D2}{\mbffour }{\mathord}{mathematical bold digit 4}%
+\UnicodeMathSymbol{"1D7D3}{\mbffive }{\mathord}{mathematical bold digit 5}%
+\UnicodeMathSymbol{"1D7D4}{\mbfsix }{\mathord}{mathematical bold digit 6}%
+\UnicodeMathSymbol{"1D7D5}{\mbfseven }{\mathord}{mathematical bold digit 7}%
+\UnicodeMathSymbol{"1D7D6}{\mbfeight }{\mathord}{mathematical bold digit 8}%
+\UnicodeMathSymbol{"1D7D7}{\mbfnine }{\mathord}{mathematical bold digit 9}%
+\UnicodeMathSymbol{"1D7D8}{\Bbbzero }{\mathord}{mathematical double-struck digit 0}%
+\UnicodeMathSymbol{"1D7D9}{\Bbbone }{\mathord}{mathematical double-struck digit 1}%
+\UnicodeMathSymbol{"1D7DA}{\Bbbtwo }{\mathord}{mathematical double-struck digit 2}%
+\UnicodeMathSymbol{"1D7DB}{\Bbbthree }{\mathord}{mathematical double-struck digit 3}%
+\UnicodeMathSymbol{"1D7DC}{\Bbbfour }{\mathord}{mathematical double-struck digit 4}%
+\UnicodeMathSymbol{"1D7DD}{\Bbbfive }{\mathord}{mathematical double-struck digit 5}%
+\UnicodeMathSymbol{"1D7DE}{\Bbbsix }{\mathord}{mathematical double-struck digit 6}%
+\UnicodeMathSymbol{"1D7DF}{\Bbbseven }{\mathord}{mathematical double-struck digit 7}%
+\UnicodeMathSymbol{"1D7E0}{\Bbbeight }{\mathord}{mathematical double-struck digit 8}%
+\UnicodeMathSymbol{"1D7E1}{\Bbbnine }{\mathord}{mathematical double-struck digit 9}%
+\UnicodeMathSymbol{"1D7E2}{\msanszero }{\mathord}{mathematical sans-serif digit 0}%
+\UnicodeMathSymbol{"1D7E3}{\msansone }{\mathord}{mathematical sans-serif digit 1}%
+\UnicodeMathSymbol{"1D7E4}{\msanstwo }{\mathord}{mathematical sans-serif digit 2}%
+\UnicodeMathSymbol{"1D7E5}{\msansthree }{\mathord}{mathematical sans-serif digit 3}%
+\UnicodeMathSymbol{"1D7E6}{\msansfour }{\mathord}{mathematical sans-serif digit 4}%
+\UnicodeMathSymbol{"1D7E7}{\msansfive }{\mathord}{mathematical sans-serif digit 5}%
+\UnicodeMathSymbol{"1D7E8}{\msanssix }{\mathord}{mathematical sans-serif digit 6}%
+\UnicodeMathSymbol{"1D7E9}{\msansseven }{\mathord}{mathematical sans-serif digit 7}%
+\UnicodeMathSymbol{"1D7EA}{\msanseight }{\mathord}{mathematical sans-serif digit 8}%
+\UnicodeMathSymbol{"1D7EB}{\msansnine }{\mathord}{mathematical sans-serif digit 9}%
+\UnicodeMathSymbol{"1D7EC}{\mbfsanszero }{\mathord}{mathematical sans-serif bold digit 0}%
+\UnicodeMathSymbol{"1D7ED}{\mbfsansone }{\mathord}{mathematical sans-serif bold digit 1}%
+\UnicodeMathSymbol{"1D7EE}{\mbfsanstwo }{\mathord}{mathematical sans-serif bold digit 2}%
+\UnicodeMathSymbol{"1D7EF}{\mbfsansthree }{\mathord}{mathematical sans-serif bold digit 3}%
+\UnicodeMathSymbol{"1D7F0}{\mbfsansfour }{\mathord}{mathematical sans-serif bold digit 4}%
+\UnicodeMathSymbol{"1D7F1}{\mbfsansfive }{\mathord}{mathematical sans-serif bold digit 5}%
+\UnicodeMathSymbol{"1D7F2}{\mbfsanssix }{\mathord}{mathematical sans-serif bold digit 6}%
+\UnicodeMathSymbol{"1D7F3}{\mbfsansseven }{\mathord}{mathematical sans-serif bold digit 7}%
+\UnicodeMathSymbol{"1D7F4}{\mbfsanseight }{\mathord}{mathematical sans-serif bold digit 8}%
+\UnicodeMathSymbol{"1D7F5}{\mbfsansnine }{\mathord}{mathematical sans-serif bold digit 9}%
+\UnicodeMathSymbol{"1D7F6}{\mttzero }{\mathord}{mathematical monospace digit 0}%
+\UnicodeMathSymbol{"1D7F7}{\mttone }{\mathord}{mathematical monospace digit 1}%
+\UnicodeMathSymbol{"1D7F8}{\mtttwo }{\mathord}{mathematical monospace digit 2}%
+\UnicodeMathSymbol{"1D7F9}{\mttthree }{\mathord}{mathematical monospace digit 3}%
+\UnicodeMathSymbol{"1D7FA}{\mttfour }{\mathord}{mathematical monospace digit 4}%
+\UnicodeMathSymbol{"1D7FB}{\mttfive }{\mathord}{mathematical monospace digit 5}%
+\UnicodeMathSymbol{"1D7FC}{\mttsix }{\mathord}{mathematical monospace digit 6}%
+\UnicodeMathSymbol{"1D7FD}{\mttseven }{\mathord}{mathematical monospace digit 7}%
+\UnicodeMathSymbol{"1D7FE}{\mtteight }{\mathord}{mathematical monospace digit 8}%
+\UnicodeMathSymbol{"1D7FF}{\mttnine }{\mathord}{mathematical monospace digit 9}%
+\UnicodeMathSymbol{"1EEF0}{\arabicmaj }{\mathop}{arabic mathematical operator meem with hah with tatweel}%
+\UnicodeMathSymbol{"1EEF1}{\arabichad }{\mathop}{arabic mathematical operator hah with dal}%
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
+
diff --git a/macros/unicodetex/latex/unicode-math/unicode-math.dtx b/macros/unicodetex/latex/unicode-math/unicode-math.dtx
new file mode 100644
index 0000000000..1253cab5d4
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unicode-math.dtx
@@ -0,0 +1,116 @@
+%%^^A%% unicode-math.dtx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Metadata for the package code, including files and versioning
+
+% \section{Package metadata}
+%
+% List all \texttt{dtx} files for (a) the \texttt{ins} file and~(b) typesetting the code.
+% \begin{macrocode}
+%<*dtx>
+\def\DTXFILES{
+ \DTX{unicode-math.dtx}
+ \DTX{um-code-opening.dtx}
+ \DTX{um-code-variables.dtx}
+ \DTX{um-code-api.dtx}
+ \DTX{um-code-ui.dtx}
+ \DTX{um-code-pkgopt.dtx}
+ \DTX{um-code-msg.dtx}
+ \DTX{um-code-usv.dtx}
+ \DTX{um-code-setchar.dtx}
+ \DTX{um-code-mathtext.dtx}
+ \DTX{um-code-main.dtx}
+ \DTX{um-code-fontopt.dtx}
+ \DTX{um-code-fontparam.dtx}
+ \DTX{um-code-mathmap.dtx}
+ \DTX{um-code-sym-commands.dtx}
+ \DTX{um-code-alphabets.dtx}
+ \DTX{um-code-primes.dtx}
+ \DTX{um-code-sscript.dtx}
+ \DTX{um-code-compat.dtx}
+ \DTX{um-code-amsmath.dtx}
+ \DTX{um-code-epilogue.dtx}
+}
+%</dtx>
+% \end{macrocode}
+%
+% Now exit if we're using plain \TeX\ when loading this file with \texttt{unicode-math.ins}.
+% \begin{macrocode}
+%<*dtx>
+\ifx\plainoutput\undefined\else\expandafter\endinput\fi
+%</dtx>
+% \end{macrocode}
+%
+% Metadata for documentation; the title and authors of the package.
+% \begin{macrocode}
+%<*dtx>
+\title{
+ Experimental Unicode mathematical typesetting:
+ The \pkg{unicode-math} package
+}
+\author{
+ \scshape Will Robertson\\
+ \itshape Philipp Stephani, Joseph Wright, Khaled Hosny, and others\\
+ \url{http://github.com/wspr/unicode-math}
+}
+%</dtx>
+% \end{macrocode}
+%
+% Declare the package version and date.
+% \begin{macrocode}
+%<base>\RequirePackage{expl3}
+%<base>\ProvidesExplPackage{unicode-math}
+%<package&XE>\ProvidesExplPackage{unicode-math-xetex}
+%<package&LU>\ProvidesExplPackage{unicode-math-luatex}
+%<base|package> {2020/01/31} {0.8q} {Unicode maths in XeLaTeX and LuaLaTeX}
+% \end{macrocode}
+%
+% Here the version and date are setup for typesetting the documentation.
+% \begin{macrocode}
+%<*dtx>
+\date{
+ \def\filedate{2020/01/31}
+ \def\fileversion{0.8q}
+ \filedate \qquad \fileversion
+}
+%</dtx>
+% \end{macrocode}
+%
+% \section{The \texttt{unicode-math.sty} loading file}
+%
+% The \texttt{unicode-math.sty} file is a stub which loads necessary packages
+% and then splits into a XeTeX- or LuaTeX-specific version of the package.
+%
+% \begin{macrocode}
+%<base>\sys_if_engine_luatex:T
+%<base> {
+%<base> \RequirePackageWithOptions{unicode-math-luatex}
+%<base> \endinput
+%<base> }
+%<base>\sys_if_engine_xetex:T
+%<base> {
+%<base> \RequirePackageWithOptions{unicode-math-xetex}
+%<base> \endinput
+%<base> }
+%<base>\msg_new:nnn {unicode-math} {unsupported-engine}
+%<base> { Cannot~ be~ run~ with~ \c_sys_engine_str!\\ Use~ XeLaTeX~ or~ LuaLaTeX~ instead. }
+%<base>\msg_error:nn {unicode-math} {unsupported-engine}
+%<base>\endinput
+% \end{macrocode}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/unicode-math.ins b/macros/unicodetex/latex/unicode-math/unicode-math.ins
new file mode 100644
index 0000000000..d0b4dc08d1
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unicode-math.ins
@@ -0,0 +1,64 @@
+%%^^A%% unicode-math.ins -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Docstrip installer.
+
+\ifx\ProvidesFile\undefined\def\ProvidesFile#1[#2]{}\fi
+\input unicode-math.dtx\relax
+\input l3docstrip.tex\relax
+\keepsilent
+
+\declarepreamble\defaultpreamble
+
+------------------------------------------------
+The UNICODE-MATH package <wspr.io/unicode-math>
+------------------------------------------------
+This package is free software and may be redistributed and/or modified under
+the conditions of the LaTeX Project Public License, version 1.3c or higher
+(your choice): <http://www.latex-project.org/lppl/>.
+------------------------------------------------
+Copyright 2006-2018 Will Robertson, LPPL "maintainer"
+Copyright 2010-2017 Philipp Stephani
+Copyright 2011-2017 Joseph Wright
+Copyright 2012-2015 Khaled Hosny
+------------------------------------------------
+
+\endpreamble
+
+\nopostamble
+\askforoverwritefalse
+
+\def\FROM#1#2{\from{#1}{#2}}
+\def\FROMDEBUG#1#2{\from{#1}{#2,debug}}
+\ifx\DEBUG\undefined\else\let\FROM\FROMDEBUG\fi
+\def\Msg#1{}
+\def\Generate#1#2{%
+ \immediate\write\ttyout{Generating file "#1"}%
+ \generate{\file{#1}{#2}}%
+}
+
+\Generate{unicode-math.sty}{\FROM{unicode-math.dtx}{base}}
+
+\def\DTX#1{\FROM{#1}{package,XE}}
+\Generate{unicode-math-xetex.sty}{\DTXFILES}
+
+\def\DTX#1{\FROM{#1}{package,LU}}
+\Generate{unicode-math-luatex.sty}{\DTXFILES}
+
+\endbatchfile
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/unicode-math.ltx b/macros/unicodetex/latex/unicode-math/unicode-math.ltx
new file mode 100644
index 0000000000..c3a13fd370
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unicode-math.ltx
@@ -0,0 +1,38 @@
+%%^^A%% unicode-math.ltx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% User documentation.
+
+\documentclass[a4paper]{ltxdoc}
+\input{um-doc-style.tex}
+\begin{document}
+\maketitle
+
+\input{um-doc-main.tex}
+
+\clearpage
+\appendix
+
+\input{um-doc-stixextract.tex}
+\input{um-doc-nfsssummary.tex}
+\input{um-doc-legacyfontdimen.tex}
+\input{um-doc-mathfontdimen.tex}
+
+\end{document}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/unicode-math.pdf b/macros/unicodetex/latex/unicode-math/unicode-math.pdf
new file mode 100644
index 0000000000..1d2cf0948a
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unicode-math.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/unicode-math/unimath-example.ltx b/macros/unicodetex/latex/unicode-math/unimath-example.ltx
new file mode 100644
index 0000000000..d8f75961a8
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unimath-example.ltx
@@ -0,0 +1,69 @@
+%%^^A%% unimath-example.ltx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% A minimal example file to demonstrate the package.
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% UNICODE-MATH EXAMPLE FILE
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass{article}
+
+% Load fontspec and define a document font:
+\usepackage{fontspec}
+\setmainfont{texgyrepagella-regular.otf}
+
+% Load unicode-math and define a math font:
+\usepackage{unicode-math}
+\setmathfont{texgyrepagella-math.otf}
+
+\begin{document}
+\title{An example of \textsf{unicode-math}}
+\author{Will Robertson}
+\maketitle
+
+This is an example of the \textsf{unicode-math} package.
+It allows you to write maths with Unicode input and to use fonts that contain Unicode mathematical glyphs. Follow along in the source code to see how it works.
+
+After loading the package and selecting a font, you shouldn't need to change much to continue to write maths as always.
+\[
+ F(s)=\symscr L \{f(t)\}=\int_0^\infty \symup e^{-st}f(t)\,\symup d t
+\]
+
+The style of Latin and Greek letters is set up by default to match the output of standard \LaTeX: Latin letters and Greek lowercase letters are italic, and Greek uppercase letters are upright. These can be configured with the \texttt{math-style} package option.
+
+One very important feature to recognise is that bold maths now works consistently for both Latin and Greek letters. By default, \verb|\symbf| will turn a Latin letter bold and upright, and a Greek letter will remain italic and also become bold. For example:
+\[
+ \symbf{a} = a\,\symbf{I} \qquad \symbf{\beta} = \beta\,\symbf{I}
+\]
+This behaviour can be configured with the \texttt{bold-style} package option.
+
+In the examples above, I've used \LaTeX\ commands to input characters like \verb|\beta|, \verb|\infty|, and so on. These may now be typed directly into the source of the document:
+\[
+ 𝐉 = ∇×𝐇 \qquad 𝐁 = μ₀(𝐌 + 𝐇)
+\]
+\[
+ ∫₀³ xⁿφ₁₂(x)\,ⅆx
+\]
+It does not matter if you use upright or italic characters; they will be normalised according to the setting of the \texttt{math-style} and \texttt{bold-style} options.
+
+And that's a brief introduction to the package. Please see the documentation for further details. This is a new package; feedback, suggestions, and bug reports are all most welcome.
+
+\end{document}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/unimath-example.pdf b/macros/unicodetex/latex/unicode-math/unimath-example.pdf
new file mode 100644
index 0000000000..a339e72f9d
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unimath-example.pdf
Binary files differ
diff --git a/macros/unicodetex/latex/unicode-math/unimath-symbols.ltx b/macros/unicodetex/latex/unicode-math/unimath-symbols.ltx
new file mode 100644
index 0000000000..df6ac0e986
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unimath-symbols.ltx
@@ -0,0 +1,469 @@
+%%^^A%% unimath-symbols.ltx -- part of UNICODE-MATH <wspr.io/unicode-math>
+%%^^A%% Listing of Unicode mathematics symbols using a variety of fonts.
+
+%!TEX TS-program = LuaLaTeX
+
+%%%%%%%%%%%%%%%%%%%%%%%
+% SYMBOLS DEFINED BY UNICODE-MATH
+%%%%%%%%%%%%%%%%%%%%%%%
+
+\documentclass[final]{article}
+\makeatletter
+
+\usepackage{ragged2e,setspace,booktabs,catchfile,shortvrb,geometry,metalogo,textcomp,longtable,tabu,hyperref}
+
+\geometry{margin=3cm}
+\hypersetup{colorlinks,linkcolor=black}
+
+\def\cmd#1{\texttt{\textbackslash\expandafter\@gobble\string#1}}
+
+\usepackage{fontspec}
+\setmainfont{texgyrepagella}%
+ [
+ Extension = .otf ,
+ UprightFont = *-regular,
+ ItalicFont = *-italic,
+ BoldFont = *-bold,
+ BoldItalicFont = *-bolditalic,
+ Ligatures=TeX,
+ Numbers={Lowercase,Monospaced},
+ ]
+\usepackage[math-style=literal,bold-style=literal]{unicode-math}
+
+\ExplSyntaxOn
+\cs_generate_variant:Nn \fontspec_set_fontface:NNnn {c}
+
+\def\FINISH{}
+\newcount\Nfonts
+\def\defmathfont#1#2#3#4{
+ \Nfonts=\numexpr\Nfonts+1\relax
+ \tl_set:cn {L#1} {#4}
+ \newcounter{#1}
+ \setcounter{#1}{-1}
+ \setmathfont[version=#1,SizeFeatures={
+ {Size=-10, Colour=999999},
+ {Size=10-, Colour=#3}}]{#2}
+ \fontspec_set_fontface:cNnn {#1} \x {ItalicFont={},BoldFont={}} {#2}
+ \tl_gput_right:Nn \FINISH {
+ \refstepcounter{#1}\label{count:#1}
+ }
+}
+\ExplSyntaxOff
+
+\defmathfont{lm}{latinmodern-math.otf}{CC6666}{L}
+\defmathfont{xits}{XITSMath-Regular.otf}{6666CC}{X}
+\defmathfont{stix}{STIX2Math.otf}{66CC66}{S}
+\defmathfont{pagella}{texgyrepagella-math.otf}{AA6666}{P}
+\defmathfont{dejavu}{texgyredejavu-math.otf}{AACC66}{D}
+\defmathfont{fira}{FiraMath-Regular.otf}{AA66CC}{F}
+
+\def\INPUT{\input{unicode-math-table.tex}}
+\def\TABLE{%
+\par\noindent
+\begin{longtabu}[l]{@{}l *{\Nfonts}{c} lX[l]@{}}
+ \toprule
+ \textsc{usv} & \Llm & \Lxits & \Lstix & \Lpagella & \Ldejavu & \Lfira & Macro & Description \\
+ \midrule \endhead
+ \INPUT\\
+ \bottomrule
+\end{longtabu}
+}
+\makeatletter
+\def\USV#1{\footnotesize\scshape\MakeLowercase{u+\@gobble#1}}
+\makeatother
+\def\CMD#1{\footnotesize\cmd#1}
+\def\DESC#1{%
+ \begin{spacing}{0.5}
+ \RaggedRight\scriptsize #1%
+ \end{spacing}
+}
+
+\newcommand\SHOW[1]{%
+ \def\UnicodeMathSymbol##1##2##3##4{%
+ \def\1{#1}\def\2{##3}%
+ \ifx\1\2\PRINTLINE{##1}{##2}{##4}\fi
+ }%
+ \TABLE
+}
+\ExplSyntaxOn
+\def\PRINTLINE#1#2#3{
+ \def\tempa{
+ \USV{#1} &
+ \SYMB{#2}{lm}{#1} &
+ \SYMB{#2}{xits}{#1} &
+ \SYMB{#2}{stix}{#1} &
+ \SYMB{#2}{pagella}{#1} &
+ \SYMB{#2}{dejavu}{#1} &
+ \SYMB{#2}{fira}{#1} &
+ \CMD{#2}
+ \tl_if_in:NnT \PLAIN {#2}
+ {
+ \makebox[0pt][l]
+ { \color[gray]{0.7} \textsuperscript{\sffamily (p)} }
+ }
+ \tl_if_in:NnT \LTXSYM {#2}
+ {
+ \makebox[0pt][l]
+ { \color[gray]{0.7} \textsuperscript{\sffamily (l)} }
+ }
+ \tl_if_in:NnT \AMSSYMB {#2}
+ {
+ \makebox[0pt][l]
+ { \color[gray]{0.7} \textsuperscript{\sffamily (a)} }
+ }
+ &
+ \DESC{#3} \\
+ }%
+ \expandafter\tempa
+}
+\ExplSyntaxOff
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle#1$%
+ \fi
+}
+
+\def\PLAIN{\alpha\beta\gamma\delta\epsilon\zeta\eta\theta\iota\kappa\lambda\mu\nu\xi\pi\rho\sigma\tau\upsilon\phi\chi\psi\omega\varepsilon\vartheta\varpi\varrho\varsigma\varphi\Gamma\Delta\Theta\Lambda\Xi\Pi\Sigma\Upsilon\Phi\Psi\Omega
+%
+\aleph\hbar\imath\jmath\ell\wp\Re\Im\partial\infty\prime\emptyset\nabla\surd\top\bot\angle\triangle\forall\exists\neg\flat\natural\sharp\clubsuit\diamondsuit\heartsuit\spadesuit
+%
+\coprod\bigvee\bigwedge\biguplus\bigcap\bigcup\int\prod\sum\bigotimes\bigoplus\bigodot\oint\bigsqcup\smallint
+%
+\triangleleft\triangleright\bigtriangleup\bigtriangledown\wedge\land\vee\lor\cap\cup\ddagger\dagger\sqcap\sqcup\uplus\amalg\diamond\bullet\wr\div\odot\oslash\otimes\ominus\oplus\mp\pm\circ\bigcirc\setminus\cdot\ast\times\star\propto\sqsubseteq\sqsupseteq\parallel\mid\dashv\vdash\nearrow\searrow\nwarrow\swarrow\Leftrightarrow\Leftarrow\Rightarrow\neq\ne\lnot\leq\le\geq\ge\succ\prec\approx\succeq\preceq\supset\subset\supseteq\subseteq\in\ni\owns\gg\ll\not\leftrightarrow\leftarrow\gets\rightarrow\to\mapstochar\mapsto\sim\simeq\perp\equiv\asymp\smile\frown\leftharpoonup\leftharpoondown\rightharpoonup\rightharpoondown
+%
+\joinrel\relbar\Relbar\lhook\hookrightarrow\rhook\hookleftarrow\bowtie\models\Longrightarrow\longrightarrow\longleftarrow\Longleftarrow\longmapsto\longleftrightarrow\Longleftrightarrow\iff
+%
+\ldotp\cdotp\colon\ldots\cdots\vdots\ddots
+%
+\acute\grave\ddot\tilde\bar\breve\check\hat\vec\dot\widetilde\widehat
+%
+\overrightarrow\overleftarrow\overbrace\underbrace\lmoustache\rmoustache\lgroup\rgroup\arrowvert\Arrowvert\bracevert\Vert\vert\uparrow\downarrow\updownarrow\Uparrow\Downarrow\Updownarrow\backslash\rangle\langle\rbrace\lbrace\rceil\lceil\rfloor\lfloor\sqrt}
+
+
+\def\LTXSYM{
+\cong
+\notin
+\rightleftharpoons
+\doteq
+\mathring
+}
+
+\def\AMSSYMB{\boxdot\boxplus\boxtimes\square\blacksquare\centerdot\lozenge\blacklozenge\circlearrowright\circlearrowleft\leftrightharpoons\boxminus\Vdash\Vvdash\vDash\twoheadrightarrow\twoheadleftarrow\leftleftarrows\rightrightarrows\upuparrows\downdownarrows\upharpoonright\restriction\downharpoonright\upharpoonleft\downharpoonleft\rightarrowtail\leftarrowtail\leftrightarrows\rightleftarrows\Lsh\Rsh\rightsquigarrow\leftrightsquigarrow\looparrowleft\looparrowright\circeq\succsim\gtrsim\gtrapprox\multimap\therefore\because\doteqdot\Doteq\triangleq\precsim\lesssim\lessapprox\eqslantless\eqslantgtr\curlyeqprec\curlyeqsucc\preccurlyeq\leqq\leqslant\lessgtr\backprime\risingdotseq\fallingdotseq\succcurlyeq\geqq\geqslant\gtrless\vartriangleright\vartriangleleft\trianglerighteq\trianglelefteq\bigstar\between\blacktriangledown\blacktriangleright\blacktriangleleft\vartriangle\blacktriangle\triangledown\eqcirc\lesseqgtr\gtreqless\lesseqqgtr\gtreqqless\Rrightarrow\Lleftarrow\veebar\barwedge\doublebarwedge\measuredangle\sphericalangle\varpropto\smallsmile\smallfrown\Subset\Supset\Cup\doublecup\Cap\doublecap\curlywedge\curlyvee\leftthreetimes\rightthreetimes\subseteqq\supseteqq\bumpeq\Bumpeq\lll\llless\ggg\gggtr\circledS\pitchfork\dotplus\backsim\backsimeq\complement\intercal\circledcirc\circledast\circleddash\lvertneqq\gvertneqq\nleq\ngeq\nless\ngtr\nprec\nsucc\lneqq\gneqq\nleqslant\ngeqslant\lneq\gneq\npreceq\nsucceq\precnsim\succnsim\lnsim\gnsim\nleqq\ngeqq\precneqq\succneqq\precnapprox\succnapprox\lnapprox\gnapprox\nsim\ncong\diagup\diagdown\varsubsetneq\varsupsetneq\nsubseteqq\nsupseteqq\subsetneqq\supsetneqq\varsubsetneqq\varsupsetneqq\subsetneq\supsetneq\nsubseteq\nsupseteq\nparallel\nmid\nshortmid\nshortparallel\nvdash\nVdash\nvDash\nVDash\ntrianglerighteq\ntrianglelefteq\ntriangleleft\ntriangleright\nleftarrow\nrightarrow\nLeftarrow\nRightarrow\nLeftrightarrow\nleftrightarrow\divideontimes\varnothing\nexists\Finv\Game\eth\eqsim\beth\gimel\daleth\lessdot\gtrdot\ltimes\rtimes\shortmid\shortparallel\smallsetminus\thicksim\thickapprox\approxeq\succapprox\precapprox\curvearrowleft\curvearrowright\digamma\varkappa\Bbbk\hslash\backepsilon}
+
+\input{unicode-math.dtx}
+
+\begin{document}
+\MakeShortVerb\|
+\title{Symbols defined by \textsf{unicode-math}}
+\author{Will Robertson}
+\maketitle
+
+This document uses the file \texttt{unicode-math-table.tex}
+to print every symbol defined by the \textsf{unicode-math}
+package.
+Use this document to find the command name or the Unicode glyph slot for a symbol that you wish to use.
+The following fonts are shown: (with approximate symbol counts)
+\begin{itemize}
+\item[\Llm] \mathversion{lm} $\mathup{Latin\ Modern\ Math}$ (\ref{count:lm})
+\item[\Lxits] \mathversion{xits} $\mathup{XITS\ Math}$ (\ref{count:xits})
+\item[\Lstix] \mathversion{stix} $\mathup{STIX\ Math\ Two}$ (\ref{count:stix})
+\item[\Lpagella] \mathversion{pagella} $\mathup{TeX\ Gyre\ Pagella\ Math}$ (\ref{count:pagella})
+\item[\Ldejavu] \mathversion{dejavu} $\mathup{DejaVu\ Math\ TeX\ Gyre}$ (\ref{count:dejavu})
+\item[\Lfira] \mathversion{fira} $\mathup{Fira\ Math}$ (\ref{count:fira})
+\end{itemize}
+Symbols defined in Plain \TeX\ are indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (p)}} after their macro name.
+\LaTeX\ follows Plain \TeX, but defines a handful more, indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (l)}}.
+Symbols defined in \textsf{amssymb} are indicated with {\color[gray]{0.6} \textsuperscript{\sffamily (a)}}.
+
+Note that this list of fonts is not intended to be exhaustive but I am happy to add new fonts by request if they are distributed in \TeX\ Live.\footnote{Only a single \TeX\ Gyre Math font is shown here by design as they all largely have the same symbol coverage.}
+
+\tableofcontents
+
+\clearpage
+\section{Opening symbols, \cmd\mathopen}
+\begingroup
+\def\sqrt{\sqrtsign{}}
+\def\cuberoot{\cuberootsign{}}
+\def\fourthroot{\fourthrootsign{}}
+\def\longdivision{\longdivisionsign{}}
+\SHOW\mathopen
+\endgroup
+
+\clearpage
+\section{Closing symbols, \cmd\mathclose}
+\SHOW\mathclose
+
+\clearpage
+\section{Fence symbols, \cmd\mathfence}
+\SHOW\mathfence
+
+\section{Punctuation symbols, \cmd\mathpunct}
+\SHOW\mathpunct
+
+\section{`Over' symbols, \cmd\mathover}
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle #1{\mitx+\mity}$%
+ \fi
+}
+\SHOW\mathover
+\endgroup
+
+
+\section{`Under' symbols, \cmd\mathunder}
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle #1{\mitx+\mity}$%
+ \fi
+}
+\SHOW\mathunder
+\endgroup
+
+\clearpage
+\section{Accents, \cmd\mathaccent}
+
+Note that accents will only be properly placed if used with an OpenType font with the necessary information.
+
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle#1 \mitx$%
+ \fi
+}
+\SHOW\mathaccent
+\endgroup
+
+\section{Bottom accents, \cmd\mathbotaccent}
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \refstepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle#1 \mitx$%
+ \fi
+}
+\SHOW\mathbotaccent
+\endgroup
+
+\clearpage
+\section{Big operators, \cmd\mathop}
+
+Of the operators shown below, a subset need to be flagged by \textsf{unicode-math} for \cmd\nolimits\ adjustments.
+The limits behaviour as specified by \textsf{unicode-math} are shown with grey subscripts and superscripts.
+\begingroup
+\def\SYMB#1#2#3{%
+ \expandafter\iffontchar\csname#2\endcsname #3\relax
+ \stepcounter{#2}%
+ \mathversion{#2}%
+ $\displaystyle#1_0^1$%
+ \fi
+}
+\SHOW\mathop
+\endgroup
+
+\section{Binary relations, \cmd\mathbin}
+\SHOW\mathbin
+
+\clearpage
+\section{Ordinary symbols, \cmd\mathord}
+\SHOW\mathord
+
+\clearpage
+\section{Relation symbols, \cmd\mathrel}
+\SHOW\mathrel
+
+\clearpage
+\section{Alphabetical symbols, \cmd\mathalpha}
+
+% first read in all \mathalpha symbols into a variable:
+\ExplSyntaxOn
+\cs_set:Npn \UnicodeMathSymbol #1#2#3#4 {
+ \str_if_eq:nnT {\mathalpha} {#3} {
+ \exp_not:n { \UnicodeMathSymbol {#1}{#2}{#3}{#4} }
+ }
+}
+\CatchFileEdef
+ \ALPHA{unicode-math-table.tex}
+ {\char_set_catcode_space:N \ }
+
+% now each time we print an alphabet we remove the slot;
+% this ensures we won't miss anything
+
+\def\INPUT{\ALPHA}
+\cs_new:Npn \SLOTS #1#2 {
+ \cs_set:Npn \UnicodeMathSymbol ##1##2##3##4 {
+ \bool_lazy_and:nnT
+ { \int_compare_p:n {##1 >= #1} }
+ { \int_compare_p:n {##1 <= #2} }
+ {
+ \PRINTLINE{##1}{##2}{##4}
+ }
+ }
+ \TABLE
+ \cs_set:Npn \UnicodeMathSymbol ##1##2##3##4 {
+ \bool_lazy_or:nnT
+ { \int_compare_p:n {##1 > #2} }
+ { \int_compare_p:n {##1 < #1} }
+ {
+ \exp_not:n { \UnicodeMathSymbol {##1}{##2}{##3}{##4} }
+ }
+ }
+ \edef\ALPHA{\ALPHA}
+}
+
+\ExplSyntaxOff
+
+\subsection{Normal weight}
+
+\subsubsection{Upright Greek, uppercase}
+\SLOTS{"00391}{"003A9}
+
+\subsubsection{Upright Greek, lowercase}
+\SLOTS{"003B1}{"003F5}
+
+\subsubsection{Italic, Latin, uppercase}
+\SLOTS{"1D434}{"1D44D}
+
+\subsubsection{Italic, Latin, lowercase}
+\SLOTS{"1D44E}{"1D467}
+
+\subsubsection{Italic Greek, uppercase}
+\SLOTS{"1D6E2}{"1D6FA}
+
+\subsubsection{Italic Greek, lowercase}
+\SLOTS{"1D6FC}{"1D71B}
+
+\subsubsection{Script, Latin, uppercase}
+\SLOTS{"1D49C}{"1D4B5}
+
+\subsubsection{Script, Latin, lowercase}
+\SLOTS{"1D4B6}{"1D4CF}
+
+\subsubsection{Fraktur, Latin, uppercase}
+\SLOTS{"1D504}{"1D51C}
+
+\subsubsection{Fraktur, Latin, lowercase}
+\SLOTS{"1D51E}{"1D537}
+
+\subsubsection{Blackboard, Latin, uppercase}
+\SLOTS{"1D538}{"1D550}
+
+\subsubsection{Blackboard, Latin, lowercase}
+\SLOTS{"1D552}{"1D56B}
+
+\subsubsection{Sans serif, Latin, uppercase}
+\SLOTS{"1D5A0}{"1D5B9}
+
+\subsubsection{Sans serif, Latin, lowercase}
+\SLOTS{"1D5BA}{"1D5D3}
+
+\subsubsection{Italic sans serif, Latin, uppercase}
+\SLOTS{"1D608}{"1D621}
+
+\subsubsection{Italic sans serif, Latin, lowercase}
+\SLOTS{"1D622}{"1D63B}
+
+\subsubsection{Typewriter, Latin, uppercase}
+\SLOTS{"1D670}{"1D689}
+
+\subsubsection{Typewriter, Latin, lowercase}
+\SLOTS{"1D68A}{"1D6A3}
+
+\subsection{Bold}
+
+\subsubsection{Bold, Latin, uppercase}
+\SLOTS{"1D400}{"1D419}
+
+\subsubsection{Bold, Latin, lowercase}
+\SLOTS{"1D41A}{"1D433}
+
+\subsubsection{Bold Greek, uppercase}
+\SLOTS{"1D6A8}{"1D6C0}
+
+\subsubsection{Bold Greek, lowercase}
+\SLOTS{"1D6C2}{"1D6E1}
+
+\subsubsection{Bold italic, Latin, uppercase}
+\SLOTS{"1D468}{"1D481}
+
+\subsubsection{Bold italic, Latin, lowercase}
+\SLOTS{"1D482}{"1D49B}
+
+\subsubsection{Bold italic Greek, uppercase}
+\SLOTS{"1D71C}{"1D734}
+
+\subsubsection{Bold italic Greek, lowercase}
+\SLOTS{"1D736}{"1D755}
+
+\subsubsection{Bold script, Latin, uppercase}
+\SLOTS{"1D4D0}{"1D4E9}
+
+\subsubsection{Bold script, Latin, lowercase}
+\SLOTS{"1D4EA}{"1D503}
+
+\subsubsection{Bold fraktur, Latin, uppercase}
+\SLOTS{"1D56C}{"1D585}
+
+\subsubsection{Bold fraktur, Latin, lowercase}
+\SLOTS{"1D586}{"1D59F}
+
+\subsubsection{Bold sans serif, Latin, uppercase}
+\SLOTS{"1D5D4}{"1D5ED}
+
+\subsubsection{Bold sans serif, Latin, lowercase}
+\SLOTS{"1D5EE}{"1D607}
+
+\subsubsection{Bold italic sans serif, Latin, uppercase}
+\SLOTS{"1D63C}{"1D655}
+
+\subsubsection{Bold italic sans serif, Latin, lowercase}
+\SLOTS{"1D656}{"1D66F}
+
+\subsubsection{Bold sans serif Greek, uppercase}
+\SLOTS{"1D756}{"1D76E}
+
+\subsubsection{Bold sans serif Greek, lowercase}
+\SLOTS{"1D770}{"1D78F}
+
+\subsubsection{Bold italic sans serif Greek, uppercase}
+\SLOTS{"1D790}{"1D7A8}
+
+\subsubsection{Bold italic sans serif Greek, lowercase}
+\SLOTS{"1D7AA}{"1D7C9}
+
+\subsection{Miscellaneous}
+\def\UnicodeMathSymbol#1#2#3#4{\PRINTLINE{#1}{#2}{#4}}
+\TABLE
+
+\FINISH
+
+\end{document}
+
+\endinput
+
+% /©
+%
+% ------------------------------------------------
+% The UNICODE-MATH package <wspr.io/unicode-math>
+% ------------------------------------------------
+% This package is free software and may be redistributed and/or modified under
+% the conditions of the LaTeX Project Public License, version 1.3c or higher
+% (your choice): <http://www.latex-project.org/lppl/>.
+% ------------------------------------------------
+% Copyright 2006-2019 Will Robertson, LPPL "maintainer"
+% Copyright 2010-2017 Philipp Stephani
+% Copyright 2011-2017 Joseph Wright
+% Copyright 2012-2015 Khaled Hosny
+% ------------------------------------------------
+%
+% ©/
diff --git a/macros/unicodetex/latex/unicode-math/unimath-symbols.pdf b/macros/unicodetex/latex/unicode-math/unimath-symbols.pdf
new file mode 100644
index 0000000000..c2b54bc257
--- /dev/null
+++ b/macros/unicodetex/latex/unicode-math/unimath-symbols.pdf
Binary files differ