From 54a334df169cabc08b2f5575ab3071c643bd6650 Mon Sep 17 00:00:00 2001 From: prateek-dagar Date: Thu, 3 Sep 2026 20:50:44 +0530 Subject: [PATCH] Fix alias substitution and markdown styling with RTL text shaping (issue #1925) --- CHANGELOG.md | 1 + fpdf/bidi.py | 46 ++++++++- fpdf/fpdf.py | 30 +++++- test/alias_in_rtl_text.pdf | Bin 0 -> 13445 bytes test/alias_in_rtl_text_custom_alias.pdf | Bin 0 -> 13493 bytes test/alias_in_rtl_text_markdown.pdf | Bin 0 -> 19497 bytes test/alias_in_rtl_text_rtl_alias.pdf | Bin 0 -> 13469 bytes .../alias_in_rtl_text_side_by_side_hyphen.pdf | Bin 0 -> 15327 bytes ...n_rtl_text_side_by_side_parens_percent.pdf | Bin 0 -> 15711 bytes .../alias_in_rtl_text_side_by_side_simple.pdf | Bin 0 -> 14525 bytes test/alias_in_rtl_text_side_by_side_slash.pdf | Bin 0 -> 15331 bytes test/test_alias.py | 97 ++++++++++++++++++ 12 files changed, 167 insertions(+), 7 deletions(-) create mode 100644 test/alias_in_rtl_text.pdf create mode 100644 test/alias_in_rtl_text_custom_alias.pdf create mode 100644 test/alias_in_rtl_text_markdown.pdf create mode 100644 test/alias_in_rtl_text_rtl_alias.pdf create mode 100644 test/alias_in_rtl_text_side_by_side_hyphen.pdf create mode 100644 test/alias_in_rtl_text_side_by_side_parens_percent.pdf create mode 100644 test/alias_in_rtl_text_side_by_side_simple.pdf create mode 100644 test/alias_in_rtl_text_side_by_side_slash.pdf diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b33160f74..28acf042d1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -18,6 +18,7 @@ This can also be enabled programmatically with `warnings.simplefilter('default', ## [2.8.9] - Not released yet ### Added +* support for page number alias substitution with bidirectional / RTL text shaping - _cf._ [issue #1925](https://github.com/py-pdf/fpdf2/issues/1925) - thanks to @prateek-dagar * `appearance` parameter for [`FPDF.file_attachment_annotation()`](https://py-pdf.github.io/fpdf2/fpdf/fpdf.html#fpdf.fpdf.FPDF.file_attachment_annotation), accepting `FileAttachmentAppearance.HIDDEN` to give the annotation an empty appearance stream so its default icon is not displayed while the file stays embedded and reachable - _cf._ [issue #561](https://github.com/py-pdf/fpdf2/issues/561) ### Fixed * visual gap in rendering subsequent text after `{nb}` page alias when text shaping is enabled - _cf._ [issue #1090](https://github.com/py-pdf/fpdf2/issues/1090) - thanks to @prateek-dagar diff --git a/fpdf/bidi.py b/fpdf/bidi.py index c793d319b9..afb4927a3d 100644 --- a/fpdf/bidi.py +++ b/fpdf/bidi.py @@ -535,8 +535,24 @@ def level_to_direction(level: int) -> str: class BidiParagraph: + SENTINEL_CANDIDATES: tuple[str, ...] = ( + "\U0001d7ff", # MATHEMATICAL BOLD DIGIT NINE (Bidi Class: EN) + "\U0001d7fe", # MATHEMATICAL BOLD DIGIT EIGHT + "\U0001d7fd", # MATHEMATICAL BOLD DIGIT SEVEN + "\U0001d7fc", # MATHEMATICAL BOLD DIGIT SIX + "\U0001d7fb", # MATHEMATICAL BOLD DIGIT FIVE + "\U0001d7fa", # MATHEMATICAL BOLD DIGIT FOUR + "\U0001d7f9", # MATHEMATICAL BOLD DIGIT THREE + "\U0001d7f8", # MATHEMATICAL BOLD DIGIT TWO + "\U0001d7f7", # MATHEMATICAL BOLD DIGIT ONE + "\U0001d7f6", # MATHEMATICAL BOLD DIGIT ZERO + "\U0001d7ce", # MATHEMATICAL BOLD DIGIT ZERO (alternative) + ) + __slots__ = ( "text", + "alias", + "sentinel", "base_direction", "debug", "preserve_bn_chars", @@ -550,7 +566,18 @@ def __init__( base_direction: Optional[TextDirection] = None, debug: bool = False, preserve_bn_chars: bool = False, + alias: Optional[str] = None, ) -> None: + self.alias = alias + self.sentinel: Optional[str] = None + if alias and alias in text: + for cand in self.SENTINEL_CANDIDATES: + if cand not in text: + self.sentinel = cand + break + if self.sentinel: + text = text.replace(alias, self.sentinel) + self.text = text self.base_direction = ( auto_detect_base_direction(self.text, debug) @@ -582,7 +609,10 @@ def get_all(self) -> tuple[list[BidiCharacter], tuple[BidiCharacter, ...]]: def get_reordered_string(self) -> str: "Used for conformance validation" - return "".join(c.character for c in self.reorder_resolved_levels()) + s = "".join(c.character for c in self.reorder_resolved_levels()) + if self.alias and self.sentinel: + s = s.replace(self.sentinel, self.alias) + return s def get_bidi_fragments(self) -> tuple[tuple[str, TextDirection], ...]: return self.split_bidi_fragments() @@ -737,9 +767,14 @@ def split_bidi_fragments(self) -> tuple[tuple[str, TextDirection], ...]: for c in self.characters: if c.get_direction_from_level() != current_direction: if current_fragment: + frag_text = ( + current_fragment.replace(self.sentinel, self.alias) + if self.alias and self.sentinel + else current_fragment + ) bidi_fragments.append( ( - current_fragment, + frag_text, ( TextDirection.RTL if current_direction == "R" @@ -751,9 +786,14 @@ def split_bidi_fragments(self) -> tuple[tuple[str, TextDirection], ...]: current_direction = c.get_direction_from_level() current_fragment += c.character if current_fragment: + frag_text = ( + current_fragment.replace(self.sentinel, self.alias) + if self.alias and self.sentinel + else current_fragment + ) bidi_fragments.append( ( - current_fragment, + frag_text, ( TextDirection.RTL if current_direction == "R" diff --git a/fpdf/fpdf.py b/fpdf/fpdf.py index 8a666c25cb..28c4da0275 100644 --- a/fpdf/fpdf.py +++ b/fpdf/fpdf.py @@ -4401,23 +4401,37 @@ def _preload_bidirectional_text( if self.text_shaping["direction"] else auto_detect_base_direction(text) ) + self.text_shaping["paragraph_direction"] = paragraph_direction paragraph = BidiParagraph( text=text, base_direction=paragraph_direction, preserve_bn_chars=True, + alias=self.str_alias_nb_pages, ) directional_segments = paragraph.get_bidi_fragments() - self.text_shaping["paragraph_direction"] = paragraph.base_direction + emphasis = ( + "B" in self.font_style, + "I" in self.font_style, + self.strikethrough, + self.underline, + ) fragments: list[Fragment] = [] for bidi_text, bidi_direction in directional_segments: self.text_shaping["fragment_direction"] = bidi_direction - fragments += self._preload_font_styles(bidi_text, markdown) + styled_frags = self._preload_font_styles( + bidi_text, markdown, _initial_emphasis=emphasis + ) + emphasis = getattr(self, "_markdown_emphasis", emphasis) + fragments.extend(styled_frags) return tuple(fragments) def _preload_font_styles( - self, text: Optional[str], markdown: bool + self, + text: Optional[str], + markdown: bool, + _initial_emphasis: Optional[tuple[bool, bool, bool, bool]] = None, ) -> Sequence[Fragment]: """ When Markdown styling is enabled, we require secondary fonts @@ -4434,7 +4448,9 @@ def _preload_font_styles( prev_font_style += "U" if self.strikethrough: prev_font_style += "S" - styled_txt_frags = tuple(self._parse_chars(text, markdown)) + styled_txt_frags = tuple( + self._parse_chars(text, markdown, _initial_emphasis=_initial_emphasis) + ) if markdown: page = self.page # We set the current to page to zero so that @@ -4767,6 +4783,12 @@ def frag() -> Fragment: escape_run = 0 if txt_frag: yield frag() + self._markdown_emphasis = ( + in_bold, + in_italics, + in_strikethrough, + in_underline, + ) def will_page_break(self, height: float) -> bool: """ diff --git a/test/alias_in_rtl_text.pdf b/test/alias_in_rtl_text.pdf new file mode 100644 index 0000000000000000000000000000000000000000..d8c996350d056bbb2c9987fef377bc53cc1c66bb GIT binary patch literal 13445 zcmdsec|6qJ_jr4n79k-mW2Z1?p9!O}lP!DJ27}QU%M6XORPtDp5Lw$$gorHJS_aw6 zmMzstQW0e<$?rXu9?|!C{&_yH-|N-;HQQazx#ymH&OP_sb4El@Syc)u4F`z~ei*F) zLBTR$7aJ##oE!+Ef+&UOQeF~ z3+;asz62qwZ4sd=iA*E91H_UEG@>%m*2Rtpf@l#b4m3wF6bWZRQEBc(f-{Jo=yQ1w%UALfpl*GwH6iQPQo~R4MqDn&4e5W|FW~ZnTzA*JCjneDN|NRtNKni> zclsOS-nR5x*ZHhMZe7EG$5^n72>(cqu~cMnfwB+ury=fxTR%{10N`cF(-ki*}~8Fc9; z{AV)lxBEZz-weRKwfjFL?T@zrbEbc#r2UHxKrE>5?|YE4V*bqj`#o(A zcoF5F$+X`Z0@%M80>nc5?!_#fc^1?0JhW}P$W=^s({-G zhG+v0Iv#((Kv7GbXyZ;i0fHzKskVU6MWE1FJpjiXaGHU$9N_S(PyknwL~#H^H0%Hm zl|=KBQU^f{JZxxlt~5&;WdOh0#fU;;`J7EVH6YT!_9Tj(`+}Pfwjnx@C?MbnY)7)CEtKZ! zY@G?Nz^%zrZUFZv5PhIO;3<27#qq!e22lb8(RH^Yy0ex^+(^j)C>waVx{`^`tUCo6 zfKsp>(H_79FiwZy4BUXsfl2*bQ2^%e9&@|_NC6)bP@dc`YUvtd;$rD=-cb2a=w*qsVVsU^( zA^uz>R~J_n{Nnr9n~FIRU6kzQi?MRKmMsqpCkuE^Y8SEKSt>~bqY)@zA_UPUQK^7@nUL&&3#B=YGXT`n7>q$L)uz8SaEW@% zsp{ga{?VeNFf6d2_f$i*g&e14R;|h%kg54t0f86Yh;X_$PCMb@iHI-D>f}*a_5bx5 zG2ge2whGT$yk)|$)WHAKgn`WkVD0>l0R@%{21otM0JBr{=*qU)q4G~w?%f|nJME&h zQ6-&rT<(EnPBy5pdPHdCDm>>pfpZbcl+|mPSjP}FMsrNecA@!39UN5(PNNxHe-!%Dhvgq|p(wF2oES&nb9t$sdum;TCeT|Ug zOlV6P(q%`kj&Y98#&}doB;D!xp)7yQV~xfQ`49Iuj>gQmgZtfLPK=TFfV$#A`_{oW ze8stpAA5Olx}h+qyiRRT!t{MKyWr+chdRGVo|w#%Kki}FeSdGe0vjDQKIwVq+bh$V zY02qmT}y@aHQ4rXGJpRm!tDKP&eu*zseS#y`SQSX%DchFV)%z@a>bQT*bny$x0=lq zl$iF`OuqUy>``Wdy_2+BxodTI#>1@%fs9qgd9xeszP?K9eaPN;D$4sk_vs%S-tLd=u9rZ~PQiYi>NbnWtw#2Jyw4(;9!c|TMT`Za#lfiU*&&TwDPR*(-*9s9c> zO@r@Z8XA$gTTf=LR|w7*CL4u3AJeL9%XvsD=`?-}TJ7&-YbsTeTO~nt8qJWkhd3(1 z)ke-jHweWB=|yvKl%DTEW=_d*y{=RKEcy+Hn=qm z@aIZ}?TQhmr?*4H*0}KouyKXzsfS%v_dac-93&zxs&i;l?hY=7^^w2yZLqaL+~Pc+ zZg6rl_8W5EJ|fclSlN(Ej3Ai1Au8xdYtV@!q2jsQ?lJeY-q0yMUvo=L=b@d=+O!}A z+x@$O&R^D)J2SO2{;7B`1Ce-$tjd+UzJwbK& zhAAky1JY+m3yRI*4Gl`d7?lP|ONvV4#YPddV1;86F+n^zTW)gbR_im}CApex*XxLR z+G5>AjDud@*!Y5Z!ZhF#!-`4magk@>G6g4Y#6FQ%cadA`!$7_h%dR{6!3jBdIsXP;;cWyVx6LSyLYq7~$iXJ4XsdaU1K~EE)1gm`iS1C8 z<8cVKel3@%{e45DK=K7@aJO4BeGShme#U0Ea{6u_Ldlefbk%ysVON1seGB2ekI`<> zQJ95d>F(GN>th?sB_{gJi^AyZrNyi?dIE3f_!n`#yyleqBB!_dc-Gec*?a)*Q0|udO{K^m3pqc6d10O zX724#{4P!5R(L#Aq%9XDo0C8nn+V!CBJUkL<VbiV`ir61daa|p|9mIa@@)UTON8wS^4&1pb z+to%4+}J0WtC`|^g>hk5g7+~wLVX#JXpVciF1Mopy_t<`<)#%!UVo!a87;=QwCXJH?j9yw($ry_UyX64?n z*L+MWJ!VSwyXwcPPow6{FPKB#t8JO6@2i`F%|``&)x0-Vh?R#8R7%m;L$=QbDFj(! zf_N%VjO@1(EKeKpD3zpC36v^+=lY@Uy>?@zHl6EEh)bVTsp@yQm00_dg%eSJYioL626xvl>)SP^vP^-HEX=C2#d zXJ)rogb!L*kKM8T_8dC%;qs4Jv9!mf(of74H$1z3OZpRA*q~0#;CmgJO{d5ZwrlS< z^07~LR884)xP-*2G*v%qdPz_{{kd33-SJcDOPk`1;|xJ*zK4}wr{d80{Wnd*9_a7g zQn0O_w;=OX=)J_V&D*hAau}-Vf%xL9@E-0SjvnZ#w(wW=$NVNU2xaO=c8(3d%K&Y& zB@C>}y#Yt`^z`p@I8}0g*DbZ!leAO^H6COl!3m>8x_Y+Bw8j{R#$>8=$qt;@=5por zK1%Yle)fQ~S&yf?WdkRhMgs5OH?70r^qaqI@P2!F&+fdk=&+WjcXOykoeE*udt}23 zT^;Gu;d_4UNeujoJ3C{&-E>3+pC@ruBt^SS9AGzvv;?+#}+* z1V>5G?mBVt+dSe)!zXw-a;Wibb<7+QkFq}~nV^Q<;~yS3=A;p*RXZvFc3L26gUAb5 zZHnVldC@)a!E0{u#P>D&Cyf~uQN!?b^JXb~ED6W1de=8WqcCC2DQa87SVT&OPk~cm zcgjYs_$H-GnT0*Tuag}q>5+GRE@{LjjCn^5qXr348Q)qDFuR>E_95PV6@5W!ej)n8 zq4{}V_ksAEV{Z=MSDCot@V*A#JrFnarGCPzy4xAr?TqS9_ozn?*+1RNg6JRp^l=gw zwO5A3J@fn)53D<|{+mFH?*?vBqjBJ;lD+)BYyqm30J3p^R6!iASfdF&sKXlEhc(n% zQF*dHq1pRnA+$FK+sJwqmlLRR1ghoZx87U#YaP^XmU0JbEC|%ytXJM_PN!d{@5N5* zi=+#JE!#Huyhv#gHu?gAjq}8Pk%A4F*uB4G=zF_bPA=ePkAYY6apF`_ltY&J;KYTN z{ySiwbJtQvF7yAe9e6;RS?Bvf%Jukjp{rtGCF?-4xq^3r$?LnH2r*Gttoi-g{kxLB z1s2FpY~I}&4jr(HdG}dXX6Q(FWh>vS7lJk#e0aAuHqEIWC2D$zszC3D_}VF}CzFch z1N(Lp^A8*<7jv#<^Nvp0L(YB1MoM(um04$oFq7FDL%b12C5@z?Jow@0t%r(EsjB;s zq8HOHo>cc}et_qDYc5Ny_)&%kxtU(~t|BOvqxmU*zsYd%#jwv&+BXun+)>Tod194< z3V&ADyhdbP|NZsW+uxkrTr>BEw>=IRJ!Eby|4fm1+ittr2KU?CCWhvHQqtk=ZO_}< zRE1uzDY;RUoo%n5hJHMp(_OYx_sNaqP}CMjq*Tiz%k$cn8V3xrkGA;rr(pB)q#S&{ zo%QU$nOq3D|8D3k(x;&%O-1MZ@JBamx7Ur=($2KU6wg#sS|@#)Z4OLLS!ACHK!-g( zS%NzU&$@H|7|AG9E?2T2(<&Fci>r5!tTXrbP zx=P9AZx&9q4?pvEZgghIa^8J0zs@ zh6kIKRKLlrK9$U!aL*E2HO%))KxNZ3z1X;(b6BWS>l*(2d17>@pc7g}ut#_Nl9_XU zO$Hm<%*WC`=0(Em1~${YHD<> zXI@<&3^$aTjSg}30E_r2QdNc-f-aiI+B*7_$jafyhW(c1?nIRwL5N6&`1a9*X^rl0 zh0P=<@{j2#rQXbTz;|xy|0+?L+8Fj|?BiJLCZlJGUDSfC;OK#`H#`!n7INdcb%BLNDRMV$zTVB=wEmvR!`94A4-+5B zU8yUi-)|!wrgcU&m!8Rdx2bb5if7wBZe5A3!aOLu)Kn8so%}9MdqjJ`a$x%%Hl(B^ z2+?q~*)b2Qj|f3~+%DfFW^1>O!Y7eIU#HhCCmu)KFRfm~W;S>}>u&8$E%6My6JeyN zdR1;=t+&ah96R7=VFjKoYj;)I=p2v2IVtrPwJ3tN4^$E)*bYN_50nkFbr(&37Iwxe zR(2bjv~jhpHPd#~f3V*q@^~6m;<#vfYJQ;7dJD_Pvb?TJ7lXzkx*St4iCi-7m-g^z zy7@*$l-qPoL#U|zJJgHool)`0Cj z$3bZq(&gnWH!1dH1-v&8cqV%r zZ>u?j2b=pD%I$sqeQG?e?P}@m#GXxW-q1b1=v_BJ#lnP8Du(CsWsa>w#Fbfg(RV|y zZ%k@P)iAz3NFUcWE2GK7XW^yl!E&oijXw-OU|f%kKjiM@l!5NF(vyc86?Wwvmh&o3 zcD-L08y81Dd|1j+p;$ynqB`!42Npg9pB`vW6T@(kQPb!2QgRV3PNQ}kEw;r9sl1HY zGe#`3_>q`s`01S9t^0RH<-R6fOZIlS-f+Xm6Tv3$NmLpxu@j_8$Sd{h2z zj^LdKgX4iWxGRT{4`X^V)nT%p!~t&mo2>|~nx|4@4X5e4B?-BLAwH!ZCT;;QA_$7` zM3?yQnhcC4scQe;aOkvcJ*aYoQFZL$hHVR#lDJYXg(z z=Awpyifg&ueDws^i?}66imoU9WozgvGE=3wv!f!Pyq}k$5+KQKY?xl)X6!E|(D`sx z!qJ%I4<|Yh36`=2ucmr+^#vFw&%B6?kF$IBwm#l6?`>Fl?I!2sp8B3DIql=+wl$^Q z*LmdiSQ#EoTI`LXH3J~ZeQo9m%T+s zH$|YTc?)fLrK;_sk=q+>nhy}5QR_O%-^cxbrPj4^s@jnaiTq3Y}9uM&C9uVG$vfa2o1=%od+Fj(8J4%@ir`7=C1`NUwMXW2&+;~!f_ zeA0a~(f{FEeafbz!NvUNJIaoCUEg&FjTP%mey25}Dp&05nQor>IncAD5aBI((mN~j z*++FezAD#&tEa%u&ojoLMRK5BvQ~3jNv6*6GK)+3uFgfre8(PA3w)tj^$kFzXv@-3wFnU}*Pg`R*LZs}LQ z4>Mgy4*ELT+7YjHp4gi178-RxDv7^vr+@^T5B5Yx0^W6ujzORDQ1#eBVrpQ%cEc1K#+_=dA^ zyYM4X4yF4o5w$o$CqLzmqSLqa^@tMpx)Ho2_4#*e=;Z7{{%aTWU!b`36+}0Z+89<+I*h z`JFKnh6gRrJn9Y53G^5~%HNLkit@&`N0+|)p59#8FBa{hyRB6>zt?iNj>d`g@`C{Z zT;9pMXCIU{8LK*NE|c(-U+2-t)zy~onI!T}#(5|$U<}q9f1&yqf8*5=GA>aaZTt?Rm@P zOHV1j$ScI{%Z@(#Tkd%-;qJ(|EbkO9di9$u8wfmdh%NMPjaJ0Q@bgjvd!4SAHYum$ zYU?ZviPJi`8Sgh7{V*JQv^bPqSDGH#blAJMpBjDPRNO&6mGkhlgG%j}Z)#Nw4+}~6 z2p7ADYaTyiR%hl_84*gZ5Qny*X0LfT$0l0IPG<~ALx#+|t<6l2S|r9M_SLc#i(aXi zDZLN(+$r+?)l;H@rh{}6X2yM}SJ+yA;A|vztrV3~GFu}MddY91lq=1#pn%^Ys?c<% zc%Y(mvYjhor%K-buq)ekm-4uY4Q@K!d(AgCqI5lj%<`|>*uiJL!%qrrY2 zhCN5gFY6Ax-k{l@qf`9NC?(zx`9`qMWxQtw-z)U|Glci~OZ)Nm!(E5(Un{d z^nS~%Z>{)Of`qr)kmkeXJW^iOPpPY(rbT=~Bd^2ms&l{Vi zUpD4y$luCqd_;7BGo@U+wLH1G&54{))%~RW+a<|cMHFJ{>VOxmZ8s2^`k(hAufvb- zKfa+MrusuxpE|KD&u|(SlPMx*o@LT^5jk!6vMjUvw&an$H{I4cV0PRrjNPl?XhzG+ zDAZ`%t?!&#fNw#W*W5A6JG$q2`M?1=#fiHyUoOJ4l|i3&NW7nnvg$e&Wi|tj>bUw| z;4KHf7vA5+s1h6MzG*+v=EEo*zU`ydNI$dd)7867$(92CsZ8hx-+L9ly|L{-oFo@$9!$^h`83-p z8{VWcA1x59<}R6G0R#F6WYxi|`86+X4tO2Nvh{PK&lJx!C?C%nSq%z(6oc6$-?|SkXe@ z>i%bV%Nzp47{L%jA{~f%X*dJPB#H~)N(as!stAu#~8%j!_5mH04NKysG#!=iyj|FsU7 z7of$<>V88D5Sv{wE)S@D;KK1aDdSM8Av+g~C^?8x)F=S&9J3cZ}qP$&>XUNJ5Pv7CQ^NWz!%3JQ~9S?*tHh5@6jsDsHYUvpr(*d_Cz zxf6iQ0wCD~_>+$T=_HY*zYu*F7aACt1S=_gE|F($Phb_4!RB&`z$1f4qwyGJJO+(| tDMRr}XgD6Ph=!@Es=$4`v)UZhEvYJdQN5L&>Xfc?@D0YRz_P&z15q$viF zt~6Gn40hPjFfl@;sHv$-_s901Q<=V@IJ0y6fi`WOi*$q zdAX1m(VpN%j+Q!6!c*`hSBDkdFgRWAM#+^-A&@DaV8p^e0lFRlxJ*Hx;OXk+VN37? z!vJXyr-qAmCj<)I_gm zayzS}w=*68p&(bygNJ$#M%byGJBw92yj{J~;uOziR?e@YGYH&R znc%-xYK)a-d5}M)24yTH`V1TYKTLFSS^B-QEi_&x`LC7R!g9Sl%0C6iSXci_a7+65 zTYZDBT$KO4g8Qvcfc~9RSoDDZhsOOUyu!kkV6DdejbA`4ney*7?myue7B*391@||u z0rAV$hOr4+;ZULf3E!}=?OY=`*xxt@#L^o0Ta8<2yiD?6yT&bS)R#y3(>cKY#yKDs z_w~PD;}#k(ll=Dz?zheX_BYM}u~hzhjr&hHhlRu7vU>cfaewC={_4;G`%gFr*veyr zBHojr3LI0x5N+TdG3{R#oY5)g$;E)aM^?(Di3K=+h z63Gr=h=v_-q9sy%B-KF>11}rO!qJm zlr)qLd^{-x7Y(w#D;U1CC<9nSS2Yb~ZM+*8zO>#bn}87r1PH?Di7^Tfq8r840}Nks za6cIZ+A^vz_yuk&7L93vJBSI`92hI(4MQQoNF)r5z)FMRNF*2uY}}A&6c{ND+&lnp zOAw=5-~~fNEmsa}g44mf05>KJ%_M)$DA4B58Vj-kSOHo<7kOb!tfw2^ zmf(RW13Lv-Y2d+uWmSP^;m&1MIdDc=VBW^w))DXVv-(0S1_Wa?UiexlgEAnbG7`4{ z!4@IJA_QNA;ENDq5rQp3$VCXc2%#1s=|u?5fTZC|Wtc?>Xb0%{5?8>l1>ydbiLI9h z<2<-90}GO3NPtKt{G22=S2src<@c|*8Vf4Atl6t4W9@XUnjQvCM&kvoU8bVIFi8p+ zjX(i2hj&va5FH#TU=$hv7tNIdmV_Z0s!zf@02fb-HlVn0S0;%7R2le?21B7pX)qRz z1WcKs?tpV804luXj2W0kg;={JXaLt;L|X;21Bn2r5Ja2k=?UnU3DFL?fLgFP1He3u z!5H*PYx>gySD43wsV*y23T&HrFGMJl*KeR_)9-5 z3om`R0nE{R1E1%D??@TdWkIfwaf!~sc-4p|<@WthmOJjXLF1O(`v+S-#msqthumXM zOpx}2dg4I`H^DZ4#ko!%A2>AIRFqfIpte6@_5qrOZ`;44uNyKe*v?x}QsZ?XIOGOhm+OY^BH z-*+5mer$f-Cn*z~=8y_8Pwtsv{hlZ!f63CV=X@m2h**Aj-!90z(ZZ0g@$1AxS$ey} z{k_{kew+;~Z$~u^z6)z;MCR`}nZ+a@R3Jby3VuGJ)zFdmh*;Wf{1~+Uypye|WNChl zsHfAX3>kZfqY_+g{2X-iuy#+Whqva)WTAhxu%k)v#*9J!cBA_4u__Na&ah6-SI_&^ z4qKle?X+n3q!!&c8uk>Fsp4;U57FC;dAHlGN)$KL$Q~G^zWbV+eI3n?UaPJEdd9>F z8BwQ50g~c^O@RcJXgc*=|PUHr>nMWaRxjM zW)Ffx&r{jVs^4F|7)R^IXq5edy{eKJ(oHu?48_t6q+>BG!Xf7!AB)nw8`)3Od<%k1 z^45*gE?(9B@Nfg2PhvM@(2x=so5vLrn1nGZ3zU)&l2Q=S-eSw7BkXO9br&=a9JsaR1^tBS#Va%`x@VuO91WMnH+3uaiJZEt>_$Ht@~v=A z^_dyT&R5&%C$o6T56wPFY|alaW_=%&kf$JfzKKg zjrWtjg}{NwXm{u*n1y25zSv;v<6A03rv}Z7L#a$s!d4o60hxK{i`fU*F43JVc>Tkj z-2^|GS*Voll&R(~K48M``VdLS_XRo!4b*tq>_)#jNpC7XJF~w}WXguKLc5F!9mLuf zoKUUQcWr=otVW7{pil9;6q!T*@o2HOY@keD0#$e_aLc%yZ|sa;pU(I7W4q+5EsG7l zZ<41?2c8(5rJWkz=q~Snp)^pwh9zj4PKJigx?L(}c|5~EPKwmg84v zz+;^9RV}-57q0D68#i!gnWC?!iyRQZgsFx6`{k` zl2j(huK7UuKub&@XZ4A3F)O}`v~jO8333f@nc{c$AL_mvw^VCW*>i(k2PMl?zr(GB zE5elMs%7WpSqG|l=$p#|(AASO+xqz`F3Gdc2NwmMek?;jGax#H$$H}6P&WDXtCi5YpP zBfa$$3Br8i-48_d?dsf%rSe2IAXDtJG)ia+<_|+XhmJQgHWH{6Kq_`hd`<#kH z7YyAt34N%4V0+=tMy|rFmm&8P&$aHtX3JtcO~vC&uEYB{`dIs*r#ix4HXc7coq;b` zKe}gP>}>{Ur!9VXUH&aNqOWi0pu?%s2Yc_R#h#?3I;e3X6Y)+MCF1pSEv9wGI5Z|p zrAKD?#7@_1uMU!vpAE5GJeU1=wpS)#x@A1z!2{C<98SOW%Vys}ZS>TLM_ANvynzT(c!S?@9(S5depdR;I@HT#Yi?QXdxhYL%WtS&K|nu3LJ9swO1bLAlw@c zH`(gxq!rm%X4FLTv52hNOCWh#&~5g_>BwVpgge>+z&<&Frp4o2txd*fND$6V9X)%r zu6~D~%=vLPAv2|$P!Y1N8TNAh_Mm3zvKWnw%k?{g!h#&744k;H@UY38?@QGZ@x)@4 z=r8}E2H)_Ah~FL*B}%#L#Li<=#hIp%;N!@u#=XNaYg{DC{*Xk18g~Er@VE&ljR39s zX}LGEyiuD4U%={99G}Vw?T3%taE~XvtJ6PeOsk9wrIt-C|$`a>H~hA>`F7i81+n#o&lA9j9lUoqZuCpzluvE13$)h-)tm0sh#s|n zx`WYT=+nm!)3~Su(nOBA=XW?^y#bBic-#Cpa|jtt0zZ}P zE$9&)M(2Kvt~LtEk@WGcz9);I{dw4C#;c?P?i@}Dsi6W#V^HJBmHq<6#+ZiRXh$J0+9 zdVlQBBSoiF)q_Z(%W0QSs(ZCQRN#JNE<>pNQH}_{o!;=aGBB03^{IlG$ymwd(9coY zw-UGKs%CILu}VROKWk{+AULW2?q+-DHz#+utOMa4k1u{YY;G*~Op%ajx65p^M<$1f zq4}VsRCs5{^NtQx{#P4HZx!d{*z2dEACKkrmhaJhaw|CmwcQaZ*;Zv4rfsPqZjf`V z?etIz_TD{72fuIUyoYWl7eOAp9X*HiYidhV(Rnxa!QI;ZRr8Isvz;*|bG795X}?w* z@tGNmoU<3vp^s0N;x53mbHk1kjY4GeC5ABVvax&F`}f;gU4ov^KlF&JE$1rhOlrEJ zUF4*pNK|#(ZY3EvN!fyJ0;!g4HL7t!ad1ayj{QdKH{Un%`OBqPfd zTBFy4p`*gfnz{6ovhcR{*@JoS+Rr4|6&d)jBsHjcl}3l^Q@lgD^|m9A4r(NxQp+;o zF(7Yg^9p!&_iCuqOT9*sk8XpWIxj=S60*4-N1Wf+zXw|oMfEdC4YASUfsiTCw%YTp zwLX=xxSUPiqIojNv+2DJX2$HPmu-&OM|T-12o+s#cz3+ybus6D z@6OBfHXQq6l8zD1zPvdSZYVh)9qi@>7W7l}R2if3xoR3~>*$jstH+v~#4Ia32r7Ae z5Wz~3U7rr6HG8}fFq4=nIIg3VdOOEKp?mAlSJCR!=FqB%4-@TMjh-d;cot>{MGt?y zos4_zvUY75C>_oE-zMWBQ;;x6i`&0B758B>)o8K zO!oyJwP$U8lvpKut)Ynepo4gX(jC=Wb~fwn*6xug&Ykx;bVYXvaH8x|Q%$^e3VJl{ z5uHQI0iC(bNC^oLqUl(x<2|T8A{gzJS+P~v)@~D-TQq~ZNv~H{B#s~^rC!HuHWHS7 zxBj-4NQT{sP-0Z0Du;m9n`Beg-SBg;LhrVXduwcToTG3~O8v!cilAM?)p$|nBanXa z@-gP#;_1%z6;h0;?C0+g66EFa5oxhY)^oQUXg zOuZs_#dt`{%d6$~YZW05(+y1_LiTS_FK%{6$%&2yvA&=;YZP|fZ$a(pG>QEh3ESUX zR*>>$k9eYYQ(Ec;9V zPenek&leOvmehQ%nxo{Rmv}~Sk1p<6tchg=xkX}!u(DIyMbd-sE>9p<1-O)JVNwlJ zZ{WlahF5+(VLqRq-q>Ytr^YiC#T}AbKbld`%tm;cG3@n504JgGQWSjolnAT&SBrWz zYx|T25;src=PYMX+NE?kS<9`8ec2aZhg}c}>1D|fbcyA6k0|)^@P!Tw(P4~7fufat zq@Bw_GR_#+N%%Zt<9Jkby5Q>cRV}Ab>@M3hQK2^?A*nnP;a|2{f+jF6b+PAs;e8qk z_jel}Ih%MkXD3&?IgJyW{~5~Rd-GjtJg(z=vu(ow!dkYBVm?zI;dJ_ny2?o1QLu#-@;7xYr{5p7PN z?6z3!jOAAuh}l0uD7N^Km}vO%g5I46cZFoXCf-Q)b-3Ad*#cUr+=l9x?l7@@zFR}P zK+ulhlVp5b?rt7m?!%GEfLk2ZqsT`weOc--8E?WchyCq#gjU^C$%&>jRNc~qe7<16 zGA|SNi!UPZitt3&`0tuDj3%*0>_9kl*0vE;Jx;4Re*Ia}Ia}C?^bCdWt{Ro?uuV)m zuDGbG#vHJL$#AfHhJs4!Io$pA_?QIUlOu(gh=14`x(UwJXzuB%EFg(-(Nr!2m*l?2 zz8YC==L*}pvfi8?wxHgzJ={|JCXd|QY4xQjWSYX_lF+n$J|%I>@PkD7(akPVp^0;* zq3)SCSsP{UkkBm=s9LTf8!pLOyJ+N2$Io4U^sB9f82g55_d-O`Q+M+>>IyoEl9u`} zgM00~^z|G_cO?qF(sxAZ!dp;{jdIrsT;?}0FS#?8`p0KWR=boE;bJ1Ag?&P;xe?Qq zdFntBxsy5(8IU-`k*8JgE)=Iz+7SCuD%m(LiQc5){VnQ4f0bj(^}g7LWwFs?k*dvE z=MT8`05nI|YkOQt3Z8RP!rA)atvrCY_sB4<5Tw`85ZT6g1n#Y;iyu(JJ-9%{=nVIEYfLc<+&?n5->k4x< zNzZbn1dMOF2y_Zm39%|YXp5-F@j0DV?kYZ$sjo*E=lI;pmG$lWSLGxe^%T}7F{FG; z*tj4h(?8CEy^H9bHFzw)^k|R|S~JF}wwP_=jkGTRD`wl%*}{8eieRjF+U}?&Sriy} z@(g>UbuFLu?=9$#nKC?NdA6$mqE3L<*fE|?q)(JDwlliy?f3N7q9NgESKXcMx&{4~ z`*bu;Fv*QvyvXjGyl?(tS&Ol%)3$O^Z@Eog&FnoL1>Q-5-=tke(=JZH`r|Lv9_MMk zK2E|Vs)HPis*f4rH(V3-wf{0gx3#t}h?mg5qQvvs$nQtJd!Jgq&3moQOpjS4 z#wHHdGnWWmtDGx)0QcS_`2FQmf`O)kR1#*+W3*quT7URlBzB{uC%JUKjyL4W>8UdI zG{?e19*3wR)47u2%ChNB_Jlnu_ryZ4?c7(!=`K97^-TW_|JaB!CT?FiRovoaWu5ce zr$zB)2TW@J(3~Si74d7!2eX&hZuTkfqa~Og97WPpBwk7SZ5Y`XGifVVa;z*Ur^>z} z*CBD+=WsOmw3lJuG15ST_^ZvDoq0MX-;7e?Pa|LR4Z2SD%_;QrKmQEjdOl!3*?FYr z$b&1znjIgGkDL*+%>H(TKZ@T}drXUxiBjknD8-%wH=ytA6~AH_vm=8whyLVLbhC$% zx#sJ6D;}=cZ2j^HH$$FwF5{y@!)z%P+U*s|tsPFJgqq$b72mE%+$km#QrBO6(cWbinMs zT@-sj-qDP5FQZ7KW1qfDYN0|K%DgVu=-#pY&nt$-WfiCH#(cR9&rt?_+%5WUI?Af& zRFv5qII8RVJKi^}3jOe*9$Jm?Xzy+NsSZC{*;uBZS~K8Ze1>KHfF_i5^*Z>#QN2CE z)+6Z|ejn$%Wx`ujretV)H=A%#OsB*tv%9Xyav?w$eKgf3+e`J#C^oGZBKh> z7m4sZDYtBjJY-;ACiP|hd~nC-`9l98HG|682YA*EJ@e}Z8y%p(x!C?C+zbQ{z(6oc z6$-?|7|}u?-1RfOWex#ij9`c%feOUDG+clL6UC)(rKN9;l@T=f%B)aERN@~a{7ano zpCr68wEB;7{7d%DKgsdRDCIxN@j@2X&-l(i$nip!(*J}oBY6BjA^c0^=bseC|H|?Z z|0~Nwth78OAXA-@gRcxEvx7yH4?(dgED-I2La~gfu$kzJXd%@D2s}%J5oi#jXz>A~ zkVs&Oum}IdG4cf&519ND2So!Wxe5ov0I373aBvim8?Xw81S0;caVYfKdH}m?>R~Z! z>Oo@Viovd)55Uwgt7Qd+Nu$?{0|o_B2Uhg~gCW<90|sa0 zLN4<{@xTL_1wgU~@TVXH;zv+g+xnZaerT9VGH3&!Fx~^Rt;c9!D2vyf-1VIp#KNgf%)zL literal 0 HcmV?d00001 diff --git a/test/alias_in_rtl_text_markdown.pdf b/test/alias_in_rtl_text_markdown.pdf new file mode 100644 index 0000000000000000000000000000000000000000..96299978b8d83e7062a858d68dff7a6fd69d7c80 GIT binary patch literal 19497 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 uqk-8#1fa|z|5+X^_2a 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 literal 0 HcmV?d00001 diff --git a/test/alias_in_rtl_text_side_by_side_hyphen.pdf b/test/alias_in_rtl_text_side_by_side_hyphen.pdf new file mode 100644 index 0000000000000000000000000000000000000000..1f686c161a738c972ea9168c35e6ef0bdc2e0891 GIT binary patch literal 15327 zcmeHuc|29`^LX}bZOG1z?CV`!gzVX~C;M`7Etj}tj}Sr%Wy_K^Q3^?

AfZC$ePU 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 Z2v@AR3wC$c0K*_q2pI>5yoLhV{{uIq84~~i literal 0 HcmV?d00001 diff --git a/test/alias_in_rtl_text_side_by_side_parens_percent.pdf b/test/alias_in_rtl_text_side_by_side_parens_percent.pdf new file mode 100644 index 0000000000000000000000000000000000000000..658e48b92dd5426dc283af2865427166c0b4ec1e GIT binary patch literal 15711 zcmeHuc|26__jo0g7TJjyS+k8XGiGGVzLTA74F+SGVP?n{?lxjL0ETZXMg|+RTJffb0>npI#{#< z&e`1syVXnpZE>`H5d{u%1x+ z9D8MGI=%tn$5t(wOzB7KDHg|uRFYX)s=CmV>Q6m#l!rO{Z0FOZyv8u4dP>Sboxl7hS8_EAv_V24~^Va-Lz<=wEbPxSsI@`9w-&z^u#~bi}I{O1U`>pE%`6u6F z%hCEj?Cd}1eM2W)%q{Jow1=YRZRo&DAUf&7C90{iK?f%Js&gUh&y z{B0Thw>SQQz45m`h}b{)Ah7NG-EZw|6Zt=#{kaFT&1e5_0{-rUi2Z{P0^14|{QiEn ziTsV^e|Glo+u3HI=9_^3*4aP!Ah7NJ-`m-LKFFWFpKV6fe%0AO`5^x*1S0mI5Aug~ z_M;CXk0PLzflwm|tOW#R<>UnQ615*3m`$qR z*3kdrM?p~(CrOg(HI1S!KlEbE0Jb_$G8%4 zco1~kkNVCifJ+)e;unZGZ*3u)+<}cjX24uYUomkQ2o4tm!6ZaMP&f>P1nw=QUnm?7 zf&))TaD+GrE(%1Ffv*J>i3Q*zhJaZ7IK>}bi0zmwTog_ku^mtZ1FWcFF@PRU<8e0n zXd=iCgSEwPhj~HPXnPEn3U~~*#n=$Hq0KfM7nCayHUCjEKpY*c2aE?Odx7}nfB-i7 z1Ql2ZZ;Qs0RK{j?=m(dTw(!KZAmkPV*@7gt zAki&IZW9l>-6y{V0eFCAZ1WHNx2cBj(z9{LlLAwly4sW}Nmdvv`nx(^ajqo%Z{MGT z%9{)On?3AQ+pmh>L0kFlBmHD_@c4E`;p0|9bqa3t(!8JKx_#`gDry}Q&c2_5Ez4#%{M#i;Rq zmN$w!LVIzaqS{~l`vW+GPTfBW;;%Nymo#)!DmZZ4rQ&t=W5+|)rwSOW;>!CS1w{Hl(UVa%sTdS#5j#|7K9I7D?U(B*(YZlw&g zZ=XZ5Y3+w*mbP;nvjco{yUl2ilx3gO>bV~Ga)`P)qSVjyZH|IpCgiOgXqI;7r3i<4 zNvqqJ2M8XPuI({xlX|^o z`h0nqawz`G)xickhoy@RulXQfX_pS=4Srmn>J;I({uRM)fqN6}wBTNlwJvYW|#Lc@_WlsUp-k=*)-MmUdOB(j-i+?8&U1}qau$?nE% z=^3(L6~ud7*Ef`#nRh5IBR=$7jxfpzjAH;a$ib?qKMMUiN1d~u&YZmpE z&-^MZC3~iu)eVAIM0a0n7SIG4WrmsrIxdPh>MG+pgN3ps|`hnP+rmGdDLIqtdGc5Ntd&K17sZLYA+=@C3$y?c-r*X(Y+7xBV-@d&n+Iz-Zq z%#8`l{WKuCxyMZq%Sb&TKF__e?@lw>Dg?{9vA2pA*XA-|Uri=UyE2)*3R%=%zv#(? zWm9+SH#*ril`nPr(|Tev)fSNWBLqfk}VWIiRAtEs8!{4b~kM@{N3(yh}*(WEz8 zPQ(oH`Gs4(U~2y2nX*dncLLkg>lv_mFpXO#%!($x$W&w-n0a1XWvWy5Wi1Lj=1J+#TOWpK zhI>-uLh}}l>y&&s{5dxc;po0bo@+K--Ssw9aFO#V*9MtCgYk2&I-PZ9f36M0hKNWT zr|+rty&Rznt9%=B>+~EU9j?qAbh1tUbh2%nZYSy+`6g(e7JTJqzn48h$=rm>XtZyB z>$`SN=8I(dMyk%&?(DB$7iWvp4!>`?qS!}Y(Th8^hD`wPmzBoQe0e4^NzU1-K{d;C zjwMs*adYy7wA<-AA#d5D&#j|D$`_st&?r`%dzy`jcaLzGSf@#euSi}AetI51ysuoZ z!GESP9OZHXTB*lKPx)Z>)axM;@8463@~O|re>FN__=2M~ zpnJEqiv8K@oDM|yvb(!h7TcXz8)JN>yY78;jr;067xqLJU)3FX%`u>`kh*m8a#i=c zLx`?d@5%RUBsP5>k-WUp^^Ux@cIY8QM*m3}#glvqNeO!u2uu74wA@SA7#y?3Xk}u} z*|VN=l`i!z=9jN=+^a8Qa9H)0i!nTuu^5+<$;1BC$FR<;>8|H1xMgZfU2!jeqqFVg?uKjH zUNm6KGR5qeu}-HMW-6%0Jh3Cs3j;r0ZEF3_+Hsn}O#X#kNTBxHJ(i*c<|(EVQ@g#A z3JF)DJ87AU`a*JbJVSM@%qZMvZYihm7+kMu^6_M*z2P#}G@U@~%ZS%FX{$SP&h*ou z@auSDFS}(l?>PFgZdkpHw!W}Lj(Yc#2U4?^Vcy*1w*4_PqNk%5MulqoGvdvNLm5RH zxog>Zev-o8jTsULOKtC9!`O>oU1p4kkNqMjG~)8OOt`i;gX4@rMYcK3FfJw~Tdk+^ zl}Ff{@>iB&^^C(-kA-;nRGw(z*M&5++8WMwc>&Dy47N zxyv~2^q7qC%cG3@84~4KLcN?*+UCbUaKJZUpq`@OW0HXhG3jRVly~4jUBH0U=4VyT zY2Ed+uT!0`2FIs3cFnaUrEIm_fplDZPt`y&t^oWjS}(^y}?b@@xAn)Sf0#)|Wt^m!999zM$;+A@8b7lzjC0Lr)_7Zn6|LE)2Dp>G&-t ze=R32=zTHztZvg>GUk=P1RspNU1oCz760t&Y!u5&U99*sR!(8;UUCL5ep`We;UNFm z5Z^a)agg*jU-l&l%9Tfx)5qJAMKOCZLTbn%=hHO%&53)QHIm#NA-hMSr9ZguSJhvb zch1%gP-sxOiGG#q}i0!5;I%BS#-)y+} zvc@z)En<&EXl$zlZ<)C9HQutmt|zu|qp}#nM|`0rHj-&A`r-bgmxN;?9riyEHa7Qj zamUNaX<3}NuyE1hPndIM?CUo)zQxTak#bn2bmow!;mLF3e_4)82@mx@8e$-*k1^z} zfeVtLk`|-yrw^>%vhsc=vocmiFfMRN5*H>q>)02)jDCybaAZpu9vhLZY^q-gv*TJ> zg4R$T9f({gPIZ>j;j8zceoMpmfwmjX$D-v}t_G<~t)XBufLFRkX!Q@NtG!3IaNC%@CWmhPSOupm@2tb5t&hI!?w3!;W1&tvQNrOyRnQ4h2q0?W!lV z)!mZxJaY6BSOv7&o}U4chbP@(=o-GgQ7@{`%_Y-r&S96)6s`ja!H1C3VjnL@X-(9& zz7bF37(F)?$3-1EZgI252`^U00B~F{SlptnV?F{(PCvi}y9d ztd~XkMH;R3Z^y708eeB72)LxUvD#bOYv**2J(L%tOPspMI$f;)=)vi%$7~)D7M@oh zM4{K2)iauHYL+A4-KJ2uemF?ym|f2vvD`p?h|g*(yA^>Rnv1Qp)>Jx-_fDSbi=19M z)1P+4Ze+DsTv&6Bwc!K8Z%WlalZvgh5p@!zx<96RckZN6i|YB$FIJh>mI?DSx;gbT z@7AgAzlMI~XTtQiTg*N$GzlXHF-g>q(6_j1$BsY+jHPAX=fBH677FQU-4&>8SiQ%B zw=7sj3lektbZ>j2yRxcR<>}!1f_n3!0!;Y{`D|mW_~_TF+UnX5D{tA&I-ToHE! zIgL4R9yo$(kuyCKYgA`;W}MTDV}9n+jbjZRp2$%^<2@Yio?KcM8tlA z8}pLvb}HkOZlvvAc&4M3W2e_ZbYi=$+3_Yd{ZJ}@Z7Q>-#~ar<3m8 z-*>0DV~@|p>8S?+Y#rn60qUlwPaK${nim+#9P_oCy05NsZ7D}LQGKM(7Hx5BDl0l> zslse`Mk=~M2zp*$)k`(vFqc{U)mSr*6|St6>m@br?ds(Ri|TcY;=jha~sh4UiOSh4W)2JRFxJeX;Jk}P#* zisRb3c*ocAsfVx`=^_tsq0UesEX~PSW&uGp@yFaTXGBq6D!ndxUys&SE&#)f9#c!N ziK&UiIVa;OXe>DmYZwgkiqhf3!J+O??q$Vt+pVPpVUZt7KB@Hhh2uFZ32bM4)x)!T z65)5e`yVn)E4e)FjO`2(vcT24JRVC1kJ5)C-y{*4y4RH8;VdPFb@nTIRkL+3(xc~| zpSe>*d+U*S`-A?dAeN}yqxZ%F)z1-{u6`JE{b+v6j>Y|o4q85EYa^gyVd%(%1E4NCE%#J0n<$6`-*rn~3ZkM7W51G+bReRj_ zrJ^Y@He#QJU8ije7Cg!=4Ct~rZp|>J#$I@2ZQ)RCwrsxD@R$0 zqvn;~HG=!^jhuZ`_b~6-tPoaBT{EOBDWza8q>Qn%$8z;VcXi$PN}uR(|~-}?js%=n01*ljlqwV;S4U*@?a12EpUo9Lm5 zQpXvstChmC7uZysJ-+N6O(nlqtyuLeIU(LScBbpyp-ySM`fYKrL^q21REw8*GsyS95FD(8zYToaN?4LJ}pnJZA8OC_Tr=M=ujwcv9T>*XYV!)tQK zYz=)sw!8Hy7pS!B`qO+WP`!D_i2M`m40Xm~H|Oj%kNzg6iv^BOjyddFpL6{&3-wZdHTd-Ch^a%6Fc>zW{Ilgi`> zG3ceQ4Wn~G$aGpGN^8ofdz-3f$+(S`3zggsO}(Bz5jH8q5^j4ijVzFT>?~OzBm4#K^rarK((6sL0hSFQ8y~u`|F6;Mvx&6|wuh;K2M)qTQx_8;A zy1GPayW{ZvIAQ1Sr-x6DI$%L-(07W1=>>OXpior z+85I`YgHd_>=EYSF=Q1=PvUsHUrP|2eDwXh$R})<2#8J@ze%?n>jO7xjwzJwsTBTN z+0InMq%mlO?J_HOu^sPj76b33?q;>rAXWg!O4?nR`{7?zp%dEKc!op~s|- zZ2xi-G6*pYsys_ZQ4RURoIwy)1XD+H5KIQ6DyHlfPl+@s&kTxfyvqzMK#20y2+u!j zJ7m!oZRpH3m$#~!s|c@o<$tt9A4?{`}4JH?wKubK;KWA3I&q(O-?X z!&7v$rv|b2w?)CHDz6lxBb?nr1+KXVItFzhmn?b83@YMy-ZM3lO`<#c`0u9lpM+mV z3&l7s>OZAWx9WH@?TBS<{rsS0%`nl*O!DA7xVBA!^K6wjyGvCN z^x8t@?F~VbvZR#x3ZpKSO7k17Z)`?oZiPJA7cy6U|Hi(W^B;Bv#wjCmJy;DoIQxy& zS<8t8flvL8@D8rE6~8d02f9WCX?)9c@T8fn_LtO}sI{lpJ)ZT9TAz+MQn^nyQs0Lz zExqq8RYfU|gUi|d8CDYCvefTOd5zKDwAP}n{GsFLh2=Fvvol}7FU!Y9KF)TgTQ6M5 zNiQnwjV&AoBw2ZZtFKq*EL}C0GXC?F5 zqKHY4ai>&1iPlG7t=kZ}y0)06L1mnE&g}k&1;gUeW~Yv^ufXqi@fBVdF%rCc@!ab? zKc0ER`dNKm{gEoQR4FWH46|$k;n?XX>j{mCeeY{u>H5^F&7MkIP#@?seR3Ra+K|K4 zG5wX}T>%G6ZF|FO2l-Q9IcmEtLw}Qn`KgoyNOpmMG^;WM$n=tO;y@zzd*ap%3}n(l zU<0%#kj+(d0jl-nw|^D3f7O1>4MTr?iG-9z`_~BnR7mk}68^D(;9upKRA2BtyZ3K$ z{A2$8-{g3+n)Xj{yjk-3M+pB^O8+m)c(Zu!k8u2_ED!dlED!dhK*XRBhy?7&4Lf8kFI5cSS+P$;R8^JiQrO!OC-LJ@Fa zH`*}{cujO?8w~QRtYBil>H{WDs_Xcf9_%-=hl`5;G7q54=$CoG;iA9H11|onj^Ied zFR~Jc{mP3tseWk(f8vN=btEqFi(DX3n8Z$AAW%4Rr>r1Qam3DRKma-KoErp+gzc0) z1S$dDxi%m$QBtwsPcntTfGU+=+QdY6t~CfuOk$^8ATTKMmwCVdCH+DV4phT@zb+Av z0xDsEGA7{lWqph{nqCUAQa~3-3{nz?2BQ&BNi+tyYUu5T2SfC5 z_IMHqiv{6{whYc-K+EqO>bl{H3N~bdD{+ZCFhrF=RtFP3ot=RW7^GS_Z&yz;7@|wW zE4ey*x)2x9B=90fOM@uk$T(+L`(?v0IQ>41k}HvnCz45E#KJ^@emwy2dk^|}lB=hO z4W0ysFJ1qW@nsz{u6^%NmEcUqdjQNjE|v!6)SEqn?J^?r(1gQEZV&`jh$^>;UiJ(!>BQByruB#XOK_ROY~R+PDOV&Jie8%ilFAw8@?CU4 zbb41!Haf zF1jDOfHIa+ea0&He=Jgq3-hlXV}ba4m%p{~kF>E62EWVhPjxWj)nBP&$#;I~8_?y! z?zcMrnL2(M!J&T_!WZ`||A%+{j^Y10hA(UjS9{0bL~+E@V)kqA_#MXoy*hpw$Dw}{ z$Pqtnni<>cWt*x6;_n*%y;%LT#p;)#9QHS%9I+Hze(4o0$6I^gPkih?53~pJVBTO61t9T>7X?9d zJ#6tF3^j=uDH#B;fv20BGv0-fi557fPMhM>EK*|%;^G|#1D-EG=H{OkPW~J zKmlFkg`rrI8_ovrfg=L@I$0^;g$2v10x%0@reJ}2YdaeUoX3ym3sejU#voq! zS-1veKuBdIb^(GdLWo5Oz6ik=A;cmCTZE8{5OfhjEkaU@kTe65f-hY|FG2tvVB$btqIB*l;bfr$U1BsW(#2L1QX&w0oN6a8-4E0wWYT`SbX=#xRb zV71?SQDC?v87z%J0h+_PspARu4rDM&8UPpFl?;}EAsMFcjI#$4(2G8xxR5iKKmeu; zd`W?!P^1(XBaH-HnPKk0_5u%>@X~gKfmt+&)k}f~koG3nC=l(P@qh_Iv97~INqBepYZfT#FuAxa>}py|N0s=-@k#pMuDNc6~?eUzwlQR1{N1Uw2LbS6i^im zj`~>uW~V68Rc-Ub6(5gzbbk=)w2jh6m3G>)djvYOF+&B^BSIqAD6nndJr|)&T)U2* zO~0pURAv$aGU_&SK^B-P$d!z1N`+X_!jzez|QZwRudgdFtg< z(d)USvE(=mob*FM zOl8YCc^Y+>>}!{2rl2OKyl#JeWjZ$_J`=5LDbG}kX`gWB=|6>=FS+J&?SzEdmv3w@ z#hw%24K@|ShiaTFuYAM|l@x9>n=2?a?X8`9^>xIv+yrwwX{~bC+U|@8+Y$n4YmD#C zZ?gUJDy{bcOVg<+pZ6SRzHNNdBOw!;W}gZ%Pwtv#olO*yzhLRs6%dIvB9tH6vjg&e zxFF<9{2H-PmhR4QKd)AhFK0c=yJ1a(Sz!&0$h>VQvzX+m`2x;H!OzFF>f3T35K23Z zAA!~eINF#>l;%~7k{mx}$k;&~l;CQk{?LsB+Fhj{UYdgw1%6e+4kp3tGy3>jjp{l_ z9(u@ehP89Pe%`Bg$SPpC-J+F5DZF+h>#a8oJJ%>pU}ih@N`rRdt^;*2+PG zB0@TcHs|eRr&%5OL*E)x7sMgL`SAuD2kn3%TjmkL-bc!Y?7}#{yp2&oM_PkU90?K0 z+kTI}xAlfjSy=5YVVwuI*6Y)P{K{3fWl^0HFWuW9IX?rQT7MsvPxn|C*3G96hkwRibb;shXgo0 z5~X=Hu%D*+os#~K^_Yh}qwqeo{_Oija3mON#ys_y8{eb(bgeQYGjmr7NPW$%g z%&r~TAzx)#WH7ryo;DS9qHl(FYIME3yx+OfAo*$*>J*&_4V`hjP{i_Rn)RX}{n+e= zDYnzWGeIoJFHeI#A&8mH&ues?YO3bv(tm=pAkDtuxW9UOZYi;PL*|p77^G|$! zYCfAQg)2e_sw5~(kR9_u@gJV^iYo0d0#HpV7T+FZT@UiTrb#aCh zjZc#ML6!HZIO+WUn|fVSJ<2G-==fFpW(`uE$PDlOT4OD*;!In`c`6Pbu}L@N=l z`Zt@_8e^r=St?yJ11Gk-UU|KrnEbS#<-C9PqnU1*z^UfZz>*TvdMsA|+1N&(x0mG8hIIF*7`+223_RqIYCh1{M;OxcJcE8VvKtcM#?>;e9r>_|zEyyJUGBQ{~&Cu#&Wh>Obj z+A2oxcDdMxc=tu<1>xBXp%?bgp7(W&#oru%bGSrh@{0ZYT6p(B-0)b#q<2lX3$)t> z)t&CyAU$mNWE+E`|I^10Q`o3|QUs2<=eIav-GL2Xd0YH8atIks0DqP2 z@BlCtIMN=*`|f;h=jklJi=9>%2^aWUwr})(kEzy?fg-(NEH%dC-= zJ%6*uz&qIqKV1}MpKU%kd7-8MHrV&vwUp7zJl|{v?i1!V_zg+8IX&mUDhyV#3UoG? z_bD)Wedi-CChCe6&*}DnuB5Ml1#**H_H>3r2ad(O`z#|he5AXomHX8TK5Gqb1@|^) z&FP(`YI=z3K%WN+b<@WlPbpRm?B9dW7duoT>{7?<6P>cxIqxYmA<=DjR=pX*Oln&U z{zfQ?Fq(ey;Ly=q4-_3!Rre!>E~Z^PsqXpgz5@4Ka~XW)w{k@A&Ghk8 zFc~Sn82UL%`$po{+o~CykB_CG!k^YZTPHZ7|NeSw=2u5|x2%2PZI8}>I%IAv_f!#| zX}iO0qemu(iJ^I)gk*So+w-y+;^Yq9BRi=4CPr9&T`EXAIKXWtGxPB03Q%@glOx5~!uX7Al=bL;{%An)J< zu9lq3tkbFKhPIIth9Xf_EjyKD+$3c4w+N(KvQ?|b3B|!3pgDHyt=^92-FdISYbrEv z*!h@WbYyKXcYkC1g?*ieV(`21*s9#q1qb%s$iNCUz`uyp6j4JnjQ88{LG9A4RlTPV zRO>6H2S75iOrh0!U1&NgysU{!KPd}mW0&2R`@Z!|f^DIJH%n5znrCTrs6N>%lv{5r z@<^XX;wiN(6CMNNrWVh@r*|%gI=<3t5c%lVN78u}av&j_>rq6&p59%U{3wdAL28J# z77v6-hPKoMJgf1pjK$_`@Dk1C(P2r)fjAE#6H~beAHg5yt9lhCU%-SKpR@5;xi|Ry zvA18K5mtO)uLTDwGQ2~e#y%mPE1YUpTJt8W=2S9A!aYl9^$7PXUX{%=lw#uswh{g+ zt!oNlVfg4yK1XR4z8>9)OJ*+lwHeIPX1vU1w&@o_f*xs9ki2k%Ca+ z)%y3xi{BJ+?)7TFIB(6dCno7A{_LykgW-k}^U=X>o?t;=MUu)0jn7rnSX)P*7+E#a z)Of(M!UM08%Lfsx6xs3VU|N&MTLCli$^7FwN~t$<>=imU_kR(sN^J^#IR0V0b+gga z#4b`nHZ^+S%gto$BS%llv%7cpRP3~}B&HN&*M1f%~s__iY?Af=Qacu z7NyAEwEl7@XEW11!3V8bn;#@Tl)X}4NGWL}942>0Ju5q#^=@M=rf1AP<=$Ov}b0;W?>uK4Mc9y49W(*Zds8y z`~gYzT4uAsu4EY)^y|q8d~=1hn2Jo3ieN`@;&nTGsEbw$^cq!a6GT7PTmX zb_`VEM41mmdd12|n7fOnJ`1>D6sx)oP1@L7)|+WN=-)qJ66usi5_J+vPt6ZhVzRJ& zB*W#VbTMc=qRS!mlHeudeo0Ty=9_O+gg8vsHHHY;y+ggY-Weq)IznZAL2uG1=(yL6 z+SP6n`y~>#x2Y^YwgW zZ#h)fY4CzubTU2_Sz?zbD10=j$-j!D_`IiBMsSxd_Gzq%WdyNVe4DVcW7>J=l3AC> zkYoASlq+G9^^$Mlgb#+7zCC6R$V+eNu(MU;nT+BNNv#{ssAFcsKgk&Id@Fzz*LWog zzIaN6)%=S^otl+hO1(2TPvYk+Cs5jjbU9he&5AwQ=ih{#6A9^N$q;mj<#&(BAG`lT zhlOB2!lOXe%0Ar6WiJtDjBUq%p0;*4B080SdFry3V<={aO`53CTal1d9`W$8Eta5h zbaQR2zYn}eL*d>|!^3A2&*p6BYBi^EV)8yiIef0aPmRa6T`kK@?AiS04aIXz@45jh z7RHZKF+7(qb$kONuH3SVvIly7Q&MB9hVk`5%7nIAIav-q4=+=v%C0dr9vZn%yB-;T z$ivYwL%Q>ro*dMuu2%I83(KUWnlZMtLR3F$E4xO=S09B3Bs*hiNn&fW-JCUBD z(AiO~vK6+0Y1<_iRn?e%)-V|kc2X#)xQ@f!PmhmD&^7rrjiH<1T(#z|j>>%J z16(wf^Wq%FhUo?F#sLz%oe$O|9F0jHI?;hhu#_oyHQlSL&r3Ub_C;iTobA)M4e^$D z--cGyZFWiSY3Qkz)pn||sV(cy>0+aHkL==>+%s|b`u1aEg&|X97MFy^t@9~~n+8e} z;YT*QM1>~KnTEP&UT1BPx#cX~9D%CgDzxU3sIiSkZg=?H;Y+{#tN?9SU*%qaD172> z{#IQpJq5O>yom8QX6ZPUTU^R_ zb16FRH!<;%9MjaG-mKN+#Oz@9HS7GAbs?2c+b$16CT9G(o2H+*D3nv0Kl99K?K|Qn z6~PskZy}*izZ@#g{}|kOOTXrQsObjhpf6Lc9r0RW_||mykSH;UB%Z=uyrRs$m=hUQ zo86i8+dv&#qcl(LDacu{rKjX^!I{QUA z2}?PJu}%yr-xM|~2+8z|vuE!hcxCk+%_}`Z^_JF*ajYp~8-FXM%m13$=5)63Zka+D z>#desYDpIP1|*&VFKJ!Nr@g!LJ7Xpd4_cmm*n3_l&~xM{Pdm~($_LXPUG{D^{aInZ zaI~xL_Ez2eUduf?8Yh_K2G5^o_etI}f4{8RSk-Y$xu}=i2G1t;uC{!yB*CvzF2iZ( z$6>wk7iy04G+iBa#wMzR?2W398sXMm5%sYf8>HJ<+2zNJYhP00d1K`JtnT$x@(y+%+u3J#%j2$VxCb&W+b4ycQu8L;8Ul|T zW)8Vis}->+JWPUjpX2qiX61BjUA=`Nentm7=ktcOABL6wR2;&hD@loLKJ3%mPl~>9 zD()b+N*Fxtpi=wgn_4vjBm9y*0>vKTnoeiU>dm~XB0`)iMWAh{`D>mov5CiIW-JomrhTXv8Oo{6!6$b6`IZ!4^);-wX-MeQn`B|^vd=Hc9PO-1~*gzvh+JuwqD za>Yl>s5uYqDsI~+ZuuN84Lld&QsPe|-|+RhPV~$v^zuLd z4B>kI(r%*taM$6IOGTP(AC3>6IbfOn^%8#+zp3_!7C958&?``i@dwvS-`Xv9$uMSH z25S!e@u}!04bUxz_bsbJFTB5tRxLc-eba8T&6id-lIg3~L^-?rd0>@z5-j z?xRwtg9{qg+ZAjzn4aPLalTU~yjf*ZhPHdX^F8mL+ou}l1ZKFtT4hb!wS`2Z{H{&e zX@;rm5yA_oJ&IkUZy+5mYx6D?m}Y)pGf!`>xnyei#Y2m5wcz%%E~yb-1IiGx`ry_4 z+LzX1-eTD{r#-X_MR*>UTQ)`>G%zod9GedaZu>l6;McEaP&reAV_nxZzoxIj9{P*K z_D`j8pm+cViczXipdQAk76PgJALT7`2vB1LLk#g0pys9F0vrcYT>4d7`qfxoL4z+p z$IYlp{AV5iR6YJLJ6>K|{ZBdm>D2Ro$?@_k<$uZX!b!Xz^_~Ba*Z#i=zxY)B+Y!J_yC2FhI2n3dJz0!e*k&s)ZB} zpztgOMo5Dgmlj`O6cPz65q97oIL4V##tTgRfrCl|F1Z2+Ljy+#R^Z?$;B3GO98gtV zg_B0E>JKU<4Oq_4v_OFsQ2GiS0tI;S3LFwB#ID4lQLDy`O(GG=NB?E*s<4ohv?T}K)RWd-rq*k{>FrGPEL5pG3rGLhufKv&pa4_g9xu6iM zYy+@nsg>;j9A>4gpfCh_rCgver1VM|KmlE@6oz3O!}%Ep zmtvg4U4a7(dNmHSY94SHdeuDOaOq|9Aba3|lLf$G58&ZI1Hwr>!+#Rx1ln literal 0 HcmV?d00001 diff --git a/test/alias_in_rtl_text_side_by_side_slash.pdf b/test/alias_in_rtl_text_side_by_side_slash.pdf new file mode 100644 index 0000000000000000000000000000000000000000..228c92a35017c0dfed2f17e4eb362df0855f3e81 GIT binary patch literal 15331 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 Pz~Cql50A383h4g<&Ef_S literal 0 HcmV?d00001 diff --git a/test/test_alias.py b/test/test_alias.py index 6be4a85532..3d0f70cc32 100644 --- a/test/test_alias.py +++ b/test/test_alias.py @@ -180,3 +180,100 @@ def test_alias_overflow_warning(): pdf.write(text="Page a") with pytest.warns(UserWarning, match="is wider than the reserved"): pdf.output() + + +def test_alias_in_rtl_text(tmp_path): # issue #1925 + """Alias must be substituted correctly when surrounded by RTL text.""" + pdf = fpdf.FPDF() + pdf.add_font("SBL_Hbrw", fname=HERE / "text_shaping" / "SBL_Hbrw.ttf") + pdf.set_font("SBL_Hbrw", size=18) + pdf.set_text_shaping(True, direction="rtl") + for _ in range(12): + pdf.add_page() + pdf.cell(text="אבג {nb} דהו") + + assert_pdf_equal(pdf, HERE / "alias_in_rtl_text.pdf", tmp_path) + + +def test_alias_in_rtl_text_custom_alias(tmp_path): # issue #1925 + """Custom alias must also be substituted correctly with RTL text shaping.""" + pdf = fpdf.FPDF() + pdf.add_font("SBL_Hbrw", fname=HERE / "text_shaping" / "SBL_Hbrw.ttf") + pdf.set_font("SBL_Hbrw", size=18) + pdf.set_text_shaping(True, direction="rtl") + pdf.alias_nb_pages("TOTAL") + for _ in range(12): + pdf.add_page() + pdf.cell(text="אבג TOTAL דהו") + + assert_pdf_equal(pdf, HERE / "alias_in_rtl_text_custom_alias.pdf", tmp_path) + + +def test_alias_in_rtl_text_rtl_alias(tmp_path): # issue #1925 + """Custom alias in RTL script.""" + pdf = fpdf.FPDF() + pdf.add_font("SBL_Hbrw", fname=HERE / "text_shaping" / "SBL_Hbrw.ttf") + pdf.set_font("SBL_Hbrw", size=18) + pdf.set_text_shaping(True, direction="rtl") + pdf.alias_nb_pages("מספר") + for _ in range(12): + pdf.add_page() + pdf.cell(text="אבג מספר דהו") + + assert_pdf_equal(pdf, HERE / "alias_in_rtl_text_rtl_alias.pdf", tmp_path) + + +def test_alias_in_rtl_text_markdown(tmp_path): + """Markdown markers in RTL text with page alias.""" + pdf = fpdf.FPDF() + pdf.add_font("SBL_Hbrw", fname=HERE / "text_shaping" / "SBL_Hbrw.ttf") + pdf.set_font("SBL_Hbrw", size=18) + pdf.set_text_shaping(True, direction="rtl") + for _ in range(12): + pdf.add_page() + pdf.cell(text="--אבג {nb} דהו--", markdown=True) + pdf.ln() + pdf.cell(text="--אבג {nb} דהו--ABC", markdown=True) + pdf.ln() + pdf.cell(text="--אבג {nb} דהו--אבג", markdown=True) + pdf.ln() + pdf.cell(text="--אבג {nb}-- ABC --דהו--", markdown=True) + + assert_pdf_equal(pdf, HERE / "alias_in_rtl_text_markdown.pdf", tmp_path) + + +@pytest.mark.parametrize( + "alias_pattern,literal_pattern,expected_pdf_file", + [ + ("אבג {nb} דהו", "אבג 12 דהו", "alias_in_rtl_text_side_by_side_simple.pdf"), + ( + "אבג 10/{nb} דהו", + "אבג 10/12 דהו", + "alias_in_rtl_text_side_by_side_slash.pdf", + ), + ( + "אבג {nb}-10 דהו", + "אבג 12-10 דהו", + "alias_in_rtl_text_side_by_side_hyphen.pdf", + ), + ( + "אבג ({nb}%) דהו", + "אבג (12%) דהו", + "alias_in_rtl_text_side_by_side_parens_percent.pdf", + ), + ], +) +def test_alias_and_literal_side_by_side_in_rtl( + tmp_path, alias_pattern, literal_pattern, expected_pdf_file +): # issue #1925 + """Render alias and literal number side-by-side in the same PDF.""" + pdf = fpdf.FPDF() + pdf.add_font("SBL_Hbrw", fname=HERE / "text_shaping" / "SBL_Hbrw.ttf") + pdf.set_font("SBL_Hbrw", size=16) + pdf.set_text_shaping(True, direction="rtl") + for _ in range(12): + pdf.add_page() + pdf.cell(w=90, text=alias_pattern, border=1) + pdf.cell(w=90, text=literal_pattern, border=1) + + assert_pdf_equal(pdf, HERE / expected_pdf_file, tmp_path)