From f55f90352b5bbcd2200631d2e91f0f76ad4a7136 Mon Sep 17 00:00:00 2001 From: minjaesong Date: Thu, 26 Feb 2026 10:44:21 +0900 Subject: [PATCH] eyelash ra --- OTFbuild/calligra_font_tests.odt | Bin 14661 -> 14691 bytes OTFbuild/opentype_features.py | 17 +++++++++++++++++ 2 files changed, 17 insertions(+) diff --git a/OTFbuild/calligra_font_tests.odt b/OTFbuild/calligra_font_tests.odt index 17b552e6676e50ea56bfa2a79392c18b1a7b5724..687354a7abd03b665ebf94cd6636f96791c0beea 100644 GIT binary patch delta 13438 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 I*MExt1pF delta 13390 zcmZvjV{o8B*QR4*Vop30+qP}n&cuFV+qNgRorxy4ZQIGtTf1A|e!F}A^pC!~>r{1B zpHtUeXU}oS5kWy390DEWKLMp2k01>OrCg`E2L?bXYw2`FGJ4|w+xt`l0fGM~Ft)dI zHnnr6bGNlQ;IUOkTgliuQg^OXZD|a_63kYtaU9QXa~r;Cw=VaxpYXLN7O)aZknJyf zql6^`1^qRjf}#+T557YSD^bhL{8QhRpJCDEQ>X!Den^{@-!S(sE0r%BOCnCAsY%TR zD4pV*@|e8)Lp)$Olehaa zWpS=lzDXxQuv7Q7f#^B20`a>*pQKk;-YH4L*{w?CUdh(N{6V>&m<#uBHGF^CI!>Tw zPL-7%MB6_GY2m=p^-U!c--BGL;bOTikruI8;o!y{f=4sv(eZeWwvo1TU-r&P%1344I@=fJs}WQ5whH>)iVg_avxmbrL4)#Gt#sWP|#gn zfIa+Z^%kiX%ql&V-0&Cr;@hpH?t_*>^Fs5+PT#A)cB?rh<@UB=nd$oty0B6H$`vUI zt$vsJEJ`aaa$~;i&TB#=*)=v8@`sU`sG$#wMD<}^cvvousUq6x?ITC1*$<5XpBnp>%a)2vS&sIFEOYVEqG_&8b%p%0c+*~bhdF6#+Ye?6 ztN(Xra%pDtsXJm}v}2Ohxty*i5FQM)6J2f*Zm{2#3x?a&?S$i8YORK&lWtk`YXRq& zbB)AcZKa{*V;dM*!(IJyibgrIw`6}nWahIvwPYqR$#zDynOXBo6xQ1?l07+fYO|vh z=X3KeY+tZjI8ve0d&sp{sb1yWgkSsBtH#PebK%TJrSDrz!0R2K(H>&tT@psFJVjma zoX==_O6f?hTh1lXT%*`FD{jZ<8Tf|f{;&{eY(Q1CEe~M(s##hmH`g~p^6v~B-Q~V< zb$plAr)2NtMrSA`$i&cv*Qv||Esys5)XK|w=D&I`ea+|BV!emW5AhuIv*sf=!_^E{ z_u_j~h$2h?mnkGwc9S0`PDYYRMfz*7ViqEw{({1k>!hEv zez8caJxI1I9V+UAhE5?49k3%EoMORo$~(ukJ_6>+Dy%?x>@Itn?^%snyOJ0>Yj``{ zU2F?J-2!qx9M4_np`h(}ck8mKRm z-$#yHt>-Ca$_-ocjnpc0=M`3l|shE;)f}LO9ptbt-vLK=YDZ?<#a4fo9{__Jr@+*4F zr^EBZTeJ0*^|zMvFWgVo=C=FsW3&D$I{{dtdmeGnYKYD!qqo5BgntOg*w~z9%Ds+(W&=Gll-d7L$mn zolECu0qxK(kn^X%``?+{>`H_doa9dfitI|ne&;#{$oki2|4kdUWKJIr755vGu>#C) zDWl?{SN9#-aKoht!^#vpksZ0j3@?h(b%y*^i>M{NU_~+GgMyQ?A;B6gN{nDy#C{eL zv7?;Ntfp)FVOSZJpro{io*l-=?9(JbK?LK*!wE=o`DF@PApi0^F}fg(Ie9FbeATMH z8DUwJ*@K?bV2M_p3riQ9XXze3dIL&ss?xtJ{pAZAoT4VMh{oWT*C5S>sI> z0+7>C2v$us=IGKA#z^o$lM==dXIUa$T)t3;Pa3ew-Dwu$NE(E3G6xnUi7Q|ijRyNj zMlqa5S_4XEK;Rcm`X7o%@Cf4WWt!Vx&_tjcFybv?S^alz3_I7fdjWX2(Wh4JGIH3T z5aFxE-udkvZ#tn}=s_n{{@ZHzql*GT>&CGdi!l%_B>eN;q$HNR8;KoX4H=tVAKCSp zNS7r69Zut89oLSsqsG<-*kwSOrKX0No0*k$9ze}icplONjvE(=V_*rP8P)IO=I%hv zRF5%wj&wHG0i(0Jz18Fb8McXw9q?JTOnR{Kq&&9ORK9TzLYy^gB>r{Y*AaU5mRA#5 zj~&h`S+Z^o7BN~Ox`iljJJb)Yz@g+)qoEnP3#A_yTavw@(7BkO_5#>4VSm^dAQ z>ySEpKrH>SPb7Xu6x8SE3GE5qA_TPqt2Ru#gISek;6uD1dY9{mytwAjA;#ABhd+b> zW#fVD!POa`hQ9tlan}p|RDEXM278{yeMjm|4z>#2mTZL1!^s`IZM4 z-B%xLogy~wFTVB&C;}3v4&C6a4-lJ9C3e$TiRVp+D9W+Dhw7dCL%O#~X+zMqqf56v&Q6^{5Wv?+B|}N z?>_H_i=&iKm8ts!iy_G+$r&*K!7#e?$IYeW)6YSmeUJ1RiU>en@C^Fgs5z$+zGEq$O zbci#WWJ;q#Rpi_NbYd3rfF?Ae^u`%~rdYC(SEvf#14=uVKK%xRnXifO&Bhx&=s^IoPl5xFstV0V+iRK~&LdQqNsw{}(v$ozB(=%j9(C50m08v0ElzJO4g|u-~-QLOE5NIHZwc@oHKk77-L|aSN6t(r@Y9G`OKg zSVrL2%|@mXrx+Ar*hflBiqe$9Z&1?G>jSXV?^d_{PaG)9n zJc1YGmnN0C@yLH6?5}#_qItxf<^JG~Zwq)dK^dA5lyFUlp%+2WOFa@nq1#m{nMYN$ zr)*1#qEsrE(@DK3v#^fQ77IrmySm(WwqD3W|7xhGR_4|A!l7DZZAq^Crq`Fp( z88dV~Qo(^nVb#zZ#FFL{y2Y^zDlCwy|CiiT5Ctd)nV`vulT@`#|2r``+;sx2rm9*2 ztm(l^Uf-T)I*%G`bW`}1IX9}_zI8u>N}Omg!D_iNgM; z>28D3+PE|$elzuR3Xu-zVBk2Xk_FLQZUFd zjvR6^eakR^K@?%oIO;&P5C@8{#^#*rZN+50<~5(bUN zHfK8nL*25z@#q&iv#IBVk-;?^QxwMyA`eezVK~@bALA$*PT- z!jcxtEnIA5oIYsa%9G=N*gJ}#_?A#J^M=hY_t9oSaM7ms3C*CK7i1k|^a zI%ghQSFg$?MzRW4IVYnoyyxrE3gs#s$*eK8a)1#YrpRM3(#BW?cc_V#Ngu7MSRVfn zuT-BAZ%aolgItNXVKW;B8nh~uBSLt?(GJMqi5I6KsJQK~Xc*0{C4@_$#`~Ny8y;$u zq0P+rC&~dTPBQ+<(8n~Jp2xy#lWN7BS_(`}kz@vzw@jXB3Pvd~Hx(2o%<*N8XxFoQ z@(H7Ak)mR70-J+cCBXx>%@cK4*O<175RPK`lcjH>y7O1+mgk8;V1Zsd;b{XdRBUPU zUsP(?lmt7AMoIXG3l!$a!T#YzcL8$^leVxl15L3IY6|i-=&9g?z|gp3AspisZm?Jk zHaLdDkU|&y#gW?g^qEBg_R&G8Bm5`4|jQ(e2Qi46n>k!HG>ry zwbS-a5X9w)D6qh@u2s(t zo^@7W1l#1*m-dRYSOMFy`BBM3b6>iYn1tnEh9% z2qZmPYM0#S6PTn~y^Q8HXax(ZYIm4w3(hr)`w-8im7f6;HaSeGZkdL|8qGSe9;mgR z_Zf?1Wi5^))8KG88S2?0p)RdzsV8LH^=2AwT5V@7)t0hPn;o;BZS9}(Vn0?6#<_1y z6+_|#mZlbjBDY~@jDIVtdFToVEn9_)n`^L&KMY4o^(Q1FN=1v51%o@1EQ^VGaH@N= zO+}Rb6zT?)d9_FadDm6L-fJjm5?ctb4o1%NfK(bl9M2xs6 z_nY9jIyGM_IjJq5okgL&?IU1+osUP3@mKhUj-R;VJBnEaCp8upx2PXlz2xczPb(2S zcYMR82&%{xPw{+s_oY44@itxGl#}b6q(v9fBIW^#xYoajHYI$*238KIv*SKT|XoE1f9?A2}y=a=4*lw3eSh|$CcdykPnEc={EI2H*Go|5 z{B~4#fpUxw%Cz+tQ9DT~K13{SwN;{}sjh{YR3*4}v6)YVV#&B>sb?#O*IXy)s>>6| zA&=OW*yQuAx5XAoPCRKzY)D}JMhr>?TI=-olDU8r7Y>P5`Ox#CqWEz!x#g28r=tY^ zotM=+Oy2w6^>JcE%$6^MI>_%JU8uE(hV;3V>>NNAYCPGB{5G-6uebI&^9A<5$s^1^ z@~EY=--RTZ4E+x_vVwrXfg~nikpQzNedz>QIb7KYB0{LR3ELnBHc#^R%U?_SvyjhV zlmP)`tCkzDapC^rp?XBRF=(A%@cEMQe*F<)re9V*ouWRS)SX z$ok|I4PCap(GVNkVy8wr`s>2luqsz=8mo%^*-tq^Ckl9)A&4Uf2} z7WQG-;TvNcu<>+0UpqU7_W%Q)V)Fxeb?0t?wMD6E~{x&N00|`FFYvD4zF0+Y)IHyH6kHy_Hmu2j;@UNP!T==MO^#he2!! z7_r6lUeQQCo%qnEb^aRP|5#F*!2XX>3nhKalP9cckQUZ{JPhBk{yy{arHnjQZ^z37mDnC9qgq{jx)YX59s0By2q3cjDp9Nr^Q|s zA{d__WP}skDw(Zqhlga3D%29Atib4A>ZgUuvc`{}kJ)jI#weNrzTJ?C#eIIhs3 zesfyB2E@jwn|rvL^mfzJk@wvri-?3&l!$O5{!MQxwT!XSEex|sOvdw5`g<#>N#NFj zdcq){LK6@uZXYpDTw2mHPM^6M!wrk*fMj(d&M?(G*c)<*c`MVELb;m-G1C^0tt2`u zHk-(Tbn!R;rEK;T|Ga3nWPz@+n{{&_N1MKY3}~QI&g^Br?a5!SxCP|nU7SC!WL!!K z2NBhiAIcpC=5lx7z@N)}RT0 zcXjT>;c&ycCOzl}amXr^%U;@btz~aYagORkUDMG12K6dH_dq)D0wN6et|mg{(B>GH zfK_@QPpY1*%Ca2!+^_MM&a}6Mz=ZZP%QSCu4i?oX?55iGcbXQw2bw;`Y@OcfD<3h% zkOg&&1&x@Jpw`DGNHRk?6=A_YLy2imU33w zx}IZ!R!hqIC0%JD2KGUV(;or`ZpuDCfN9&M4y%;e0e0V9>06ja9$yZ)kco0G^&V$* zFU(w^1Sc8pZU+vklfY*q@6PL zRNS0##Tq;EGe?y!N4(#SdY!lL16}Xw-hbu`bxTjL17LnRER?(&)U<;o^ibIAxLb;M z#2(aDh3m~-k5VWR^xZ0)&@(&{AUcOEWY@UE!yvC|P9ytlf>NY7wWAFX!4 zrltm)(Jve+X_H%`Li^lT8}=FkSnR^?L4YkO=rlU~maCBCNv=fhZ{@#U9ifMkP#fWZ9o25n89 z4gX^dMkh$y4G>`mJ#hvf@E*pCqnU6=O7Z$Tfj|KN-W%oTFVB<;taC~$v^ClKiot${ zyNP$P{Wojl1o&q)ZtWr#QcEy3u3}r=qR>+S(RR+KZDixEBc(Sv@d(OB01+bozRdPT zmTI=4Wj$Q2Wjz8)i-63HycVthYJ&%JLoTH3Yc}xdPYkD9VgseZD9H!R&LAUScGqZD zOXBlT{<{DR3PT`0TIiY&=b5|w5qJowihoanT6O$j z0+T;7?m`8X5?h8s30W>F2x`D69p_L$KiXcN-=e|AsTch)sw_yVp&-c0@Eu(Y+)-imC`jY}Ph<9fwnubCMLhW!ARttjARyQviPs#s0BssH zkLuUguxkAi!6<>g>C|6`2^&*g(t7p7Cd&Bau7qR^q1Gjtb(`IUsIvsJ!l<*=Go`QC z;j5`VF65_8r%Cfp{hFmaAJk~XCd$#}5f~U43Ktiml5H5s8gnv{?V33V<8K^sucsQ2 z-@Yk4=yz2gtmhk%6B)c$!z+4W15B~B{Tb=DS%~Ece7<4=!$a8$+1Du$5g0L&WvmzB z_oBb&sn5?xkzbo@}40Eit)GDK?IF z<))-!qiJkplRf>KJxB8%42mQuKTw$tz~JiT6GX2{_3CZDZEu(li>^2<{hVCYrH9IMX#K-Y*s z30YHBm28k-)^Nc>Zzkf|e{*zXXJ^MRUJsGnkL02=2{&8UeG52n>`wI{GdVh?n|XhJ zbS3qO9uR)J&P~(EQB`3qCo_yt+q$f7_4gMPH9gQ%8-?7Gb3b}}k{lXpxm)sGtMIAQ zku@_;9@P2xlx{!(xVtSjmL0w>NlTT4bonSvGR1V580WX-DdI%6m{59x#<|UR_UB88 zgVIdc-+s?@`reheO#mzEn|4_$OfAbDqe{n@x}|Y(OO)r1F|sN8EirQRg^i6(E{KRt z6(#tCnulCq5RnlP>qRSeiYWY^_amb#EBQlOOTB)%!9q%a&~BSs-v?Q+VJ!EVKW=0hetNKynCP6qGk(>S6MsJt(VsV z?82t2^S&|G>R%aI53T;>h~HnkUM;=Oj`v!0HgOFNhgEuM*mtWo z68r}s5>9n=zSVdPj|e53C_nSnE)Sh{ftEIOPQhhA>^GIaxcDJ#nKkOjw>5W^euOq2 zq%=31P^WQTbKC=+C9A93yxrMfKq9u#uu!=~ZcL#m|OQrWVh`x@X(Cb6aYXK9H30w%kdJw9gu zFaK&kOUInHrl##wOB@<{o>sBAT|+%rYg@eY3Ql@v=9!zT^LimsyP?L92fkM4*{atM zFL8wj`^`=d*`x0`~g6w+DmhHlM5V28G7#YjiYljsS%{x4wAJDT%MjWsYmJ&tgNg6#?+Fz zfzd1ES=KrXM2_Rf3v+kt%8I7AC0ngC7!y;JXoxUB;Ft{C_p#I+CnBz4`fIvayvzZN zRfkW zf4MBIWBvPFw`9L}Xn41K%?WjQ4O`E2XgT|P?uzH}v`O1zQKqvaCgv;?c}OS2#-E+p z!zIIPaLoX*K-~)aPs~$+Tt3^hw;SQcrYc&_S3=)%`^}-D;sVtN$AM!&3gxeovwbUv zDhVos9-W;XEaqc8Cw>IOcl$!4VuD;YN=wVI*w``)z1tt3`+XPBqPfJwKew9bqk023 zx;pEN*`xCN`W%y!lS9eLLHYUh*S5CEEgC!F5he%MvyRhUco)$7%Ow17mQNXEG}YCg z1l|9VD@1PxMLMxCJy;t7fxNQ{Swofu8ZWG4rcO=`SdWRyoRwcwgv9$Ne#<&*%5rZb zh2n9+RZ#ox`aCWa1Z#^efw(xou5ToLKHoD~(KGZ_L~xLtTn~>94s7jgKbjkZco6+& z>ONU(eD)7cB!RsbABnzcINH{s>{>c*etPC}pYYBNjUFByI#5(gz=tg8F-57?J{pS2E$(~|ukg-}9 z56d06bz^y$-b&y#^@^aR&A&S>oy2Yx6_tJlaJgM$PI%>^H>UGOyW&$dWOh56Vx{hc zhi@HNQk^E3cnt&a^5YZMZ+ykTGm({*nJfKu>V#CMM?3^}pbm9*vyf=N!z;bM>Q) zay?CS!B;CdZshFl_CdGTG`lQ9!3xnP6%%SnZ8FEHH9Ua)cJ)DOeLluEC~SCm5en6h zxx5&%+XunQVOqX;Na>`ly&rFW7k}fGrl%*$tEy;!*Iuh`-F`?Z!ID%<*|{69g{!7Bwgr5$r+4da|^niSHsbZ z(GCz4>^o9bSelht#I9~BVFiiw#LslDv`b0Z_Id$?i{6g9PyEdzmN#J5yWT=oNo=Hnyb`dk~pf z1kAy8*nVY8( z%@mHyNG{QMX@8R_`BqZD@1Kcn(;n3JB3jV|)nTq4Cc=kr<@xDB4H z2{dr5tAteRL^PX0Z>2#94QoduwcC58{V^ot#MhA^&_J8YKhc> z`;LR>HPn7UJFy5lP+y+&sL&Eh0OPmcsE&g;hI^80f0K1@5g!MKgbbf)?K)*-kgRBn z8bM3b2|4|{ySrO~SYr9WDXojwoE%~8Ea2FaV_RT2L{n3faiYn=?F+dm`GI9`Yz64E zS3`=CibHnf7jpMH8x7a<8-X0cV7~E!yoMr@eW`~sI$hH@H-qZke-l_oW)u0oP+e6N zH|PyzAR#Gf>3Ji}i%Ia)Z0=K&=GCT=D;HsT<+UB2!HH--()9E=$OE32x4yP|7j^+? zsTa%OUm@~mHb=+E@AfVBc(sg`5CKH?Q#$FF(jrr_MAyKma+o8Et3Zj&(68t6U(?oi zcU8__-DG8b&D&i-UTLnFx@xK*|8#au|9srMmLgzo!o1|;6LTFSsMIDm89+l&mdk&)3Sp(MXS|A3&+x0=QZDuP}Zkj?n;@O)MP z#B~>vf`Qty8NK^;LICn%7cY===}jP|px>A`r+*vi(WB>={&RX9Zxyz}6e zDPlS!7D#@v&>r_Z?{+yz??wB$`@I=v1epA$z)^;SIQH#S<%J`}WQ*CME{0fuQdB zt1drTl~1@ZA`8DE187W;I3~lTUB0PT5#`;nprLp2@_gMHo|H34#qoTVDkRj>cA}417&mgEAc?*H+zSGn$i71%E$fRzhqE}VVe=oZW+(o1@bp^z4~*R(OxvKdawK?_xJZf!or-yK}&vm=R*Z343CVklI*HQ zEW$r1edEGeS*c?tcxNGt=8Ggm0~2$qi->S7{``TqS^|_fD~=?boSe9xfmk}QLe=}% z-+0aFSFd=J>1Y@JYQkWV!s>_-!Vw-#-K4}HGu28t>z0iw#&{!3$^7_JwPA0^dbUEP zSH8a$f__Wim{S(L@h*Hm$Iu$fMc=)@6})XXU0b7#YuiFGu|;4sxg3w{>FKEz>I*Wi zr!?$EEes$P3xfps)4u3sUH%|zi~nsE$MVCpLM*F<8tQ70NiBhHiOtzu3QJpWqhL4{ zC8UFI&_J_iEzthGlQ*uMhWf4Eo-QsD6R93DAFI@NuC&5Z*he&?kNE9( zQN`EfPqx}+|KzS^oP_9$iv@gm?k1(Z;a!?M@K%81yOJz#!z(;eNpo`<*&pr&R#u$7 z5Lns+#b@KIyE~`xY6cv0bMtn@>FSv1*fZ51!q-@0UtG9_BpcpW%0y{E?wT)x3`9Md z${TENymAdwLr2G2lLqtlm1r5ap|o^lP?5>iqpR+AcXl(|FL7~kB7{R^+|HHfOK}7z z4QxQcAA?B>r!gmp-c#oRw~SNu)&E@>StlVOVbvf0FC@?O+#BmMSLlJ&SNX{~)pI#+ zYiwYmGEG=bJx=UbP_PF&28NHx*@85`{ddlY2AJ@0)uv{q@)?+own9N+3(_$JY_M}@ zf*?M2}myZ;sEt@xRWvv|aj9yp@(YOU1BNcexN zRR>4M-8)O1x97TumWB{#a_pDNd!^BAn^_eVeIn{O5J#;0As)KS8}OJ$_`ADrXi&1O z8F1q9C4a;+7$H>60z{j8_Xm3{g`qru9S?(QliPKD0ZC+wMa7D;iGM|R^DLWkY+P!K zM=}aT%O0_pKMwO^Gp$ur{s^|SP?P~hkT#d@smTo4Ew4O&pDqR`cC$9DG{`|Q{M|m% z-?o;(H$lrY3;B?C;g;n%x3g}34X9l~(gJ`a(eT293rJM=cQ)_$_wnvq3>Gq?8^K`M z@UZPQ_kKr=HZ#-O;sW{tqaHJ?JJtMfAue2MJl6|i*Jox>;2}{4Oe^J{O7e*EC?e2;NvlmI{P8QCr;^MM{T%7sX zmsR`1hnhzSXcMnU?vvE#NqySbkd1K@b8*A#b(0wpbyyPCVU-rKRRbTTjD7B?q1y|wr|>+bia*V|&9gF?Ff ztF)ybwFXA5-cyg+<#yC{5Rm#@$Pg`Rfd<{Z^dC+u8C74K7GdM!$Ot8|EYFsh?JqA}*aEKy>B($)@dkxyTad{f z;~U~PpL8aJjC!UV+y@wJ8O&OVMHmtF)cIPfGdLU*_+EEHEe(yZWQc*HWQ-~=#|=*> z(7wT2Uf98Pxf4KR7p8)|W^3PAa;voM|TG*WUpzevR MoD@*8?Eew`4+Gr2_5c6? diff --git a/OTFbuild/opentype_features.py b/OTFbuild/opentype_features.py index b4dd79a..9a69bf0 100644 --- a/OTFbuild/opentype_features.py +++ b/OTFbuild/opentype_features.py @@ -552,6 +552,18 @@ def _generate_devanagari(glyphs, has, replacewith_subs=None): f" sub {glyph_name(ra_int)} {glyph_name(0x200D)} {glyph_name(SC.DEVANAGARI_VIRAMA)} {glyph_name(ya_int)} by {glyph_name(RYA)}; # RYA" ) + # ISCII eyelash-RA: RRA + virama -> eyelash-RA, RA + virama + ZWJ -> eyelash-RA + rra_int = SC.to_deva_internal(0x0931) + EYELASH_RA = 0xF010B + if has(ra_int) and has(0x200D) and has(SC.DEVANAGARI_VIRAMA) and has(EYELASH_RA): + akhn_subs.append( + f" sub {glyph_name(ra_int)} {glyph_name(SC.DEVANAGARI_VIRAMA)} {glyph_name(0x200D)} by {glyph_name(EYELASH_RA)}; # eyelash-RA (RA+H+ZWJ)" + ) + if has(rra_int) and has(SC.DEVANAGARI_VIRAMA) and has(EYELASH_RA): + akhn_subs.append( + f" sub {glyph_name(rra_int)} {glyph_name(SC.DEVANAGARI_VIRAMA)} by {glyph_name(EYELASH_RA)}; # eyelash-RA (RRA+H)" + ) + ka_int = SC.to_deva_internal(0x0915) ssa_int = SC.to_deva_internal(0x0937) ja_int = SC.to_deva_internal(0x091C) @@ -655,6 +667,11 @@ def _generate_devanagari(glyphs, has, replacewith_subs=None): half_subs.append( f" sub {glyph_name(RYA)} {glyph_name(SC.DEVANAGARI_VIRAMA)} by {glyph_name(HALF_RYA)};" ) + # Eyelash-RA's half form is itself + if has(EYELASH_RA) and has(SC.DEVANAGARI_VIRAMA): + half_subs.append( + f" sub {glyph_name(EYELASH_RA)} {glyph_name(SC.DEVANAGARI_VIRAMA)} by {glyph_name(EYELASH_RA)};" + ) if half_subs: features.append("feature half {\n script dev2;\n" + '\n'.join(half_subs) + "\n} half;")