summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2021-08-11 20:15:57 +0000
committerKarl Berry <karl@freefriends.org>2021-08-11 20:15:57 +0000
commit78a278be7587c8b6321671f24a56203a546533f6 (patch)
tree76174091613e8886253acfdf56ea20ac3b7d8c7a /Master
parent3327e9d91f2fa85e634543a2769202bddc83018a (diff)
tipauni (11aug21)
git-svn-id: svn://tug.org/texlive/trunk@60220 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/tipauni/README.txt6
-rw-r--r--Master/texmf-dist/doc/latex/tipauni/gfdl-tex.tex513
-rw-r--r--Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdfbin108227 -> 85125 bytes
-rw-r--r--Master/texmf-dist/doc/latex/tipauni/tipauni-commands.tex55
-rw-r--r--Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdfbin134002 -> 128188 bytes
-rw-r--r--Master/texmf-dist/doc/latex/tipauni/tipauni-example.tex4
-rw-r--r--Master/texmf-dist/doc/latex/tipauni/tipauni.pdfbin194032 -> 248249 bytes
-rw-r--r--Master/texmf-dist/source/latex/tipauni/tipauni.dtx536
-rw-r--r--Master/texmf-dist/source/latex/tipauni/tipauni.ins10
-rw-r--r--Master/texmf-dist/tex/latex/tipauni/tipauni.sty313
10 files changed, 642 insertions, 795 deletions
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
--- a/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdf
+++ b/Master/texmf-dist/doc/latex/tipauni/tipauni-commands.pdf
Binary files 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
--- a/Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdf
+++ b/Master/texmf-dist/doc/latex/tipauni/tipauni-example.pdf
Binary files 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
--- a/Master/texmf-dist/doc/latex/tipauni/tipauni.pdf
+++ b/Master/texmf-dist/doc/latex/tipauni/tipauni.pdf
Binary files 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 <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 @@ License: GPL v3.0+
%</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 @@ 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+
%</driver>
% \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}
%</package>
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 <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 @@ 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 <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 @@ 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'.