From 78a278be7587c8b6321671f24a56203a546533f6 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Wed, 11 Aug 2021 20:15:57 +0000 Subject: tipauni (11aug21) git-svn-id: svn://tug.org/texlive/trunk@60220 c570f23f-e606-0410-a88d-b1316a301751 --- Master/texmf-dist/doc/latex/tipauni/README.txt | 6 +- Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex | 513 -------------------- .../doc/latex/tipauni/tipauni-commands.pdf | Bin 108227 -> 85125 bytes .../doc/latex/tipauni/tipauni-commands.tex | 55 +-- .../doc/latex/tipauni/tipauni-example.pdf | Bin 134002 -> 128188 bytes .../doc/latex/tipauni/tipauni-example.tex | 4 +- Master/texmf-dist/doc/latex/tipauni/tipauni.pdf | Bin 194032 -> 248249 bytes Master/texmf-dist/source/latex/tipauni/tipauni.dtx | 536 +++++++++++++++------ Master/texmf-dist/source/latex/tipauni/tipauni.ins | 10 +- Master/texmf-dist/tex/latex/tipauni/tipauni.sty | 313 ++++++++---- 10 files changed, 642 insertions(+), 795 deletions(-) delete mode 100644 Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex diff --git a/Master/texmf-dist/doc/latex/tipauni/README.txt b/Master/texmf-dist/doc/latex/tipauni/README.txt index 2cb44e5ee63..2ca76f59d0a 100644 --- a/Master/texmf-dist/doc/latex/tipauni/README.txt +++ b/Master/texmf-dist/doc/latex/tipauni/README.txt @@ -1,9 +1,9 @@ -------------------------------------------------------------------------- Package: tipauni -Author: Niranjan -Version: v0.1 (27 April, 2021) +Author: निरंजन +Version: v0.2 (11 August, 2021) Description: For producing Unicode characters with TIPA commands. Repository: https://gitlab.com/niruvt/tipauni Bug tracker: https://gitlab.com/niruvt/tipauni/-/issues -License: GPL v3.0+ +License: GPL v3.0+, GFDL v1.3+ -------------------------------------------------------------------------- diff --git a/Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex b/Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex deleted file mode 100644 index 8c42ff6fd7a..00000000000 --- a/Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex +++ /dev/null @@ -1,513 +0,0 @@ -% \section{\centering GNU Free Documentation License} -% \begin{center} -% -% Version 1.3, 3 November 2008 -% -% Copyright \copyright{} 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. -% -% \bigskip -% -% \url{https://fsf.org/} -% -% \bigskip -% -% Everyone is permitted to copy and distribute verbatim copies -% of this license document, but changing it is not allowed. -% \end{center} -% -% \begin{center} -% {\bf\large Preamble} -% \end{center} -% -% The purpose of this License is to make a manual, textbook, or other -% functional and useful document ``free'' in the sense of freedom: to -% assure everyone the effective freedom to copy and redistribute it, -% with or without modifying it, either commercially or noncommercially. -% Secondarily, this License preserves for the author and publisher a way -% to get credit for their work, while not being considered responsible -% for modifications made by others. -% -% This License is a kind of ``copyleft'', which means that derivative -% works of the document must themselves be free in the same sense. It -% complements the GNU General Public License, which is a copyleft -% license designed for free software. -% -% We have designed this License in order to use it for manuals for free -% software, because free software needs free documentation: a free -% program should come with manuals providing the same freedoms that the -% software does. But this License is not limited to software manuals; -% it can be used for any textual work, regardless of subject matter or -% whether it is published as a printed book. We recommend this License -% principally for works whose purpose is instruction or reference. -% -% \begin{center} -% {\Large\bf 1. APPLICABILITY AND DEFINITIONS\par} -% \end{center} -% -% This License applies to any manual or other work, in any medium, that -% contains a notice placed by the copyright holder saying it can be -% distributed under the terms of this License. Such a notice grants a -% world-wide, royalty-free license, unlimited in duration, to use that -% work under the conditions stated herein. The ``\textbf{Document}'', below, -% refers to any such manual or work. Any member of the public is a -% licensee, and is addressed as ``\textbf{you}''. You accept the license if you -% copy, modify or distribute the work in a way requiring permission -% under copyright law. -% -% A ``\textbf{Modified Version}'' of the Document means any work containing the -% Document or a portion of it, either copied verbatim, or with -% modifications and/or translated into another language. -% -% A ``\textbf{Secondary Section}'' is a named appendix or a front-matter section of -% the Document that deals exclusively with the relationship of the -% publishers or authors of the Document to the Document's overall subject -% (or to related matters) and contains nothing that could fall directly -% within that overall subject. (Thus, if the Document is in part a -% textbook of mathematics, a Secondary Section may not explain any -% mathematics.) The relationship could be a matter of historical -% connection with the subject or with related matters, or of legal, -% commercial, philosophical, ethical or political position regarding -% them. -% -% The ``\textbf{Invariant Sections}'' are certain Secondary Sections whose titles -% are designated, as being those of Invariant Sections, in the notice -% that says that the Document is released under this License. If a -% section does not fit the above definition of Secondary then it is not -% allowed to be designated as Invariant. The Document may contain zero -% Invariant Sections. If the Document does not identify any Invariant -% Sections then there are none. -% -% The ``\textbf{Cover Texts}'' are certain short passages of text that are listed, -% as Front-Cover Texts or Back-Cover Texts, in the notice that says that -% the Document is released under this License. A Front-Cover Text may -% be at most 5 words, and a Back-Cover Text may be at most 25 words. -% -% A ``\textbf{Transparent}'' copy of the Document means a machine-readable copy, -% represented in a format whose specification is available to the -% general public, that is suitable for revising the document -% straightforwardly with generic text editors or (for images composed of -% pixels) generic paint programs or (for drawings) some widely available -% drawing editor, and that is suitable for input to text formatters or -% for automatic translation to a variety of formats suitable for input -% to text formatters. A copy made in an otherwise Transparent file -% format whose markup, or absence of markup, has been arranged to thwart -% or discourage subsequent modification by readers is not Transparent. -% An image format is not Transparent if used for any substantial amount -% of text. A copy that is not ``Transparent'' is called ``\textbf{Opaque}''. -% -% Examples of suitable formats for Transparent copies include plain -% ASCII without markup, Texinfo input format, LaTeX input format, SGML -% or XML using a publicly available DTD, and standard-conforming simple -% HTML, PostScript or PDF designed for human modification. Examples of -% transparent image formats include PNG, XCF and JPG. Opaque formats -% include proprietary formats that can be read and edited only by -% proprietary word processors, SGML or XML for which the DTD and/or -% processing tools are not generally available, and the -% machine-generated HTML, PostScript or PDF produced by some word -% processors for output purposes only. -% -% The ``\textbf{Title Page}'' means, for a printed book, the title page itself, -% plus such following pages as are needed to hold, legibly, the material -% this License requires to appear in the title page. For works in -% formats which do not have any title page as such, ``Title Page'' means -% the text near the most prominent appearance of the work's title, -% preceding the beginning of the body of the text. -% -% The ``\textbf{publisher}'' means any person or entity that distributes -% copies of the Document to the public. -% -% A section ``\textbf{Entitled XYZ}'' means a named subunit of the Document whose -% title either is precisely XYZ or contains XYZ in parentheses following -% text that translates XYZ in another language. (Here XYZ stands for a -% specific section name mentioned below, such as ``\textbf{Acknowledgements}'', -% ``\textbf{Dedications}'', ``\textbf{Endorsements}'', or ``\textbf{History}''.) -% To ``\textbf{Preserve the Title}'' -% of such a section when you modify the Document means that it remains a -% section ``Entitled XYZ'' according to this definition. -% -% The Document may include Warranty Disclaimers next to the notice which -% states that this License applies to the Document. These Warranty -% Disclaimers are considered to be included by reference in this -% License, but only as regards disclaiming warranties: any other -% implication that these Warranty Disclaimers may have is void and has -% no effect on the meaning of this License. -% -% \begin{center} -% {\Large\bf 2. VERBATIM COPYING\par} -% \end{center} -% -% You may copy and distribute the Document in any medium, either -% commercially or noncommercially, provided that this License, the -% copyright notices, and the license notice saying this License applies -% to the Document are reproduced in all copies, and that you add no other -% conditions whatsoever to those of this License. You may not use -% technical measures to obstruct or control the reading or further -% copying of the copies you make or distribute. However, you may accept -% compensation in exchange for copies. If you distribute a large enough -% number of copies you must also follow the conditions in section~3. -% -% You may also lend copies, under the same conditions stated above, and -% you may publicly display copies. -% -% \begin{center} -% {\Large\bf 3. COPYING IN QUANTITY\par} -% \end{center} -% -% If you publish printed copies (or copies in media that commonly have -% printed covers) of the Document, numbering more than 100, and the -% Document's license notice requires Cover Texts, you must enclose the -% copies in covers that carry, clearly and legibly, all these Cover -% Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on -% the back cover. Both covers must also clearly and legibly identify -% you as the publisher of these copies. The front cover must present -% the full title with all words of the title equally prominent and -% visible. You may add other material on the covers in addition. -% Copying with changes limited to the covers, as long as they preserve -% the title of the Document and satisfy these conditions, can be treated -% as verbatim copying in other respects. -% -% If the required texts for either cover are too voluminous to fit -% legibly, you should put the first ones listed (as many as fit -% reasonably) on the actual cover, and continue the rest onto adjacent -% pages. -% -% If you publish or distribute Opaque copies of the Document numbering -% more than 100, you must either include a machine-readable Transparent -% copy along with each Opaque copy, or state in or with each Opaque copy -% a computer-network location from which the general network-using -% public has access to download using public-standard network protocols -% a complete Transparent copy of the Document, free of added material. -% If you use the latter option, you must take reasonably prudent steps, -% when you begin distribution of Opaque copies in quantity, to ensure -% that this Transparent copy will remain thus accessible at the stated -% location until at least one year after the last time you distribute an -% Opaque copy (directly or through your agents or retailers) of that -% edition to the public. -% -% It is requested, but not required, that you contact the authors of the -% Document well before redistributing any large number of copies, to give -% them a chance to provide you with an updated version of the Document. -% -% -% \begin{center} -% {\Large\bf 4. MODIFICATIONS\par} -% \end{center} -% -% You may copy and distribute a Modified Version of the Document under -% the conditions of sections 2 and 3 above, provided that you release -% the Modified Version under precisely this License, with the Modified -% Version filling the role of the Document, thus licensing distribution -% and modification of the Modified Version to whoever possesses a copy -% of it. In addition, you must do these things in the Modified Version: -% -% \begin{itemize} -% \item[A.] -% Use in the Title Page (and on the covers, if any) a title distinct -% from that of the Document, and from those of previous versions -% (which should, if there were any, be listed in the History section -% of the Document). You may use the same title as a previous version -% if the original publisher of that version gives permission. -% -% \item[B.] -% List on the Title Page, as authors, one or more persons or entities -% responsible for authorship of the modifications in the Modified -% Version, together with at least five of the principal authors of the -% Document (all of its principal authors, if it has fewer than five), -% unless they release you from this requirement. -% -% \item[C.] -% State on the Title page the name of the publisher of the -% Modified Version, as the publisher. -% -% \item[D.] -% Preserve all the copyright notices of the Document. -% -% \item[E.] -% Add an appropriate copyright notice for your modifications -% adjacent to the other copyright notices. -% -% \item[F.] -% Include, immediately after the copyright notices, a license notice -% giving the public permission to use the Modified Version under the -% terms of this License, in the form shown in the Addendum below. -% -% \item[G.] -% Preserve in that license notice the full lists of Invariant Sections -% and required Cover Texts given in the Document's license notice. -% -% \item[H.] -% Include an unaltered copy of this License. -% -% \item[I.] -% Preserve the section Entitled ``History'', Preserve its Title, and add -% to it an item stating at least the title, year, new authors, and -% publisher of the Modified Version as given on the Title Page. If -% there is no section Entitled ``History'' in the Document, create one -% stating the title, year, authors, and publisher of the Document as -% given on its Title Page, then add an item describing the Modified -% Version as stated in the previous sentence. -% -% \item[J.] -% Preserve the network location, if any, given in the Document for -% public access to a Transparent copy of the Document, and likewise -% the network locations given in the Document for previous versions -% it was based on. These may be placed in the ``History'' section. -% You may omit a network location for a work that was published at -% least four years before the Document itself, or if the original -% publisher of the version it refers to gives permission. -% -% \item[K.] -% For any section Entitled ``Acknowledgements'' or ``Dedications'', -% Preserve the Title of the section, and preserve in the section all -% the substance and tone of each of the contributor acknowledgements -% and/or dedications given therein. -% -% \item[L.] -% Preserve all the Invariant Sections of the Document, -% unaltered in their text and in their titles. Section numbers -% or the equivalent are not considered part of the section titles. -% -% \item[M.] -% Delete any section Entitled ``Endorsements''. Such a section -% may not be included in the Modified Version. -% -% \item[N.] -% Do not retitle any existing section to be Entitled ``Endorsements'' -% or to conflict in title with any Invariant Section. -% -% \item[O.] -% Preserve any Warranty Disclaimers. -% \end{itemize} -% -% If the Modified Version includes new front-matter sections or -% appendices that qualify as Secondary Sections and contain no material -% copied from the Document, you may at your option designate some or all -% of these sections as invariant. To do this, add their titles to the -% list of Invariant Sections in the Modified Version's license notice. -% These titles must be distinct from any other section titles. -% -% You may add a section Entitled ``Endorsements'', provided it contains -% nothing but endorsements of your Modified Version by various -% parties---for example, statements of peer review or that the text has -% been approved by an organization as the authoritative definition of a -% standard. -% -% You may add a passage of up to five words as a Front-Cover Text, and a -% passage of up to 25 words as a Back-Cover Text, to the end of the list -% of Cover Texts in the Modified Version. Only one passage of -% Front-Cover Text and one of Back-Cover Text may be added by (or -% through arrangements made by) any one entity. If the Document already -% includes a cover text for the same cover, previously added by you or -% by arrangement made by the same entity you are acting on behalf of, -% you may not add another; but you may replace the old one, on explicit -% permission from the previous publisher that added the old one. -% -% The author(s) and publisher(s) of the Document do not by this License -% give permission to use their names for publicity for or to assert or -% imply endorsement of any Modified Version. -% -% \begin{center} -% {\Large\bf 5. COMBINING DOCUMENTS\par} -% \end{center} -% -% You may combine the Document with other documents released under this -% License, under the terms defined in section~4 above for modified -% versions, provided that you include in the combination all of the -% Invariant Sections of all of the original documents, unmodified, and -% list them all as Invariant Sections of your combined work in its -% license notice, and that you preserve all their Warranty Disclaimers. -% -% The combined work need only contain one copy of this License, and -% multiple identical Invariant Sections may be replaced with a single -% copy. If there are multiple Invariant Sections with the same name but -% different contents, make the title of each such section unique by -% adding at the end of it, in parentheses, the name of the original -% author or publisher of that section if known, or else a unique number. -% Make the same adjustment to the section titles in the list of -% Invariant Sections in the license notice of the combined work. -% -% In the combination, you must combine any sections Entitled ``History'' -% in the various original documents, forming one section Entitled -% ``History''; likewise combine any sections Entitled ``Acknowledgements'', -% and any sections Entitled ``Dedications''. You must delete all sections -% Entitled ``Endorsements''. -% -% \begin{center} -% {\Large\bf 6. COLLECTIONS OF DOCUMENTS\par} -% \end{center} -% -% You may make a collection consisting of the Document and other documents -% released under this License, and replace the individual copies of this -% License in the various documents with a single copy that is included in -% the collection, provided that you follow the rules of this License for -% verbatim copying of each of the documents in all other respects. -% -% You may extract a single document from such a collection, and distribute -% it individually under this License, provided you insert a copy of this -% License into the extracted document, and follow this License in all -% other respects regarding verbatim copying of that document. -% -% \begin{center} -% {\Large\bf 7. AGGREGATION WITH INDEPENDENT WORKS\par} -% \end{center} -% -% A compilation of the Document or its derivatives with other separate -% and independent documents or works, in or on a volume of a storage or -% distribution medium, is called an ``aggregate'' if the copyright -% resulting from the compilation is not used to limit the legal rights -% of the compilation's users beyond what the individual works permit. -% When the Document is included in an aggregate, this License does not -% apply to the other works in the aggregate which are not themselves -% derivative works of the Document. -% -% If the Cover Text requirement of section~3 is applicable to these -% copies of the Document, then if the Document is less than one half of -% the entire aggregate, the Document's Cover Texts may be placed on -% covers that bracket the Document within the aggregate, or the -% electronic equivalent of covers if the Document is in electronic form. -% Otherwise they must appear on printed covers that bracket the whole -% aggregate. -% -% \begin{center} -% {\Large\bf 8. TRANSLATION\par} -% \end{center} -% -% Translation is considered a kind of modification, so you may -% distribute translations of the Document under the terms of section~4. -% Replacing Invariant Sections with translations requires special -% permission from their copyright holders, but you may include -% translations of some or all Invariant Sections in addition to the -% original versions of these Invariant Sections. You may include a -% translation of this License, and all the license notices in the -% Document, and any Warranty Disclaimers, provided that you also include -% the original English version of this License and the original versions -% of those notices and disclaimers. In case of a disagreement between -% the translation and the original version of this License or a notice -% or disclaimer, the original version will prevail. -% -% If a section in the Document is Entitled ``Acknowledgements'', -% ``Dedications'', or ``History'', the requirement (section~4) to Preserve -% its Title (section~1) will typically require changing the actual -% title. -% -% \begin{center} -% {\Large\bf 9. TERMINATION\par} -% \end{center} -% -% You may not copy, modify, sublicense, or distribute the Document -% except as expressly provided under this License. Any attempt -% otherwise to copy, modify, sublicense, or distribute it is void, and -% will automatically terminate your rights under this License. -% -% However, if you cease all violation of this License, then your license -% from a particular copyright holder is reinstated (a) provisionally, -% unless and until the copyright holder explicitly and finally -% terminates your license, and (b) permanently, if the copyright holder -% fails to notify you of the violation by some reasonable means prior to -% 60 days after the cessation. -% -% Moreover, your license from a particular copyright holder is -% reinstated permanently if the copyright holder notifies you of the -% violation by some reasonable means, this is the first time you have -% received notice of violation of this License (for any work) from that -% copyright holder, and you cure the violation prior to 30 days after -% your receipt of the notice. -% -% Termination of your rights under this section does not terminate the -% licenses of parties who have received copies or rights from you under -% this License. If your rights have been terminated and not permanently -% reinstated, receipt of a copy of some or all of the same material does -% not give you any rights to use it. -% -% \begin{center} -% {\Large\bf 10. FUTURE REVISIONS OF THIS LICENSE\par} -% \end{center} -% -% The Free Software Foundation may publish new, revised versions -% of the GNU Free Documentation License from time to time. Such new -% versions will be similar in spirit to the present version, but may -% differ in detail to address new problems or concerns. See -% \texttt{https://www.gnu.org/licenses/}. -% -% Each version of the License is given a distinguishing version number. -% If the Document specifies that a particular numbered version of this -% License ``or any later version'' applies to it, you have the option of -% following the terms and conditions either of that specified version or -% of any later version that has been published (not as a draft) by the -% Free Software Foundation. If the Document does not specify a version -% number of this License, you may choose any version ever published (not -% as a draft) by the Free Software Foundation. If the Document -% specifies that a proxy can decide which future versions of this -% License can be used, that proxy's public statement of acceptance of a -% version permanently authorizes you to choose that version for the -% Document. -% -% \begin{center} -% {\Large\bf 11. RELICENSING\par} -% \end{center} -% -% ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any -% World Wide Web server that publishes copyrightable works and also -% provides prominent facilities for anybody to edit those works. A -% public wiki that anybody can edit is an example of such a server. A -% ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the -% site means any set of copyrightable works thus published on the MMC -% site. -% -% ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 -% license published by Creative Commons Corporation, a not-for-profit -% corporation with a principal place of business in San Francisco, -% California, as well as future copyleft versions of that license -% published by that same organization. -% -% ``Incorporate'' means to publish or republish a Document, in whole or -% in part, as part of another Document. -% -% An MMC is ``eligible for relicensing'' if it is licensed under this -% License, and if all works that were first published under this License -% somewhere other than this MMC, and subsequently incorporated in whole -% or in part into the MMC, (1) had no cover texts or invariant sections, -% and (2) were thus incorporated prior to November 1, 2008. -% -% The operator of an MMC Site may republish an MMC contained in the site -% under CC-BY-SA on the same site at any time before August 1, 2009, -% provided the MMC is eligible for relicensing. -% -% \begin{center} -% {\Large\bf ADDENDUM: How to use this License for your documents\par} -% \end{center} -% -% To use this License in a document you have written, include a copy of -% the License in the document and put the following copyright and -% license notices just after the title page: -% -% \bigskip -% \begin{quote} -% Copyright \copyright{} YEAR YOUR NAME. -% Permission is granted to copy, distribute and/or modify this document -% under the terms of the GNU Free Documentation License, Version 1.3 -% or any later version published by the Free Software Foundation; -% with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. -% A copy of the license is included in the section entitled ``GNU -% Free Documentation License''. -% \end{quote} -% \bigskip -% -% If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, -% replace the ``with \dots\ Texts.''\ line with this: -% -% \bigskip -% \begin{quote} -% with the Invariant Sections being LIST THEIR TITLES, with the -% Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. -% \end{quote} -% \bigskip -% -% If you have Invariant Sections without Cover Texts, or some other -% combination of the three, merge those two alternatives to suit the -% situation. -% -% If your document contains nontrivial examples of program code, we -% recommend releasing these examples in parallel under your choice of -% free software license, such as the GNU General Public License, -% to permit their use in free software. \ No newline at end of file diff --git a/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdf b/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdf index 42b546f08d1..7a0ef98f9c3 100644 Binary files a/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdf and b/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdf differ diff --git a/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex b/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex index 8ba66532723..39e8905943f 100644 --- a/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex +++ b/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex @@ -84,7 +84,7 @@ \textturny\ \textipa{L} \textscl\ \textipa{\;L} -}% +} \section{Non-pulmonic consonants} @@ -100,7 +100,7 @@ \textdoublebarpipe\ \textipa{\!c} \textdoublepipe\ \textipa{||} -}% +} \subsection{Implosives} @@ -116,7 +116,7 @@ \texthtg\ \textipa{\!g} \texthtscg\ \textipa{\!G} -}% +} \section{Other symbols} @@ -140,7 +140,7 @@ \textctz\ \textipa{\*Z} \texththeng\ \textipa{\*3} -}% +} \section{Vowels} @@ -182,7 +182,7 @@ \textscripta\ \textipa{A} \textturnscripta\ \textipa{6} -}% +} \section{Diacritics} @@ -196,8 +196,7 @@ n\textcorner \textipa{n\tc} \stdlnetiebar{əi} \ts{əi} -}% - +} \subsection{Dependent diacritics} @@ -247,43 +246,5 @@ \texttoptiebar{əi} \textipa{\t{əi}} \textbottomtiebar{əi} \textipa{\t*{əi}} -}% -\section{Superscripts} - -x\super h - -x\super w - -x\super j - -x\super n - -x\super l - -\textipa{x\super \textgamma} xˠ - -\textipa{x\super Q} - -\textipa{\;B \;E \;A \;H \;L \;R} - -\textipa{\:d \:l \:n \:r \:s \:z k f \*w} - -\textipa{\!b \!d \!g \!j \!G \!o} - -\textipa{""Ekspl@"neIS@n} - -\textipa{f@"nEtIksW} - -\textipa{\*j\*t\*r\*w\*n\*h\*l\*z} - -\textipa{\!b\!d\!g\!j\!G\!o} - -\textipa{\;E\;J\;A\;H\;L\;U\;B\;G\;N\;R} - -\textipa{\:d\:l\:n\:r\:R\:s\:t\:z} - -\textipa{5A62BCD@9E3gG7H41IJMWN8OFRKST0TUVTXYZPQ|||""":;} - -Hello world, some text in this document is written in the \textipa{Int@n\ae - S@n@l f@"nEtIk \ae lf@bet} -\end{document} \ No newline at end of file +} +\end{document} diff --git a/Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdf b/Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdf index 49cc885c834..34db57f49b2 100644 Binary files a/Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdf and b/Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdf differ diff --git a/Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex b/Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex index c7df977d6f4..371e8dbe1dc 100644 --- a/Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex +++ b/Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex @@ -1,5 +1,6 @@ \documentclass{article} \usepackage{expex} +\usepackage{doc} \usepackage{leipzig} \makeglossaries \usepackage{longtable} @@ -19,6 +20,7 @@ date = {2021-04-21} \renewcommand{\arraystretch}{1.5} \begin{document} + This document is nothing but a sample file with some data collected by \textcite{shravani}. Package {\sffamily tipauni} converts TIPA commands to Unicode characters. This whole document is typeset with the Charis SIL font @@ -388,4 +390,4 @@ ha-u}// \printglossary \printbibliography -\end{document} \ No newline at end of file +\end{document} diff --git a/Master/texmf-dist/doc/latex/tipauni/tipauni.pdf b/Master/texmf-dist/doc/latex/tipauni/tipauni.pdf index fcd67c1ceae..f1d8777ddc1 100644 Binary files a/Master/texmf-dist/doc/latex/tipauni/tipauni.pdf and b/Master/texmf-dist/doc/latex/tipauni/tipauni.pdf differ diff --git a/Master/texmf-dist/source/latex/tipauni/tipauni.dtx b/Master/texmf-dist/source/latex/tipauni/tipauni.dtx index e83e5af260d..be9b509fd25 100644 --- a/Master/texmf-dist/source/latex/tipauni/tipauni.dtx +++ b/Master/texmf-dist/source/latex/tipauni/tipauni.dtx @@ -3,15 +3,15 @@ % File: tipauni.dtx % --------------------------------------------------------------------------- % Package: tipauni -% Author: Niranjan -% Version: v0.1 (27 April, 2021) +% Author: निरंजन +% Version: v0.2 (11 August, 2021) % Description: For producing Unicode characters with TIPA commands. % Repository: https://gitlab.com/niruvt/tipauni % Bug tracker: https://gitlab.com/niruvt/tipauni/-/issues -% License: GPL v3.0+ +% License: GPL v3.0+, GFDL v1.3+ % --------------------------------------------------------------------------- -% LaTeX Package tipauni v0.1 -% © 2021 Niranjan +% LaTeX Package tipauni v0.2 +% © 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 @@ -26,7 +26,7 @@ % You should have received a copy of the GNU General Public License % along with this program. If not, see . % -% The current maintainer of this work is Niranjan. +% The current maintainer of this work is निरंजन. % % This work consists of the files tipauni.dtx % tipauni.ins @@ -39,12 +39,12 @@ %<*readme> -------------------------------------------------------------------------- Package: tipauni -Author: Niranjan -Version: v0.1 (27 April, 2021) +Author: निरंजन +Version: v0.2 (11 August, 2021) Description: For producing Unicode characters with TIPA commands. Repository: https://gitlab.com/niruvt/tipauni Bug tracker: https://gitlab.com/niruvt/tipauni/-/issues -License: GPL v3.0+ +License: GPL v3.0+, GFDL v1.3+ -------------------------------------------------------------------------- % %<*internal> @@ -52,8 +52,8 @@ License: GPL v3.0+ % %<*driver|package> \def\tipauniname{tipauni} -\def\tipauniversion{0.1} -\def\tipaunidate{2021/04/27} +\def\tipauniversion{0.2} +\def\tipaunidate{2021-08-07} \def\tipaunidescription{For producing Unicode characters with TIPA commands} % %<*driver> @@ -66,9 +66,15 @@ License: GPL v3.0+ \usepackage{booktabs} \usepackage{float} \usepackage{xcolor} -\usepackage{dtk-logos} +\usepackage{hologo} +\DeclareRobustCommand\XeLaTeX{\hologo{XeLaTeX}} \usepackage{fontspec} \newfontfamily{\ipa}[Color=blue]{CharisSIL} +\newfontfamily{\devtext}[% +Script=Devanagari,% +Renderer=Harfbuzz,% +Scale=0.8% +]{Shobhika} \usepackage{hyperref} \hypersetup{% colorlinks,% @@ -85,7 +91,7 @@ License: GPL v3.0+ % % \fi % \title{The \pkg{\tipauniname} package} -% \author{Niranjan\thanks{\faIcon{envelope}\quad\href{mailto:hi.niranjan@pm.me}{\ttfamily hi.niranjan@pm.me}}} +% \author{{\devtext निरंजन}\thanks{\faIcon{envelope}\quad\href{mailto:hi.niranjan@pm.me}{\ttfamily hi.niranjan@pm.me}}} % \date^^A % {^^A % Version \tipauniversion\ --- \tipaunidate\\[1ex]^^A @@ -99,7 +105,7 @@ License: GPL v3.0+ % \vfill % {% % \setlength{\parindent}{0pt} -% © 2021 Niranjan +% © 2021 {\devtext निरंजन} % % Permission is granted to copy, distribute and/or modify this document under % the terms of the GNU Free Documentation License, Version 1.3 or any later @@ -126,8 +132,14 @@ License: GPL v3.0+ % % \section{Acknowledgements} % This package is completed because of the rigorous help by Jairo A.\ del Rio, -% Jonathan P.\ Spratte \textit{\&} Ulrike Fischer. Their suggestions and -% contributions are extremely valuable for the development of this package. +% Jonathan P.\ Spratte, Phelype Oleinink \textit{\&} Ulrike Fischer. Their +% suggestions and contributions are extremely valuable for the development of +% this package. +% +% Jonathan P.\ Spratte has helped the package by building a parser based on +% \pkg{expl3}. Phelype Oleinik has helped the package by building a test-suit +% for regression-tests. The tests can be seen in the git-repository of the +% project. % % \section{Package options} % @@ -429,9 +441,7 @@ Unicode characters with TIPA commands] % \begin{macrocode} \RequirePackage{xparse} \RequirePackage{fontspec} -\RequirePackage{environ} \RequirePackage{xkeyval} -\RequirePackage{ifthen} % \end{macrocode} % Package options are provided using the package \pkg{xkeyval}. The following % commands provide the option \verb|documentfont|. @@ -704,153 +714,399 @@ Unicode characters with TIPA commands] \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi }% \DeclareTextAccentDefault{\@pipeshorthands}{TU} -\NewDocumentCommand\super{ m }{% - \ifthenelse{\equal{#1}{h}}{ʰ}{\relax}% - \ifthenelse{\equal{#1}{w}}{ʷ}{\relax}% - \ifthenelse{\equal{#1}{j}}{ʲ}{\relax}% - \ifthenelse{\equal{#1}{ɣ}}{ˠ}{\relax}% - \ifthenelse{\equal{#1}{ʕ}}{ˤ}{\relax}% - \ifthenelse{\equal{#1}{n}}{ⁿ}{\relax}% - \ifthenelse{\equal{#1}{l}}{ˡ}{\relax}% -}% -% \end{macrocode} -% The replacement of several characters with different IPA symbols will be done -% in a small loop. That loop will loop over the contents of a sequence, and each -% sequence element will contain two token-list elements (braced groups), -% specifying a regular expression (really just one or two characters, nothing -% complicated) and the replacement text for that expression. -% \begin{macrocode} \ExplSyntaxOn -\seq_new:N \l__tipauni_replace_maps_seq -\seq_new:N \l__tipauni_remove_from_accents_seq -\tl_new:N \l__tipauni_textipa_tl -% \end{macrocode} -% The sequence \cs{l__tipauni_replace_maps_seq} stores the replacement mappings, -% we have to keep in mind that these are regular expressions in the first braced -% group, so characters that are not alpha-numeric should be escaped. Also, since -% we're using \cs{seq_set_split:Nnn} here (which doesn't ignore empty elements) -% we have to make sure to not put too many commas in the list. -% First we set the mappings in a temporary sequence to pre-build the regular -% expressions to gain at least a bit of speed. -% \begin{macrocode} -\seq_set_split:Nnn \l_tmpa_seq { , } - { -% \end{macrocode} -% First we put the composites, which should have highest priority into the - % sequence (with some escaping of the characters which aren't alpha-numeric): -% \begin{macrocode} - { \c{\! | tipaunibang } G }{ʛ}, - { \c{\! | tipaunibang } g }{ɠ}, - { \c{\* | tipaunistar } 1 }{ʢ}, - { \c{\* | tipaunistar } 2 }{ʡ}, - { \c{\* | tipaunistar } 3 }{ɧ}, - { \c{\* | tipaunistar } Z }{ʑ}, - { \c{\: | tipaunicolon } R }{ɻ}, - { \c{\; | tipaunisemicolon} A }{ᴀ}, - { \c{\; | tipaunisemicolon} G }{ɢ}, - { \c{\; | tipaunisemicolon} B }{ʙ}, - { \c{\; | tipaunisemicolon} E }{ᴇ}, - { \c{\; | tipaunisemicolon} H }{ʜ}, - { \c{\; | tipaunisemicolon} J }{ᴊ}, - { \c{\; | tipaunisemicolon} L }{ʟ}, - { \c{\; | tipaunisemicolon} N }{ɴ}, - { \c{\; | tipaunisemicolon} R }{ʀ}, - { \c{\; | tipaunisemicolon} U }{ᴜ}, -% \end{macrocode} -% Next the multi-letter mappings: -% \begin{macrocode} - {\|\|}{ǁ}, {\"\"}{ˌ}, -% \end{macrocode} -% And finally the remaining single-letter mappings: -% \begin{macrocode} - {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}{ʕ}, - {\:}{ː}, {\;}{ˑ}, {\!}{ǃ}, {\&}{ɞ}, {\@}{ə}, {\|}{ǀ}, {\"}{ˈ} - } -% \end{macrocode} -% Now we build the real sequence from the temporary one. We have to call -% \cs{regex_const:Nn} for each item to precompile the regular expressions, then -% store the regular expressions name and the replacement in the correct -% sequence. -% \begin{macrocode} -\seq_clear:N \l__tipauni_replace_maps_seq -\seq_map_inline:Nn \l_tmpa_seq - { - \exp_args:Nco \regex_const:Nn - { c__tipauni_ \exp_args:No \tl_to_str:n { \use_i:nn #1 } _regex } - { \use_i:nn #1 } - \seq_put_right:Nx \l__tipauni_replace_maps_seq +\NewDocumentCommand \super { m } + {% + \str_case:nn {#1} { - \exp_not:c - { c__tipauni_ \exp_args:No \tl_to_str:n { \use_i:nn #1 } _regex } - { \exp_not:o { \use_ii:nn #1 } } + {h} {ʰ} + {w} {ʷ} + {j} {ʲ} + {ɣ} {ˠ} + {ʕ} {ˤ} + {n} {ⁿ} + {l} {ˡ} } } % \end{macrocode} +% We need a few variables. +% \begin{macrocode} +\seq_new:N \l_@@_remove_from_accents_seq +\tl_new:N \l_@@_textipa_tl +% \end{macrocode} % Since we have a non-standard syntax for some of the accent macros (having a % starred variant) we have to exclude them from the list of accents which get % special handling from \cs{text_expand:n} or else the stars will be surrounded % by braces and not found by \cs{@ifstar}. This sequence stores the problematic % accents which need to be excluded. % \begin{macrocode} -\seq_set_split:Nnn \l__tipauni_remove_from_accents_seq { , } +\seq_set_split:Nnn \l_@@_remove_from_accents_seq { , } { \~, \=, \", \r, \v, \t } % \end{macrocode} +% We only search for the macros not contained in \pkg{tipa} if this is requested +% by the user. +% \begin{macrocode} +\ifnontipaignore + \cs_new_eq:NN \@@_nontipa_search: \prg_do_nothing: + \cs_new_eq:NN \@@_nontipa_search:n \use_none:n +\else + \cs_new_protected:Npn \@@_nontipa_search: + { + \unless\ifnontipa + \exp_args:No \@@_nontipa_search:n \l_@@_textipa_tl + \fi + } +% \end{macrocode} +% The warning thrown at the end of the run doesn't list which symbols were +% incompatible, so we stop searching when we found one incompatible symbol. We +% use \cs{str_if_in:nnT} so that groups don't affect the search. The alternative +% would be the much slower \cs{regex_match:nnT}. +% \begin{macrocode} + \cs_new_protected:Npn \@@_nontipa_search:n #1 + { + \str_if_in:nnT {#1} {ⱱ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ɞ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ɰ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ǃ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ǂ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ʢ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ɺ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ʑ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ɧ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \use_none:nnn \s_stop + \use:n { \cs_gset_eq:NN \@@_nontipa_search: \prg_do_nothing: } + } +\fi +% \end{macrocode} +% The user facing macro needs to make some local settings. % \begin{macrocode} -\cs_new_protected:Npn \__tipauni_nontipa_search:n #1 - { - \regex_match:nnT {ⱱ} {#1} \nontipatrue - \regex_match:nnT {ɞ} {#1} \nontipatrue - \regex_match:nnT {ɰ} {#1} \nontipatrue - \regex_match:nnT {ǃ} {#1} \nontipatrue - \regex_match:nnT {ǂ} {#1} \nontipatrue - \regex_match:nnT {ʢ} {#1} \nontipatrue - \regex_match:nnT {ɺ} {#1} \nontipatrue - \regex_match:nnT {ʑ} {#1} \nontipatrue - \regex_match:nnT {ɧ} {#1} \nontipatrue - } -\cs_generate_variant:Nn \__tipauni_nontipa_search:n { o } \NewDocumentCommand\textipa{ +m }% { \begingroup - \let\*\tipaunistar - \let\:\tipaunicolon - \let\;\tipaunisemicolon - \let\!\tipaunibang - \let\|\tipaunipipe - \let\t\tipaunit - \catcode`\&=11 + \let\*\tipaunistar + \let\:\tipaunicolon + \let\;\tipaunisemicolon + \let\!\tipaunibang + \let\|\tipaunipipe + \let\t\tipaunit % \end{macrocode} % Here we locally remove the accents which have a starred variant from the % exclusion list of \cs{text_expand:n}. % \begin{macrocode} - \seq_map_inline:Nn \l__tipauni_remove_from_accents_seq + \seq_map_inline:Nn \l_@@_remove_from_accents_seq { \tl_remove_all:Nn \l_text_accents_tl {##1} } % \end{macrocode} % Here is the real replacement. First we carefully expand the input using -% \cs{text_expand:n}, then we'll loop over the sequence. Since each sequence -% element contains two brace groups we can use the element |##1| directly as the -% two normal argument to \cs{regex_replace_all:NnN}. -% \begin{macrocode} - \tl_set:Nx \l__tipauni_textipa_tl { \text_expand:n {#1} } - \seq_map_inline:Nn \l__tipauni_replace_maps_seq - { \regex_replace_all:NnN ##1 \l__tipauni_textipa_tl } - \l__tipauni_textipa_tl -% \end{macrocode} -% Finally test for \pkg{tipa}-incompatible symbols. We only test for the -% incompatible symbols if the boolean is not yet true to save a bit of -% processing time when the tests are not necessary. Since the used -% \cs{regex_match:nnT} test needs the token list expanded we expand it only once -% here with the |o|-variant. -% \begin{macrocode} - \unless\ifnontipa - \__tipauni_nontipa_search:o \l__tipauni_textipa_tl - \fi +% \cs{text_expand:n}, then we'll loop over the token list with a construct +% similar to the \pkg{expl3} internal \cs{__tl_act:NNNn} (hence the name +% \cs{@@_act:n}). Since the replacement code depends on the correct string +% representation of things we explicitly set the \cs{escapechar} to a backslash +% and reset it afterwards. +% \begin{macrocode} + \tl_set:Nx \l_@@_textipa_tl { \text_expand:n {#1} } + \use:x + { + \exp_not:n + { + \escapechar = `\\ + \tl_set:Nx \l_@@_textipa_tl + { \exp_args:No \@@_act:n \l_@@_textipa_tl } + \escapechar = + } + \int_use:N \escapechar + } + \exp_stop_f: + \l_@@_textipa_tl +% \end{macrocode} +% Finally test for \pkg{tipa}-incompatible symbols. +% \begin{macrocode} + \@@_nontipa_search: \endgroup } +% \end{macrocode} +% We'll need a scan mark for the |act| code, so we initialise it. +% \begin{macrocode} +\scan_new:N \s_@@_act_stop +\cs_new:Npn \@@_use_none_delimit_by_act_stop:w #1 \s_@@_act_stop {} +% \end{macrocode} +% The act macro uses a bit of low level coding to get good performance. It +% implements a loop which does the replacement of single letters, bigraphs or +% combinations of one macro and one letter (which might be separated from the +% macro by multiple spaces, or contained in braces as an argument, or both). +% \cs{_@@_act:n} should be used inside an |x|-expansion context. The only +% token which is not allowed to be ever part of the argument for +% \cs{_@@_act:n} is \cs{s_@@_act_stop}. +% \begin{macrocode} +\cs_new:Npn \@@_act:n #1 { \@@_act_loop:w #1 {\s_@@_act_stop} . \s_@@_act_stop } +% \end{macrocode} +% Just to have an easier to spot output we use a private copy of \cs{exp_not:n}, +% meaning we leave the output in the input stream (but since the whole loop +% should be used in an |x|-expansion context this is fine, anything expecting +% arguments will get those later). +% \begin{macrocode} +\cs_new_eq:NN \@@_act_output:n \exp_not:n +% \end{macrocode} +% The current loop status is indicated by one macro -- \cs{use_none:nn} for the +% initial state; \cs{@@_act_macro:nn} if a macro being the start of a +% bigraph was encountered; or \cs{@@_act_char:nn} if a character being +% the start of a bigraph or a monograph was encountered -- followed by one +% |n|-type argument containing information depending on the state. So for +% \cs{@@_act_loop:Nnw} the arguments are: |#1| is the status macro, |#2| +% more status information, |#3| the remainder of the argument list. It'll branch +% off depending on the first token in |#3| being either a space, a group +% (anything started by a character of category 1, typically an opening brace) +% and anything else (a valid |N|-type argument). +% \begin{macrocode} +\cs_new:Npn \@@_act_loop:w { \@@_act_loop:Nnw \use_none:nn {} } +\cs_new:Npn \@@_act_loop:Nnw #1#2#3 \s_@@_act_stop + { + \@@_act_if_head_is_space:nTF {#3} + { \@@_act_space:Nnw } + { + \tl_if_head_is_group:nTF {#3} + \@@_act_group:Nnn + \@@_act_normal:NnN + } + #1 {#2} #3 \s_@@_act_stop + } +% \end{macrocode} +% We'll need a few explicit space tokens in the following definitions, so we use +% a temporary macro to set this up. +% \begin{macrocode} +\group_begin: + \cs_set:Npn \@@_tmp:n #1 + { +% \end{macrocode} +% Quick test for a leading space using the |stop|-marker. +% \begin{macrocode} + \cs_new:Npn \@@_act_if_head_is_space:nTF ##1 + { + \@@_act_if_head_is_space:w + \s_@@_act_stop ##1 \s_@@_act_stop + \@@_act_if_head_is_space_true:w + \s_@@_act_stop #1 \s_@@_act_stop + \use_ii:nn + } + \cs_new:Npn \@@_act_if_head_is_space:w + ##1 \s_@@_act_stop #1 ##2 \s_@@_act_stop + {} + \cs_new:Npn \@@_act_if_head_is_space_true:w + \s_@@_act_stop #1 \s_@@_act_stop \use_ii:nn ##1 ##2 + {##1} +% \end{macrocode} +% The case with a space needs a bit of special treatment if the current state is +% |macro|. In that case we defer the decision and save the space inside the +% additional status |n|-type argument. That consists of two nested |n|-type +% arguments, the first being the control sequence under test and the second +% tokens which need to be reinserted should the replacement fail. +% \begin{macrocode} + \cs_new:Npn \@@_act_space:Nnw ##1 ##2 #1 + { + \token_if_eq_meaning:NNTF ##1 \@@_act_macro:nn + { \@@_act_space_macro:nn ##2 } + { + \cs_if_exist_use:cTF { @@_act_char_mono_ \tl_to_str:n { ##2 } : } + { \@@_act_output:n {~} } + { \@@_act_output:n { ##2 ~ } } + \@@_act_loop:w + } + } + } + \@@_tmp:n {~} +\group_end: +% \end{macrocode} +% This macro just works as a helper to get the two separate arguments in the +% status and append a space token to the deferred list. +% \begin{macrocode} +\cs_new:Npn \@@_act_space_macro:nn #1#2 + { \@@_act_loop:Nnw \@@_act_macro:nn { {#1} { #2 ~ } } } +% \end{macrocode} +% The end marker is a single \cs{s_@@_act_stop} in a group, hence we need to +% test for that. If this isn't the end we need to handle two different cases, if +% the current state is a macro the group might actually be the correct argument +% to that macro, else a bigraph shouldn't contain a group, so we output what +% ever the current status deferred information was (either as a |mono| +% replacement or just as is) and act on the group. +% \begin{macrocode} +\cs_new:Npn \@@_act_group:Nnn #1#2#3 + { + \@@_use_none_delimit_by_act_stop:w + #3 \@@_act_final:Nnw #1 {#2} \s_@@_act_stop + \token_if_eq_meaning:NNTF #1 \@@_act_macro:nn + { \@@_act_group_macro:nn {#2} {#3} } + { + \cs_if_exist_use:cF { @@_act_char_mono_ \tl_to_str:n { #2 } : } + { \@@_act_output:n {#2} } + { \@@_act_loop:w #3 {\s_@@_act_stop} . \s_@@_act_stop } + } + \@@_act_loop:w + } +% \end{macrocode} +% The final code needs to remove the remainder of the loop and reinsert whatever +% was deferred, unless that happens to be one of the single tokens to be +% replaced in which case we do the replacement. +% \begin{macrocode} +\cs_new:Npn \@@_act_final:Nnw + #1#2 \s_@@_act_stop #3 \@@_act_loop:w #4 \s_@@_act_stop + { + \cs_if_exist_use:cF { @@_act_char_mono_ \tl_to_str:n { #2 } : } + { + \token_if_eq_meaning:NNTF #1 \@@_act_macro:nn + { \exp_args:No \@@_act_output:n { \use:nn #2 } } + { \@@_act_output:n {#2} } + } + } +% \end{macrocode} +% The normal case is pretty straight forward, if the current state is the +% initial state, check whether the token under test is the start of one of the +% replacement sequences (this would be stored inside a macro), if it isn't +% directly output it. If it is the code in that macro will do the right thing. +% If the current state is something else the state macro will handle things, so +% we just call it with the arguments it should get. +% \begin{macrocode} +\cs_new:Npn \@@_act_normal:NnN #1#2#3 + { + \token_if_eq_meaning:NNTF #1 \use_none:nn + { + \cs_if_exist_use:cF { @@_act_normal_ \tl_to_str:n {#3} :nw } + { \@@_act_output:n } + {#3} + } + { #1 {#2} {#3} } + \@@_act_loop:w + } +% \end{macrocode} +% The code that should handle a macro will test whether a replacement occurs +% (stored inside a macro), if it does calls that macro, else outputs the +% deferred information. Since the |macro| state will have two groups in the +% deferred state we need to handle that using \cs{use_i:nn} to get the macro +% name, and \cs{use:nn} to just unbrace the macro and the other deferred tokens +% (which might be any number of spaces). +% \begin{macrocode} +\cs_new:Npn \@@_act_macro:nn #1#2 + { + \cs_if_exist_use:cF + { @@_act_macro_ \exp_args:No \tl_to_str:n { \use_i:nn #1 / #2 } : } + { \exp_args:No \@@_act_output:n { \use:nn #1 #2 } } + } +% \end{macrocode} +% If the |macro| state was active when a group was encountered we need to check +% whether that group was the correct argument for the replacement, if it was do +% the replacement, else reinsert the macro and deferred tokens and loop through +% the group. +% \begin{macrocode} +\cs_new:Npn \@@_act_group_macro:nn #1#2 + { + \cs_if_exist_use:cF + { @@_act_macro_ \exp_args:No \tl_to_str:n { \use_i:nn #1 / #2 } : } + { + \exp_args:No \@@_act_output:n { \use:nn #1 } + { \@@_act_loop:w #2 {\s_@@_act_stop} . \s_@@_act_stop } + } + } +% \end{macrocode} +% If the |char| state is active we need to check whether a bigraph was found, if +% so do that replacement, else test whether the single char is to be replaced +% without being part of a bigraph, if not output it unchanged. If there was no +% bigraph the newly found character might be the start of a mono- or bigraph so +% we pass it back to the |N|-type act to evaluate that, in which case we need +% to remove a trailing \cs{@@_act_loop:w} which would start the next loop which +% we do using \cs{use_i:nn}. +% \begin{macrocode} +\cs_new:Npn \@@_act_char:nn #1#2 + { + \cs_if_exist_use:cF { @@_act_char_bigraph_ \tl_to_str:n { #1/#2 } : } + { + \cs_if_exist_use:cF { @@_act_char_mono_ \tl_to_str:n { #1 } : } + { \@@_act_output:n {#1} } + \use_i:nn { \@@_act_normal:NnN \use_none:nn {} {#2} } + } + } +% \end{macrocode} +% To register new bigraphs we use the following functions. The information is +% always stored inside two macros, the first is called +% |@@_act_normal_|\meta{first token}|:nw| and will set the correct state, the +% second is named dependent on the state it should be found in, either +% |@@_act_macro_|\meta{first token}|/|\meta{second token}|:|, +% |@@_act_char_bigraph_|\meta{first token}|/|\meta{second token}|:|, or +% |@@_act_char_mono_|\meta{token}|:|. Those second macros contain the actual +% replacement. +% +% The first macro is a wrapper which just inputs \cs{@@_new_macro_bigraph:NNn} +% for the two macros in |#1| and |#2|. +% \begin{macrocode} +\cs_new_protected:Npn \@@_new_macro_pair_bigraph:NNNn #1#2#3#4 + { + \@@_new_macro_bigraph:NNn #1 #3 {#4} + \@@_new_macro_bigraph:NNn #2 #3 {#4} + } +% \end{macrocode} +% A macro bigraph should consist of a control sequence followed by another +% token. It'll switch the state to |macro|. +% \begin{macrocode} +\cs_new_protected:Npn \@@_new_macro_bigraph:NNn #1#2#3 + { + \cs_gset:cpn { @@_act_normal_ \tl_to_str:n {#1} :nw } ##1##2 \@@_act_loop:w + { \@@_act_loop:Nnw \@@_act_macro:nn { {##1} {} } } + \cs_gset:cpn { @@_act_macro_ \tl_to_str:n { #1/#2 } : } + { \@@_act_output:n {#3} } + } +% \end{macrocode} +% A character bigraph should consist of two characters. It'll switch the state +% to |char|. +% \begin{macrocode} +\cs_new_protected:Npn \@@_new_char_bigraph:NNn #1#2#3 + { + \cs_gset:cpn { @@_act_normal_ \tl_to_str:n {#1} :nw } ##1##2 \@@_act_loop:w + { \@@_act_loop:Nnw \@@_act_char:nn {##1} } + \cs_gset:cpn { @@_act_char_bigraph_ \tl_to_str:n { #1/#2 } : } + { \@@_act_output:n {#3} } + } +% \end{macrocode} +% And lastly the single replacements which should just be a single character. +% These will also switch the state to |char| (as they might be also a start of +% a bigraph). +% \begin{macrocode} +\cs_new_protected:Npn \@@_new_char_mono:Nn #1#2 + { + \cs_gset:cpn { @@_act_normal_ \tl_to_str:n {#1} :nw } ##1##2 \@@_act_loop:w + { \@@_act_loop:Nnw \@@_act_char:nn {##1} } + \cs_gset:cpn { @@_act_char_mono_ \tl_to_str:n {#1} : } + { \@@_act_output:n {#2} } + } +% \end{macrocode} +% Everything that's now missing is defining the macros storing the replacements +% as described above. +% \begin{macrocode} +\@@_new_macro_pair_bigraph:NNNn \! \tipaunibang G {ʛ} +\@@_new_macro_pair_bigraph:NNNn \! \tipaunibang g {ɠ} +\@@_new_macro_pair_bigraph:NNNn \* \tipaunistar 1 {ʢ} +\@@_new_macro_pair_bigraph:NNNn \* \tipaunistar 2 {ʡ} +\@@_new_macro_pair_bigraph:NNNn \* \tipaunistar 3 {ɧ} +\@@_new_macro_pair_bigraph:NNNn \* \tipaunistar Z {ʑ} +\@@_new_macro_pair_bigraph:NNNn \: \tipaunicolon R {ɻ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon A {ᴀ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon G {ɢ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon B {ʙ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon E {ᴇ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon H {ʜ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon J {ᴊ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon L {ʟ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon N {ɴ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon R {ʀ} +\@@_new_macro_pair_bigraph:NNNn \; \tipaunisemicolon U {ᴜ} +\@@_new_char_bigraph:NNn || {ǁ} +\@@_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}{ʕ}, + {:}{ː}, {;}{ˑ}, {!}{ǃ}, {&}{ɞ}, {@}{ə}, {|}{ǀ}, {"}{ˈ} + } + { \@@_new_char_mono:Nn #1 } \ExplSyntaxOff % \end{macrocode} % The following commands define the long commands for dependent diacritics. @@ -925,7 +1181,7 @@ Unicode characters with TIPA commands] % \end{macrocode} % Lastly the code for environment \texttt{IPA} is provided by the following. % \begin{macrocode} -\NewEnviron{IPA}{\textipa{\BODY}} +\NewDocumentEnvironment{IPA}{+b}{\textipa{#1}}{} % \end{macrocode} % \begin{macrocode} % diff --git a/Master/texmf-dist/source/latex/tipauni/tipauni.ins b/Master/texmf-dist/source/latex/tipauni/tipauni.ins index cdcc0d8ee58..9d95201d6a9 100644 --- a/Master/texmf-dist/source/latex/tipauni/tipauni.ins +++ b/Master/texmf-dist/source/latex/tipauni/tipauni.ins @@ -8,15 +8,15 @@ --------------------------------------------------------------------------- Package: tipauni -Author: Niranjan +Author: निरंजन Description: For producing Unicode characters with TIPA commands. Repository: https://gitlab.com/niruvt/tipauni Bug tracker: https://gitlab.com/niruvt/tipauni/-/issues License: GPL v3.0+ --------------------------------------------------------------------------- -LaTeX Package tipauni v0.1 -© 2021 Niranjan +LaTeX Package tipauni v0.2 +© 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 @@ -31,7 +31,7 @@ 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 . -The current maintainers of this work are Niranjan. +The current maintainers of this work are निरंजन. This work consists of the files tipauni.dtx tipauni.ins @@ -51,4 +51,4 @@ and the derived file tipauni.sty. \file{README.txt}{\from{\jobname.dtx}{readme}} } -\endbatchfile \ No newline at end of file +\endbatchfile diff --git a/Master/texmf-dist/tex/latex/tipauni/tipauni.sty b/Master/texmf-dist/tex/latex/tipauni/tipauni.sty index d324bbebb77..1a3d8e58bd2 100644 --- a/Master/texmf-dist/tex/latex/tipauni/tipauni.sty +++ b/Master/texmf-dist/tex/latex/tipauni/tipauni.sty @@ -8,15 +8,15 @@ %% %% --------------------------------------------------------------------------- %% Package: tipauni -%% Author: Niranjan +%% Author: निरंजन %% Description: For producing Unicode characters with TIPA commands. %% Repository: https://gitlab.com/niruvt/tipauni %% Bug tracker: https://gitlab.com/niruvt/tipauni/-/issues %% License: GPL v3.0+ %% --------------------------------------------------------------------------- %% -%% LaTeX Package tipauni v0.1 -%% © 2021 Niranjan +%% LaTeX Package tipauni v0.2 +%% © 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 @@ -31,7 +31,7 @@ %% You should have received a copy of the GNU General Public License %% along with this program. If not, see . %% -%% The current maintainers of this work are Niranjan. +%% The current maintainers of this work are निरंजन. %% %% This work consists of the files tipauni.dtx %% tipauni.ins @@ -39,16 +39,14 @@ %% --------------------------------------------------------------------------- %% \def\tipauniname{tipauni} -\def\tipauniversion{0.1} -\def\tipaunidate{2021/04/27} +\def\tipauniversion{0.2} +\def\tipaunidate{2021-08-07} \def\tipaunidescription{For producing Unicode characters with TIPA commands} \ProvidesPackage{tipauni}[2021/04/27 v0.1 Unicode characters with TIPA commands] \RequirePackage{xparse} \RequirePackage{fontspec} -\RequirePackage{environ} \RequirePackage{xkeyval} -\RequirePackage{ifthen} \setmainfont{CharisSIL} %% https://ctan.org/pkg/charissil \DeclareOptionX{documentfont}{\setmainfont{#1}} \newif\ifnontipaignore @@ -290,96 +288,239 @@ Unicode characters with TIPA commands] \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi }% \DeclareTextAccentDefault{\@pipeshorthands}{TU} -\NewDocumentCommand\super{ m }{% - \ifthenelse{\equal{#1}{h}}{ʰ}{\relax}% - \ifthenelse{\equal{#1}{w}}{ʷ}{\relax}% - \ifthenelse{\equal{#1}{j}}{ʲ}{\relax}% - \ifthenelse{\equal{#1}{ɣ}}{ˠ}{\relax}% - \ifthenelse{\equal{#1}{ʕ}}{ˤ}{\relax}% - \ifthenelse{\equal{#1}{n}}{ⁿ}{\relax}% - \ifthenelse{\equal{#1}{l}}{ˡ}{\relax}% -}% \ExplSyntaxOn -\seq_new:N \l__tipauni_replace_maps_seq +\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_tmpa_seq { , } +\seq_set_split:Nnn \l__tipauni_remove_from_accents_seq { , } + { \~, \=, \", \r, \v, \t } +\ifnontipaignore + \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\ifnontipa + \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} {ⱱ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ɞ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ɰ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ǃ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ǂ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ʢ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ɺ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ʑ} { \nontipatrue \use_none_delimet_by_s_stop:w } + \str_if_in:nnT {#1} {ɧ} { \nontipatrue \use_none_delimet_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 }% { - % sequence (with some escaping of the characters which aren't alpha-numeric): - { \c{\! | tipaunibang } G }{ʛ}, - { \c{\! | tipaunibang } g }{ɠ}, - { \c{\* | tipaunistar } 1 }{ʢ}, - { \c{\* | tipaunistar } 2 }{ʡ}, - { \c{\* | tipaunistar } 3 }{ɧ}, - { \c{\* | tipaunistar } Z }{ʑ}, - { \c{\: | tipaunicolon } R }{ɻ}, - { \c{\; | tipaunisemicolon} A }{ᴀ}, - { \c{\; | tipaunisemicolon} G }{ɢ}, - { \c{\; | tipaunisemicolon} B }{ʙ}, - { \c{\; | tipaunisemicolon} E }{ᴇ}, - { \c{\; | tipaunisemicolon} H }{ʜ}, - { \c{\; | tipaunisemicolon} J }{ᴊ}, - { \c{\; | tipaunisemicolon} L }{ʟ}, - { \c{\; | tipaunisemicolon} N }{ɴ}, - { \c{\; | tipaunisemicolon} R }{ʀ}, - { \c{\; | tipaunisemicolon} U }{ᴜ}, - {\|\|}{ǁ}, {\"\"}{ˌ}, - {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}{ʕ}, - {\:}{ː}, {\;}{ˑ}, {\!}{ǃ}, {\&}{ɞ}, {\@}{ə}, {\|}{ǀ}, {\"}{ˈ} + \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 } -\seq_clear:N \l__tipauni_replace_maps_seq -\seq_map_inline:Nn \l_tmpa_seq +\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 { - \exp_args:Nco \regex_const:Nn - { c__tipauni_ \exp_args:No \tl_to_str:n { \use_i:nn #1 } _regex } - { \use_i:nn #1 } - \seq_put_right:Nx \l__tipauni_replace_maps_seq + \__tipauni_act_if_head_is_space:nTF {#3} + { \__tipauni_act_space:Nnw } { - \exp_not:c - { c__tipauni_ \exp_args:No \tl_to_str:n { \use_i:nn #1 } _regex } - { \exp_not:o { \use_ii:nn #1 } } + \tl_if_head_is_group:nTF {#3} + \__tipauni_act_group:Nnn + \__tipauni_act_normal:NnN } + #1 {#2} #3 \s__tipauni_act_stop } -\seq_set_split:Nnn \l__tipauni_remove_from_accents_seq { , } - { \~, \=, \", \r, \v, \t } -\cs_new_protected:Npn \__tipauni_nontipa_search:n #1 +\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 { - \regex_match:nnT {ⱱ} {#1} \nontipatrue - \regex_match:nnT {ɞ} {#1} \nontipatrue - \regex_match:nnT {ɰ} {#1} \nontipatrue - \regex_match:nnT {ǃ} {#1} \nontipatrue - \regex_match:nnT {ǂ} {#1} \nontipatrue - \regex_match:nnT {ʢ} {#1} \nontipatrue - \regex_match:nnT {ɺ} {#1} \nontipatrue - \regex_match:nnT {ʑ} {#1} \nontipatrue - \regex_match:nnT {ɧ} {#1} \nontipatrue + \__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_generate_variant:Nn \__tipauni_nontipa_search:n { o } -\NewDocumentCommand\textipa{ +m }% +\cs_new:Npn \__tipauni_act_final:Nnw + #1#2 \s__tipauni_act_stop #3 \__tipauni_act_loop:w #4 \s__tipauni_act_stop { - \begingroup - \let\*\tipaunistar - \let\:\tipaunicolon - \let\;\tipaunisemicolon - \let\!\tipaunibang - \let\|\tipaunipipe - \let\t\tipaunit - \catcode`\&=11 - \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} } - \seq_map_inline:Nn \l__tipauni_replace_maps_seq - { \regex_replace_all:NnN ##1 \l__tipauni_textipa_tl } - \l__tipauni_textipa_tl - \unless\ifnontipa - \__tipauni_nontipa_search:o \l__tipauni_textipa_tl - \fi - \endgroup + \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 @@ -447,7 +588,7 @@ Unicode characters with TIPA commands] \DeclareTextCommand{\tipaunitexttoptiebar}{TU}[2]{#1\symbol{"0361}#2} \NewDocumentCommand\texttoptiebar{ m }{\tipaunitexttoptiebar#1} \DeclareTextCommand{\tipaunit}{TU}{\@ifstar{\textbottomtiebar}{\texttoptiebar}} -\NewEnviron{IPA}{\textipa{\BODY}} +\NewDocumentEnvironment{IPA}{+b}{\textipa{#1}}{} \endinput %% %% End of file `tipauni.sty'. -- cgit v1.2.3