From 57cbcc6e864abd368bde93154b3580147936201c Mon Sep 17 00:00:00 2001

From: =?UTF-8?q?Jaakko=20Kera=CC=88nen?= jaakko.keranen@iki.fi

Date: Wed, 20 Oct 2021 07:57:30 +0300

Subject: [PATCH 1/1] Installing individual TTF files; generate fontpack.ini


po/en.po | 21 ++++

res/lang/de.bin | Bin 27098 -> 27722 bytes

res/lang/en.bin | Bin 24622 -> 25246 bytes

res/lang/eo.bin | Bin 23399 -> 24023 bytes

res/lang/es.bin | Bin 27482 -> 28106 bytes

res/lang/es_MX.bin | Bin 25450 -> 26074 bytes

res/lang/fi.bin | Bin 27396 -> 28020 bytes

res/lang/fr.bin | Bin 28304 -> 28928 bytes

res/lang/gl.bin | Bin 26760 -> 27384 bytes

res/lang/ia.bin | Bin 26423 -> 27047 bytes

res/lang/ie.bin | Bin 26628 -> 27252 bytes

res/lang/isv.bin | Bin 23326 -> 23950 bytes

res/lang/pl.bin | Bin 27699 -> 28323 bytes

res/lang/ru.bin | Bin 40071 -> 40695 bytes

res/lang/sk.bin | Bin 23659 -> 24283 bytes

res/lang/sr.bin | Bin 39943 -> 40567 bytes

res/lang/tok.bin | Bin 24873 -> 25497 bytes

res/lang/zh_Hans.bin | Bin 23375 -> 23999 bytes

res/lang/zh_Hant.bin | Bin 23516 -> 24140 bytes

src/app.c | 9 +-

src/fontpack.c | 223 ++++++++++++++++++++++++++++++++++------

src/fontpack.h | 34 +++---

src/gmdocument.c | 4 +-

src/gmrequest.c | 2 +-

src/ui/documentwidget.c | 82 ++++++++++++---

src/ui/text.c | 2 +-

26 files changed, 301 insertions(+), 76 deletions(-)

diff --git a/po/en.po b/po/en.po

index 0d5707b1..cc6ea545 100644

--- a/po/en.po

+++ b/po/en.po

@@ -1921,6 +1921,9 @@ msgstr "Enable "%s""

msgid "fontpack.disable"

msgstr "Disable "%s""

+msgid "fontpack.export"

+msgstr "View fontpack.ini template"

#, c-format

msgid "fontpack.install"

msgstr "Install "%s""

@@ -1943,3 +1946,21 @@ msgstr "Do you really want to permanently delete\nthe fontpack "%s"?"

msgid "dlg.fontpack.delete"

msgstr "Delete Fontpack"

+msgid "fontpack.help"

+msgstr "Lagrange fontpacks are ZIP archives that contain a set of font files and associated configuration parameters. Once installed, the fonts can be used for document content and the UI. The active fonts are selected using Preferences > Fonts."

+msgid "fontpack.install.ttf"

+msgstr "Install TrueType Font"

+msgid "fontpack.open.fontsdir"

+msgstr "Open User Fonts Directory"

+msgid "fontpack.open.aboutfonts"

+msgstr "Show Installed Fonts"

+msgid "truetype.help"

+msgstr "Lagrange attempts to load all individual TrueType files that are copied to the user fonts directory."

+msgid "truetype.help.installed"

+msgstr "This font is installed in the user fonts directory."

diff --git a/res/lang/de.bin b/res/lang/de.bin

index cf3250a5e36e23650b3d4caed040d59e1c99bd78..e6b1bf856a8e4c04727cfe18f994168ddc546a4c 100644

GIT binary patch

delta 626

zcmZ{iJxT;Y5QW=A7+ZpYfefsHp(Y|M2ny~hn3X*>JB7X7O?Qny(H>$iA{co96H^oM

z7@olDnPt_$sD|cMeUJC%^L^v(W8(=&3wnqliMeFDhbDN5Xm2a_3_|nhP{^!bTXNBy

z;w+((OR4V6T$WPT&HdMjxtD#0#=V9dqBt}5So4g8g?oUjybGEH9K$7j46{E}?Mn

z5HaDLgi@~H%v%EXS<pGE_w@8Y&S25Q4MCT6zX=KIV7oc_0bFK6!~;q!9uoQFpzK

z!E+`@Tek4K%zg&vi5g0z#0-aUqW*KWyc+FpulSWnW5$CQn52#-kCA%avKzfjLnL3}

zP3WW~md!;Q?qMZYMt{$&!|c_)u;ygWbQh+X(jbFlPGlvd$LF2>uY-jsOcYlAtpKHz

zBpP@C7f>^GPQ$ACj_VHHkH;bPzLrv!4UyH6Zk2pA!L&+6tqj=8{6-!{{UcTtm`TgI

QmxIprvwr=5Y`Mv=-x#atp#T5?

delta 26

icmX?ggYnj7#tn&vlRJ#$CSNpKzxlrL3$w{>*+&4gvJGzl

diff --git a/res/lang/en.bin b/res/lang/en.bin

index ffdd422666ea6833d6bfdbe03c0b73d4a9ad80ba..2ef67f5562e54f06f44daedf31c76aef22efbfb2 100644

GIT binary patch

delta 623

zcmZ{iF>YHi42I<?cgPZs8EPRXXqTXXfdCFrJ42R$(c|+YB1?kA7dMj+;XO<DqClr^

zU6Lbo&LMJuQtugVI%J|i{N(@RqrU&1JU&f+yiB+BHN`CEifIFF43f~@Sq=*P_$

z9J(F(WG--(F|6nyE`XWfdUmPRb$m|+q(cFx%a8*g6cUK-FaRxk6<}xpONoxR>d;he

z%d0-4a14+z<C=tWumygfI|Vo|+H3dUP(}FuNAUv$2W8Jg(&HHFc)@oAa%bA6R

zR&=82h8Sb!LY_s_3sOZ6<lU&DU&)D_z0ghf3dqi)6?C{^yt%v}QI2fkp0V@sMZ`

z?Ovz9mN8MVcpH1ExQhAG#SQGYAG_2a<z&5H_66TxVffD33BY=S)swe)###KA&wx

z%|y-Y|NK$vg+ysb@DUZL_e!eadv1F4|1yrqhnv((xtLfJ=~RWI`0^f!Mj36bd29J8

Z>37)kH;azTAP237w!Yq9w(D-5{{nVA=+FQF

delta 26

icmbPtlyThw#tjd2C$sCzO%Bjszd6oekHO@diAMpRCkyxh

diff --git a/res/lang/eo.bin b/res/lang/eo.bin

index 8ff3294eb7ee7a44873ce486f271e0bbfa73be69..89ec6fea72b32c3816df4fcbd1d88ae5026e1826 100644

GIT binary patch

delta 626

zcmZ{iJxT;Y5QW>5SY|88fPtwdA}k0B?i!etJvBRpz1>ZBjX%*IVlSYnkst^n7<vVd

z;5DqCSyl~<YG_{7_jqr<UN%18Hl7|w3%ZRVi8*JwfhKr~Xs;^v3_|nhP{^!bTXNAH

z<1C?{(OR4V6T!v!RHtqEnlea>0#=V9dqBt}5So4g8g?o`UjybGEH9K$7j46{E}?Mn

z5HaDLgi@~H#9IRPS<pGEcl7i?&S25QB|(>UzX=KIV7oc_0bFK6!~;q!9uoQFpzK

z!E+@o3+~%zg%^i5g0z#0>jzr2ccYydRCWR{Tn&G2_7tOj1XayGXrm96AhDg4`

z%g{+lESs}7+`vk%jQ*ZkhuN!pVa>^$=q^k%r9lRVoXAQ@chB?fz1@W<OcYlAtpKHz

zBpP@C7f>^GPQ$ACn(GeTkH;bPzLrv!4UyH6Zk2pA!L&+6tqj=8{6-!{UcTtmTgI

RmxIprvwr=5Z255U@eQ51={*1d

delta 30

ocmV+(0O9}Fy8-960kEnllkX9lhR2lNu_ovnVSoF_RKq#o6`@zyJUM

diff --git a/res/lang/es.bin b/res/lang/es.bin

index 810fe574d2246ad62189a9faeee570d2952fb9dd..701f047812164c72b04bdfccb2f42e93ce748021 100644

GIT binary patch

delta 631

zcmZ{iF-j~!5QfR7+M&JfedJ3_Dn=r5ER@sFeg%c1nA@o9>!bqdml)z#9l=f*0@r

zFVOTI;KfE(&n)|%fl&?3|JV2P*S!DUc>CCRrKd8eGEy=CDR==!AnGYTd*lnni~~

zX8qcdi{=!k3H_AT;tZGwu14oNZOe1YAT0`5U54xdA(KF8dIL1<RDiw)%sE(ID4{Oe

zhNoRZ;ou=+!WjvrT)~;Q1nje*b5!r?>VcfWqK9jOE~~!@3F=_G8TkQRW`Pv>WK_Xe

zCtA^TeT*S<CP!Pg@Vm@@3g?L$N~FXLzu-jk=W6+Pe|LMuuS6O%8nVDRbu@m6)a%R=

z4mX!O2al5w$yazCIw`efbJ2!7Sa}rGFE#5%dv!0YIhix{!X#4~WN^%htc3LN{Ce<m

zxDX|Z607fbKq;3JZ9RYssKq*`jnzEox<mIb=umxsn{qK5B5NXbm6Ei^w5mp<4A{#2

ck35R{TdeM2#x3Vw4m#J*t|d&<^1N)7tX$SO5S3

delta 30

ocmV+(0O9}2+X33v0kHZplRq;DlPEJ6lWH@svv@SHH<RaV<J(jYG5`Po

diff --git a/res/lang/es_MX.bin b/res/lang/es_MX.bin

index 98234c642ac2bf3ca3351fb73a92f205ffd9f8f8..3013590a9f77400b0e4331795a2fd78b1a28a2da 100644

GIT binary patch

delta 626

zcmZ{iJx(Ms5QWW2D6$P0N5rg<Rx6E!1QIg@WHs*U=@K5>va9)t<`5GQBkci@5W!x6

zgd1=KPO;g(JTZ+)v{jI_w-(Wyzaff?L9qC)^wL*7IVpT3vCRN&|O;&3`2qQON9G

zJMzh#;xc1c(oS3eGr`sLT&L^!h6+fB0#1)12S6w!5Zhq^TJ|cy&;XVa9j}$pRBg-4

zKBI69kTBzlgmSTP790VGBIrFehkAM>7jPJ0LC_c7Z)1igx_(7r1lL(1RX(3unCV0(

z>Ta+xdM@N?-&KBJI4t2jQ%jkYSl}3btN&s*50f7UTfP-(&2;nvv)t3{KGC4tyiESi

zW1?Vj5qqhL6?4(WTiD8#G2An|FbDM@Y&e@U-GzCfJj&n~XL1tr{c~eaj@F_uQJDQ&

z0ZJ`NH1G&MqGsy7hSl&5H$D3Q9>>&&T54G?CRRtfRrApV^EMT=GGeXyjQpAOkJwgV

UWwJ74mx+w`t|>&7Z~VKkszuZ2$lO

delta 30

mcmcb0n(@^!#tjQ~C!f%hn`~ynH(6eP;bwUQbCb!UsYe0Q+6+km

diff --git a/res/lang/fi.bin b/res/lang/fi.bin

index 8d307700576f2b852319c66e4f62187c5bd76bfb..edc0df2bb6455c67f7c2fcdea6fdd0056a53889c 100644

GIT binary patch

delta 623

zcmZ{iu}&L75Qf)P-hqZGQ$#13hAuP_k|iXNVpGr!dvm@C>)p-n9EQqG-oUSr+KNO)

zL%~D1;5m2zX74OR3aVL+{+aRH~VKhdVLxF+lIq7ef+r$+Uzfc!_9lD)tOQi|A0u

z?7J<wXwGn+(9dZv&VY&FYI32~wtPz&q(uR%%aA=FWD*EXKL8Co6`-#Ha}JhQ>QEPL

z!}BhoaPSZ@;ev!xuHf8T0`^(ZIjXcKgKMGw~mUDo*~B&dV!7UT!xQj1BE&n6X2

zwW1YG*T)z#XL59Ci+`8d&36bLy6Qe!@8<{JC2H9e-VK#$OI9k;Y7hATUiGP46T1

zqV@CmaTX%^3a>*a1y?pd+pvV4Tn+kVW>2zL_rjW!IoDa3WlDn#esCfyA>BXxKH46y

zM9oCas{i?;lnaT{4&VYRQ0J6X&9_{4=-x99$ord=OW6=v6X{feqxjMeiAEW0EA!Fv

aB<gqA@i)_!b1w(2`?kJ5U$#E|_4EcG5a>Ao

delta 30

ocmV+(0O9}i+5v>t0kEzylhraFlV&&$lPoi#vn({sH<Pz)z1vF-%>V!Z

diff --git a/res/lang/fr.bin b/res/lang/fr.bin

index 313e4043d565a6c82941d8013aafd144d3579644..c4b482de6ef20df046f861a850662166d9bc21bd 100644

GIT binary patch

delta 623

zcmZ{iJx(M+426qJ8Xg_5v|p4v0WVtCdDt38bANAT!nOX=`h$N>y%tqTvWga{_LF

zAmT72TmX)Mt9vvH0g+4Av)|L_x_jBWecgK4ua|TkLlSewbOmkj64Cyv*fR(%qC+9G

z>2~Cz`GfO>eoh;4222F!lT)p><4ejQ9ST@ohU@_$lR#*P0chE&0DS|PbFjQrho)#-

zp7#lbgNKL-7bKK&1t;DTu+M_dQS(z*kIoq^dbl9yv(C36K@)7hAU_(HT1<+3HmP8$

z6|HExA;y?FlcOD5{QJy)4yTD)N~De%4&k@v&(&(T-dpY0+dnFi)=b7AFiky8Zz2t%

z)p7ki3z2+<7onGeE1SPvxPrA@4TfcALvm0L!iJMM(OH;fN}~*ZaUv@r-8{Y5j|WRp

zGf}hZD}R)7AyL`^TtEftoRVtzlA9jg|BNH@;U?u$HbmA$I#u8(zO+W7QAXR!e6~D_

YW@E%&9vh@$U*C-t*Hwt?n0ZAC`gU)c^nh

delta 26

icmZp8#5mzD;|5)m$swk4ljoYQ-@Mvvg~eo{f_DI#Eeogs

diff --git a/res/lang/gl.bin b/res/lang/gl.bin

index cee70fdeed1a76322136e26a5e8c939939b5b098..6b1ca49ab576c7120d4738198d2fff416defea8f 100644

GIT binary patch

delta 623

zcmZ{iu}&O842Fk_cc8%~iqPuPq$CYOItd9R?o!bCX1%*s=4M7SUf`+|9sRvUsz^zb

zhIasoHqSwcXZLiFB9%whZ~wnO&%@K+>&xEH$H|)RVn|}XG2KEFyhOC$EA|XR%ji(Z

z?7AJfXwI=s=v&%}GhiaPo?dFT9p6v}=}^GxGGq@3nFK;J3_!z91?X$QoP*`HI@Cqm

zaN8#o4jv*VT#``A6<l~rz&;B)NA<C;9-T8-^spf4v(7gmK^<(rBtIILT1<+3KCNJ;

z6|HExA;y?FlcPgh{QJzlh08<@B~r%>Cvc|ubG7+BIodo<_75tN#!SZ`FiSnnR*?qL

z=6UjG9wPY)7onGeE1Rn>+?9_2E#J5BRQxCVa>^0=q$LrBMc_oXAQ@t6%q@KYdw?

znu(fK|MEvE7ZRl%zy(yG&MB#yZ@BK!y=NSe4>u{7vLUi2(y0PR@ue*ijWXI+=A-4;

ZsNZ4B-^@DBgB-N(+WPwcvdxe7?;HG9=vDv#

delta 26

icmexym9gU@<A!|(lb;&OP1ZA7zuCrE!ECa0)?EOqi3^<o

diff --git a/res/lang/ia.bin b/res/lang/ia.bin

index e7e4a2ea8206e5604bcfae3946e036b5fbfc29cc..7f677aab43c6ecdd16349666aa87a8f21c16e4c8 100644

GIT binary patch

delta 623

zcmZ{iJx(Ms5QR;&cOap{4UowQcas&;NJt<tLqJxztEWqNY-3mR6U`y!1RIee5um-m

zhAXWg<A5Ka$L}fT*m}t9nmg`SIV@-P6|ni(S%9idoDl(>1g)NJ4jEIWPz<l1Cx4

z>2~CkImCI!FsF^U0A_--$+1?~@f8)24h5VpLk@sYNFcVu0JQ8?fS~~_B|2WJLsPXa

z&-;wRF+jqM3lhr3!clMp9Eza#)a>f&(Yb)b0OtgK(fKxJXrk*E6h`A(t4Wp5CKjez

z(TS!TVvLy!dD?N+zb_o-aGa^7OzK$R2OMbrVpq@h`|8Dh+qNRDnT$bTntPhwCK^Pm

zSNmrc69tRsv6qUgn3FDE!&<He!!olWIj9F=!`U3^EX)e!Q3k&_larWlAAaxs-(QNF

ziJIBZ{88$KL}^Fx5f!NSN~+;2ZhG|Z8As&9P3omwOst7?s=`rxd5uJ)jJDQ%wEUU$

YJFNMeX~$)dgVs%3Utcd<UABMU0PH#G8UO$Q

delta 26

icmZ2}nQ{9$#trxMCbJsIP4+Wbzd6S6xY^`K8Ak!4zzjnG

diff --git a/res/lang/ie.bin b/res/lang/ie.bin

index b29318aedc72e412cad0ae933db40c11878d5700..6488b20fbf6b7032c49d7f2c08861394bd6869e6 100644

GIT binary patch

delta 626

zcmZ{iF-{~g5JgS8m!Qa20+WwM6{3~&3xiF+%`R;jZp3;jt~d8kT4hZZH=?BH|VV

z9EAf=?j8+nKvXU3SG}+Q{}#<9+M-bh4y>F(ffpOb^fmFA?os#hyWE5giJd&1*+4

znlo$@`j$50444S6rx!YH$M=$Iuxa4A}!hCV|il3(&Ar0s0y+=U{oMgt}-OZu^A7

z!9&D^3ld7Xf^%;P*k?iKsNU1lBRPXb54Qw;*8L_VsDten<VSFs1ybbmX$3Q#Xhq!(

zHb&2x9Btde?=$-rE)q4ANQoH^;Y9uCYV~WduPqBL>e<4y}&H>G<%FR=vFtALjHK

zE4&T8l*F>R?7{=A<;ocDnN663dJxu}%(?EuJX0EFaLkFUg!K6G>(B1NQWPc%tNyP5

zrIaKZcmNkrGj&eGs`;Ml9^IG6G4-LAQkD&o)sb$Md^EwdPDQPZ*vfoI9!32l))kmp

T$9a&0&dsxa{d{b--@bhUWrycr

delta 26

icmexzg|X!V;|6#A$$18HleZhJ-+a_i(R}jK%<}-HSqv@!

diff --git a/res/lang/isv.bin b/res/lang/isv.bin

index 80bc275ff000d5b758b1d5ca6138a614460c4f32..0f783c31d714f6daddab59925d1321ec4b60567f 100644

GIT binary patch

delta 626

zcmZ{iO-ckY5QXDC1k0U_(w;!wh%g{1I3wb&Ojl1AW|ELp`?r}JxS73Y5ClQodoC;8

z!>9{a)r42|J>Kh=_l@Vzjn}8qfxW>VlJ8Pp$T3h+S`gfgU~!W6f1AmRvNaI7{ef

zv=(Q;L~uPm*J)e6qYTobfYoEj9uP7Kgr;ABhMfw~*MK<(%L^scMceSKODG&XL`m

zp_D5)^Ok^p7Icp4Jv}{;Gg$O+L(pa2Z$g4P*ltdK0GC-HMLr!@Fwu!t)Ln05@SMrf

zmM#1)v!B6vqJ|PFF~cF8sQ+9o<7j7l#jivfGakIaBy}`-jMVFv&!dlNh~z8037wS0

zvbku(J*?!)=<k_zn7z6e)|||l?!q)v8f0+HiL8Y5_;#?nxxWyFiNdPC6`+)oL<0}t

z0&1qtX;?MiaowT&@i?U3*HX%|A+kEst&)!>m{zH%l>u9s-^in=f5fT+Gif>Za?rVc

N*02AMEw8S>z5yY5=Z^pY

delta 30

ocmV+(0O9|Ry8)iI0kC>1lfNqmlc*~flj<w4v-m6$FO$h!#n9>v;Q#;t

diff --git a/res/lang/pl.bin b/res/lang/pl.bin

index 208e9e3c60df5341f9b1a1a94d37147c23b576a7..e2d8bc6ab929cb2fab3719b67ac5941c81901d85 100644

GIT binary patch

delta 626

zcmZ{iJx(J*5QUqQY>{oSn!p5POM+Iigk($D1Z3r&8c&IKcdNUGpU5{L@e%d{NR9~6

zhFpLI5pa>Mp0NxBL^W!?s_H&}fe7eLZ-19<Av%h9u^K=?0qMC8E8mfRNqC+9G

ze{IP{bB4==eo1?A222E(<Ec*D@-=0U76q&xL-v4>Ngy=+0yOMYfW8LIIappRp)T5n

zmt8{P;2~nd6$zzW!Ngkv_F2$5s(<O}ft<mjhXp~Gb-xJ->RJS2k#JffV_CT)|8y

zT2Xhsjlpv!M?Y-gcbWYXrimI#q{Ixr;g9;y)#hpR^Ki$nL>e<5yud7VGow>o#wr

z$9ah4D_n$5N@CfZx8VkMa%J@Q%s$Ls-3x0@W}>?=&y)rkoN^*7A>D27kNzF6MPZ__

z>T3lkr6ke71Gs>isdE}u&DUIa=sr9SsrR*%vTTT~j&!T!qY0*6Dr#lGR^~JEB<dfr

WtH8!&b=IT?w|GR(vBw)%$;_r|LEU

delta 30

ocmV+(0O9|m-2t=M0kF$5lMplqlle0jlRGr8vq?3%H<Q6_;?$B2<NyEw

diff --git a/res/lang/ru.bin b/res/lang/ru.bin

index 2a8554a52cc5a8c4909fed0abe9247d3acdc33f2..a0f75c6c191beec5dadc9fb141d093d44b6183b0 100644

GIT binary patch

delta 627

zcmZ{iy-w^f5QPomJ($~3p!77*pewCdek67&=mux98R4}pd%{n{78KA^!b2cYQSe-}

zjFZ&@1=U2>nfZ>+$;12l=g0c%<9I<gF(ff(OxMr^FA?o!#hyWE9vupq)oV*Gnla82

zWdan888u?k4|*jmaiy-v?yTp7_tY1Oah_l7ocIM0xUt&cX6R33bsnJnIq)2M-Yw

z&Pgcc3XZ)cV4nq@qk3CU59ACMJzNlUS@)Zepboa1lOMok7D$m#M-@zTq7`-5+Za4&

za<pj+zsu}raFVE@LuxC3;)%BuAc73TmP2)N~AHP!3#MN0Zw~z3%B{{5}nle1#XG

zlag3Ar){`~rCb^PJ+lh4SNFo2lR4I1m}W|Y4E8yZm5^@V4i0yY7NRgwSoOOClv0vt

z-~n7f&D1#!tL7NJ9OV3ht&I8N?A5UR!6#3^3ep-G8MHlU@P+zxfk1SXN*rE$3bi

QI#<v7_4l#2`{#|dFCLueuK)l5

delta 31

pcmV+)0O0@ky#j~10<efolg&*BleSG4llV=qvj$HuPP6o#0|D{z4l)1$

diff --git a/res/lang/sk.bin b/res/lang/sk.bin

index f5172ada378c73021283242478b8eb830218c0a7..91bd13583487153e15b7d66f38dd8d92048fe172 100644

GIT binary patch

delta 626

zcmZ{iF-{{v5JlT3p@_f;jl>1m1R+^M0ttJAB`SJqJSE!Qt?n8Fkq_ZBkRwPyf^_4}

z_Xv9ls%I>-1VlAz{i^r%|NMIy{e2%jzKvIO7ef;Blj#<k;3cBHsn|0JEuupqvwdyJ

zMRSJpgnmw2aRy8Tza|$tZOco_AT05J%;Q7A(KF8UPm%sQ`Tqm~*haQbJv{4bQuT

z!ofqtgbNZ%xq@?V3D{>r=cqo^(*rq!MGw~mUDo|3B&dV!7UTzTnFUhhvq=S0ooGef

z^)?32nH=rd!tXNsIb0-aD3KB~9K)&l&(->AyuZ8QS0as>3|?TGI-1@`>UHZs<JVb;

z<SV=mos6~xopENY~;%5@0o3wy}B3HoXolI!Yor7WN^ZXtb}yygJxBT8Y9$Vb#|P

zP)bRnfd_B_HB;v_teTfxcj!Jn4ypIGl(KAytd4Z6<f93uO)6?-z*gpe<d3L-#HIo>

UZ8`UH(7AoqukVkoAFh6X02=4%i~s-t

delta 30

mcmcb;m+|!u#tnNkCqLGbn=EC(Hz*i;btoxS;NU<aYq5u7z{N

diff --git a/res/lang/sr.bin b/res/lang/sr.bin

index 14ca2240ebd621c4af18c92e3067d4d33b66e5e0..55a289bd7b8ed5cbbbad3a0405dd73741ab32427 100644

GIT binary patch

delta 627

zcmZ{iF>V_%5Jedyjq4o1lPWF@9>H#m01^U7K%^Au#@t!$AQVZEvr=5C^a0%E6an1C

zfX`vTCvofHt{~es#y?!=6(FXH~)^FACCThn(pX#idoDLrYEFNJ96^a$pczCyzqr

z@Y<12<{Pduh7}#e1uzroXmB)jyF_5Iuvkv3^@QoA%WNq3(&Gx0fq!l<0V;gr;g+

zUiBG;V}OJi*CdpSg;{U}9Eza#)ST(*kzBxGfGdK&=zbeBG|}~I3M07A3aRqt#KJ-+

zI#G9njnQ)<PbaSO`@&%b^Gq#eQeuH~_^SSky*-|ue%|w~NNXme7g*$;7T1Xe-R+m@

z{W2yB7O!G2HL+s8cX11QxiW@(<`Cwf9)t~NGt*sI7RsXxE;*Bvn6K|1ryu7#QJ5&q

zzOMkKmLwW@1Rqf|^<Kkjc*9MP{?+4{`cO+P%f-a%NVjS}nqc0iqE<$%HE)p@N&kp_

X1!mE48RVez@T_0|KX&)@$9{ML9th|h

delta 27

jcmeyqhpBxB(|L$$yVNSlbgNQZ=UG$%YU=iTwO0tdtAu

diff --git a/res/lang/tok.bin b/res/lang/tok.bin

index fad370877f37672a1bc56aac9406cbd8a6aba669..938f85d449741c9c1f8f53605e5365568f1c24d3 100644

GIT binary patch

delta 626

zcmZ{iv1%MK5QgP9NS!8=E(bxSOS>_KgTNi+E`=+PwX?fJbdr!}?YO!&{Z)PhcLrB(

z4aQI5ckyWVxFkiYS;Rl{{rvylKOfz_9zA@VZRuBvS<DZn8)##Ygzl&1z#z0q9)--|

zwI`p<H|#Qojt=4im<cZCOP#LgYbqc;3OGH68~~w^Ky1eaXxXa(Ljzb!bi7qUQ?)I3

zLq_2kAYsN03FTs85gY-BBIrFeU-k4vF5oc06~Rz+zl|B1=!Ol230!A|RQY;tVWktD

zsJqd|<hhWiPp<NZ!l8p@rj{}(vA_wOtN&tmA7)=Z@A+1wHS@^}tnxss+eD*oXJ=3A

zm?&7hii6a|iuvBh8#U0G2SzWFh}($Y&e^R?!vlIo@8*wnViIY}j8deY_QgiNfr^

z6<6TL<5iDBWkAJYgi3mb2Fg-<8exTtfiLaVq$fqTQwg|Fz-QD-+h5zmca&|A>7B

VX4P{U<)HKMtY7~>wreh5-T{$g=ez&_

delta 30

mcmbPvoN?tL#tl-MljF76Cwpj#PwvuMzj=mso!R88Nk;&>;S8<-

diff --git a/res/lang/zh_Hans.bin b/res/lang/zh_Hans.bin

index 2f8e6beb7fcb5b2482eb2dc3d1ab89e435678250..c6beace1dbf380f1999c31d5c294df1b8c9e2f87 100644

GIT binary patch

delta 626

zcmZ{iKT88a5XIL|;#kE(uJ8kBBSJthU}9l6?#<-}H@nO3oPVm+)@iM+1wl{?J6pe!

zvv(nCVKv9{W`2+N?(1di<9+MtakQk{7?PNCrW<I2mx%VNV$UG7hz^C!=Cvgk%?ZvE

zZ;aH888uCj3+v6%h!}aS@H)4A}!hCV|lO3(&Ar0s0y+=U{oMgt}-Oo_7g_gNKL-

z7bKK&1*hH;u+M_dQN5?92XY3B9xe&Gtouz!PzT#B$PeH$3#7<r;|iua(Tck3Z490>

zIoh^`-(~i5m?UZ_krFc;z_I$z)#_oiyR+t3B8?djUSOI!n%+g~b*s10>nud_6<&r;

zN@CfZwc!TVa%J@Q%qGlU-3x0@=2UlKmMIM~IO0TBLbkA-JSiVC=Sq{jC6{lq4E>

z02fdbxy;o`I_qv-Hp1^}d!;mJN~Bk#3cIG{Lk^MXe0j%KSziM*Sn!6_{zuxtD{^

O&9i>}e{6Ms@%at?is;S&

delta 26

icmdnLoALZM#tqBVC!f`jn=GceezS^}xY6WaF-HNRa0{LQ

diff --git a/res/lang/zh_Hant.bin b/res/lang/zh_Hant.bin

index 2b11cbd2cd17c6c3e42280a027bb3f5559f74096..20128ba3e80ba6f782bfcdad2fddb08b9eec378f 100644

GIT binary patch

delta 623

zcmZ{iK}uXf5Qf`T?%>8En{gp;;Q``C0t14AGg-KivR}P<g+1L(S3QlZImBE<$RY%C

zgd9QeB!boN4P&y%s+!jhULam!AiJejhyF&NlQtr=so~(<5{#YDRzGaAZ(g=YUFX

z-|Z=6cY&daYcKv02YFq`IS}Q^8QJj|$$FAxA(EQb^r6038PtU~B<JlIM*%v{l>j

zYAC3jB4jMMCZ!?Tt-j8Q4~X<_QY0C&H^4I+z||7^Ia;?CO@nxPR6xXlPX%8(3IH

zua<6%F=ZACbmXi5ARJe4Rj8vv<|yz5zFK~1w#(V^_ICE^uu<*Yd<pKGSK2F(<s?

z?AJ17iVfbSKSnC*L|~o!kt@Wo}P$RFA@zi@UU0SPGR%2IpMJYbsAaJ|DlFZq&@w

z%$k4sqt*+l(M}K&8qg4oRLc+C4j4W%PRPfb)Jyr4*%H}Qg=6^24v9sXY#aBt<yp4x

Xu;cF*J<BKutNXUS{=aPdcJulUqFU!T

delta 26

icmX@Jhw;vK#trf6liM`pCZE?>zxl4_C8NoCvG)M0q73B#

diff --git a/src/app.c b/src/app.c

index 485c2495..46856e22 100644

--- a/src/app.c

+++ b/src/app.c

@@ -836,6 +836,7 @@ static void init_App_(iApp *d, int argc, char **argv) {

 loadPalette_Color(dataDir_App_());

 setThemePalette_Color(d->prefs.theme); /* default UI colors */

 loadPrefs_App_(d);

 load_Keys(dataDir_App_());

 /* See if the user wants to override the window size. */ {

     iCommandLineArg *arg = iClob(checkArgument_CommandLine(&d->args, windowWidth_CommandLineOption));

@@ -3069,13 +3070,7 @@ iBool handleCommand_App(const char *cmd) {

 }

 else if (equal_Command(cmd, "fontpack.enable")) {

     const iString *packId = collect_String(suffix_Command(cmd, "id"));

     postCommand_App("navigate.reload");

     return iTrue;

 }

diff --git a/src/fontpack.c b/src/fontpack.c

index 226392bc..f22ab8dc 100644

--- a/src/fontpack.c

+++ b/src/fontpack.c

@@ -90,6 +90,14 @@ static void load_FontFile_(iFontFile *d, const iBlock *data) {

#endif

}

+static iBool detectMonospace_FontFile_(const iFontFile *d) {

+}

static void unload_FontFile_(iFontFile *d) {

#if defined(LAGRANGE_ENABLE_HARFBUZZ)

 /* HarfBuzz objects. */

@@ -300,6 +308,8 @@ static iBlock *readFile_FontPack_(const iFontPack *d, const iString *path) {

 return data;

}

+static const char *styles_[max_FontStyle] = { "regular", "italic", "light", "semibold", "bold" };

void handleIniKeyValue_FontPack_(void *context, const iString *table, const iString *key,

                              const iTomlValue *value) {

 iFontPack *d = context;

@@ -359,9 +369,8 @@ void handleIniKeyValue_FontPack_(void *context, const iString *table, const iStr

                  ((int) number_TomlValue(value)) & 1);

 }

 else if (value->type == string_TomlType) {

             iFontFile *ff = NULL;

             iString *fontFileId = concat_Path(d->loadPath, value->value.string);

             if (!(ff = findFile_Fonts_(&fonts_, fontFileId))) {

@@ -441,6 +450,7 @@ void setLoadPath_FontPack(iFontPack *d, const iString *path) {

 /* Pack ID is based on the file name. */

 setRange_String(&d->id, baseName_Path(path));

 setRange_String(&d->id, withoutExtension_Path(&d->id));

}

const iString *idFromUrl_FontPack(const iString *url) {

@@ -449,6 +459,7 @@ const iString *idFromUrl_FontPack(const iString *url) {

 init_Url(&parts, url);

 setRange_String(id, baseName_Path(collectNewRange_String(parts.path)));

 setRange_String(id, withoutExtension_Path(id));

 return collect_String(id);

}

@@ -592,6 +603,49 @@ void init_Fonts(const char *userDir) {

     }

     iRelease(f);

 }

 sortSpecs_Fonts_(d);

}

@@ -679,7 +733,7 @@ iString *infoText_FontPack(const iFontPack *d) {

 return str;

}

-const iArray *actions_FontPack(const iFontPack *d) {

+const iArray *actions_FontPack(const iFontPack *d, iBool showInstalled) {

 iArray           *items     = new_Array(sizeof(iMenuItem));

 const iFontPackId fp        = id_FontPack(d);

 const char       *fpId      = cstr_String(fp.id);

@@ -687,33 +741,44 @@ const iArray *actions_FontPack(const iFontPack *d) {

 const iBool       isEnabled = !isDisabled_FontPack(d);

 if (isInstalled_Fonts(fpId)) {

     if (d->version > installed->version) {

     }

         !cmpString_String(installed->loadPath, d->loadPath)) {

     }

 }

 else if (d->isStandalone) {

 }

 return collect_Array(items);

}

@@ -722,8 +787,64 @@ iBool isDisabled_FontPack(const iFontPack *d) {

 return contains_StringSet(prefs_App()->disabledFontPacks, &d->id);

}

-const iString *infoPage_Fonts(void) {

+const iPtrArray *disabledSpecs_Fonts_(const iFonts *d) {

+}

+static const char *boolStr_(int value) {

+}

+static const iString *exportFontPackIni_Fonts_(const iFonts *d, const iRangecc packId) {

+}

+const iString *infoPage_Fonts(iRangecc query) {

 iFonts *d = &fonts_;

 iString *str = collectNewCStr_String("# ${heading.fontpack.meta}\n"

      "=> gemini://skyjake.fi/fonts  Download more fonts\n"

      "=> about:command?!open%20newtab:1%20gotoheading:1%20url:about:help  Using fonts in Lagrange\n"

@@ -734,7 +855,7 @@ const iString *infoPage_Fonts(void) {

 iString *currentSourcePath = collectNew_String();

 for (int group = 0; group < 2; group++) {

     iBool isFirst = iTrue;

         const iFontSpec *spec = i.ptr;

         if (isEmpty_String(&spec->sourcePath)) {

             continue; /* built-in font */

@@ -753,15 +874,22 @@ const iString *infoPage_Fonts(void) {

                         isFirst = iFalse;

                     }

                     const iString *packId = id_FontPack(pack).id;

                                         isEmpty_String(packId) ? "fonts.ini" :

                     append_String(str, collect_String(infoText_FontPack(pack)));

                         const iMenuItem *item = a.value;

                                             item->label);

                     }

                 }

@@ -824,5 +952,32 @@ void install_Fonts(const iString *packId, const iBlock *data) {

 reload_Fonts();

}

+void installFontFile_Fonts(const iString *fileName, const iBlock *data) {

+}

+void enablePack_Fonts(const iString *packId, iBool enable) {

+}

+void updateActive_Fonts(void) {

+}

iDefineClass(FontFile)

diff --git a/src/fontpack.h b/src/fontpack.h

index fb8d757e..5d592822 100644

--- a/src/fontpack.h

+++ b/src/fontpack.h

@@ -110,22 +110,23 @@ iDeclareType(FontSpec)

iDeclareTypeConstruction(FontSpec)

enum iFontSpecFlags {

 fixNunitoKerning_FontSpecFlag = iBit(31), /* manual hardcoded kerning tweaks for Nunito */

};

struct Impl_FontSpec {

 const iFontFile *styles[max_FontStyle];

};

@@ -158,25 +159,26 @@ iBool isDisabled_FontPack (const iFontPack *);

iBool isReadOnly_FontPack (const iFontPack *);

const iPtrArray * listSpecs_FontPack (const iFontPack *);

iString * infoText_FontPack (const iFontPack *);

-const iArray * actions_FontPack (const iFontPack *);

+const iArray * actions_FontPack (const iFontPack *, iBool showInstalled);

const iString * idFromUrl_FontPack (const iString *url);

/----------------------------------------------------------------------------------------------/

-iDeclareType(GmDocument)

void init_Fonts (const char *userDir);

void deinit_Fonts (void);

+void enablePack_Fonts (const iString *packId, iBool enable);

+void updateActive_Fonts (void);

const iFontPack * pack_Fonts (const char *packId);

const iFontPack * packByPath_Fonts (const iString *path);

const iFontSpec * findSpec_Fonts (const char *fontId);

const iPtrArray * listPacks_Fonts (void);

const iPtrArray * listSpecs_Fonts (iBool (*filterFunc)(const iFontSpec *));

const iPtrArray * listSpecsByPriority_Fonts (void);

-const iString * infoPage_Fonts (void);

+const iString * infoPage_Fonts (iRangecc query);

void install_Fonts (const iString *fontId, const iBlock *data);

+void installFontFile_Fonts (const iString *fileName, const iBlock *data);

void reload_Fonts (void);

iLocalDef iBool isInstalled_Fonts(const char *packId) {

diff --git a/src/gmdocument.c b/src/gmdocument.c

index 23ebace3..b0851fec 100644

--- a/src/gmdocument.c

+++ b/src/gmdocument.c

@@ -479,7 +479,7 @@ static void commit_RunTypesetter_(iRunTypesetter *d, iGmDocument *doc) {

static const int maxLedeLines_ = 10;

-static int applyAttributes_RunTypesetter_(iRunTypesetter *d, iTextAttrib attrib) {

+static void applyAttributes_RunTypesetter_(iRunTypesetter *d, iTextAttrib attrib) {

 /* WARNING: This is duplicated in run_Font_(). Make sure they behave identically. */

 if (attrib.bold) {

     d->run.font = fontWithStyle_Text(d->baseFont, bold_FontStyle);

@@ -495,7 +495,7 @@ static int applyAttributes_RunTypesetter_(iRunTypesetter *d, iTextAttrib attrib)

 else {

     d->run.font  = d->baseFont;

     d->run.color = d->baseColor;

}

static iBool typesetOneLine_RunTypesetter_(iWrapText *wrap, iRangecc wrapRange, iTextAttrib attrib,

diff --git a/src/gmrequest.c b/src/gmrequest.c

index f7a22e0a..03a6d999 100644

--- a/src/gmrequest.c

+++ b/src/gmrequest.c

@@ -362,7 +362,7 @@ static const iBlock *aboutPageSource_(iRangecc path, iRangecc query) {

     return utf8_String(debugInfo_App());

 }

 if (equalCase_Rangecc(path, "fonts")) {

 }

 if (equalCase_Rangecc(path, "feeds")) {

     return utf8_String(entryListPage_Feeds());

diff --git a/src/ui/documentwidget.c b/src/ui/documentwidget.c

index 1039fc2b..48ce5b5f 100644

--- a/src/ui/documentwidget.c

+++ b/src/ui/documentwidget.c

@@ -1130,7 +1130,8 @@ static void makeFooterButtons_DocumentWidget_(iDocumentWidget *d, const iMenuIte

         d->footerButtons,

         iClob(newKeyMods_LabelWidget(

             items[i].label, items[i].key, items[i].kmods, items[i].command)),

     checkIcon_LabelWidget(button);

     setFont_LabelWidget(button, uiContent_FontId);

 }

@@ -1473,7 +1474,7 @@ static void updateDocument_DocumentWidget_(iDocumentWidget *d,

             trim_Rangecc(&param);

             /* Detect fontpacks even if the server doesn't use the right media type. */

             if (isRequestFinished && equal_Rangecc(param, "application/octet-stream")) {

                     param = range_CStr(mimeType_FontPack);

                 }

             }

@@ -1492,6 +1493,42 @@ static void updateDocument_DocumentWidget_(iDocumentWidget *d,

                 docFormat = plainText_SourceFormat;

                 setRange_String(&d->sourceMime, param);

             }

             else if (isRequestFinished &&

                      (equal_Rangecc(param, "application/zip") ||

                      (startsWith_Rangecc(param, "application/") &&

@@ -1499,32 +1536,39 @@ static void updateDocument_DocumentWidget_(iDocumentWidget *d,

                 clear_String(&str);

                 docFormat = gemini_SourceFormat;

                 setRange_String(&d->sourceMime, param);

                 format_String(&str, "# %s\n", zipPageHeading_(param));

                 if (equal_Rangecc(param, mimeType_FontPack)) {

                     /* Show some information about fontpacks, and set up footer actions. */

                     iArchive *zip = iClob(new_Archive());

                         iFontPack *fp = new_FontPack();

                         setUrl_FontPack(fp, d->mod.url);

                         setStandalone_FontPack(fp, iTrue);

                         if (loadArchive_FontPack(fp, zip)) {

                                                 cstrCollect_String(infoText_FontPack(fp)));

                         }

                         makeFooterButtons_DocumentWidget_(d, constData_Array(actions),

                                                           size_Array(actions));

                         delete_FontPack(fp);

                     }

                 }

                 iString *localPath = localFilePathFromUrl_String(d->mod.url);

                 if (!localPath) {

                     appendFormat_String(&str, "%s\n\n",

                                         format_CStr(cstr_Lang("error.unsupported.suggestsave"),

                                                     cstr_String(key),

@@ -3267,10 +3311,17 @@ static iBool handleCommand_DocumentWidget_(iDocumentWidget *d, const char *cmd)

     }

     return iTrue;

 }

     return iTrue;

 }

 return iFalse;

@@ -5199,6 +5250,7 @@ void updateSize_DocumentWidget(iDocumentWidget *d) {

 d->drawBufs->flags |= updateSideBuf_DrawBufsFlag;

 updateVisible_DocumentWidget_(d);

 invalidate_DocumentWidget_(d);

}

#if 0

diff --git a/src/ui/text.c b/src/ui/text.c

index 4baf60d3..106c55e9 100644

--- a/src/ui/text.c

+++ b/src/ui/text.c

@@ -458,7 +458,7 @@ static void initFonts_Text_(iText *d) {

 /* Check if there are auxiliary fonts available and set those up, too. */

 iConstForEach(PtrArray, s, listSpecsByPriority_Fonts()) {

     const iFontSpec *spec = s.ptr;

         const int fontId = size_Array(&d->fonts);

         resize_Array(&d->fonts, fontId + maxVariants_Fonts);

         setupFontVariants_Text_(d, spec, fontId);

--

2.25.1

Proxy Information
Original URL
gemini://git.skyjake.fi/lagrange/work%2Fv1.8/patch/57cbcc6e864abd368bde93154b3580147936201c.patch
Status Code
Success (20)
Meta
text/plain
Capsule Response Time
121.599674 milliseconds
Gemini-to-HTML Time
12.737402 milliseconds

This content has been proxied by September (ba2dc).