Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- %%
- %% This is file `tipauni.sty',
- %% generated with the docstrip utility.
- %%
- %% The original source files were:
- %%
- %% tipauni.dtx (with options: `package')
- %%
- %% ---------------------------------------------------------------------------
- %% Package: tipauni
- %% Author: निरंजन
- %% Description: For producing Unicode characters with TIPA commands.
- %% Repository: https://git.gnu.org.ua/tipauni.git
- %% Bug tracker: https://puszcza.gnu.org.ua/bugs/?group=tipauni
- %% License: GPL v3.0+, GFDL 1.3+
- %% ---------------------------------------------------------------------------
- %%
- %% LaTeX Package tipauni v0.4.1
- %% Copyright © 2021 निरंजन
- %%
- %% This program is free software: you can redistribute it and/or modify
- %% it under the terms of the GNU General Public License as published by
- %% the Free Software Foundation, either version 3 of the License, or
- %% (at your option) any later version.
- %%
- %% This program is distributed in the hope that it will be useful,
- %% but WITHOUT ANY WARRANTY; without even the implied warranty of
- %% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- %% GNU General Public License for more details.
- %%
- %% You should have received a copy of the GNU General Public License
- %% along with this program. If not, see <https://www.gnu.org/licenses/>.
- %%
- %% The current maintainers of this work are निरंजन.
- %%
- %% This work consists of the files tipauni.dtx
- %% tipauni.ins
- %% and the derived file tipauni.sty.
- %% ---------------------------------------------------------------------------
- %%
- \def\tipauniname{tipauni}
- \def\tipauniversion{0.4.1}
- \def\tipaunidate{2022-01-04}
- \def\tipaunidescription{For producing Unicode characters with TIPA commands}
- \ProvidesPackage{tipauni}[2021/12/16 v0.4
- Unicode characters with TIPA commands]
- \RequirePackage{xparse}
- \RequirePackage{fontspec}
- \RequirePackage{expkv-def,expkv-opt}
- \newif\iftipauni@charis@sil
- \newif\iftipauni@preserve@font
- \newif\iftipauni@document@font
- \newif\iftipauni@font@options
- \newif\iftipauni@nontipa@ignore
- \tipauni@document@fonttrue
- \tipauni@charis@siltrue
- \let\tipauni@font@options\@empty
- \ekvdefinekeys{tipauni}{
- bool incompatible = \iftipauni@nontipa@ignore,
- noval preservefont = {
- \tipauni@document@fontfalse
- \tipauni@charis@silfalse
- \tipauni@preserve@fonttrue
- },
- code fontspecoptions = {
- \edef\tipauni@font@options{#1}
- \ifx\tipauni@font@options\@empty
- \else
- \tipauni@font@optionstrue
- \fi
- },
- noval resetfontspecoptions = {
- \let\tipauni@font@options\@empty
- \tipauni@font@optionsfalse
- },
- code documentfont = {
- \edef\tipauni@temp{#1}
- \tipauni@preserve@fontfalse
- \tipauni@charis@silfalse
- \tipauni@document@fonttrue
- \let\tipauni@font\tipauni@temp
- },
- new noval documentfont = {
- \PackageError{tipauni}{Empty `documentfont' option}{%
- The `documentfont' option has no value. Your document will be compiled\MessageBreak
- with the default font-family of (Xe/Lua)LaTeX, i.e., Latin Modern unless\MessageBreak
- another font is set.%
- }
- \tipauni@document@fontfalse
- \ifdefined\tipauni@font
- \PackageWarningNoLine{tipauni}{%
- A `documentfont' option has no value, but you have\MessageBreak
- loaded another font with some tipauni-option, so that\MessageBreak
- font will be used as the main font of this document\MessageBreak
- unless another font is set. The font being currently\MessageBreak
- loaded is: \tipauni@font
- }
- \tipauni@document@fonttrue
- \else
- \tipauni@document@fontfalse
- \fi
- },
- noval recommendedfont = {
- \tipauni@document@fonttrue
- \tipauni@charissiltrue
- }
- }
- \ekvoProcessLocalOptions{tipauni}
- \iftipauni@charis@sil
- \def\tipauni@font{CharisSIL}%% https://ctan.org/pkg/charissil
- \fi
- \iftipauni@document@font
- \expandafter\setmainfont\expandafter
- [\expandafter{\tipauni@font@options}]{\tipauni@font}
- \else
- \iftipauni@font@options
- \PackageWarningNoLine{tipauni}{%
- An active font loaded with package fontspec is\MessageBreak
- necessary for `fontspecoptions' to take effect.\MessageBreak
- Please use the `documentfont'/`recommendedfont'\MessageBreak
- option or load a font outside package `tipauni'\MessageBreak
- to make your options active. Currently ignoring:\MessageBreak
- [\tipauni@font@options]%
- }%
- \fi
- \fi
- \newif\iftipauni@nontipa
- \protected\def\tipauni@nontipatrue{\global\let\iftipauni@nontipa\iftrue}
- \protected\def\tipauni@nontipafalse{\global\let\iftipauni@nontipa\iffalse}
- \iftipauni@nontipa@ignore
- \protected\def\tipauni@nontipatrue{}
- \fi
- \NewDocumentCommand\tipaunicmd{ m m }{%
- \NewDocumentCommand#1{ }{\tipauni@nontipatrue #2}%
- }%
- \AtEndDocument{%
- \iftipauni@nontipa
- \PackageWarningNoLine{tipauni}{%
- You have used a command(s) that is (are) not\MessageBreak
- supported by package TIPA. Thus your current code is\MessageBreak
- incompatible with that package. These commands are\MessageBreak
- printed with a different Unicode font. Refer to the\MessageBreak
- documentation of package tipauni for a list of\MessageBreak
- commands that are not supported in TIPA%
- }%
- \else
- \fi
- }%
- \DeclareTextCommand{\tipaunistar}{TU}[1]{{#1}}
- \DeclareTextAccentDefault{\tipaunistar}{TU}
- \DeclareTextCommand{\tipaunisemicolon}{TU}[1]{{#1}}
- \DeclareTextAccentDefault{\tipaunisemicolon}{TU}
- \DeclareTextCommand{\tipaunicolon}{TU}[1]{{#1}}
- \DeclareTextAccentDefault{\tipaunicolon}{TU}
- \DeclareTextCommand{\tipaunibang}{TU}[1]{{#1}}
- \DeclareTextAccentDefault{\tipaunibang}{TU}
- \DeclareTextCommand{\tipaunipipe}{TU}[2]{\@pipeshorthands{#1}{#2}}
- \DeclareTextAccentDefault{\tipaunipipe}{TU}
- %% Pulmonic consonants
- %%-- Stops
- %%--** Retroflex
- \DeclareTextSymbol{\textrtailt}{TU}{"0288}%% ʈ
- \DeclareTextComposite{\tipaunicolon}{TU}{t}{"288}
- \DeclareTextSymbol{\textrtaild}{TU}{"0256}%% ɖ
- \DeclareTextComposite{\tipaunicolon}{TU}{d}{"256}
- %%--** Palatal
- \DeclareTextSymbol{\textbardotlessj}{TU}{"25F}%% ɟ
- \DeclareTextComposite{\tipaunistar}{TU}{j}{"25F}
- %%--** Uvular
- \DeclareTextSymbol{\textscg}{TU}{"262}%% ɢ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{G}{"262}
- %%--** Glottal
- \DeclareTextSymbol{\textglotstop}{TU}{"294}%% ʔ
- %%-- Nasals
- %%--** Labiodental
- \DeclareTextSymbol{\textltailm}{TU}{"271}%% ɱ
- %%--** Retroflex
- \DeclareTextSymbol{\textrtailn}{TU}{"273}%% ɳ
- \DeclareTextComposite{\tipaunicolon}{TU}{n}{"273}
- %%--** Palatal
- \DeclareTextSymbol{\textltailn}{TU}{"272}%% ɲ
- \DeclareTextComposite{\tipaunistar}{TU}{n}{"272}
- %%--** Uvular
- \DeclareTextSymbol{\textscn}{TU}{"274}%% ɴ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{N}{"274}
- %%-- Trills
- %%--** Bilabial
- \DeclareTextSymbol{\textscb}{TU}{"299}%% ʙ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{B}{"299}
- %%--** Uvular
- \DeclareTextSymbol{\textscr}{TU}{"280}%% ʀ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{R}{"280}
- %%-- Taps or flaps
- %%-- Labiodental flap
- \tipaunicmd{\labdentflap}{ⱱ}%% tipauni-exclusive
- \DeclareTextComposite{\tipaunistar}{TU}{v}{"2C71}%% tipauni-exclusive
- %%--** Alveolar
- \DeclareTextSymbol{\textfishhookr}{TU}{"27E}%% ɾ
- %%--** Retroflex
- \DeclareTextSymbol{\textrtailr}{TU}{"27D}%% ɽ
- \DeclareTextComposite{\tipaunicolon}{TU}{r}{"27D}
- %%-- Fricatives
- %%--** Bilabial
- \DeclareTextSymbol{\textphi}{TU}{"278}%% ɸ
- \DeclareTextSymbol{\textbeta}{TU}{"3B2}%% β
- %%--** Dental
- \DeclareTextSymbol{\texttheta}{TU}{"3B8}%% θ
- %%--** Postalveolar
- \DeclareTextSymbol{\textesh}{TU}{"283}%% ʃ
- \DeclareTextSymbol{\textyogh}{TU}{"292}%% ʒ
- %%--** Retroflex
- \DeclareTextSymbol{\textrtails}{TU}{"282}%% ʂ
- \DeclareTextComposite{\tipaunicolon}{TU}{s}{"282}
- \DeclareTextSymbol{\textrtailz}{TU}{"290}%% ʐ
- \DeclareTextComposite{\tipaunicolon}{TU}{z}{"290}
- %%--** Palatal
- \DeclareTextSymbol{\textctj}{TU}{"29D}%% ʝ
- %%--** Velar
- \DeclareTextSymbol{\textgamma}{TU}{"263}%% ɣ
- %%--** Uvular
- \DeclareTextSymbol{\textchi}{TU}{"3C7}%% χ
- \DeclareTextSymbol{\textinvscr}{TU}{"281}%% ʁ
- %%--** Pharyngeal
- \DeclareTextSymbol{\textcrh}{TU}{"127}%% ħ
- \DeclareTextComposite{\tipaunistar}{TU}{h}{"127}
- \DeclareTextSymbol{\textrevglotstop}{TU}{"295}%% ʕ
- %%--** Glottal
- \DeclareTextSymbol{\texthth}{TU}{"266}%% ɦ
- %%-- Lateral fricatives
- %%--** Alveolar
- \DeclareTextSymbol{\textbeltl}{TU}{"26C}%% ɬ
- \DeclareTextComposite{\tipaunistar}{TU}{l}{"26C}
- \DeclareTextSymbol{\textlyoghlig}{TU}{"26E}%% ɮ
- \DeclareTextComposite{\tipaunistar}{TU}{z}{"26E}
- %%-- Approximants
- %%-- Labiodental approximant
- \tipaunicmd{\labdentapp}{ʋ}%% tipauni-exclusive
- %%--** Alveolar
- \DeclareTextSymbol{\textturnr}{TU}{"279}%% ɹ
- \DeclareTextComposite{\tipaunistar}{TU}{r}{"279}
- %%--** Retroflex
- \DeclareTextSymbol{\textturnrrtail}{TU}{"27B}%% ɻ
- \DeclareTextComposite{\tipaunicolon}{TU}{R}{"27B}
- %%--** Velar
- \DeclareTextSymbol{\textturnmrleg}{TU}{"270}%% ɰ
- \DeclareTextComposite{\tipaunistar}{TU}{m}{"270}
- %%-- Lateral approximants
- %%--** Retroflex
- \DeclareTextSymbol{\textrtaill}{TU}{"26D}%% ɭ
- \DeclareTextComposite{\tipaunicolon}{TU}{l}{"26D}
- \DeclareTextSymbol{\textturny}{TU}{"28E}%% ʎ
- \DeclareTextSymbol{\textscl}{TU}{"29F}%% ʟ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{L}{"29F}
- %% Non-pulmonic consonants
- %%-- Clicks
- %%--** Bilabial
- \DeclareTextSymbol{\textbullseye}{TU}{"298}%% ʘ
- \DeclareTextComposite{\tipaunibang}{TU}{o}{"298}
- %%-- Postalveolar click
- \tipaunicmd{\pstalvclick}{ǃ}%% tipauni-exclusive
- %%--** Palato-alveolar
- \DeclareTextSymbol{\textdoublebarpipe}{TU}{"1C2}%% ǂ
- \DeclareTextComposite{\tipaunibang}{TU}{c}{"1C2}%% tipauni-exclusive
- %%--** Alveolar lateral
- \DeclareTextSymbol{\textdoublepipe}{TU}{"1C1}% ǁ
- %%-- Implosives
- %%--** Bilabial
- \DeclareTextSymbol{\texthtb}{TU}{"253}%% ɓ
- \DeclareTextComposite{\tipaunibang}{TU}{b}{"253}
- %%--** Dental
- \DeclareTextSymbol{\texthtd}{TU}{"257}%% ɗ
- \DeclareTextComposite{\tipaunibang}{TU}{d}{"257}
- %%--** Palatal
- \DeclareTextSymbol{\texthtbardotlessj}{TU}{"284}%% ʄ
- \DeclareTextComposite{\tipaunibang}{TU}{j}{"284}
- %%--** Velar
- \DeclareTextSymbol{\texthtg}{TU}{"260}%% ɠ
- \DeclareTextComposite{\tipaunibang}{TU}{g}{"260}
- %%--** Uvular
- \DeclareTextSymbol{\texthtscg}{TU}{"29B}%% ʛ
- \DeclareTextComposite{\tipaunibang}{TU}{G}{"29B}
- %% Other consonants
- \DeclareTextSymbol{\textturnw}{TU}{"28D}%% ʍ
- \DeclareTextSymbol{\textturnh}{TU}{"265}%% ɥ
- \DeclareTextSymbol{\textsch}{TU}{"29C}%% ʜ
- \DeclareTextSymbol{\textbarrevglotstop}{TU}{"2A2}%% ʢ
- \DeclareTextComposite{\tipaunistar}{TU}{1}{"2A2}%% tipauni-exclusive
- \DeclareTextSymbol{\textbarglotstop}{TU}{"2A1}%% ʡ
- \DeclareTextComposite{\tipaunistar}{TU}{2}{"2A1}%% tipauni-exclusive
- \DeclareTextSymbol{\textctc}{TU}{"255}%% ɕ
- \DeclareTextSymbol{\textctz}{TU}{"291}%% ʑ
- \DeclareTextComposite{\tipaunistar}{TU}{Z}{"291}%% tipauni-exclusive
- \DeclareTextSymbol{\textturnlonglegr}{TU}{"27A}%% ɺ
- \DeclareTextComposite{\tipaunibang}{TU}{r}{"27A}%% tipauni-exclusive
- \DeclareTextSymbol{\texththeng}{TU}{"267}%% ɧ
- \DeclareTextComposite{\tipaunistar}{TU}{3}{"267}%% tipauni-exclusive
- \DeclareTextComposite{\tipaunistar}{TU}{k}{"029E}% ʞ
- \DeclareTextComposite{\tipaunistar}{TU}{t}{"287}% ʇ
- \DeclareTextComposite{\tipaunistar}{TU}{w}{"28D}% ʍ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{E}{"1D07}% ᴇ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{J}{"1D0A}% ᴊ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{A}{"1D00}% ᴀ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{H}{"29C}% ʜ
- \DeclareTextComposite{\tipaunisemicolon}{TU}{U}{"1D1C}% ᴜ
- %% Vowels
- \DeclareTextSymbol{\textsci}{TU}{"26A}%% ɪ
- \DeclareTextSymbol{\textscy}{TU}{"28F}%% ʏ
- \DeclareTextSymbol{\textepsilon}{TU}{"25B}%% ɛ
- \DeclareTextSymbol{\textbari}{TU}{"268}%% ɨ
- \DeclareTextSymbol{\textbaru}{TU}{"289}%% ʉ
- \DeclareTextSymbol{\textupsilon}{TU}{"28A}%% ʊ
- \DeclareTextSymbol{\textreve}{TU}{"258}%% ɘ
- \DeclareTextSymbol{\textbaro}{TU}{"275}%% ɵ
- \DeclareTextSymbol{\textschwa}{TU}{"259}%% ə
- \DeclareTextSymbol{\textrevepsilon}{TU}{"25C}%% ɜ
- \DeclareTextSymbol{\textcloserevepsilon}{TU}{"25E}%% ɞ
- \DeclareTextSymbol{\textturna}{TU}{"250}%% ɐ
- \DeclareTextSymbol{\textturnm}{TU}{"26F}%% ɯ
- \DeclareTextSymbol{\textramshorns}{TU}{"264}%% ɤ
- \DeclareTextSymbol{\textturnv}{TU}{"28C}%% ʌ
- \DeclareTextSymbol{\textopeno}{TU}{"254}%% ɔ
- \DeclareTextSymbol{\textscripta}{TU}{"251}%% ɑ
- \DeclareTextSymbol{\textturnscripta}{TU}{"252}%% ɒ
- %% Independent diacritic marks
- %%-- Rhoticity
- \DeclareTextSymbol{\textrhoticity}{TU}{"2DE}%% ˞
- \tipaunicmd{\tr}{˞}
- %%-- Tie bar (below)
- \DeclareTextCommand{\tipaunitextbottomtiebar}{TU}[2]{#1\symbol{"035C}#2}
- \NewDocumentCommand\textbottomtiebar{ m }{\tipaunitextbottomtiebar#1}
- %%-- Tie bar (below) - standalone character
- \DeclareTextCommand{\tipaunits}{TU}[2]{#1\symbol{"203F}#2}
- \NewDocumentCommand\stdlnetiebar{ m }{\tipaunits#1}
- \NewDocumentCommand\ts{ m }{\tipaunits#1}
- %% No audible release
- \DeclareTextSymbol{\textcorner}{TU}{"31A}%% ̚
- \tipaunicmd{\tc}{̚}
- %% Syllabic
- \DeclareUnicodeAccent{\textsyllabic}{TU}{"0329}%% ̩
- \NewDocumentCommand\s{ m }{\textsyllabic{\textipa{#1}}\tipauni@nontipatrue}
- %% Non-syllabic
- \DeclareUnicodeAccent{\textsubarch}{TU}{"032F}%% ̯
- \NewDocumentCommand\ns{ m }{\textsubarch{\textipa{#1}}}
- %% Laminal
- \DeclareUnicodeAccent{\textsubsquare}{TU}{"033B}%% ̻
- \NewDocumentCommand\lmn{ m }{\textsubsquare{\textipa{#1}}\tipauni@nontipatrue}
- %% Other complex shorthand commands
- \DeclareTextCommand{\@pipeshorthands}{TU}[2]{%
- \if #1[\tipaunisubbridge{\textipa{#2}}\else
- \if #1]\tipauniinvsubbridge{\textipa{#2}}\else
- \if #1(\tipaunisublhalfring{\textipa{#2}}\else
- \if #1)\tipaunisubrhalfring{\textipa{#2}}\else
- \if #1+\tipaunisubplus{\textipa{#2}}\else
- \if #1'\tipauniraising{\textipa{#2}}\else
- \if #1`\tipaunilowering{\textipa{#2}}\else
- \if #1<\tipauniadvancing{\textipa{#2}}\else
- \if #1>\tipauniretracting{\textipa{#2}}\else
- \if #1x\tipauniovercross{\textipa{#2}}\else
- \if #1m\tipauniseagull{\textipa{#2}}\else #1#2%
- \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
- }%
- \DeclareTextAccentDefault{\@pipeshorthands}{TU}
- \ExplSyntaxOn
- \NewDocumentCommand \super { m }
- {%
- \str_case:nn {#1}
- {
- {h} {ʰ}
- {w} {ʷ}
- {j} {ʲ}
- {ɣ} {ˠ}
- {ʕ} {ˤ}
- {n} {ⁿ}
- {l} {ˡ}
- }
- }
- \seq_new:N \l__tipauni_remove_from_accents_seq
- \tl_new:N \l__tipauni_textipa_tl
- \seq_set_split:Nnn \l__tipauni_remove_from_accents_seq { , }
- { \~, \=, \", \r, \v, \t }
- \iftipauni@nontipa@ignore
- \cs_new_eq:NN \__tipauni_nontipa_search: \prg_do_nothing:
- \cs_new_eq:NN \__tipauni_nontipa_search:n \use_none:n
- \else
- \cs_new_protected:Npn \__tipauni_nontipa_search:
- {
- \unless\iftipauni@nontipa
- \exp_args:No \__tipauni_nontipa_search:n \l__tipauni_textipa_tl
- \fi
- }
- \cs_new_protected:Npn \__tipauni_nontipa_search:n #1
- {
- \str_if_in:nnT {#1} {ⱱ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \str_if_in:nnT {#1} {ɞ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \str_if_in:nnT {#1} {ɰ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \str_if_in:nnT {#1} {ǃ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \str_if_in:nnT {#1} {ǂ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \str_if_in:nnT {#1} {ʢ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \str_if_in:nnT {#1} {ɺ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \str_if_in:nnT {#1} {ʑ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \str_if_in:nnT {#1} {ɧ} { \tipauni@nontipatrue \use_none_delimit_by_s_stop:w }
- \use_none:nnn \s_stop
- \use:n { \cs_gset_eq:NN \__tipauni_nontipa_search: \prg_do_nothing: }
- }
- \fi
- \NewDocumentCommand\textipa{ +m }%
- {
- \begingroup
- \let\*\tipaunistar
- \let\:\tipaunicolon
- \let\;\tipaunisemicolon
- \let\!\tipaunibang
- \let\|\tipaunipipe
- \let\t\tipaunit
- \seq_map_inline:Nn \l__tipauni_remove_from_accents_seq
- { \tl_remove_all:Nn \l_text_accents_tl {##1} }
- \tl_set:Nx \l__tipauni_textipa_tl { \text_expand:n {#1} }
- \use:x
- {
- \exp_not:n
- {
- \escapechar = `\\
- \tl_set:Nx \l__tipauni_textipa_tl
- { \exp_args:No \__tipauni_act:n \l__tipauni_textipa_tl }
- \escapechar =
- }
- \int_use:N \escapechar
- }
- \exp_stop_f:
- \l__tipauni_textipa_tl
- \__tipauni_nontipa_search:
- \endgroup
- }
- \scan_new:N \s__tipauni_act_stop
- \cs_new:Npn \__tipauni_use_none_delimit_by_act_stop:w #1 \s__tipauni_act_stop {}
- \cs_new:Npn \__tipauni_act:n #1 { \__tipauni_act_loop:w #1 {\s__tipauni_act_stop} . \s__tipauni_act_stop }
- \cs_new_eq:NN \__tipauni_act_output:n \exp_not:n
- \cs_new:Npn \__tipauni_act_loop:w { \__tipauni_act_loop:Nnw \use_none:nn {} }
- \cs_new:Npn \__tipauni_act_loop:Nnw #1#2#3 \s__tipauni_act_stop
- {
- \__tipauni_act_if_head_is_space:nTF {#3}
- { \__tipauni_act_space:Nnw }
- {
- \tl_if_head_is_group:nTF {#3}
- \__tipauni_act_group:Nnn
- \__tipauni_act_normal:NnN
- }
- #1 {#2} #3 \s__tipauni_act_stop
- }
- \group_begin:
- \cs_set:Npn \__tipauni_tmp:n #1
- {
- \cs_new:Npn \__tipauni_act_if_head_is_space:nTF ##1
- {
- \__tipauni_act_if_head_is_space:w
- \s__tipauni_act_stop ##1 \s__tipauni_act_stop
- \__tipauni_act_if_head_is_space_true:w
- \s__tipauni_act_stop #1 \s__tipauni_act_stop
- \use_ii:nn
- }
- \cs_new:Npn \__tipauni_act_if_head_is_space:w
- ##1 \s__tipauni_act_stop #1 ##2 \s__tipauni_act_stop
- {}
- \cs_new:Npn \__tipauni_act_if_head_is_space_true:w
- \s__tipauni_act_stop #1 \s__tipauni_act_stop \use_ii:nn ##1 ##2
- {##1}
- \cs_new:Npn \__tipauni_act_space:Nnw ##1 ##2 #1
- {
- \token_if_eq_meaning:NNTF ##1 \__tipauni_act_macro:nn
- { \__tipauni_act_space_macro:nn ##2 }
- {
- \cs_if_exist_use:cTF { __tipauni_act_char_mono_ \tl_to_str:n { ##2 } : }
- { \__tipauni_act_output:n {~} }
- { \__tipauni_act_output:n { ##2 ~ } }
- \__tipauni_act_loop:w
- }
- }
- }
- \__tipauni_tmp:n {~}
- \group_end:
- \cs_new:Npn \__tipauni_act_space_macro:nn #1#2
- { \__tipauni_act_loop:Nnw \__tipauni_act_macro:nn { {#1} { #2 ~ } } }
- \cs_new:Npn \__tipauni_act_group:Nnn #1#2#3
- {
- \__tipauni_use_none_delimit_by_act_stop:w
- #3 \__tipauni_act_final:Nnw #1 {#2} \s__tipauni_act_stop
- \token_if_eq_meaning:NNTF #1 \__tipauni_act_macro:nn
- { \__tipauni_act_group_macro:nn {#2} {#3} }
- {
- \cs_if_exist_use:cF { __tipauni_act_char_mono_ \tl_to_str:n { #2 } : }
- { \__tipauni_act_output:n {#2} }
- { \__tipauni_act_loop:w #3 {\s__tipauni_act_stop} . \s__tipauni_act_stop }
- }
- \__tipauni_act_loop:w
- }
- \cs_new:Npn \__tipauni_act_final:Nnw
- #1#2 \s__tipauni_act_stop #3 \__tipauni_act_loop:w #4 \s__tipauni_act_stop
- {
- \cs_if_exist_use:cF { __tipauni_act_char_mono_ \tl_to_str:n { #2 } : }
- {
- \token_if_eq_meaning:NNTF #1 \__tipauni_act_macro:nn
- { \exp_args:No \__tipauni_act_output:n { \use:nn #2 } }
- { \__tipauni_act_output:n {#2} }
- }
- }
- \cs_new:Npn \__tipauni_act_normal:NnN #1#2#3
- {
- \token_if_eq_meaning:NNTF #1 \use_none:nn
- {
- \cs_if_exist_use:cF { __tipauni_act_normal_ \tl_to_str:n {#3} :nw }
- { \__tipauni_act_output:n }
- {#3}
- }
- { #1 {#2} {#3} }
- \__tipauni_act_loop:w
- }
- \cs_new:Npn \__tipauni_act_macro:nn #1#2
- {
- \cs_if_exist_use:cF
- { __tipauni_act_macro_ \exp_args:No \tl_to_str:n { \use_i:nn #1 / #2 } : }
- { \exp_args:No \__tipauni_act_output:n { \use:nn #1 #2 } }
- }
- \cs_new:Npn \__tipauni_act_group_macro:nn #1#2
- {
- \cs_if_exist_use:cF
- { __tipauni_act_macro_ \exp_args:No \tl_to_str:n { \use_i:nn #1 / #2 } : }
- {
- \exp_args:No \__tipauni_act_output:n { \use:nn #1 }
- { \__tipauni_act_loop:w #2 {\s__tipauni_act_stop} . \s__tipauni_act_stop }
- }
- }
- \cs_new:Npn \__tipauni_act_char:nn #1#2
- {
- \cs_if_exist_use:cF { __tipauni_act_char_bigraph_ \tl_to_str:n { #1/#2 } : }
- {
- \cs_if_exist_use:cF { __tipauni_act_char_mono_ \tl_to_str:n { #1 } : }
- { \__tipauni_act_output:n {#1} }
- \use_i:nn { \__tipauni_act_normal:NnN \use_none:nn {} {#2} }
- }
- }
- \cs_new_protected:Npn \__tipauni_new_macro_pair_bigraph:NNNn #1#2#3#4
- {
- \__tipauni_new_macro_bigraph:NNn #1 #3 {#4}
- \__tipauni_new_macro_bigraph:NNn #2 #3 {#4}
- }
- \cs_new_protected:Npn \__tipauni_new_macro_bigraph:NNn #1#2#3
- {
- \cs_gset:cpn { __tipauni_act_normal_ \tl_to_str:n {#1} :nw } ##1##2 \__tipauni_act_loop:w
- { \__tipauni_act_loop:Nnw \__tipauni_act_macro:nn { {##1} {} } }
- \cs_gset:cpn { __tipauni_act_macro_ \tl_to_str:n { #1/#2 } : }
- { \__tipauni_act_output:n {#3} }
- }
- \cs_new_protected:Npn \__tipauni_new_char_bigraph:NNn #1#2#3
- {
- \cs_gset:cpn { __tipauni_act_normal_ \tl_to_str:n {#1} :nw } ##1##2 \__tipauni_act_loop:w
- { \__tipauni_act_loop:Nnw \__tipauni_act_char:nn {##1} }
- \cs_gset:cpn { __tipauni_act_char_bigraph_ \tl_to_str:n { #1/#2 } : }
- { \__tipauni_act_output:n {#3} }
- }
- \cs_new_protected:Npn \__tipauni_new_char_mono:Nn #1#2
- {
- \cs_gset:cpn { __tipauni_act_normal_ \tl_to_str:n {#1} :nw } ##1##2 \__tipauni_act_loop:w
- { \__tipauni_act_loop:Nnw \__tipauni_act_char:nn {##1} }
- \cs_gset:cpn { __tipauni_act_char_mono_ \tl_to_str:n {#1} : }
- { \__tipauni_act_output:n {#2} }
- }
- \__tipauni_new_macro_pair_bigraph:NNNn \! \tipaunibang G {ʛ}
- \__tipauni_new_macro_pair_bigraph:NNNn \! \tipaunibang g {ɠ}
- \__tipauni_new_macro_pair_bigraph:NNNn \* \tipaunistar 1 {ʢ}
- \__tipauni_new_macro_pair_bigraph:NNNn \* \tipaunistar 2 {ʡ}
- \__tipauni_new_macro_pair_bigraph:NNNn \* \tipaunistar 3 {ɧ}
- \__tipauni_new_macro_pair_bigraph:NNNn \* \tipaunistar Z {ʑ}
- \__tipauni_new_macro_pair_bigraph:NNNn \: \tipaunicolon R {ɻ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon A {ᴀ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon G {ɢ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon B {ʙ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon E {ᴇ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon H {ʜ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon J {ᴊ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon L {ʟ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon N {ɴ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon R {ʀ}
- \__tipauni_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon U {ᴜ}
- \__tipauni_new_char_bigraph:NNn || {ǁ}
- \__tipauni_new_char_bigraph:NNn "" {ˌ}
- \clist_map_inline:nn
- {
- {5}{ɐ}, {A}{ɑ}, {6}{ɒ}, {2}{ʌ}, {B}{β}, {C}{ɕ}, {D}{ð}, {9}{ɘ}, {E}{ɛ},
- {3}{ɜ}, {g}{ɡ}, {G}{ɣ}, {7}{ɤ}, {H}{ɦ}, {L}{ʎ}, {4}{ɥ}, {1}{ɨ}, {I}{ɪ},
- {J}{ʝ}, {M}{ɱ}, {W}{ɯ}, {N}{ŋ}, {8}{ɵ}, {O}{ɔ}, {F}{ɸ}, {R}{ɾ}, {K}{ʁ},
- {S}{ʃ}, {T}{θ}, {0}{ʉ}, {U}{ʊ}, {V}{ʋ}, {X}{χ}, {Y}{ʏ}, {Z}{ʒ},
- {P}{ʔ}, {Q}{ʕ},
- {:}{ː}, {;}{ˑ}, {!}{ǃ}, {&}{ɞ}, {@}{ə}, {|}{ǀ}, {"}{ˈ}
- }
- { \__tipauni_new_char_mono:Nn #1 }
- \ExplSyntaxOff
- %%-- Dependent diacritic marks
- %%--** Voiceless
- \DeclareUnicodeAccent{\textsubring}{TU}{"0325}%% ̥
- \DeclareTextCommand{\r}{TU}{\tipaunisubring}
- \protected\def\tipaunisubring{\@ifstar{\TipaUniSubRing}{\TipaUniSubRing}}
- \NewDocumentCommand\TipaUniSubRing{ m }{\textsubring{\textipa{#1}}}
- %%--** Voiced
- \DeclareUnicodeAccent{\textsubwedge}{TU}{"032C}%% ̬
- \DeclareTextCommand{\v}{TU}{\tipaunisubwedge}
- \protected\def\tipaunisubwedge{\@ifstar{\TipaUniSubWedge}{\TipaUniSubWedge}}
- \NewDocumentCommand\TipaUniSubWedge{ m }{\textsubwedge{\textipa{#1}}}
- %%--** More rounded
- \DeclareUnicodeAccent{\textsubrhalfring}{TU}{"0339}%% ̹
- \NewDocumentCommand\tipaunisubrhalfring{ m }{\textsubrhalfring{\textipa{#1}}}
- %%--** Less rounded
- \DeclareUnicodeAccent{\textsublhalfring}{TU}{"031C}%% ̜
- \NewDocumentCommand\tipaunisublhalfring{ m }{\textsublhalfring{\textipa{#1}}}
- %%--** Advanced
- \DeclareUnicodeAccent{\textsubplus}{TU}{"031F}%% ̟
- \NewDocumentCommand\tipaunisubplus{ m }{\textsubplus{\textipa{#1}}}
- %%--** Retracted
- \DeclareUnicodeAccent{\textsubbar}{TU}{"0320}%% ̠
- \DeclareTextCommand{\=}{TU}{\tipaunisubbar}
- \protected\def\tipaunisubbar{\@ifstar{\TipaUniSubBar}{\TipaUniSubBar}}
- \NewDocumentCommand\TipaUniSubBar{ m }{\textsubbar{\textipa{#1}}}
- %%--** Mid-centralized
- \DeclareUnicodeAccent{\textovercross}{TU}{"033D}%% ̽
- \NewDocumentCommand\tipauniovercross{ m }{\textovercross{\textipa{#1}}}
- %%--** Breathy voiced
- \DeclareUnicodeAccent{\textsubumlaut}{TU}{"0324}%% ̤
- \DeclareTextCommand{\"}{TU}{\tipaunisubumlaut}
- \protected\def\tipaunisubumlaut{\@ifstar{\TipaUniSubUmlaut}{\TipaUniSubUmlaut}}
- \NewDocumentCommand\TipaUniSubUmlaut{ m }{\textsubumlaut{\textipa{#1}}}
- %%--** Creaky voiced
- \DeclareUnicodeAccent{\textsubtilde}{TU}{"0330}%% ̰
- \DeclareTextCommand{\~}{TU}{\tipaunisubtilde}
- \protected\def\tipaunisubtilde{\@ifstar{\TipaUniSubTilde}{\TipaUniSubTilde}}
- \NewDocumentCommand\TipaUniSubTilde{ m }{\textsubtilde{\textipa{#1}}}
- %%--** Linguo-labialized
- \DeclareUnicodeAccent{\textseagull}{TU}{"033C}%% ̼
- \NewDocumentCommand\tipauniseagull{ m }{\textseagull{#1}}
- %%--** Velarized
- \DeclareUnicodeAccent{\textsuperimposetilde}{TU}{"0334}%% ̴
- \NewDocumentCommand\tipaunisuperimposetilde{ m }{\textsuperimposetilde{#1}}
- \NewDocumentCommand\vl{ m }{\textsuperimposetilde{\textipa{#1}}}
- %%--** Raised
- \DeclareUnicodeAccent{\textraising}{TU}{"031D}%% ̝
- \NewDocumentCommand{\tipauniraising}{m}{\textraising{#1}}
- %%--** Lowered
- \DeclareUnicodeAccent{\textlowering}{TU}{"031E}%% ̞
- \NewDocumentCommand{\tipaunilowering}{m}{\textlowering{#1}}
- %%%--** Advanced tongue root
- \DeclareUnicodeAccent{\textadvancing}{TU}{"0318}%% ̘
- \NewDocumentCommand{\tipauniadvancing}{m}{\textadvancing{#1}}
- %%--** Retracted tongue root
- \DeclareUnicodeAccent{\textretracting}{TU}{"0319}%% ̙
- \NewDocumentCommand{\tipauniretracting}{m}{\textretracting{#1}}
- %%--** Dental
- \DeclareUnicodeAccent{\textsubbridge}{TU}{"032A}%% ̪
- \NewDocumentCommand\tipaunisubbridge{ m }{\textsubbridge{#1}}
- %%--** Apical
- \DeclareUnicodeAccent{\textinvsubbridge}{TU}{"033A}%% ̺
- \NewDocumentCommand\tipauniinvsubbridge{ m }{\textinvsubbridge{#1}}
- %%--** Tie bar (above)
- \DeclareTextCommand{\tipaunitexttoptiebar}{TU}[2]{#1\symbol{"0361}#2}
- \NewDocumentCommand\texttoptiebar{ m }{\tipaunitexttoptiebar#1}
- \DeclareTextCommand{\tipaunit}{TU}{\@ifstar{\textbottomtiebar}{\texttoptiebar}}
- \NewDocumentEnvironment{IPA}{+b}{\textipa{#1}}{}
- \endinput
- %%
- %% End of file `tipauni.sty'.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement