From 4827f28a940b9610e55afb888ddde11e240caa20 Mon Sep 17 00:00:00 2001 From: Jeremie Knuesel Date: Thu, 26 Sep 2024 11:09:32 +0200 Subject: [PATCH] Fix smartquotes for Swiss French (#4992) --- crates/typst/src/text/smartquote.rs | 8 ++++++-- tests/ref/smartquote-fr-ch.png | Bin 0 -> 2353 bytes tests/suite/text/smartquote.typ | 4 ++++ 3 files changed, 10 insertions(+), 2 deletions(-) create mode 100644 tests/ref/smartquote-fr-ch.png diff --git a/crates/typst/src/text/smartquote.rs b/crates/typst/src/text/smartquote.rs index 0bcccf41c..9b48c03ac 100644 --- a/crates/typst/src/text/smartquote.rs +++ b/crates/typst/src/text/smartquote.rs @@ -207,8 +207,8 @@ impl<'s> SmartQuotes<'s> { /// Currently, the supported languages are: English, Czech, Danish, German, /// Swiss / Liechtensteinian German, Estonian, Icelandic, Italian, Latin, /// Lithuanian, Latvian, Slovak, Slovenian, Spanish, Bosnian, Finnish, - /// Swedish, French, Hungarian, Polish, Romanian, Japanese, Traditional - /// Chinese, Russian, Norwegian, and Hebrew. + /// Swedish, French, Swiss French, Hungarian, Polish, Romanian, Japanese, + /// Traditional Chinese, Russian, Norwegian, and Hebrew. /// /// For unknown languages, the English quotes are used as fallback. pub fn get( @@ -227,6 +227,10 @@ impl<'s> SmartQuotes<'s> { false => ("‹", "›", "«", "»"), true => low_high, }, + "fr" if matches!(region, Some("CH")) => match alternative { + false => ("‹\u{202F}", "\u{202F}›", "«\u{202F}", "\u{202F}»"), + true => default, + }, "cs" | "da" | "de" | "sk" | "sl" if alternative => ("›", "‹", "»", "«"), "cs" | "de" | "et" | "is" | "lt" | "lv" | "sk" | "sl" => low_high, "da" => ("‘", "’", "“", "”"), diff --git a/tests/ref/smartquote-fr-ch.png b/tests/ref/smartquote-fr-ch.png new file mode 100644 index 0000000000000000000000000000000000000000..30e91e401884146a28a43ae638e714b60aab5a2e GIT binary patch literal 2353 zcmV-13C{M3P)?+h4>p_ZCYx+F>9*U}+HS2{0c*8utw%*EAhlZSinWU1!6BD`Tq4S)z<}I0 z!`VRvtXzViTq39(0-{ik83Y-wkr|lly{-+(R$EH#w6rPjr}N;InaTI_%kK}&QGb|+ z=izzycL4WY@|0FguLe~JSSGMs+8b7Wh-mp#h( zh~qJ;xR~5oz=@?E-FyQ_dY8Tk1f`SA%R>*>@j>ZvhoKe3OB#3d^ADH4 zJOT2THcIdBuk_~Q3w`}R3{#X7aU1eJ zXVk&}0KI_kA=+5PxE`<7(M#2$2Uu4(e8S-ZAS?{aGNCd38W>+r+HtnuI#5@)gTuwF z5$6^5frlf#vw-QRADNF`wB0%7spD0^l#hFJ#ev%w4>xt#gbzVH)SWDJsB!iKg{Rk$ zQwZVi#XydAho5`5eM0T20*C9);hnY_9i|qh*C%~W)cw)}vU>uV-&`zL#*uSh%I3HF z*AKV$@KkrE&ttM?is>e66}pAh`=a@FsvU9Dr}xGH(+w={)h$ePJWmyo1OQ+th3QNs zKLr*CpVMbUS73>OG5qZWkxL#j=Wxdv#$L;fit zBks!c!qscE$!>!gnvEQ-s8d3-17YzUJDXRxfq0v?s^#+F&d0DKmUZ}DVXZVYs{UU< za3Px{QG#2qJulo~g=DohC4CW{YixnDXNZnZw7Auv06bURQN(91e+-kEwt)4W7)njj zZ#Dx)ZJ0_vNxIqi+^_|e9vA$yi}{jmEs$@9_v!L?v{R3uV(^-!AWdOFNObiP7O^)) zqkrGd7b$QsR=e`fQ4gfg4I2mrQ$2RshpNuR2Wdd->K1M@A+Q%};g(NuQ=@avzFK=H zv2~_>fn-blYd9X)>%&(VN5ywy5CnZI**Ow6oO-P1Ab=*+At zd|k(Iu^T_s?j8Vx9}AyLD4;1SUfyxI?bs!hQ88`gCW`nG0P&ji(9hL|YiWGtMmKH3L_ z?PpS3Funwn9)P!4JDDVyJ^W~oQxVC5e%&obS+#4fwwau4Qy+`*SBebV-S+it54mQS znoY1t1Nl26y3;~D`=D7W0Z>>S%f>P>gc$1{IKRHeUl4L=Y<{`s;olfM{IkOWYP{=s zx{}xV?mDx0rp&JAf$Kn-%`@rq-O1W`rq)L@!x;s_5LHWHbryw*;=3n1PqgQro@n#b zP?pr$@6!}cO-d7xTAVCUW6*G-LmpJ;uc}Y$K$aCcPHw^|kex+q_6_ny#ixctMNAf^ zD@FqEQV@Of`{AOM<30hZ1?OraN_sb_7Zo%t={YG>W0rxl$3LdJD*VUv^Bu z3-y(s;<&$5c1p8}z$;}#u5HzOfnp2XFx0jz>TV0eZ#Tnluy5C0+ zR)-7oSg9WVkmPXmG4m6O*wu=)vrwpoDqGq&qK|YVeqTam+CrKQLRgS0ECp^_(wt%- zd0g~|y>Xg~_W!KR>fd@avR4o38$Y>1vty*fVv973_N^qV5))RUSSG}D~n~{G} ze&g9xWy=heg#7qB4p}+CEb?FTaE1?0 zjs1A|Zu>B^sJ(rJ?@c@Zkoe8RVJ&k5%Tq!3a8cz&Azg_rMU)G>DXFMRoMb4qNGpjP ziD`yQSr56B(S;^22Vn5RZOZaUtNZD&Xl0Lm*w`y61!!*SmwCn@qR|c;9GwGqv{b6%{K^RzFzlnM&;D zvyGrNOfYw4pSR2M0Ui9*b9Bc^Yh`l-S5=DVC-Zj$r#DL1ltED$037uH1>nvwm<)v@ z6%eEa0MRc2M;ezSzA%7e1w$8lq(gt^5z@a?q0Pq-gDgPfV%sqs} z3_Z}}uR{P`wpty*X!GFfWm&xjekl?ItI?HS2?{HxOjpepn`DMtRXY-#8*BeqmiOn| zG3z6)L#~$d0XjS