texlive[60220] Master/texmf-dist: tipauni (11aug21)

commits+karl at tug.org commits+karl at tug.org
Wed Aug 11 22:15:58 CEST 2021


Revision: 60220
          http://tug.org/svn/texlive?view=revision&revision=60220
Author:   karl
Date:     2021-08-11 22:15:57 +0200 (Wed, 11 Aug 2021)
Log Message:
-----------
tipauni (11aug21)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/tipauni/README.txt
    trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdf
    trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex
    trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdf
    trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex
    trunk/Master/texmf-dist/doc/latex/tipauni/tipauni.pdf
    trunk/Master/texmf-dist/source/latex/tipauni/tipauni.dtx
    trunk/Master/texmf-dist/source/latex/tipauni/tipauni.ins
    trunk/Master/texmf-dist/tex/latex/tipauni/tipauni.sty

Removed Paths:
-------------
    trunk/Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex

Modified: trunk/Master/texmf-dist/doc/latex/tipauni/README.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tipauni/README.txt	2021-08-10 23:50:29 UTC (rev 60219)
+++ trunk/Master/texmf-dist/doc/latex/tipauni/README.txt	2021-08-11 20:15:57 UTC (rev 60220)
@@ -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+
 --------------------------------------------------------------------------

Deleted: trunk/Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex	2021-08-10 23:50:29 UTC (rev 60219)
+++ trunk/Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex	2021-08-11 20:15:57 UTC (rev 60220)
@@ -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

Modified: trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex	2021-08-10 23:50:29 UTC (rev 60219)
+++ trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex	2021-08-11 20:15:57 UTC (rev 60220)
@@ -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,9 +196,8 @@
   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 at 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 at 9E3gG7H41IJMWN8OFRKST0TUVTXYZPQ|||""":;}
-
-Hello world, some text in this document is written in the \textipa{Int at n\ae
-  S at n@l f@"nEtIk \ae lf at bet}
-\end{document}
\ No newline at end of file
+}
+\end{document}

Modified: trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex	2021-08-10 23:50:29 UTC (rev 60219)
+++ trunk/Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex	2021-08-11 20:15:57 UTC (rev 60220)
@@ -1,5 +1,6 @@
 \documentclass{article}
 \usepackage{expex}
+\usepackage{doc}
 \usepackage{leipzig}
 \makeglossaries
 \usepackage{longtable}
@@ -19,6 +20,7 @@
 \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 @@
 
 \printglossary
 \printbibliography
-\end{document}
\ No newline at end of file
+\end{document}

Modified: trunk/Master/texmf-dist/doc/latex/tipauni/tipauni.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/tipauni/tipauni.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/tipauni/tipauni.dtx	2021-08-10 23:50:29 UTC (rev 60219)
+++ trunk/Master/texmf-dist/source/latex/tipauni/tipauni.dtx	2021-08-11 20:15:57 UTC (rev 60220)
@@ -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 <https://www.gnu.org/licenses/>.
 % 
-% 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+
 --------------------------------------------------------------------------
 %</readme> 
 %<*internal> 
@@ -52,8 +52,8 @@
 %</internal> 
 %<*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|package> 
 %<*driver> 
@@ -66,9 +66,15 @@
 \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 @@
 %</driver> 
 % \fi
 % \title{The \pkg{\tipauniname} package}
-% \author{Niranjan\thanks{\faIcon{envelope}\quad\href{mailto:hi.niranjan at pm.me}{\ttfamily hi.niranjan at pm.me}}}
+% \author{{\devtext निरंजन}\thanks{\faIcon{envelope}\quad\href{mailto:hi.niranjan at pm.me}{\ttfamily hi.niranjan at pm.me}}}
 % \date^^A
 % {^^A
 % Version \tipauniversion\ --- \tipaunidate\\[1ex]^^A
@@ -99,7 +105,7 @@
 % \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,9 +132,15 @@
 %   
 %   \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}
 %   
 %   \begin{function}{documentfont}
@@ -429,9 +441,7 @@
 %    \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 @@
   \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
+\NewDocumentCommand \super { m }
+  {%
+    \str_case:nn {#1}
+      {
+        {h} {ʰ}
+        {w} {ʷ}
+        {j} {ʲ}
+        {ɣ} {ˠ}
+        {ʕ} {ˤ}
+        {n} {ⁿ}
+        {l} {ˡ}
+      }
+  }
 %    \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.
+% We need a few variables.
 %    \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
+\seq_new:N \l_@@_remove_from_accents_seq
+\tl_new:N \l_@@_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.
+% 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_tmpa_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}
+\NewDocumentCommand\textipa{ +m }%
   {
+    \begingroup
+      \let\*\tipaunistar
+      \let\:\tipaunicolon
+      \let\;\tipaunisemicolon
+      \let\!\tipaunibang
+      \let\|\tipaunipipe
+      \let\t\tipaunit
 %    \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):
+% Here we locally remove the accents which have a starred variant from the
+% exclusion list of \cs{text_expand:n}.
 %    \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 }{ᴜ},
+      \seq_map_inline:Nn \l_@@_remove_from_accents_seq
+      { \tl_remove_all:Nn \l_text_accents_tl {##1} }
 %    \end{macrocode}
-% Next the multi-letter mappings:
+% Here is the real replacement. First we carefully expand the input using
+% \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}
-% And finally the remaining single-letter mappings:
+% Finally test for \pkg{tipa}-incompatible symbols.
 %    \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}{ʕ},
-    {\:}{ː}, {\;}{ˑ}, {\!}{ǃ}, {\&}{ɞ}, {\@}{ə}, {\|}{ǀ}, {\"}{ˈ}
+      \@@_nontipa_search:
+    \endgroup
   }
 %    \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.
+% We'll need a scan mark for the |act| code, so we initialise it.
 %    \begin{macrocode}
-\seq_clear:N \l__tipauni_replace_maps_seq
-\seq_map_inline:Nn \l_tmpa_seq
+\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
   {
-    \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
+    \@@_act_if_head_is_space:nTF {#3}
+      { \@@_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}
+          \@@_act_group:Nnn
+          \@@_act_normal:NnN
       }
+      #1 {#2} #3 \s_@@_act_stop
   }
 %    \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.
+% We'll need a few explicit space tokens in the following definitions, so we use
+% a temporary macro to set this up.
 %    \begin{macrocode}
-\seq_set_split:Nnn \l__tipauni_remove_from_accents_seq { , }
-  { \~, \=, \", \r, \v, \t }
+\group_begin:
+  \cs_set:Npn \@@_tmp:n #1
+    {
 %    \end{macrocode}
+% Quick test for a leading space using the |stop|-marker.
 %    \begin{macrocode}
-\cs_new_protected:Npn \__tipauni_nontipa_search:n #1
+      \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
   {
-    \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
+    \@@_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
   }
-\cs_generate_variant:Nn \__tipauni_nontipa_search:n { o }
-\NewDocumentCommand\textipa{ +m }%
+%    \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
   {
-    \begingroup
-    \let\*\tipaunistar
-    \let\:\tipaunicolon
-    \let\;\tipaunisemicolon
-    \let\!\tipaunibang
-    \let\|\tipaunipipe
-    \let\t\tipaunit
-    \catcode`\&=11
+    \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}
-% Here we locally remove the accents which have a starred variant from the
-% exclusion list of \cs{text_expand:n}.
+% 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}
-    \seq_map_inline:Nn \l__tipauni_remove_from_accents_seq
-      { \tl_remove_all:Nn \l_text_accents_tl {##1} }
+\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}
-% 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}.
+% 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}
-    \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
+\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}
-% 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.
+% 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}
-    \unless\ifnontipa
-      \__tipauni_nontipa_search:o \l__tipauni_textipa_tl
-    \fi
-    \endgroup
+\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 @@
 %    \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}
 %</package>      

Modified: trunk/Master/texmf-dist/source/latex/tipauni/tipauni.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/tipauni/tipauni.ins	2021-08-10 23:50:29 UTC (rev 60219)
+++ trunk/Master/texmf-dist/source/latex/tipauni/tipauni.ins	2021-08-11 20:15:57 UTC (rev 60220)
@@ -8,7 +8,7 @@
 
 ---------------------------------------------------------------------------
 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
@@ -15,8 +15,8 @@
 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 <https://www.gnu.org/licenses/>.
 
-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 @@
   \file{README.txt}{\from{\jobname.dtx}{readme}}
 }
 
-\endbatchfile
\ No newline at end of file
+\endbatchfile

Modified: trunk/Master/texmf-dist/tex/latex/tipauni/tipauni.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/tipauni/tipauni.sty	2021-08-10 23:50:29 UTC (rev 60219)
+++ trunk/Master/texmf-dist/tex/latex/tipauni/tipauni.sty	2021-08-11 20:15:57 UTC (rev 60220)
@@ -8,7 +8,7 @@
 %% 
 %% ---------------------------------------------------------------------------
 %% 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
@@ -15,8 +15,8 @@
 %% 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 <https://www.gnu.org/licenses/>.
 %% 
-%% 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 @@
   \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 @@
 \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'.



More information about the tex-live-commits mailing list.