summaryrefslogtreecommitdiff
path: root/macros/xetex/latex/xepersian-hm/xepersian-hm.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/xetex/latex/xepersian-hm/xepersian-hm.dtx')
-rw-r--r--macros/xetex/latex/xepersian-hm/xepersian-hm.dtx228
1 files changed, 58 insertions, 170 deletions
diff --git a/macros/xetex/latex/xepersian-hm/xepersian-hm.dtx b/macros/xetex/latex/xepersian-hm/xepersian-hm.dtx
index 0d5d19f524..0cf960fe36 100644
--- a/macros/xetex/latex/xepersian-hm/xepersian-hm.dtx
+++ b/macros/xetex/latex/xepersian-hm/xepersian-hm.dtx
@@ -1,28 +1,37 @@
% \iffalse meta-comment
+%
+% This is file `xepersian-hm.dtx'
+%
+% Copyright (C) 2020 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
+% this license is at: http://www.latex-project.org/lppl.txt
+%
%<*internal>
\iffalse
%</internal>
-%<*README>
+%<*README-txt>
The XEPERSIAN-HM package
------------------------
-Kashida feature in `xepersian' has problems with some fonts such as `HM Series'
-fonts available at `https://dma8hm1334.bitbucket.io' and `X Series 2' fonts
-available at `http://wiki.irmug.com/index.php/X_Series_2'. The `xepersian-hm'
-package fixes these problems.
+Kashida feature in 'xepersian' has problems with some fonts such as 'HM Series'
+available at 'https://dma8hm1334.bitbucket.io' and 'X Series 2' available at
+'http://wiki.irmug.com/index.php/X_Series_2'. The 'xepersian-hm' package fixes
+these problems.
-The file `texmf-dist/doc/xelatex/xepersian-hm/kashida-example.tex' can be used as
-a simple example of the usage of the package.
+The files 'kashida-glyph-example.tex' and 'kashida-hrule-example.tex' in
+the directory 'texmf-dist/doc/xelatex/xepersian-hm/' can be used as simple
+examples of the usage of the package.
Please use the Bitbucket issue tracker:
-https://bitbucket.org/dma8hm1334/xepersian-hm/issues
-to report a bug, request a feature or if you have a comment.
+'https://bitbucket.org/dma8hm1334/xepersian-hm/issues' to report a bug, request
+a feature or if you have a comment.
-I will do my best to fix all the bugs you report, but, unfortunately,
-time is a big hurdle to overcome; so, my apologies in advance for those
-which I cannot make time to fix.
-%</README>
+I will do my best to fix all the bugs you report, but, unfortunately, time is a
+big hurdle to overcome; so, my apologies in advance for those which I cannot
+make time to fix.
+%</README-txt>
%<*internal>
\fi
%</internal>
@@ -43,8 +52,10 @@ which I cannot make time to fix.
% \end{macrocode}
% \fi
%
+% \immediate\write18{xelatex xepersian-hm-doc.ltx}
+%
% \title{^^A
-% The \textsf{xepersian-hm} package\\Fixing kashida in xepersian^^A
+% The \textsf{xepersian-hm} package\\Fixing kashida in xepersian\\Source code documentation^^A
% }
%
% \author{^^A
@@ -56,140 +67,16 @@ which I cannot make time to fix.
% }^^A
% }
%
-% \date{Released 2020-04-26 \qquad v0.5b}
+% \date{Released \quad 2020-05-01 \quad v0.5c}
%
% \maketitle
%
-% Kashida feature in \textsf{xepersian} has problems with some fonts such as \texttt{HM Series}
-% fonts available at
-% \href{https://dma8hm1334.bitbucket.io}{\texttt{https://dma8hm1334.bitbucket.io}}
-% and \texttt{X Series 2} fonts available at
-% \href{http://wiki.irmug.com/index.php/X_Series_2}{\texttt{http://wiki.irmug.com/index.php/X\_Series\_2}}.
-% The \textsf{xepersian-hm} package fixes these problems.
-%
-% The file \texttt{texmf-dist/doc/xelatex/xepersian-hm/kashida-example.tex} can be
-% used as a simple example of the usage of the package.
-%
-% Please use the Bitbucket issue tracker:
-% \href{https://bitbucket.org/dma8hm1334/xepersian-hm/issues}{\textsf{https://bitbucket.org/dma8hm1334/xepersian-hm/issues}}
-% to report a bug, request a feature or if you have a comment.
-%
-% I will do my best to fix all the bugs you report, but, unfortunately,
-% time is a big hurdle to overcome; so, my apologies in advance for those
-% which I cannot make time to fix.
-%
-% \section{Package loading and options}
-%
-% Please note that \textsf{xepersian-hm} loads \textsf{xepersian} automatically,
-% so you may only pass options to the package using the command
-% \verb|\PassOptionsToPackage| before \verb|\documentclass|. For example:
-%
-% \begin{verbatim}
-% \PassOptionsToPackage{Kashida=off,RTLdocument=on}{xepersian}
-% \documentclass{report}
-% \usepackage{xcolor}
-% \usepackage[Kashida,kashidastretch=0.14 em plus 0.5 em]{xepersian-hm}
-% \end{verbatim}
-%
-% The options available in \textsf{xepersian-hm} are:
-% \begin{itemize}
-% \item \texttt{Kashida}: \\
-% which implements kashida feature with two possible values:
-% \begin{itemize}
-% \item \texttt{glyph}: \\
-% which uses the \texttt{Kashida} character to stretch the text.
-% With this option 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}
-%
-% Please note that this feature is still experimental and is not regarded as stable.
-% If you are going to use this option be ready for unpredictable results.
-%
-% \item \texttt{hrule}: \\
-% which uses a horizontal rule (\verb|\hrule|) to stretch the text.
-%
-% \end{itemize}
-% For example \texttt{Kashida=glyph} inserts a stretched \texttt{Kashida} glyph where ever it is needed.
-%
-% \item \texttt{linebreakpenalty}: \\
-% which specifies the amount of penalty for preventing bad line-breaking.
-% You may strictly specify the value of this option. For example \texttt{'linebreakpenalty=8'} or you
-% may 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 \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}
-%
-% \section{Commands}
-%
-% \begin{description}
-% \item \verb|\discouragebadlinebreaks[linebreakpenalty][kashidastretch]{|{\it text}\verb|}|:
-%
-% {\it text} may not contain paragraph breaks.
-% This command puts a penalty after each Persian word.
-% The optional arguments \texttt{linebreakpenalty} and \texttt{kashidastretch} locally specify the value of the penalty and the amount
-% of extra stretching for some combinations of characters respectively as discussed previously. For example:
-%
-% \texttt{\bslash discouragebadlinebreaks[9][0.12 em plus 0.5 em]\{\dots\}}
-% \end{description}
-%
% \section{\texttt{xepersian-hm} Implementation}
%
% \subsection{File: \texttt{xepersian-hm.sty}}
%
% \begin{macrocode}
-%<*xepersian-hm>
+%<*xepersian-hm-sty>
\NeedsTeXFormat{LaTeX2e}
\RequirePackage{expl3}[2020-03-06]
\@ifpackagelater{expl3}{2020-03-06}
@@ -209,32 +96,44 @@ which I cannot make time to fix.
\RequirePackage{zref-savepos}[2020-03-03]
\RequirePackage{xepersian}
\ExplSyntaxOn
-\ProvidesExplPackage {xepersian-hm} {2020-04-26} {0.5b} { Fixes~issues~in~xepersian~package }
+\ProvidesExplPackage {xepersian-hm} {2020-05-01} {0.5c} { Fixes~issues~in~xepersian~package }
-\tl_new:N \l_xephm_main_font_full_tl
-\tl_new:N \l_xephm_main_font_name_tl
\int_const:Nn \c_xephm_ksh_int {"0640} % kashida
-\int_new:N \l_xephm_kashida_slot_int
+\int_const:Nn \c_xephm_lrm_int {"200E} % left-right-mark
+\int_const:Nn \c_xephm_zwj_int {"200D} % zero-width joiner
-\tl_new:N \l_xephm_skip_default_tl
+\int_const:Nn \c_xephm_two_int {2} % 2
+\int_const:Nn \c_xephm_four_int {4} % 4
\tl_const:Nn \c_xephm_skip_a_tl { 0 em plus 0.5 em }
-
\tl_const:Nn \c_xephm_skip_b_tl { 0.14 em plus 5.5 em }
-\bool_set_false:N \l_xephm_kashida_hm_fix_bool
-
-\tl_new:N \l_xephm_gap_filler_tl
+\int_new:N \l_xephm_counter_int
-\bool_set_false:N \l_xephm_linebreakpenalty_bool
+\int_new:N \l_xephm_kashida_slot_int
\int_new:N \l_xephm_line_break_penalty_int
+
\int_new:N \l_xephm_min_penalty_int
\int_new:N \l_xephm_low_penalty_int
\int_new:N \l_xephm_med_penalty_int
\int_new:N \l_xephm_high_penalty_int
\int_new:N \l_xephm_max_penalty_int
+\tl_new:N \l_xephm_line_break_tl
+
+\tl_new:N \l_xephm_main_font_full_tl
+\tl_new:N \l_xephm_main_font_name_tl
+
+\tl_new:N \l_xephm_skip_default_tl
+
+\tl_new:N \l_xephm_gap_filler_tl
+
+\dim_new:N \l_xephm_diff_pos_dim
+
+\bool_set_false:N \l_xephm_kashida_hm_fix_bool
+\bool_set_false:N \l_xephm_linebreakpenalty_bool
+
\int_set:Nn \l_xephm_min_penalty_int { 0 }
\int_set:Nn \l_xephm_low_penalty_int { 8 }
\int_set:Nn \l_xephm_med_penalty_int { 15 }
@@ -281,6 +180,11 @@ which I cannot make time to fix.
Sorry,~ kashida~ character~ is~ not~ available~ in~ the~ main~ font~!
}
+\msg_new:nnx { xepersian-hm } { value-not-available-for-kashida-option }
+ {
+ Sorry,~ value~ `\l_xephm_gap_filler_tl'~ is~ not~ available~ for~ kashida~ option~ yet~!
+ }
+
\keys_define:nn { xepersian-hm }
{
Kashida .code:n =
@@ -371,21 +275,14 @@ which I cannot make time to fix.
\ExplSyntaxOff
\endinput
-%</xepersian-hm>
+%</xepersian-hm-sty>
% \end{macrocode}
%
% \subsection{File: \texttt{kashida-xepersian-hm.def}}
% \begin{macrocode}
-%<*kashida-xepersian-hm>
+%<*kashida-xepersian-hm-def>
\ExplSyntaxOn
-\ProvidesExplFile {kashida-xepersian-hm.def} {2020-04-26} {0.5b} { Fixes~implementation~of~Kashida~in~xepersian~package }
-
-\int_const:Nn \c_xephm_zwj_int {"200D} % zero-width joiner
-\int_const:Nn \c_xephm_lrm_int {"200E} % left-right-mark
-\int_const:Nn \c_xephm_two_int {2} % 2
-\int_const:Nn \c_xephm_four_int {4} % 4
-
-\int_new:N \l_xephm_counter_int
+\ProvidesExplFile {kashida-xepersian-hm.def} {2020-05-01} {0.5c} { Fixes~implementation~of~Kashida~in~xepersian~package }
\newXeTeXintercharclass \c_xephm_d_charclass % dual-joiner class
\newXeTeXintercharclass \c_xephm_l_charclass % lam
@@ -393,8 +290,6 @@ which I cannot make time to fix.
\newXeTeXintercharclass \c_xephm_a_charclass % alef
\newXeTeXintercharclass \c_xephm_y_charclass % yeh
-\dim_new:N \l_xephm_diff_pos_dim
-
%% Partly adapted from LaTeX2e source
\cs_new:Nn \xephm_line_break: {
\if_mode_vertical:
@@ -427,8 +322,6 @@ which I cannot make time to fix.
\xephm_put_line_breaks:n { #3 }
}
-\tl_new:N \l_xephm_line_break_tl
-
\cs_new_protected:Nn \xephm_put_line_breaks:n
{
\tl_set:Nn \l_xephm_line_break_tl { #1 }
@@ -538,11 +431,6 @@ which I cannot make time to fix.
\XeTeXcharclass "#1 \c_xephm_y_charclass
}
-\msg_new:nnx { xepersian-hm } { value-not-available-for-kashida-option }
- {
- Sorry,~ value~ `\l_xephm_gap_filler_tl'~ is~ not~ available~ for~ kashida~ option~ yet!
- }
-
\str_case:VnTF \l_xephm_gap_filler_tl
{
\l_xephm_stretch_glyph_tl
@@ -635,7 +523,7 @@ which I cannot make time to fix.
\makeatother
\endinput
-%</kashida-xepersian-hm>
+%</kashida-xepersian-hm-def>
% \end{macrocode}
%
% \section*{Acknowledgements}