summaryrefslogtreecommitdiff
path: root/macros/xetex/latex/xepersian/xepersian.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/xetex/latex/xepersian/xepersian.dtx')
-rw-r--r--macros/xetex/latex/xepersian/xepersian.dtx155
1 files changed, 91 insertions, 64 deletions
diff --git a/macros/xetex/latex/xepersian/xepersian.dtx b/macros/xetex/latex/xepersian/xepersian.dtx
index a20a99cb37..89e3c8ff4b 100644
--- a/macros/xetex/latex/xepersian/xepersian.dtx
+++ b/macros/xetex/latex/xepersian/xepersian.dtx
@@ -5,7 +5,7 @@
%<*readme>
____________________
The XePersian package
-v22.8
+v22.9
The xepersian package provides a convenient interface for
typesetting Persian and English texts in LaTeX, using XeTeX
@@ -16,18 +16,16 @@ documentation, or ask for any new features, or suggest any
improvements, or ask any questions about the package, then
please use the issue tracker:
- <https://github.com/bidi-tex/xepersian/issues>
+ <https://github.com/persiantex/xepersian/issues>
In doing so, please always explain your issue well enough, and always
include a minimal working example showing the issue.
-Current version release date: 2020-01-31
-______________
-
-Copyright (c) Vafa Khalighi 2007-2019
- bidi-tex GitHub Organisation 2018-2020
-
+Current version release date: 2020/05/14
+___________________________________________
+Copyright (c) Vafa Khalighi 2008--2020
+Copyright (c) bidi-tex GitHub Organization 2018--2020
Distributed under the LaTeX Project Public License
It may be distributed and/or modified under the LaTeX Project Public License,
@@ -35,7 +33,7 @@ version 1.3c or higher (your choice). The latest version of
this license is at: http://www.latex-project.org/lppl.txt
This work is “author-maintained” (as per LPPL maintenance status)
-by bidi-tex GitHub Organisation.
+by Vafa Khalighi.
%</readme>
%<*internal>
\fi
@@ -48,18 +46,15 @@ by bidi-tex GitHub Organisation.
\preamble
__________________________________________________
-
- Copyright (c) Vafa Khalighi 2007-2019
- bidi-tex GitHub Organisation 2018-2020
-
-
+ Copyright (c) 2008--2020 Vafa Khalighi
+ Copyright (c) 2018--2020 bidi-tex GitHub Organization
It may be distributed and/or modified under the LaTeX Project Public License,
version 1.3c or higher (your choice). The latest version of
this license is at: http://www.latex-project.org/lppl.txt
This work is “author-maintained” (as per LPPL maintenance status)
- by bidi-tex GitHub Organisation.
+ by Vafa Khalighi.
\endpreamble
@@ -94,7 +89,7 @@ by bidi-tex GitHub Organisation.
\generate{\file{extrafootnotefeatures-xepersian.def}{\from{\jobname.dtx}{table,extrafootnotefeatures-xepersian.def}}}
\generate{\file{extreport-xepersian.def}{\from{\jobname.dtx}{table,extreport-xepersian.def}}}
\generate{\file{fancyref-xepersian.def}{\from{\jobname.dtx}{table,fancyref-xepersian.def}}}
-%\generate{\file{fontspec-xepersian.def}{\from{\jobname.dtx}{table,fontspec-xepersian.def}}}
+\generate{\file{fontspec-xepersian.def}{\from{\jobname.dtx}{table,fontspec-xepersian.def}}}
\generate{\file{footnote-xepersian.def}{\from{\jobname.dtx}{table,footnote-xepersian.def}}}
\generate{\file{framed-xepersian.def}{\from{\jobname.dtx}{table,framed-xepersian.def}}}
\generate{\file{glossaries-xepersian.def}{\from{\jobname.dtx}{table,glossaries-xepersian.def}}}
@@ -149,13 +144,16 @@ by bidi-tex GitHub Organisation.
\generate{\file{test-solution-form.tex}{\from{\jobname.dtx}{test-solution-form.tex}}}
\generate{\file{xepersian-logo.tex}{\from{\jobname.dtx}{xepersian-logo.tex}}}
\endgroup
+\immediate\write18{mv README.txt README}
+\immediate\write18{makeindex -s gind.ist -o \jobname.ind \jobname.idx}
+\immediate\write18{makeindex -s gglo.ist -o \jobname.gls \jobname.glo}
%</internal>
%
%<*driver>
\documentclass{ltxdoc}
\input{xepersian-doc-preamble.ltx}
\hypersetup{%
- pdftitle={Source documentation for version 22.8 of the XePersian
+ pdftitle={Source documentation for version 22.9 of the XePersian
package}%
}
\EnableCrossrefs
@@ -174,8 +172,8 @@ by bidi-tex GitHub Organisation.
% \GetFileInfo{\jobname.dtx}
% \title{\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}\\
%\LARGE Persian for \LaTeXe, using {\XeTeX} engine\\[5pt]
-%\large Source documentation for \textcolor{blue!65!black}{version 22.8}}
-% \author{Vafa Khalighi\thanks{Maintained by bidi-tex \url{https://github.com/bidi-tex}}}
+%\large Source documentation for \textcolor{blue!65!black}{version 22.9}}
+% \author{Vafa Khalighi\thanks{Thanks to the bidi-tex GitHub organization consisted of David Carlisle and other members of the {\LaTeX} team to maintain the package in the period 2018--2020.}}
%\setcounter{page}{0}
%\thispagestyle{empty}
%\includegraphics[width=.3\textwidth]{xepersian-logo}\qquad
@@ -184,7 +182,7 @@ by bidi-tex GitHub Organisation.
%\textcolor{blue!65!black}{\Huge The \textsf{\XePersian} \textit{Package}}
%
%\Large
-%Source documentation for \textcolor{blue!65!black}{version 22.8}}
+%Source documentation for \textcolor{blue!65!black}{version 22.9}}
%
%\vskip 0pt plus 3fill
%\textit{\large to my Master, \textbf{Ferdowsi The Great}}
@@ -195,7 +193,7 @@ by bidi-tex GitHub Organisation.
%or ask for any new features, or suggest any improvements, or ask any questions about the package, then please use the issue tracker:
%
%\medskip
-% \centerline{\url{https://github.com/bidi-tex/xepersian/issues}}
+% \centerline{\url{https://github.com/persiantex/xepersian/issues}}
%
%\medskip
%In doing so, please always explain your issue well enough, and always include
@@ -205,8 +203,9 @@ by bidi-tex GitHub Organisation.
%
%\vskip 0pt plus 3fill
%
-%Copyright (c) 2008-2019 Vafa Khalighi
-% 2018-2020 bidi-tex GitHub Organisation
+%Copyright (c) 2008--2020 Vafa Khalighi
+%
+%Copyright (c) 2018--2020 bidi-tex GitHub Organization
%
%\medskip
%Permission is granted to distribute and/or modify \emph{both the documentation and the code} under the conditions of the \LaTeX{} Project Public License, either version 1.3c of this license or (at your option) any later version.
@@ -219,6 +218,23 @@ by bidi-tex GitHub Organisation.
%\iffalse
%<*table>
%\fi
+%% \CheckSum{10968}
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%%
% \iffalse
%</table>
%<*algorithmic-xepersian.def>
@@ -1888,7 +1904,7 @@ by bidi-tex GitHub Organisation.
%\fi
% \section{File \texttt{fontspec-xepersian.def}}
% \begin{macrocode}
-\ProvidesFile{fontspec-xepersian.def}[2020-01-31 v0.4 fontspec changes]
+\ProvidesFile{fontspec-xepersian.def}[2019/05/01 v0.4 fontspec changes]
\ExplSyntaxOn
\cs_new:Npn \__xepersian_error:nx { \msg_error:nnx {xepersian} }
\char_set_catcode_space:n {32}
@@ -1917,7 +1933,7 @@ by bidi-tex GitHub Organisation.
{
\__fontspec_primitive_font_set:NnnF \l__fontspec_test_font
- { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} }
+ { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } { \l__fontspec_pre_feat_sclist } }
{ \f@size pt - 2sp }
{ \__fontspec_error:nx {font-not-found} {\l__fontspec_fontname_up_tl} }
\__xepersian_font_if_cannot_be_loaded:NnT \l__fontspec_fontname_up_tl { HM }
@@ -1927,8 +1943,8 @@ by bidi-tex GitHub Organisation.
}
\__fontspec_set_font_type:N \l__fontspec_test_font
\__fontspec_primitive_font_gset:Onn \l__fontspec_fontface_cs_tl
- { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } {} }
- { \f@size pt }
+ { \__fontspec_construct_font_call:nn { \l__fontspec_fontname_up_tl } { \l__fontspec_pre_feat_sclist } }
+ { \f@size pt + 2sp }
\l__fontspec_fontface_cs_tl % this is necessary for LuaLaTeX to check the scripts properly
@@ -1941,7 +1957,7 @@ by bidi-tex GitHub Organisation.
{ \clist_clear:N \l__fontspec_fontopts_clist }
\keys_set_groups:nnV {fontspec/fontname} {getfontname} \l__fontspec_fontopts_clist
\__fontspec_primitive_font_set:OnnF \l__fontspec_fontface_cs_tl
- { \__fontspec_construct_font_call:nn {#1} {} } { \f@size pt }
+ { \__fontspec_construct_font_call:nn {#1} { \l__fontspec_pre_feat_sclist } } { \f@size pt + 2sp }
{ \__fontspec_error:nx {font-not-found} {#2} }
\__xepersian_font_if_cannot_be_loaded:NnT #2 { HM }
{
@@ -2070,7 +2086,24 @@ by bidi-tex GitHub Organisation.
%\fi
% \section{File \texttt{kashida-xepersian.def}}
% \begin{macrocode}
-\ProvidesFile{kashida-xepersian.def}[2018/01/04 v0.6 implementation of Kashida for xepersian package]
+\ProvidesFile{kashida-xepersian.def}[2020/05/14 v0.7 implementation of Kashida for xepersian package]
+%
+% The new changes is minimal and only cosmetic; To resolve the
+% issue properly, I will be studying TeX line breaking algorithms and
+% experiment to see how much of it I can mimic. The idea of using
+% a rule or even a box is awful and it breaks a lot of things. The ideal
+% solution is to insert Kashida without any rules or boxes or if
+% the font offers the alternative forms, it can be used for Kashida.
+% Unfortunately, computing the stretch using the \pdfsavepos and
+% \pdflastxpos primitives from the PDFTeX engine is bad and
+% impractical for several reasons.The process is extremely
+% slow and requires at least two runs of TeX. On a particular line,
+% we need to write to the aux file at least 10 times, on a page we
+% have on average around 10 lines and hence, for a 100 pages
+% document, we have to do this 10,000 times. These statistics are
+% very modest. On the other hand, if we reach max count (which is
+% very likely), then we have to do some devious things.
+%
\chardef\xepersian@zwj="200D % zero-width joiner
\chardef\xepersian@kashidachar="0640 % kashida
@@ -2078,12 +2111,16 @@ by bidi-tex GitHub Organisation.
\chardef\xepersian@L=11 % lam
\chardef\xepersian@R=12 % right-joiner
\chardef\xepersian@A=13 % alef
-\chardef\xepersian@H=14 % heh
\chardef\xepersian@V=4096 % vowel or other combining mark (to be ignored)
\newif\if@Kashida@on
-\newif\if@Kashida@XB@fix
\def\xepersian@kashida{\if@Kashida@on\xepersian@zwj\nobreak%
- \leaders\hrule height \XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@kashidachar depth \XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@kashidachar \hskip0pt plus 0.5em \xepersian@zwj\fi}
+ \leaders\hrule height \XeTeXglyphbounds\tw@ \the\XeTeXcharglyph\xepersian@kashidachar depth \XeTeXglyphbounds\f@ur \the\XeTeXcharglyph\xepersian@kashidachar \hskip0pt plus
+ \dimexpr \fontcharwd\font\xepersian@kashidachar -
+ \XeTeXglyphbounds\@ne
+ \the\XeTeXcharglyph\xepersian@kashidachar -
+ \XeTeXglyphbounds\thr@@
+ \the\XeTeXcharglyph\xepersian@kashidachar \relax
+\xepersian@zwj\fi}
\def\setclass#1#2{\def\theclass{#1}\def\charlist{#2}%
\expandafter\dosetclass\charlist,\end}
@@ -2099,33 +2136,23 @@ by bidi-tex GitHub Organisation.
\setclass \xepersian@R {0624,0629,062F,0630,0631,0632,0648,0698}
\setclass \xepersian@D {0626,0628,062A,062B,062C,062D,062E}
\setclass \xepersian@D {0633,0634,0635,0636,0637,0638,0639,063A}
-%\setclass \xepersian@D {0640,0641,0642,0643,0645,0646,0647,0649,064A}
-\setclass \xepersian@D {0640,0641,0642,0643,0645,0646,0649,064A}
-\setclass \xepersian@H {0647}
+\setclass \xepersian@D {0640,0641,0642,0643,0645,0646,0647,0649,064A}
\setclass \xepersian@D {067E,0686,06A9,06AF,06CC}
\setclass \xepersian@L {0644}
\setclass \xepersian@V {064B,064C,064D,064E,064F,0650,0651,0652}
\XeTeXinterchartoks \xepersian@D \xepersian@D = {\xepersian@kashida}
-\XeTeXinterchartoks \xepersian@H \xepersian@D = {\if@Kashida@XB@fix\else\xepersian@kashida\fi}
-\XeTeXinterchartoks \xepersian@D \xepersian@H = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@L \xepersian@D = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@D \xepersian@L = {\xepersian@kashida}
-\XeTeXinterchartoks \xepersian@L \xepersian@H = {\xepersian@kashida}
-\XeTeXinterchartoks \xepersian@H \xepersian@L = {\if@Kashida@XB@fix\else\xepersian@kashida\fi}
\XeTeXinterchartoks \xepersian@L \xepersian@L = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@D \xepersian@R = {\xepersian@kashida}
-\XeTeXinterchartoks \xepersian@H \xepersian@R = {\if@Kashida@XB@fix\else\xepersian@kashida\fi}
\XeTeXinterchartoks \xepersian@D \xepersian@A = {\xepersian@kashida}
-\XeTeXinterchartoks \xepersian@H \xepersian@A = {\if@Kashida@XB@fix\else\xepersian@kashida\fi}
\XeTeXinterchartoks \xepersian@L \xepersian@R = {\xepersian@kashida}
\XeTeXinterchartoks \xepersian@L \xepersian@A = {}
\newcommand{\KashidaOn}{\@Kashida@ontrue}
\newcommand{\KashidaOff}{\@Kashida@onfalse}
-\newcommand{\KashidaXBFixOn}{\@Kashida@XB@fixtrue}
-\newcommand{\KashidaXBFixOff}{\@Kashida@XB@fixfalse}
\KashidaOn
% \end{macrocode}
% \iffalse
@@ -3450,8 +3477,8 @@ U+003E U+003E <> U+00BB ; >> -> RIGHT POINTING GUILLEMET
% \section{File \texttt{xepersian.sty}}
% \begin{macrocode}
\NeedsTeXFormat{LaTeX2e}
-\def\xepersian@version{22.8}
-\def\xepersiandate{2020-01-31}
+\def\xepersian@version{22.9}
+\def\xepersiandate{2020/05/14}
\ProvidesPackage{xepersian}[\xepersiandate\space v\xepersian@version\space
Persian typesetting in XeLaTeX]
\RequirePackage{fontspec}
@@ -3466,8 +3493,8 @@ Persian typesetting in XeLaTeX]
* typesetting, using fonts provided in the^^J%
* distribution.^^J%
* ^^J%
-* Copyright (c) 2008-2019 Vafa Khalighi^^J%
-* 2018-2020 bidi-tex GitHub Organisation^^J%
+* Copyright (c) 2008--2020 Vafa Khalighi^^J%
+* Copyright (c) 2018--2020 bidi-tex GitHub Organization^^J%
* ^^J%
* v\xepersian@version, \xepersiandate^^J%
* ^^J%
@@ -3476,7 +3503,7 @@ Persian typesetting in XeLaTeX]
* ^^J%
* Location on CTAN: /macros/xetex/latex/xepersian^^J%
* ^^J%
-* Issue tracker: https://github.com/bidi-tex/xepersian/issues^^J%
+* Issue tracker: https://github.com/persiantex/xepersian/issues^^J%
* ^^J%
****************************************************}
\typeout{\@xepersian@info}
@@ -3536,9 +3563,8 @@ Persian typesetting in XeLaTeX]
\keys_define:nn {fontspec-opentype}
{
Ligatures / PersianTeX .code:n = { \tl_set:Nn \l__fontspec_mapping_tl {persian-tex-text} },
- Ligatures / PersianTeX .groups:n = {opentype},
+ Ligatures / PersianTeXOff .code:n = { \tl_clear:N \l__fontspec_mapping_tl },
Ligatures / PersianTeXReset .code:n = { \tl_clear:N \l__fontspec_mapping_tl },
- Ligatures / PersianTeXReset .groups:n = {opentype},
}
\keys_define:nn {fontspec-aat}
@@ -3606,8 +3632,6 @@ Persian typesetting in XeLaTeX]
\XeTeXinterchartoks \bidi@digits@charclass \xepersian@A = {\xepersian@@stop@switch@textdigitfont}
\XeTeXinterchartoks \xepersian@R \bidi@digits@charclass = {\xepersian@@start@switch@textdigitfont}
\XeTeXinterchartoks \bidi@digits@charclass \xepersian@R = {\xepersian@@stop@switch@textdigitfont}
- \XeTeXinterchartoks \xepersian@H \bidi@digits@charclass = {\xepersian@@start@switch@textdigitfont}
- \XeTeXinterchartoks \bidi@digits@charclass \xepersian@H = {\xepersian@@stop@switch@textdigitfont}
}
}
@@ -4284,7 +4308,7 @@ Persian typesetting in XeLaTeX]
\newcommand*{\@xepersian@pdfcustomproperties}{%
This is the xepersian package, Version \xepersian@version,
- Released May 1, 2019.
+ Released May 14, 2020.
}
\newcommand\twocolumnstableofcontents{%
@@ -4743,12 +4767,6 @@ number is 999,999,999.}%
\ifcase\xepersian@tempb\relax
\input{kashida-xepersian.def}
\fi}
-\define@choicekey{xepersian.sty}{KashidaXBFix}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{%
- \ifcase\xepersian@tempb\relax
- \@Kashida@XB@fixtrue
- \or
- \@Kashida@XB@fixfalse
- \fi}
\define@choicekey{xepersian.sty}{localise}[\xepersian@tempa\xepersian@tempb]{on,off}[on]{%
\ifcase\xepersian@tempb\relax
\input{localise-xepersian.def}
@@ -4891,15 +4909,13 @@ number is 999,999,999.}%
\@bidi@perpage@footnotefalse
\fi}
-\ExplSyntaxOn
-\bool_new:N \l__xepersian_fontsloadable_bool
+\newif\if@xepersian@fontsloadable@bool
\define@choicekey{xepersian.sty}{fontsloadable}[\xepersian@tempa\xepersian@tempb]{true,false}[true]{%
\ifcase\xepersian@tempb\relax
- \bool_set_true:N \l__xepersian_fontsloadable_bool
+ \@xepersian@fontsloadable@booltrue
\or
- \bool_set_false:N \l__xepersian_fontsloadable_bool
+ \@xepersian@fontsloadable@boolfalse
\fi}
-\ExplSyntaxOff
\ExecuteOptionsX{%
fontsloadable=false,
@@ -4924,6 +4940,17 @@ number is 999,999,999.}%
\input{extrafootnotefeatures-xepersian.def}%
\fi
+\if@xepersian@fontsloadable@bool
+ \PackageWarningNoLine{xepersian}{%
+ The option `fontsloadable' should only be used in exceptional
+ cases.
+ You are not allowed to use the option `fontsloadable' unless
+ you have a written permission from the primary author of the
+ xepersian package}%
+\else
+ \input{fontspec-xepersian.def}%
+\fi
+
\bidi@patchcmd{\set@fontsize}{\@tempdimb#2pt}{%
\@tempdimb\xepersian@@fontsize@scale\dimexpr#2pt\relax
}{}{}