From 580a384585ecc80778ebca5845ce3bd7ae60cb48 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Thu, 28 Jan 2021 03:01:03 +0000 Subject: CTAN sync 202101280301 --- macros/unicodetex/latex/texnegar/INSTALL.txt | 4 +- .../latex/texnegar/doc-ligature-texnegar.pdf | Bin 13133 -> 13132 bytes .../unicodetex/latex/texnegar/doc-ligature-xep.pdf | Bin 10116 -> 10111 bytes .../latex/texnegar/doc-samples-glyph.pdf | Bin 63437 -> 63437 bytes .../latex/texnegar/doc-samples-hrule.pdf | Bin 62967 -> 62969 bytes .../unicodetex/latex/texnegar/doc-samples-xep.pdf | Bin 65544 -> 65546 bytes macros/unicodetex/latex/texnegar/texnegar-doc.ltx | 486 +++++++++++---------- macros/unicodetex/latex/texnegar/texnegar-doc.pdf | Bin 3145482 -> 2868138 bytes .../latex/texnegar/texnegar-luatex-glyph.pdf | Bin 1105890 -> 878555 bytes .../latex/texnegar/texnegar-luatex-glyph.tex | 2 +- .../texnegar/texnegar-luatex-leaders-glyph.pdf | Bin 325838 -> 278471 bytes .../texnegar/texnegar-luatex-leaders-glyph.tex | 2 +- .../texnegar/texnegar-luatex-leaders-hrule.pdf | Bin 174805 -> 169438 bytes .../texnegar/texnegar-luatex-leaders-hrule.tex | 2 +- .../latex/texnegar/texnegar-xetex-bidi-glyph.pdf | Bin 157987 -> 157991 bytes .../latex/texnegar/texnegar-xetex-bidi-glyph.tex | 2 +- .../texnegar/texnegar-xetex-bidi-leaders-glyph.pdf | Bin 212554 -> 212563 bytes .../texnegar/texnegar-xetex-bidi-leaders-glyph.tex | 2 +- .../texnegar/texnegar-xetex-bidi-leaders-hrule.pdf | Bin 156628 -> 156643 bytes .../texnegar/texnegar-xetex-bidi-leaders-hrule.tex | 2 +- .../texnegar/texnegar-xetex-xepersian-glyph.pdf | Bin 156633 -> 156631 bytes .../texnegar/texnegar-xetex-xepersian-glyph.tex | 4 +- .../texnegar-xetex-xepersian-leaders-glyph.pdf | Bin 194659 -> 194659 bytes .../texnegar-xetex-xepersian-leaders-glyph.tex | 4 +- .../texnegar-xetex-xepersian-leaders-hrule.pdf | Bin 155933 -> 155935 bytes .../texnegar-xetex-xepersian-leaders-hrule.tex | 4 +- macros/unicodetex/latex/texnegar/texnegar.dtx | 345 +++++++++++++-- macros/unicodetex/latex/texnegar/texnegar.pdf | Bin 534937 -> 564734 bytes macros/unicodetex/latex/texnegar/xepersian-XB.pdf | Bin 106734 -> 106692 bytes macros/unicodetex/latex/texnegar/xepersian-XB.tex | 1 - 30 files changed, 567 insertions(+), 293 deletions(-) (limited to 'macros/unicodetex') diff --git a/macros/unicodetex/latex/texnegar/INSTALL.txt b/macros/unicodetex/latex/texnegar/INSTALL.txt index cac38811d9..1121a14459 100644 --- a/macros/unicodetex/latex/texnegar/INSTALL.txt +++ b/macros/unicodetex/latex/texnegar/INSTALL.txt @@ -1,11 +1,11 @@ texnegar -- INSTALL ====================== - Source: texnegar.dtx (2020-08-30 v0.1b) + Source: texnegar.dtx (2021-01-27 v0.1c) Author: Hossein Movahhedian Info: filecontents + macro + verbatim License: LPPL 1.3c - Copyright (C) 2020 Hossein Movahedian. + Copyright (C) 2020-2021 Hossein Movahedian. - To extract the package and at the same time produce the diff --git a/macros/unicodetex/latex/texnegar/doc-ligature-texnegar.pdf b/macros/unicodetex/latex/texnegar/doc-ligature-texnegar.pdf index 824d833e3a..55bb7c1087 100644 Binary files a/macros/unicodetex/latex/texnegar/doc-ligature-texnegar.pdf and b/macros/unicodetex/latex/texnegar/doc-ligature-texnegar.pdf differ diff --git a/macros/unicodetex/latex/texnegar/doc-ligature-xep.pdf b/macros/unicodetex/latex/texnegar/doc-ligature-xep.pdf index 85a25c35d5..02c1be0ef2 100644 Binary files a/macros/unicodetex/latex/texnegar/doc-ligature-xep.pdf and b/macros/unicodetex/latex/texnegar/doc-ligature-xep.pdf differ diff --git a/macros/unicodetex/latex/texnegar/doc-samples-glyph.pdf b/macros/unicodetex/latex/texnegar/doc-samples-glyph.pdf index 2db6e61796..a72a792eb9 100644 Binary files a/macros/unicodetex/latex/texnegar/doc-samples-glyph.pdf and b/macros/unicodetex/latex/texnegar/doc-samples-glyph.pdf differ diff --git a/macros/unicodetex/latex/texnegar/doc-samples-hrule.pdf b/macros/unicodetex/latex/texnegar/doc-samples-hrule.pdf index f1a806958d..8e55b7dc26 100644 Binary files a/macros/unicodetex/latex/texnegar/doc-samples-hrule.pdf and b/macros/unicodetex/latex/texnegar/doc-samples-hrule.pdf differ diff --git a/macros/unicodetex/latex/texnegar/doc-samples-xep.pdf b/macros/unicodetex/latex/texnegar/doc-samples-xep.pdf index a1da366355..f613613547 100644 Binary files a/macros/unicodetex/latex/texnegar/doc-samples-xep.pdf and b/macros/unicodetex/latex/texnegar/doc-samples-xep.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-doc.ltx b/macros/unicodetex/latex/texnegar/texnegar-doc.ltx index d3da27ee43..c740068a7d 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-doc.ltx +++ b/macros/unicodetex/latex/texnegar/texnegar-doc.ltx @@ -1,7 +1,7 @@ %% %% This is file `texnegar-doc.tex' %% -%% Copyright (c) Hossein Movahhedian 2020 +%% Copyright (c) Hossein Movahhedian 2020-2021 %% %% It may be distributed and/or modified under the LaTeX Project Public License, %% version 1.3c or higher (your choice). The latest version of @@ -17,6 +17,7 @@ \usepackage{hologo} \usepackage{xcolor} \usepackage{iftex} +\usepackage{enumitem} \setfontfamily\PeFont[Script=Arabic,Language=Persian]{HM XKayhan} @@ -31,15 +32,15 @@ % This also makes the index 1 columns, which I don't want \makeatletter \renewenvironment{theindex} - {\section*{\indexname}\begin{multicols}{2}% - \@mkboth{\MakeUppercase\indexname}% - {\MakeUppercase\indexname}% - \thispagestyle{plain}\parindent\z@ - \parskip\z@ \@plus .3\p@\relax - \columnseprule \z@ - \columnsep 35\p@ - \let\item\@idxitem} - {\end{multicols}} + {\section*{\indexname}\begin{multicols}{2}% + \@mkboth{\MakeUppercase\indexname}% + {\MakeUppercase\indexname}% + \thispagestyle{plain}\parindent\z@ + \parskip\z@ \@plus .3\p@\relax + \columnseprule \z@ + \columnsep 35\p@ + \let\item\@idxitem} + {\end{multicols}} \makeatother \ifluatex @@ -50,7 +51,7 @@ \fi \title{ - The \TeXNegar{} package\\Kashida justification in LuaTeX and XeTeX\\User Documentation + The \textsf{texnegar} package\\Kashida justification in LuaTeX and XeTeX\\User Documentation } \author{ @@ -62,7 +63,7 @@ } } -\date{Released \quad 2020-08-30 \quad v0.1b} +\date{Released \quad 2021-01-27 \quad v0.1c} \definecolor{HMhighlightBlueI}{rgb}{0,0,1} \definecolor{HMhighlightbgYellowII}{rgb}{1,1,1} @@ -103,15 +104,6 @@ } \end{minipage} -% \vskip 15mm -% \begin{center}\begin{minipage}{0.65\linewidth}\parskip 15pt -% \textit{ -% Negar, in Persian, is the present stem of negaashtan meaning to design; to paint; -% to write; and as a noun it means ``sweetheart, idol, beloved, figuratively refering -% to a beautiful woman, pattern, painting, and artistic design'' -% } -% \end{minipage}\end{center} - \newpage \tableofcontents @@ -136,30 +128,30 @@ and \mbox{\textsf{X Series 2}} available at\linebreak[4] The \indexterm{texnegar}{\TeXNegar} package implements kashida justification in LuaTeX and XeTeX and fixes known bugs in \textsf{xepersian}. -The following files in the directory \texttt{texmf-dist/doc/xelatex/texnegar/} can be used as simple +The following files in the directory \texttt{texmf-dist/doc/latex/texnegar/} can be used as simple examples of the usage of the package: \newcounter{beanx} \begin{list}{\arabic{beanx}.}{\usecounter{beanx}\setlength{\rightmargin}{\leftmargin}} \item \texttt{texnegar-luatex-glyph.tex} \\ - See pages 26 -- 35 for PDF output. + See pages 26 -- 35 for PDF output. \item \texttt{texnegar-luatex-leaders-glyph.tex} \\ - See pages 36 -- 45 for PDF output. + See pages 36 -- 45 for PDF output. \item \texttt{texnegar-luatex-leaders-hrule.tex} \\ - See pages 46 -- 55 for PDF output. + See pages 46 -- 55 for PDF output. \item \texttt{texnegar-xetex-bidi-glyph.tex} \\ - See pages 56 -- 65 for PDF output. + See pages 56 -- 65 for PDF output. \item \texttt{texnegar-xetex-bidi-leaders-glyph.tex} \\ - See pages 66 -- 75 for PDF output. + See pages 66 -- 75 for PDF output. \item \texttt{texnegar-xetex-bidi-leaders-hrule.tex} \\ - See pages 76 -- 85 for PDF output. + See pages 76 -- 85 for PDF output. \item \texttt{texnegar-xetex-xepersian-glyph.tex} \\ - See pages 86 -- 95 for PDF output. + See pages 86 -- 95 for PDF output. \item \texttt{texnegar-xetex-xepersian-leaders-glyph.tex} \\ - See pages 96 -- 105 for PDF output. + See pages 96 -- 105 for PDF output. \item \texttt{texnegar-xetex-xepersian-leaders-hrule.tex} \\ - See pages 106 -- 115 for PDF output. + See pages 106 -- 115 for PDF output. % \item \texttt{xepersian-XB.tex} \\ - % See pages 14 -- 23 for PDF output. + % See pages 16 -- 25 for PDF output. \end{list} Please use the Bitbucket issue tracker: @@ -174,59 +166,59 @@ which I cannot make time to fix. Kashida is one of the most important features that must be included in any Persian typesetter. In \textsf{xepersian} this feature is implemented but with some -problems. See pages 14 -- 23 for pictorial illustrations for various font styles. +problems. See pages 16 -- 25 for pictorial illustrations for various font styles. These problems along with the fixes in \TeXNegar{} are briefly: \newcounter{bean} \begin{list}{P-\Roman{bean}}{\usecounter{bean}\setlength{\rightmargin}{\leftmargin}} - \item In \textsf{xepersian} \indexterm{overlapping of glyphs}{overlapping of glyphs} occurs in letter - combinations such as "{\RtoL{ﺑ + ﻰ}}", "{\RtoL{ﺗ + ﻰ}}", and - "{\RtoL{ﭘ + ﻰ}}" because the character - \textsf{U+FEF0 (ARABIC LETTER FARSI YEH FINAL FORM)} is replaced with - another character. This is fixed by modifying the fixed part of the - glue inserted between the consecutive characters. Furthermore, both, - the fixed and the stretchable parts of the glue can be changed by the - user. - \item In \indexterm{letter combinations}{letter combinations} such as "{\RtoL{ﻫ + ﻰ}}", in \textsf{xepersian}, - the character \textsf{U+FEEB (ARABIC LETTER HEH INITIAL FORM)} is - replaced with \textsf{U+06BE (ARABIC LETTER HEH DOACHASHEMEE)}. This - is fixed by inserting the character \textsf{U+200E} before the - combination "\textsf{U+200D + hrule + U+200D}" which is used as - stretching item. - - {\color{gray} - Note: \indexterm{Vafa Khalighi}{Vafa Khalighi} has fixed this problem in - \href{https://tug.org/svn/texlive/trunk/Master/texmf-dist/tex/xelatex/xepersian/kashida-xepersian.def?revision=55165&view=co}% - {\texttt{xepersian-23.0}}, - by copying the corresponding code from - \href{http://www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/xelatex/xepersian-hm/kashida-xepersian-hm.def?revision=55123&view=co}% - {\texttt{xepersian-hm-0.5e}}. - Consequently, the - option \texttt{KashidaXBFix} along with the commands \linebreak[4] - \texttt{\textbackslash KashidaXBFixOn} and - \texttt{\textbackslash KashidaXBFixOff} has been removed in \linebreak[4] - \texttt{xepersian-23.0} and the later versions.} - - \item In \textsf{xepersian} when outline or shadow fonts are used, the gaps - filled by horizontal rule appears as a solid box. This is fixed by - using the \textsf{kashida} glyph instead of the horizontal rule in - \TeXNegar. - \item Activating kashida in \textsf{xepersian} disturbs \indexterm{ligatures}{ligatures}. This is - fixed in \TeXNegar{} by escaping the components of the - ligature which form the glyph, i.e. by inserting an escape character - before Persian letters joined to form the ligature without any empty - characters, blank characters, invisible characters and whitespace - characters which form the glyph. See - \mbox{Figures \ref{fig:ligatures-xep} and \ref{fig:ligatures-texnegar}}. - Currently only 3 ligature glyphs are available in - \TeXNegar, but you can add as many as you want or let - me know the ligature glyphs that you need, so that I can add them in - the next release of the package. Of course, this is not the best - solution, but it works. - - \item If italic or oblique style of some fonts, such as \textsf{X Series 2}, - is used in \textsf{xepersian}, an extra \indexterm{gap}{gap} is left between the - stretched characters. This is fixed in \textsf{HM Series} fonts. + \item In \textsf{xepersian} \indexterm{overlapping of glyphs}{overlapping of glyphs} occurs in letter + combinations such as "{\RtoL{ﺑ + ﻰ}}", "{\RtoL{ﺗ + ﻰ}}", and + "{\RtoL{ﭘ + ﻰ}}" because the character + \textsf{U+FEF0 (ARABIC LETTER FARSI YEH FINAL FORM)} is replaced with + another character. This is fixed by modifying the fixed part of the + glue inserted between the consecutive characters. Furthermore, both, + the fixed and the stretchable parts of the glue can be changed by the + user. + \item In \indexterm{letter combinations}{letter combinations} such as "{\RtoL{ﻫ + ﻰ}}", in \textsf{xepersian}, + the character \textsf{U+FEEB (ARABIC LETTER HEH INITIAL FORM)} is + replaced with \textsf{U+06BE (ARABIC LETTER HEH DOACHASHEMEE)}. This + is fixed by inserting the character \textsf{U+200E} before the + combination "\textsf{U+200D + hrule + U+200D}" which is used as + stretching item. + + {\color{gray} + Note: \indexterm{Vafa Khalighi}{Vafa Khalighi} has fixed this problem in + \href{https://tug.org/svn/texlive/trunk/Master/texmf-dist/tex/xelatex/xepersian/kashida-xepersian.def?revision=55165&view=co}% + {\texttt{xepersian-23.0}}, + by copying the corresponding code from + \href{http://www.tug.org/svn/texlive/trunk/Master/texmf-dist/tex/xelatex/xepersian-hm/kashida-xepersian-hm.def?revision=55123&view=co}% + {\texttt{xepersian-hm-0.5e}}. + Consequently, the + option \texttt{KashidaXBFix} along with the commands \linebreak[4] + \texttt{\textbackslash KashidaXBFixOn} and + \texttt{\textbackslash KashidaXBFixOff} has been removed in \linebreak[4] + \texttt{xepersian-23.0} and the later versions.} + + \item In \textsf{xepersian} when outline or shadow fonts are used, the gaps + filled by horizontal rule appears as a solid box. This is fixed by + using the \textsf{kashida} glyph instead of the horizontal rule in + \TeXNegar. + \item Activating kashida in \textsf{xepersian} disturbs \indexterm{ligatures}{ligatures}. This is + fixed in \TeXNegar{} by escaping the components of the + ligature which form the glyph, i.e. by inserting an escape character + before Persian letters joined to form the ligature without any empty + characters, blank characters, invisible characters and whitespace + characters which form the glyph. See + \mbox{Figures \ref{fig:ligatures-xep} and \ref{fig:ligatures-texnegar}}. + Currently only 3 ligature glyphs are available in + \TeXNegar, but you can add as many as you want or let + me know the ligature glyphs that you need, so that I can add them in + the next release of the package. Of course, this is not the best + solution, but it works. + + \item If italic or oblique style of some fonts, such as \textsf{X Series 2}, + is used in \textsf{xepersian}, an extra \indexterm{gap}{gap} is left between the + stretched characters. This is fixed in \textsf{HM Series} fonts. \end{list} For comparing the outputs of \textsf{xepersian} and \TeXNegar{} with @@ -273,7 +265,7 @@ please note that \TeXNegar{} should be loaded before \textsf{xepersian}. For example: \begin{verbatim} \documentclass{report} -\usepackage[Kashida=leaders+glyph]{texnegar} +\usepackage[Minimal=On,Kashida=leaders+glyph]{texnegar} \usepackage{xepersian} \end{verbatim} @@ -281,167 +273,178 @@ The options available in \TeXNegar{} are: \begin{itemize} \item \indexterm{General Options}{\textbf{General Options}}: \\ -\begin{itemize} - \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{Kashida}}: \\ - which implements kashida feature with three possible values: \begin{itemize} - \item \indextermsubsub{General Options}{\textbf{General Options}}{\texttt{Kashida}}{glyph}: \\ - which uses the \texttt{kashida} character to stretch the text. \\ - - {\color{magenta} - Imortant notes for \hologo{XeLaTeX} users: \\ - + \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{Minimal}}: \\ + which has two possible values: \begin{itemize} - \item - If you are going to use this option then you should run \texttt{xelatex} thrice. For example: \\ - - \texttt{rm -f kashida-example.aux \\ - xelatex kashida-example.tex \\ - xelatex kashida-example.tex \\ - xelatex kashida-example.tex} \\ - - \item - This feature is still experimental in \hologo{XeLaTeX} and is not regarded as stable, - so, if you are going to use this option be ready for unpredictable results. - - \item - With this option, for each gap which is to be filled with kashida, - some commands, current position on the page, and references are saved in the - \texttt{\bslash jobname.aux} file and if the text is long, the file size may get - too large. - \end{itemize}} - - \item \indextermsubsub{General Options}{\textbf{General Options}}{\texttt{Kashida}}{leaders+glyph}: \\ - which uses kashida glyph leaders to stretch the text. - Please note that the option `Kashida=leaders+glyph' is currently only - supported by \mbox{\textsf{HM Series}} fonts available at - \href{https://dma8hm1334.bitbucket.io}{\texttt{https://dma8hm1334.bitbucket.io}}. - If you know of any other font that supports this option, please - let me know to add it to the list of corresponding fonts. - - Contrary to the option \texttt{Kashida=glyph}, in this case nothing is saved - in \texttt{.aux} files. - - \item \indextermsubsub{General Options}{\textbf{General Options}}{\texttt{Kashida}}{leaders+hrule}: \\ - which uses horizontal rule (\verb|\hrule|) leaders to stretch the text. - - \item \texttt{Off}: \\ - which disables kashida feature. - - \item \texttt{On}: \\ - which is the same as \texttt{leaders+glyph}. - + \item \indextermsubsub{General Options}{\textbf{General Options}}{\texttt{Minimal}}{On}: \\ + for using \texttt{texnegar} to implement kashida feature only. + + \item \indextermsubsub{General Options}{\textbf{General Options}}{\texttt{Minimal}}{Off}: \\ + for using \texttt{texnegar} as a general purpose typesetter (including kashida implementation). + This is the default value. + \end{itemize} + + \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{Kashida}}: \\ + which implements kashida feature with three possible values: + \begin{itemize} + \item \indextermsubsub{General Options}{\textbf{General Options}}{\texttt{Kashida}}{glyph}: \\ + which uses the \texttt{kashida} character to stretch the text. \\ + + {\color{magenta} + Imortant notes for \hologo{XeLaTeX} users: \\ + + \begin{itemize} + \item + If you are going to use this option then you should run \texttt{xelatex} thrice. For example: \\ + + \texttt{rm -f kashida-example.aux \\ + xelatex kashida-example.tex \\ + xelatex kashida-example.tex \\ + xelatex kashida-example.tex} \\ + + \item + This feature is still experimental in \hologo{XeLaTeX} and is not regarded as stable, + so, if you are going to use this option be ready for unpredictable results. + + \item + With this option, for each gap which is to be filled with kashida, + some commands, current position on the page, and references are saved in the + \texttt{\bslash jobname.aux} file and if the text is long, the file size may get + too large. + \end{itemize}} + + \item \indextermsubsub{General Options}{\textbf{General Options}}{\texttt{Kashida}}{leaders+glyph}: \\ + which uses kashida glyph leaders to stretch the text. + Please note that the option `Kashida=leaders+glyph' is currently only + supported by \mbox{\textsf{HM Series}} fonts available at + \href{https://dma8hm1334.bitbucket.io}{\texttt{https://dma8hm1334.bitbucket.io}}. + If you know of any other font that supports this option, please + let me know to add it to the list of corresponding fonts. + + Contrary to the option \texttt{Kashida=glyph}, in this case nothing is saved + in \texttt{.aux} files. + + \item \indextermsubsub{General Options}{\textbf{General Options}}{\texttt{Kashida}}{leaders+hrule}: \\ + which uses horizontal rule (\verb|\hrule|) leaders to stretch the text. + + \item \texttt{Off}: \\ + which disables kashida feature. + + \item \texttt{On}: \\ + which is the same as \texttt{leaders+glyph}. + + \end{itemize} + Also, please note that the value of \texttt{Kashida} is mandatory. + For example \texttt{Kashida=glyph} inserts a stretched \texttt{kashida} glyph + and \linebreak[4] \texttt{Kashida=leaders+glyph} inserts \texttt{kashida} leaders wherever + it is needed. + + \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{linebreakpenalty}}: \\ + which specifies the amount of penalty for preventing bad line-breaking. + You may strictly specify the value of this option. For example you may either set % \linebreak[4] + \texttt{'linebreakpenalty=8'} or + use the default values. The available default values of penalties which are put into the + horizontal list output are the negative of the followings: + + \begin{longtable}{ll} + \texttt{min}: & \texttt{0} \\ + \texttt{low}: & \texttt{8} \\ + \texttt{medium}: & \texttt{15} \\ + \texttt{high}: & \texttt{25} \\ + \texttt{max}: & \texttt{10000} + \end{longtable} + + \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{ligatures}}: \\ + which fixes the disturbance of ligatures caused by activating kashida + justification in \TeXNegar. You may strictly specify the value of this option. + For example \texttt{'ligatures=dlig'} or you may use the default value. + The available values are: + + \begin{longtable}{ll} + \texttt{aalt}: & Access All Alternatives \\ + \texttt{ccmp}: & Glyph Composition/Decomposition \\ + \texttt{dlig}: & Discretionary Ligatures \\ + \texttt{fina}: & Final (Terminal) Forms \\ + \texttt{init}: & Initial Forms \\ + \texttt{locl}: & Localized Forms \\ + \texttt{medi}: & Medial Forms \\ + \texttt{rlig}: & Required Ligatures \\ + \texttt{default}: & All the above features + \end{longtable} + Please note that this feature is still experimental and is not regarded as stable. + + \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{color}}: \\ + which colorize the stretched parts of the text for checking the quality of kashida + justification. Color must be one of a named color declared in \textsf{xcolor} package. + For example: \texttt{color=blue} or \texttt{color=Blue}. + + Default color name is: \texttt{magenta} + + Please note that activating this option increases system resource and disk usage. + \end{itemize} - Also, please note that the value of \texttt{Kashida} is mandatory. - For example \texttt{Kashida=glyph} inserts a stretched \texttt{kashida} glyph - and \linebreak[4] \texttt{Kashida=leaders+glyph} inserts \texttt{kashida} leaders wherever - it is needed. - - \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{linebreakpenalty}}: \\ - which specifies the amount of penalty for preventing bad line-breaking. - You may strictly specify the value of this option. For example you may either set % \linebreak[4] - \texttt{'linebreakpenalty=8'} or - use the default values. The available default values of penalties which are put into the - horizontal list output are the negative of the followings: - - \begin{longtable}{ll} - \texttt{min}: & \texttt{0} \\ - \texttt{low}: & \texttt{8} \\ - \texttt{medium}: & \texttt{15} \\ - \texttt{high}: & \texttt{25} \\ - \texttt{max}: & \texttt{10000} - \end{longtable} - - \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{ligatures}}: \\ - which fixes the disturbance of ligatures caused by activating kashida - justification in \TeXNegar. You may strictly specify the value of this option. - For example \texttt{'ligatures=dlig'} or you may use the default value. - The available values are: - - \begin{longtable}{ll} - \texttt{aalt}: & Access All Alternatives \\ - \texttt{ccmp}: & Glyph Composition/Decomposition \\ - \texttt{dlig}: & Discretionary Ligatures \\ - \texttt{fina}: & Final (Terminal) Forms \\ - \texttt{init}: & Initial Forms \\ - \texttt{locl}: & Localized Forms \\ - \texttt{medi}: & Medial Forms \\ - \texttt{rlig}: & Required Ligatures \\ - \texttt{default}: & All the above features - \end{longtable} - Please note that this feature is still experimental and is not regarded as stable. - - \item \indextermsub{General Options}{\textbf{General Options}}{\texttt{color}}: \\ - which colorize the stretched parts of the text for checking the quality of kashida - justification. Color must be one of a named color declared in \textsf{xcolor} package. - For example: \texttt{color=blue} or \texttt{color=Blue}. - - Default color name is: \texttt{magenta} - - Please note that activating this option increases system resource and disk usage. - -\end{itemize} \end{itemize} \begin{itemize} \item \indexterm{LuaLaTeX-only Options}{\textbf{\hologo{LuaLaTeX}-only Options}}: \\ -\begin{itemize} - \item \indextermsub{LuaLaTeX-only Options}{\textbf{\hologo{LuaLaTeX}-only Options}}{\texttt{hboxrecursion}}: \\ - which enables kashida justification inside horizontal boxes recursively. + \begin{itemize} + \item \indextermsub{LuaLaTeX-only Options}{\textbf{\hologo{LuaLaTeX}-only Options}}{\texttt{hboxrecursion}}: \\ + which enables kashida justification inside horizontal boxes recursively. - \item \indextermsub{LuaLaTeX-only Options}{\textbf{\hologo{LuaLaTeX}-only Options}}{\texttt{vboxrecursion}}: \\ - which enables kashida justification inside vertical boxes recursively. + \item \indextermsub{LuaLaTeX-only Options}{\textbf{\hologo{LuaLaTeX}-only Options}}{\texttt{vboxrecursion}}: \\ + which enables kashida justification inside vertical boxes recursively. -\end{itemize} + \end{itemize} \end{itemize} \begin{itemize} \item \indexterm{XeLaTeX-only Options}{\textbf{\hologo{XeLaTeX}-only Options}}: \\ -\begin{itemize} - \item \indextermsub{XeLaTeX-only Options}{\textbf{\hologo{XeLaTeX}-only Options}}{\texttt{kashidastretch}}: \\ - which specifies the amount of extra stretching - for some combinations of characters. You may strictly specify the value of - this option. For example \texttt{'kashidastretch=0.14 em plus 0.5 em'} or you - may use the default values. The available default values are: - - \begin{longtable}{lll} - \texttt{kayhan} & \texttt{0.14 em plus 0.5 em} \\ - \texttt{khorramshahr} & \texttt{0.131 em plus 0.5 em} \\ - \texttt{kayhannavaar} & \texttt{0.129 em plus 0.5 em} \\ - \texttt{kayhanpook} & \texttt{0.133 em plus 0.5 em} \\ - \texttt{kayhansayeh} & \texttt{0.135 em plus 0.5 em} \\ - \texttt{khoramshahr} & \texttt{0.128 em plus 0.5 em} \\ - \texttt{khorramshahr} & \texttt{0.13 em plus 0.5 em} \\ - \texttt{niloofar} & \texttt{0.132 em plus 0.5 em} \\ - \texttt{paatch} & \texttt{0.127 em plus 0.5 em} \\ - \texttt{riyaz} & \texttt{0.125 em plus 0.5 em} \\ - \texttt{roya} & \texttt{0.142 em plus 0.5 em} \\ - \texttt{shafigh} & \texttt{0.143 em plus 0.5 em} \\ - \texttt{shafighKurd} & \texttt{0.126 em plus 0.5 em} \\ - \texttt{shafighUzbek} & \texttt{0.123 em plus 0.5 em} \\ - \texttt{shiraz} & \texttt{0.122 em plus 0.5 em} \\ - \texttt{sols} & \texttt{0.124 em plus 0.5 em} \\ - \texttt{tabriz} & \texttt{0.119 em plus 0.5 em} \\ - \texttt{titr} & \texttt{0.12 em plus 0.5 em} \\ - \texttt{titre} & \texttt{0.121 em plus 0.5 em} \\ - \texttt{traffic} & \texttt{0.124 em plus 0.5 em} \\ - \texttt{vahid} & \texttt{0.134 em plus 0.5 em} \\ - \texttt{vosta} & \texttt{0.136 em plus 0.5 em} \\ - \texttt{yaghut} & \texttt{0.138 em plus 0.5 em} \\ - \texttt{yagut} & \texttt{0.137 em plus 0.5 em} \\ - \texttt{yas} & \texttt{0.126 em plus 0.5 em} \\ - \texttt{yekan} & \texttt{0.141 em plus 0.5 em} \\ - \texttt{yermook} & \texttt{0.139 em plus 0.5 em} \\ - \texttt{zar} & \texttt{0.116 em plus 0.5 em} \\ - \texttt{ziba} & \texttt{0.119 em plus 0.5 em} \\ - \texttt{default} & \texttt{0.14 em plus 0.5 em} \\ - \texttt{noskip} & \texttt{0 em plus 0.5 em} - \end{longtable} - - For example: \mbox{\texttt{'kashidastretch=titr'}} is equivalent to\linebreak - \mbox{\texttt{'kashidastretch=0.12 em plus 0.5 em'}} + \begin{itemize} + \item \indextermsub{XeLaTeX-only Options}{\textbf{\hologo{XeLaTeX}-only Options}}{\texttt{kashidastretch}}: \\ + which specifies the amount of extra stretching + for some combinations of characters. You may strictly specify the value of + this option. For example \texttt{'kashidastretch=0.14 em plus 0.5 em'} or you + may use the default values. The available default values are: + + \begin{longtable}{lll} + \texttt{kayhan} & \texttt{0.14 em plus 0.5 em} \\ + \texttt{khorramshahr} & \texttt{0.131 em plus 0.5 em} \\ + \texttt{kayhannavaar} & \texttt{0.129 em plus 0.5 em} \\ + \texttt{kayhanpook} & \texttt{0.133 em plus 0.5 em} \\ + \texttt{kayhansayeh} & \texttt{0.135 em plus 0.5 em} \\ + \texttt{khoramshahr} & \texttt{0.128 em plus 0.5 em} \\ + \texttt{khorramshahr} & \texttt{0.13 em plus 0.5 em} \\ + \texttt{niloofar} & \texttt{0.132 em plus 0.5 em} \\ + \texttt{paatch} & \texttt{0.127 em plus 0.5 em} \\ + \texttt{riyaz} & \texttt{0.125 em plus 0.5 em} \\ + \texttt{roya} & \texttt{0.142 em plus 0.5 em} \\ + \texttt{shafigh} & \texttt{0.143 em plus 0.5 em} \\ + \texttt{shafighKurd} & \texttt{0.126 em plus 0.5 em} \\ + \texttt{shafighUzbek} & \texttt{0.123 em plus 0.5 em} \\ + \texttt{shiraz} & \texttt{0.122 em plus 0.5 em} \\ + \texttt{sols} & \texttt{0.124 em plus 0.5 em} \\ + \texttt{tabriz} & \texttt{0.119 em plus 0.5 em} \\ + \texttt{titr} & \texttt{0.12 em plus 0.5 em} \\ + \texttt{titre} & \texttt{0.121 em plus 0.5 em} \\ + \texttt{traffic} & \texttt{0.124 em plus 0.5 em} \\ + \texttt{vahid} & \texttt{0.134 em plus 0.5 em} \\ + \texttt{vosta} & \texttt{0.136 em plus 0.5 em} \\ + \texttt{yaghut} & \texttt{0.138 em plus 0.5 em} \\ + \texttt{yagut} & \texttt{0.137 em plus 0.5 em} \\ + \texttt{yas} & \texttt{0.126 em plus 0.5 em} \\ + \texttt{yekan} & \texttt{0.141 em plus 0.5 em} \\ + \texttt{yermook} & \texttt{0.139 em plus 0.5 em} \\ + \texttt{zar} & \texttt{0.116 em plus 0.5 em} \\ + \texttt{ziba} & \texttt{0.119 em plus 0.5 em} \\ + \texttt{default} & \texttt{0.14 em plus 0.5 em} \\ + \texttt{noskip} & \texttt{0 em plus 0.5 em} + \end{longtable} + + For example: \mbox{\texttt{'kashidastretch=titr'}} is equivalent to\linebreak + \mbox{\texttt{'kashidastretch=0.12 em plus 0.5 em'}} -\end{itemize} + \end{itemize} \end{itemize} \section{Commands} @@ -485,21 +488,26 @@ During the development of this package I refered to Stack Exchange network of question-and-answer (Q\&A) websites to solve problems for which I am grateful. I also would like to thank the developer teams of TeX's friends especially LaTeX, LuaTeX and XeTeX teams. -\def\HistoryItem#1#2{\subsection*{[#1]} \addcontentsline{toc}{subsection}{[#1]} \item #2} - \section{Change History} -\begin{itemize} - \let\tmpitemindent\itemindent - \addtolength{\itemindent}{\leftmargin} - \setlength{\parskip}{0pt} - \setlength{\itemsep}{0pt} +\def\SubSecItem#1{\subsubsection*{\hskip 2em\large #1}\addcontentsline{toc}{subsection}{[#1]}} +\newenvironment{Itemize}{\begin{itemize}[leftmargin=4em]}{\end{itemize}} - \HistoryItem{2020-08-29~v0.1a}{First standalone version.} +\SubSecItem{2020-08-29~v0.1a} +\begin{Itemize} + \item First standalone version. +\end{Itemize} - \HistoryItem{2020-08-30~v0.1b}{Changed some file names.} +\SubSecItem{2020-08-30~v0.1b} +\begin{Itemize} + \item Changed some file names. +\end{Itemize} -\end{itemize} +\SubSecItem{2021-01-27~v0.1c} +\begin{Itemize} + \item Added the option \texttt{Minimal} which is needed if texnegar is used for kashida implementaion only. + \item Fixed the problem with \texttt{Scheherazade} and \texttt{Amiri} fonts. +\end{Itemize} \section*{To Do's} diff --git a/macros/unicodetex/latex/texnegar/texnegar-doc.pdf b/macros/unicodetex/latex/texnegar/texnegar-doc.pdf index dbc009499d..fe4771d0d2 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-doc.pdf and b/macros/unicodetex/latex/texnegar/texnegar-doc.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-luatex-glyph.pdf b/macros/unicodetex/latex/texnegar/texnegar-luatex-glyph.pdf index bfd2ac60c3..bfc142958c 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-luatex-glyph.pdf and b/macros/unicodetex/latex/texnegar/texnegar-luatex-glyph.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-luatex-glyph.tex b/macros/unicodetex/latex/texnegar/texnegar-luatex-glyph.tex index 0cc842cb32..c5edacdc61 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-luatex-glyph.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-luatex-glyph.tex @@ -34,7 +34,7 @@ % \pagestyle{empty} \setcounter{page}{26} -\usepackage[Kashida=glyph,kashidastretch=0.14 em plus 0.5 em,hboxrecursion=On,vboxrecursion=On,color=red]{texnegar} +\usepackage[Minimal=On,Kashida=glyph,kashidastretch=0.14 em plus 0.5 em,hboxrecursion=On,vboxrecursion=On,color=red]{texnegar} \begin{document} diff --git a/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-glyph.pdf b/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-glyph.pdf index 561f608926..575bae99f9 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-glyph.pdf and b/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-glyph.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-glyph.tex b/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-glyph.tex index 31caf27ebd..5eab081153 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-glyph.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-glyph.tex @@ -34,7 +34,7 @@ % \pagestyle{empty} \setcounter{page}{36} -\usepackage[Kashida=leaders+glyph,kashidastretch=0.14 em plus 0.5 em,hboxrecursion=On,vboxrecursion=On,color=red]{texnegar} +\usepackage[Minimal=On,Kashida=leaders+glyph,kashidastretch=0.14 em plus 0.5 em,hboxrecursion=On,vboxrecursion=On,color=red]{texnegar} \begin{document} diff --git a/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-hrule.pdf b/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-hrule.pdf index ec33a722c8..3d3a9a5b54 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-hrule.pdf and b/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-hrule.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-hrule.tex b/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-hrule.tex index 93938422da..300295b40b 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-hrule.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-luatex-leaders-hrule.tex @@ -34,7 +34,7 @@ % \pagestyle{empty} \setcounter{page}{46} -\usepackage[Kashida=leaders+hrule,kashidastretch=0.14 em plus 0.5 em,hboxrecursion=On,vboxrecursion=On,color=red]{texnegar} +\usepackage[Minimal=On,Kashida=leaders+hrule,kashidastretch=0.14 em plus 0.5 em,hboxrecursion=On,vboxrecursion=On,color=red]{texnegar} \begin{document} diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-glyph.pdf b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-glyph.pdf index f7965fcb96..585372d580 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-glyph.pdf and b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-glyph.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-glyph.tex b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-glyph.tex index 127d31bfa6..57c963b808 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-glyph.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-glyph.tex @@ -14,7 +14,7 @@ \setfontfamily\HMXKayhanSa[Script=Arabic,Language=Persian,Scale=4.5]{HM XKayhan Sayeh} \setfontfamily\HMXKayhanNa[Script=Arabic,Language=Persian,Scale=4.5]{HM XKayhan Navaar} -\usepackage[Kashida=glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds +\usepackage[Minimal=On,Kashida=glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds \usepackage{bidi} diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-glyph.pdf b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-glyph.pdf index c240edb0e5..b1162a6dc2 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-glyph.pdf and b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-glyph.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-glyph.tex b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-glyph.tex index 6f46fa216a..bea6e6c0a0 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-glyph.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-glyph.tex @@ -14,7 +14,7 @@ \setfontfamily\HMXKayhanSa[Script=Arabic,Language=Persian,Scale=4.5]{HM XKayhan Sayeh} \setfontfamily\HMXKayhanNa[Script=Arabic,Language=Persian,Scale=4.5]{HM XKayhan Navaar} -\usepackage[Kashida=leaders+glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds +\usepackage[Minimal=On,Kashida=leaders+glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds \usepackage{bidi} diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-hrule.pdf b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-hrule.pdf index ac1526bf5e..6124360681 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-hrule.pdf and b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-hrule.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-hrule.tex b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-hrule.tex index a585b6af22..50958cd0a2 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-hrule.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-xetex-bidi-leaders-hrule.tex @@ -14,7 +14,7 @@ \setfontfamily\HMXKayhanSa[Script=Arabic,Language=Persian,Scale=4.5]{HM XKayhan Sayeh} \setfontfamily\HMXKayhanNa[Script=Arabic,Language=Persian,Scale=4.5]{HM XKayhan Navaar} -\usepackage[Kashida=leaders+hrule,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds +\usepackage[Minimal=On,Kashida=leaders+hrule,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds \usepackage{bidi} diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-glyph.pdf b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-glyph.pdf index c7034473fe..72274f832a 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-glyph.pdf and b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-glyph.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-glyph.tex b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-glyph.tex index 763b04d18a..cd03221bf7 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-glyph.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-glyph.tex @@ -1,8 +1,8 @@ \documentclass{report} -\usepackage[Kashida=glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds +\usepackage[Minimal=On,Kashida=glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds -\usepackage[fontsloadable=true]{xepersian} +\usepackage{xepersian} % \settextfont[Scale=4.5,Colour=darkgray]{XB Kayhan} \settextfont{HM XKayhan} \setlatintextfont[Scale=1.5,Colour=0000FF]{HM XKayhan} diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-glyph.pdf b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-glyph.pdf index 005ec607bc..5bac4724b5 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-glyph.pdf and b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-glyph.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-glyph.tex b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-glyph.tex index 92870b4e44..ef0e42d6ad 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-glyph.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-glyph.tex @@ -1,8 +1,8 @@ \documentclass{report} -\usepackage[Kashida=leaders+glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds +\usepackage[Minimal=On,Kashida=leaders+glyph,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds -\usepackage[fontsloadable=true]{xepersian} +\usepackage{xepersian} % \settextfont[Scale=4.5,Colour=darkgray]{XB Kayhan} \settextfont{HM XKayhan} \setlatintextfont[Scale=1.5,Colour=0000FF]{HM XKayhan} diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-hrule.pdf b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-hrule.pdf index 9b5961a7c4..84e262a2e4 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-hrule.pdf and b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-hrule.pdf differ diff --git a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-hrule.tex b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-hrule.tex index a5df81db3f..a18066205e 100644 --- a/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-hrule.tex +++ b/macros/unicodetex/latex/texnegar/texnegar-xetex-xepersian-leaders-hrule.tex @@ -1,8 +1,8 @@ \documentclass{report} -\usepackage[Kashida=leaders+hrule,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds +\usepackage[Minimal=On,Kashida=leaders+hrule,linebreakpenalty=8,kashidastretch=0.14 em plus 0.5 em,color=red]{texnegar} % Succeeds -\usepackage[fontsloadable=true]{xepersian} +\usepackage{xepersian} % \settextfont[Scale=4.5,Colour=darkgray]{XB Kayhan} \settextfont{HM XKayhan} \setlatintextfont[Scale=1.5,Colour=0000FF]{HM XKayhan} diff --git a/macros/unicodetex/latex/texnegar/texnegar.dtx b/macros/unicodetex/latex/texnegar/texnegar.dtx index 4b27c5c054..17e8e83e3d 100644 --- a/macros/unicodetex/latex/texnegar/texnegar.dtx +++ b/macros/unicodetex/latex/texnegar/texnegar.dtx @@ -2,7 +2,7 @@ % % This is file `texnegar.dtx' % -% Copyright (C) 2020 Hossein Movahhedian +% Copyright (C) 2020-2021 Hossein Movahhedian % % It may be distributed and/or modified under the LaTeX Project Public License, % version 1.3c or higher (your choice). The latest version of @@ -63,6 +63,7 @@ make time to fix. % %<*driver> \documentclass[full]{l3doc} +\usepackage{enumitem} \begin{document} \DocInput{\jobname.dtx} \end{document} @@ -88,7 +89,7 @@ make time to fix. % \def\TeXNegar{\TeX Negar} % % \title{^^A -% The \TeXNegar{} package\\Kashida justification in LuaTeX and XeTeX\\Source code documentation^^A +% The \textsf{texnegar} package\\Kashida justification in LuaTeX and XeTeX\\Source code documentation^^A % } % % \author{^^A @@ -100,7 +101,7 @@ make time to fix. % }^^A % } % -% \date{Released \quad 2020-08-30 \quad v0.1b} +% \date{Released \quad 2021-01-27 \quad v0.1c} % % \maketitle % @@ -130,8 +131,13 @@ make time to fix. \RequirePackage{xparse} \RequirePackage{l3keys2e} \RequirePackage{graphicx}[2019-11-30] +\RequirePackage{array}[2019-10-01] \RequirePackage[dvipsnames,svgnames,x11names]{xcolor}[2016/05/11] -\ProvidesExplPackage {texnegar} {2020-08-30} {0.1b} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } +\RequirePackage{fontspec}[2020/02/21] +\RequirePackage{newverbs}[2010/09/02] +\RequirePackage{environ}[2014/05/04] + +\ProvidesExplPackage {texnegar} {2021-01-27} {0.1c} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } \sys_if_engine_luatex:T { @@ -159,7 +165,7 @@ make time to fix. % % \begin{macrocode} %<*texnegar-luatex-sty> -\ProvidesExplPackage {texnegar-luatex} {2020-08-30} {0.1b} { Full implementation of kashida feature in xetex and luatex } +\ProvidesExplPackage {texnegar-luatex} {2021-01-27} {0.1c} { Full implementation of kashida feature in xetex and luatex } \tex_input:D { texnegar-ini.tex } @@ -195,7 +201,7 @@ make time to fix. % \begin{macrocode} %<*texnegar-xetex-sty> \RequirePackage{zref-savepos}[2020-03-03] -\ProvidesExplPackage {texnegar-xetex} {2020-08-30} {0.1b} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } +\ProvidesExplPackage {texnegar-xetex} {2021-01-27} {0.1c} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } \tex_input:D { texnegar-ini.tex } @@ -212,7 +218,7 @@ make time to fix. % % \begin{macrocode} %<*texnegar-ini-tex> -\ProvidesExplFile {texnegar-ini.tex} {2020-08-30} {0.1b} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } +\ProvidesExplFile {texnegar-ini.tex} {2021-01-27} {0.1c} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } \def\TeXNegar{\TeX Negar} @@ -266,6 +272,10 @@ make time to fix. \dim_new:N \l_texnegar_diff_pos_dim +\bool_set_false:N \l_texnegar_minimal_bool +\tl_set:Nn \l_texnegar_minimal_off_tl { Off } +\tl_set:Nn \l_texnegar_minimal_on_tl { On } + \bool_set_false:N \l_texnegar_kashida_fix_bool \bool_set_false:N \l_texnegar_kashida_glyph_bool @@ -399,6 +409,22 @@ make time to fix. \keys_define:nn { texnegar } { + Minimal .code:n = + { + \tl_set:Nn \l_tmpa_tl { #1 } + \tl_case:Nn \l_tmpa_tl + { + \l_texnegar_minimal_off_tl + { + \bool_set_false:N \l_texnegar_minimal_bool + } + \l_texnegar_minimal_on_tl + { + \bool_set_true:N \l_texnegar_minimal_bool + } + } + } , + Kashida .code:n = { \tl_set:Nn \l_tmpa_tl { #1 } @@ -530,7 +556,10 @@ make time to fix. \sys_if_engine_luatex:T { \convertcolorspec{named}{\l_texnegar_color_tl}{rgb}\l_texnegar_color_rgb_tl - \directlua{l_texnegar_color_rgb_tl = "\l_texnegar_color_rgb_tl"} + \sys_if_engine_luatex:T + { + \directlua{l_texnegar_color_rgb_tl = "\l_texnegar_color_rgb_tl"} + } } } , @@ -602,6 +631,11 @@ make time to fix. %% % \newif\if@Kashida@XB@fix %% % \makeatother +\bool_if:NF \l_texnegar_minimal_bool + { + \input texnegar-luabidi.tex + } + \endinput % % \end{macrocode} @@ -609,7 +643,7 @@ make time to fix. % \subsection{File: \texttt{texnegar-common-kashida.tex}} % \begin{macrocode} %<*texnegar-common-kashida-tex> -\ProvidesExplFile {texnegar-common-kashida.tex} {2020-08-30} {0.1b} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } +\ProvidesExplFile {texnegar-common-kashida.tex} {2021-01-27} {0.1c} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } \bool_if:NT \l_texnegar_ligature_bool { @@ -677,6 +711,8 @@ make time to fix. \tl_use:N \l_texnegar_line_break_tl } } + + \endinput % % \end{macrocode} % @@ -684,7 +720,7 @@ make time to fix. % % \begin{macrocode} %<*texnegar-xetex-kashida-tex> -\ProvidesExplFile {texnegar-xetex-kashida.tex} {2020-08-30} {0.1b} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } +\ProvidesExplFile {texnegar-xetex-kashida.tex} {2021-01-27} {0.1c} { Full implementation of kashida feature in XeLaTex and LuaLaTeX } \newXeTeXintercharclass \c_texnegar_d_charclass % dual-joiner class \newXeTeXintercharclass \c_texnegar_l_charclass % lam @@ -895,7 +931,7 @@ make time to fix. -- -- texnegar.dtx (with options: `texnegar-char-table-lua') -- --- Copyright (C) 2020 Hossein Movahhedian +-- Copyright (C) 2020-2021 Hossein Movahhedian -- -- It may be distributed and/or modified under the LaTeX Project Public License, -- version 1.3c or higher (your choice). The latest version of @@ -905,8 +941,8 @@ make time to fix. -- local texnegar_char_table = texnegar_char_table -- texnegar_char_table.module = { -- name = "texnegar_char_table", --- version = "0.1b", --- date = "2020-08-30", +-- version = "0.1c", +-- date = "2021-01-27", -- description = "Full implementation of kashida feature in XeLaTex and LuaLaTeX", -- author = "Hossein Movahhedian", -- copyright = "Hossein Movahhedian", @@ -919,6 +955,84 @@ make time to fix. -- texnegar_char_table.warning = warn or (function (s) luatexbase.module_warning("texnegar_char_table", s) end) -- texnegar_char_table.error = err or (function (s) luatexbase.module_error("texnegar_char_table", s) end) +local peCharTableDigit = { + [1632] = utf8.char(1632), -- "٠", utf8.codepoint("٠") == 1632, "\u{0660}", ARABIC-INDIC DIGIT ZERO + [1633] = utf8.char(1633), -- "١", utf8.codepoint("١") == 1633, "\u{0661}", ARABIC-INDIC DIGIT ONE + [1634] = utf8.char(1634), -- "٢", utf8.codepoint("٢") == 1634, "\u{0662}", ARABIC-INDIC DIGIT TWO + [1635] = utf8.char(1635), -- "٣", utf8.codepoint("٣") == 1635, "\u{0663}", ARABIC-INDIC DIGIT THREE + [1636] = utf8.char(1636), -- "٤", utf8.codepoint("٤") == 1636, "\u{0664}", ARABIC-INDIC DIGIT FOUR + [1637] = utf8.char(1637), -- "٥", utf8.codepoint("٥") == 1637, "\u{0665}", ARABIC-INDIC DIGIT FIVE + [1638] = utf8.char(1638), -- "٦", utf8.codepoint("٦") == 1638, "\u{0666}", ARABIC-INDIC DIGIT SIX + [1639] = utf8.char(1639), -- "٧", utf8.codepoint("٧") == 1639, "\u{0667}", ARABIC-INDIC DIGIT SEVEN + [1640] = utf8.char(1640), -- "٨", utf8.codepoint("٨") == 1640, "\u{0668}", ARABIC-INDIC DIGIT EIGHT + [1641] = utf8.char(1641), -- "٩", utf8.codepoint("٩") == 1641, "\u{0669}", ARABIC-INDIC DIGIT NINE + [1780] = utf8.char(1780), -- "۴", utf8.codepoint("۴") == 1780, "\u{06F4}", EXTENDED ARABIC-INDIC DIGIT FOUR + [1781] = utf8.char(1781), -- "۵", utf8.codepoint("۵") == 1781, "\u{06F5}", EXTENDED ARABIC-INDIC DIGIT FIVE + [1782] = utf8.char(1782), -- "۶", utf8.codepoint("۶") == 1782, "\u{06F6}", EXTENDED ARABIC-INDIC DIGIT SIX +} + +local peCharTablePunctuation = { + [1548] = utf8.char(1548), -- "،", utf8.codepoint("،") == 1548, "\u{060C}", ARABIC COMMA + [1549] = utf8.char(1549), -- "؍", utf8.codepoint("؍") == 1549, "\u{060D}", ARABIC DATE SEPARATOR + [1563] = utf8.char(1563), -- "؛", utf8.codepoint("؛") == 1563, "\u{061B}", ARABIC SEMICOLON + [1567] = utf8.char(1567), -- "؟", utf8.codepoint("؟") == 1567, "\u{061F}", ARABIC QUESTION MARK + [1642] = utf8.char(1642), -- "٪", utf8.codepoint("٪") == 1642, "\u{066A}", ARABIC PERCENT SIGN + [1643] = utf8.char(1643), -- "٫", utf8.codepoint("٫") == 1643, "\u{066B}", ARABIC DECIMAL SEPARATOR + [1644] = utf8.char(1644), -- "٬", utf8.codepoint("٬") == 1644, "\u{066C}", ARABIC THOUSANDS SEPARATOR + [1645] = utf8.char(1645), -- "٭", utf8.codepoint("٭") == 1645, "\u{066D}", ARABIC FIVE POINTED STAR +} + +local peCharTable = { + [1569] = utf8.char(1569), -- "ء", utf8.codepoint("ء") == 1569, "\u{0621}", ARABIC LETTER ALEF HAMZA + [1570] = utf8.char(1570), -- "آ", utf8.codepoint("آ") == 1570, "\u{0622}", ARABIC LETTER ALEF WITH MADDA ABOVE + [1571] = utf8.char(1571), -- "أ", utf8.codepoint("أ") == 1571, "\u{0623}", ARABIC LETTER ALEF WITH HAMZA ABOVE + [1572] = utf8.char(1572), -- "ؤ", utf8.codepoint("ؤ") == 1572, "\u{0624}", ARABIC LETTER WAW WITH HAMZA ABOVE + [1573] = utf8.char(1573), -- "إ", utf8.codepoint("إ") == 1573, "\u{0625}", ARABIC LETTER ALEF WITH HAMZA BELOW + [1574] = utf8.char(1574), -- "ئ", utf8.codepoint("ئ") == 1574, "\u{0626}", ARABIC LETTER YEH WITH HAMZA ABOVE + [1575] = utf8.char(1575), -- "ا", utf8.codepoint("ا") == 1575, "\u{0627}", ARABIC LETTER ALEF + [1576] = utf8.char(1576), -- "ب", utf8.codepoint("ب") == 1576, "\u{0628}", ARABIC LETTER BEH + [1577] = utf8.char(1577), -- "ة", utf8.codepoint("ة") == 1577, "\u{0629}", ARABIC LETTER TEH MARBUTA + [1578] = utf8.char(1578), -- "ت", utf8.codepoint("ت") == 1578, "\u{062A}", ARABIC LETTER TEH + [1579] = utf8.char(1579), -- "ث", utf8.codepoint("ث") == 1579, "\u{062B}", ARABIC LETTER THEH + [1580] = utf8.char(1580), -- "ج", utf8.codepoint("ج") == 1580, "\u{062C}", ARABIC LETTER JEEM + [1581] = utf8.char(1581), -- "ح", utf8.codepoint("ح") == 1581, "\u{062D}", ARABIC LETTER HAH + [1582] = utf8.char(1582), -- "خ", utf8.codepoint("خ") == 1582, "\u{062E}", ARABIC LETTER KHAH + [1583] = utf8.char(1583), -- "د", utf8.codepoint("د") == 1583, "\u{062F}", ARABIC LETTER DAL + [1584] = utf8.char(1584), -- "ذ", utf8.codepoint("ذ") == 1584, "\u{0630}", ARABIC LETTER THAL + [1585] = utf8.char(1585), -- "ر", utf8.codepoint("ر") == 1585, "\u{0631}", ARABIC LETTER REH + [1586] = utf8.char(1586), -- "ز", utf8.codepoint("ز") == 1586, "\u{0632}", ARABIC LETTER ZAIN + [1587] = utf8.char(1587), -- "س", utf8.codepoint("س") == 1587, "\u{0633}", ARABIC LETTER SEEN + [1588] = utf8.char(1588), -- "ش", utf8.codepoint("ش") == 1588, "\u{0634}", ARABIC LETTER SHEEN + [1589] = utf8.char(1589), -- "ص", utf8.codepoint("ص") == 1589, "\u{0635}", ARABIC LETTER SAD + [1590] = utf8.char(1590), -- "ض", utf8.codepoint("ض") == 1590, "\u{0636}", ARABIC LETTER DAD + [1591] = utf8.char(1591), -- "ط", utf8.codepoint("ط") == 1591, "\u{0637}", ARABIC LETTER TAH + [1592] = utf8.char(1592), -- "ظ", utf8.codepoint("ظ") == 1592, "\u{0638}", ARABIC LETTER ZAH + [1593] = utf8.char(1593), -- "ع", utf8.codepoint("ع") == 1593, "\u{0639}", ARABIC LETTER AIN + [1594] = utf8.char(1594), -- "غ", utf8.codepoint("غ") == 1594, "\u{063A}", ARABIC LETTER GHAIN + [1601] = utf8.char(1601), -- "ف", utf8.codepoint("ف") == 1601, "\u{0641}", ARABIC LETTER FEH + [1602] = utf8.char(1602), -- "ق", utf8.codepoint("ق") == 1602, "\u{0642}", ARABIC LETTER QAF + [1603] = utf8.char(1603), -- "ك", utf8.codepoint("ك") == 1603, "\u{0643}", ARABIC LETTER KAF + [1604] = utf8.char(1604), -- "ل", utf8.codepoint("ل") == 1604, "\u{0644}", ARABIC LETTER LAM + [1605] = utf8.char(1605), -- "م", utf8.codepoint("م") == 1605, "\u{0645}", ARABIC LETTER MEEM + [1606] = utf8.char(1606), -- "ن", utf8.codepoint("ن") == 1606, "\u{0646}", ARABIC LETTER NOON + [1607] = utf8.char(1607), -- "ه", utf8.codepoint("ه") == 1607, "\u{0647}", ARABIC LETTER HEH + [1608] = utf8.char(1608), -- "و", utf8.codepoint("و") == 1608, "\u{0648}", ARABIC LETTER WAW + [1609] = utf8.char(1609), -- "ى", utf8.codepoint("ى") == 1609, "\u{0649}", ARABIC LETTER ALEF MAKSURA + [1610] = utf8.char(1610), -- "ي", utf8.codepoint("ي") == 1610, "\u{064A}", ARABIC LETTER YEH + [1662] = utf8.char(1662), -- "پ", utf8.codepoint("پ") == 1662, "\u{067E}", ARABIC LETTER PEH + [1670] = utf8.char(1670), -- "چ", utf8.codepoint("چ") == 1670, "\u{0686}", ARABIC LETTER TCHEH + [1688] = utf8.char(1688), -- "ژ", utf8.codepoint("ژ") == 1688, "\u{0698}", ARABIC LETTER JEH + [1705] = utf8.char(1705), -- "ک", utf8.codepoint("ک") == 1705, "\u{06A9}", ARABIC LETTER KEHEH + [1706] = utf8.char(1706), -- "ڪ", utf8.codepoint("ڪ") == 1706, "\u{06AA}", ARABIC LETTER SWASH KAF + [1711] = utf8.char(1711), -- "گ", utf8.codepoint("گ") == 1711, "\u{06AF}", ARABIC LETTER GAF + [1726] = utf8.char(1726), -- "ھ", utf8.codepoint("ھ") == 1726, "\u{06BE}", ARABIC LETTER HEH DOACHASHMEE + [1728] = utf8.char(1728), -- "ۀ", utf8.codepoint("ۀ") == 1728, "\u{06C0}", ARABIC LETTER HEH WITH YEH ABOVE + [1740] = utf8.char(1740), -- "ی", utf8.codepoint("ی") == 1740, "\u{06CC}", ARABIC LETTER FARSI YEH + [1749] = utf8.char(1749), -- "ە", utf8.codepoint("ە") == 1740, "\u{06D5}", ARABIC LETTER AE + [65275] = utf8.char(65275), -- "ﻻ", utf8.codepoint("ﻻ") == 65275, "\u{FEFB}", ARABIC LIGATURE LAM WITH ALEF ISOLATED FORM + [65276] = utf8.char(65276), -- "ﻼ", utf8.codepoint("ﻼ") == 65276, "\u{FEFC}", ARABIC LIGATURE LAM WITH ALEF FINAL FORM +} + local peCharTableInitial = { [64344] = utf8.char(64344), -- "ﭘ", utf8.codepoint("ﭘ") == 64344, "\u{FB58}", INITIAL FORM PEH [64380] = utf8.char(64380), -- "ﭼ", utf8.codepoint("ﭼ") == 64380, "\u{FB7C}", INITIAL FORM TCHEH @@ -1042,7 +1156,7 @@ return peCharTableInitial, peCharTableMedial, peCharTableFinal -- -- texnegar.dtx (with options: `texnegar-lua') -- --- Copyright (C) 2020 Hossein Movahhedian +-- Copyright (C) 2020-2021 Hossein Movahhedian -- -- It may be distributed and/or modified under the LaTeX Project Public License, -- version 1.3c or higher (your choice). The latest version of @@ -1052,8 +1166,8 @@ return peCharTableInitial, peCharTableMedial, peCharTableFinal -- local texnegar = texnegar -- texnegar.module = { -- name = "texnegar", --- version = "0.1b", --- date = "2020-08-30", +-- version = "0.1c", +-- date = "2021-01-27", -- description = "Full implementation of kashida feature in XeLaTex and LuaLaTeX", -- author = "Hossein Movahhedian", -- copyright = "Hossein Movahhedian", @@ -1066,7 +1180,112 @@ return peCharTableInitial, peCharTableMedial, peCharTableFinal -- texnegar.warning = warn or (function (s) luatexbase.module_warning("texnegar", s) end) -- texnegar.error = err or (function (s) luatexbase.module_error("texnegar", s) end) +local debug_getinfo = debug.getinfo +local string_format = string.format + +function TableLength(t) + local i = 0 + for _ in pairs(t) do + i = i + 1 + end + return i +end + tex.enableprimitives('',tex.extraprimitives ()) + +local range_tble = { + [1536] = 1791, + [1872] = 1919, + [2208] = 2274, + [8204] = 8297, + [64336] = 65023, + [65136] = 65279, + [126464] = 126719, + [983040] = 1048575 + } + +local tbl_fonts_used = { } +local tbl_fonts_chars = { } +local tbl_fonts_chars_init = { } +local tbl_fonts_chars_medi = { } +local tbl_fonts_chars_fina = { } + +local pattern_list = { + ".*%.(ini)t?$", ".*%.(ini)t?%..*", + ".*%.(med)i?$", ".*%.(med)i?%..*", + ".*%.(fin)a?$", ".*%.(fin)a?%..*", + + ".*_(ini)t?$", ".*_(ini)t?_.*", + ".*_(med)i?$", ".*_(med)i?_.*", + ".*_(fin)a?$", ".*_(fin)a?_.*", + + ".*_(AltIni)t?[0-9]?$", ".*_(AltIni)t?[0-9]?_.*", + ".*_(AltMed)i?[0-9]?$", ".*_(AltMed)i?[0-9]?_.*", + ".*_(AltFin)a?[0-9]?$", ".*_(AltFin)a?[0-9]?_.*", +} + +function GetFontsChars() + local funcName = debug_getinfo(1).name + local funcNparams = debug_getinfo(1).nparams + + for f_num = 1, font.max() do + local f_tmp = font.fonts[f_num] + if f_tmp then + local f_tmp_fontname = f_tmp.fontname + if f_tmp_fontname then + local f_id_tmp = font.getfont(f_num) + local f_fontname_tmp = f_id_tmp.fontname + local f_filename_tmp = f_id_tmp.filename + if not tbl_fonts_used[f_fontname_tmp] then + tbl_fonts_used[f_fontname_tmp] = {f_filename_tmp, f_id_tmp} + end + end + end + end + + for f_fontname, v in pairs(tbl_fonts_used) do + f_filename = v[1] + f_id = v[2] + if not tbl_fonts_chars[f_fontname] then + tbl_fonts_chars[f_fontname] = { } + tbl_fonts_chars_init[f_fontname] = { } + tbl_fonts_chars_medi[f_fontname] = { } + tbl_fonts_chars_fina[f_fontname] = { } + local f = fontloader.open(f_filename) + local char_name + local char_unicode + local char_class + for k, v in pairs(range_tble) do + for glyph_idx = k, v do + if f_id.characters[glyph_idx] then + char_name = f.glyphs[f_id.characters[glyph_idx].index].name + char_unicode = f.glyphs[f_id.characters[glyph_idx].index].unicode + char_class = f.glyphs[f_id.characters[glyph_idx].index].class + if not tbl_fonts_chars[f_fontname][glyph_idx] then + if string.match(f_fontname, "^(Amiri).*") == "Amiri" and char_name == 'uni0640.long1' then + current_kashida_unicode = glyph_idx + end + tbl_fonts_chars[f_fontname][glyph_idx] = {char_name, char_unicode, char_class} + for _, pattern in ipairs( pattern_list ) do + local pos_alt = string.match(char_name, pattern) + if pos_alt == 'ini' or pos_alt == 'AltIni' then + tbl_fonts_chars_init[f_fontname][glyph_idx] = {char_name, char_unicode, char_class} + elseif pos_alt == 'med' or pos_alt == 'AltMed' then + tbl_fonts_chars_medi[f_fontname][glyph_idx] = {char_name, char_unicode, char_class} + elseif pos_alt == 'fin' or pos_alt == 'AltFin' then + tbl_fonts_chars_fina[f_fontname][glyph_idx] = {char_name, char_unicode, char_class} + end + end + end + end + end + end + fontloader.close(f) + end + end + return tbl_fonts_used, tbl_fonts_chars, tbl_fonts_chars_init, tbl_fonts_chars_medi, tbl_fonts_chars_fina +end + dofile(kpse.find_file("texnegar-ini.lua")) -- -- @@ -1086,7 +1305,7 @@ dofile(kpse.find_file("texnegar-ini.lua")) -- -- texnegar.dtx (with options: `texnegar-ini-lua') -- --- Copyright (C) 2020 Hossein Movahhedian +-- Copyright (C) 2020-2021 Hossein Movahhedian -- -- It may be distributed and/or modified under the LaTeX Project Public License, -- version 1.3c or higher (your choice). The latest version of @@ -1096,8 +1315,8 @@ dofile(kpse.find_file("texnegar-ini.lua")) -- local texnegar_ini = texnegar_ini -- texnegar_ini.module = { -- name = "texnegar_ini", --- version = "0.1b", --- date = "2020-08-30", +-- version = "0.1c", +-- date = "2021-01-27", -- description = "Full implementation of kashida feature in XeLaTex and LuaLaTeX", -- author = "Hossein Movahhedian", -- copyright = "Hossein Movahhedian", @@ -1121,7 +1340,7 @@ if l_texnegar_color_bool.mode == c_true_bool.mode then end end -dofile(kpse.find_file("texnegar-luatex-kashida.lua")) -- leaders + resized glyph U+0640 +dofile(kpse.find_file("texnegar-luatex-kashida.lua")) -- -- -- End of file `texnegar-ini.lua'. @@ -1140,7 +1359,7 @@ dofile(kpse.find_file("texnegar-luatex-kashida.lua")) -- leaders + resized gly -- -- texnegar.dtx (with options: `texnegar-luatex-kashida-lua') -- --- Copyright (C) 2020 Hossein Movahhedian +-- Copyright (C) 2020-2021 Hossein Movahhedian -- -- It may be distributed and/or modified under the LaTeX Project Public License, -- version 1.3c or higher (your choice). The latest version of @@ -1150,8 +1369,8 @@ dofile(kpse.find_file("texnegar-luatex-kashida.lua")) -- leaders + resized gly -- local texnegar_luatex_kashida = texnegar_luatex_kashida -- texnegar_luatex_kashida.module = { -- name = "texnegar_luatex_kashida", --- version = "0.1b", --- date = "2020-08-30", +-- version = "0.1c", +-- date = "2021-01-27", -- description = "Full implementation of kashida feature in XeLaTex and LuaLaTeX", -- author = "Hossein Movahhedian", -- copyright = "Hossein Movahhedian", @@ -1306,7 +1525,7 @@ function ProcessTableKashidaHlist(ksh_hlistNode, hbox_num, in_font) local ksh_unicode ksh_unicode = font.getfont(in_font).resources.unicodes['kashida'] if hbox_num == 'l_texnegar_k_box' then - tp.char = kashida_unicode + tp.char = current_kashida_unicode or kashida_unicode elseif hbox_num == 'l_texnegar_ksh_box' then tp.char = ksh_unicode tn_width = tn.width @@ -1402,7 +1621,11 @@ function StretchGlyph(t_plb_node, t_plb_glyph_node, t_gluePerJoiner, t_dir, t_fi kashida_node.subtype = kashida_subtype kashida_node.font = font_current - kashida_node.char = kashida_unicode + if string.match(font_name, "^(Amiri).*") == "Amiri" then + kashida_node.char = current_kashida_unicode + else + kashida_node.char = kashida_unicode + end kashida_node.lang = tex.language kashida_width = kashida_node.width @@ -1443,6 +1666,12 @@ function StretchGlyph(t_plb_node, t_plb_glyph_node, t_gluePerJoiner, t_dir, t_fi if tn_id == 12 and tn_subtype == 100 then local t_hbox = node.new(HLIST) local t_hrule = node.copy(tn) + + if string.match(font_name, "^(Amiri).*") == "Amiri" then + t_hrule.leader.height = kashida_height + t_hrule.leader.depth = kashida_depth + end + t_hbox.head = node.insert_after(t_hbox.list, t_hbox.head,t_hrule) t_plb_node.head = node.insert_after(t_plb_node.list, tn, t_hbox) @@ -1608,6 +1837,39 @@ function PostLineBreakFilter(hboxes_stack, groupcode) local funcName = debug_getinfo(1).name local funcNparams = debug_getinfo(1).nparams + funcName = "PostLineBreakFilter" + + local tbl_fonts_used = { } + local tbl_fonts_chars = { } + local tbl_fonts_chars_init = { } + local tbl_fonts_chars_medi = { } + local tbl_fonts_chars_fina = { } + tbl_fonts_used, tbl_fonts_chars, tbl_fonts_chars_init, tbl_fonts_chars_medi, tbl_fonts_chars_fina = GetFontsChars() + + for k1, v1 in pairs(tbl_fonts_chars_init) do + for k2, v2 in pairs(tbl_fonts_chars_init[k1]) do + if k2 and not peCharTableInitial[k2] then + peCharTableInitial[k2] = utf8.char(k2) + end + end + end + + for k1, v1 in pairs(tbl_fonts_chars_medi) do + for k2, v2 in pairs(tbl_fonts_chars_medi[k1]) do + if k2 and not peCharTableMedial[k2] then + peCharTableMedial[k2] = utf8.char(k2) + end + end + end + + for k1, v1 in pairs(tbl_fonts_chars_fina) do + for k2, v2 in pairs(tbl_fonts_chars_fina[k1]) do + if k2 and not peCharTableFinal[k2] then + peCharTableFinal[k2] = utf8.char(k2) + end + end + end + tbl_hlist_nodes = {} tbl_vlist_nodes = {} for hlistNode in node.traverse(hboxes_stack) do @@ -1673,21 +1935,26 @@ end % question-and-answer (Q\&A) websites to solve problems for which I am grateful. % I also would like to thank the developer teams of TeX's friends especially LaTeX, LuaTeX and XeTeX teams. % -% \def\HistoryItem#1#2{\subsection*{[#1]} \addcontentsline{toc}{subsection}{[#1]} \item #2} -% % \section{Change History} -% -% \begin{itemize} -% \let\tmpitemindent\itemindent -% \addtolength{\itemindent}{\leftmargin} -% \setlength{\parskip}{0pt} -% \setlength{\itemsep}{0pt} -% -% \HistoryItem{2020-08-29~v0.1a}{First standalone version.} -% -% \HistoryItem{2020-08-30~v0.1b}{Changed some file names.} -% -% \end{itemize} +% +% \def\SubSecItem#1{\subsubsection*{\hskip 2em\large #1}\addcontentsline{toc}{subsection}{[#1]}} +% \newenvironment{Itemize}{\begin{itemize}[leftmargin=4em]}{\end{itemize}} +% +% \SubSecItem{2020-08-29~v0.1a} +% \begin{Itemize} +% \item First standalone version. +% \end{Itemize} +% +% \SubSecItem{2020-08-30~v0.1b} +% \begin{Itemize} +% \item Changed some file names. +% \end{Itemize} +% +% \SubSecItem{2021-01-27~v0.1c} +% \begin{Itemize} +% \item Added the option \texttt{Minimal} which is needed if texnegar is used for kashida implementaion only. +% \item Fixed the problem with \texttt{Scheherazade} and \texttt{Amiri} fonts. +% \end{Itemize} % % \section*{To Do's} % diff --git a/macros/unicodetex/latex/texnegar/texnegar.pdf b/macros/unicodetex/latex/texnegar/texnegar.pdf index 521dfdcfc0..834f5bee65 100644 Binary files a/macros/unicodetex/latex/texnegar/texnegar.pdf and b/macros/unicodetex/latex/texnegar/texnegar.pdf differ diff --git a/macros/unicodetex/latex/texnegar/xepersian-XB.pdf b/macros/unicodetex/latex/texnegar/xepersian-XB.pdf index b0cb0b76f3..6858bae735 100644 Binary files a/macros/unicodetex/latex/texnegar/xepersian-XB.pdf and b/macros/unicodetex/latex/texnegar/xepersian-XB.pdf differ diff --git a/macros/unicodetex/latex/texnegar/xepersian-XB.tex b/macros/unicodetex/latex/texnegar/xepersian-XB.tex index 10103a51b0..ac82d0f9e8 100644 --- a/macros/unicodetex/latex/texnegar/xepersian-XB.tex +++ b/macros/unicodetex/latex/texnegar/xepersian-XB.tex @@ -47,7 +47,6 @@ \vspace{20pt}\makebox{\textsf{File:} \texttt{TEXMFDIST/doc/latex/texnegar/xepersian-XB.tex}} \\ \vspace{20pt} - {\Large \begin{tabular}{ll} \textsf{Font:} & \textsf{XB Kayhan} \\ -- cgit v1.2.3