diff options
Diffstat (limited to 'Master/texmf-dist/source/xelatex/xepersian-hm/xepersian-hm.dtx')
-rw-r--r-- | Master/texmf-dist/source/xelatex/xepersian-hm/xepersian-hm.dtx | 228 |
1 files changed, 58 insertions, 170 deletions
diff --git a/Master/texmf-dist/source/xelatex/xepersian-hm/xepersian-hm.dtx b/Master/texmf-dist/source/xelatex/xepersian-hm/xepersian-hm.dtx index 0d5d19f5248..0cf960fe36b 100644 --- a/Master/texmf-dist/source/xelatex/xepersian-hm/xepersian-hm.dtx +++ b/Master/texmf-dist/source/xelatex/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} |