From 79fb2c36893140ce61765e2b437ef37c51235615 Mon Sep 17 00:00:00 2001 From: Malo <57839069+MDLC01@users.noreply.github.com> Date: Sun, 11 Aug 2024 22:18:57 +0200 Subject: [PATCH] Fix `calc.inf`, `-calc.inf`, and `calc.nan` reprs and displays (#4724) --- crates/typst/src/foundations/repr.rs | 20 +++++++++++++++----- tests/ref/float-display.png | Bin 1621 -> 1848 bytes tests/ref/float-repr.png | Bin 1923 -> 2443 bytes tests/ref/grid-rowspan-split-15.png | Bin 1727 -> 2948 bytes tests/ref/ops-multiply-inf-with-length.png | Bin 1066 -> 2414 bytes tests/suite/foundations/float.typ | 15 +++++++++++++-- tests/suite/scripting/ops.typ | 4 ++-- 7 files changed, 30 insertions(+), 9 deletions(-) diff --git a/crates/typst/src/foundations/repr.rs b/crates/typst/src/foundations/repr.rs index 00d9931a2..68c94c56d 100644 --- a/crates/typst/src/foundations/repr.rs +++ b/crates/typst/src/foundations/repr.rs @@ -73,12 +73,15 @@ pub fn format_int_with_base(mut n: i64, base: i64) -> EcoString { } /// Converts a float to a string representation with a specific precision and a -/// suffix, all with a single allocation. +/// unit, all with a single allocation. +/// +/// The returned string is always valid Typst code. As such, it might not be a +/// float literal. For example, it may return `"calc.inf"`. pub fn format_float( mut value: f64, precision: Option, force_separator: bool, - suffix: &str, + unit: &str, ) -> EcoString { if let Some(p) = precision { let offset = 10_f64.powi(p as i32); @@ -86,12 +89,16 @@ pub fn format_float( } // Debug for f64 always prints a decimal separator, while Display only does // when necessary. + let unit_multiplication = if unit.is_empty() { "" } else { " * 1" }; if value.is_nan() { - "NaN".into() + eco_format!("calc.nan{unit_multiplication}{unit}") + } else if value.is_infinite() { + let sign = if value < 0.0 { "-" } else { "" }; + eco_format!("{sign}calc.inf{unit_multiplication}{unit}") } else if force_separator { - eco_format!("{:?}{}", value, suffix) + eco_format!("{value:?}{unit}") } else { - eco_format!("{}{}", value, suffix) + eco_format!("{value}{unit}") } } @@ -112,6 +119,9 @@ pub fn format_float_with_unit(value: f64, unit: &str) -> EcoString { pub fn display_float(value: f64) -> EcoString { if value.is_nan() { "NaN".into() + } else if value.is_infinite() { + let sign = if value < 0.0 { MINUS_SIGN } else { "" }; + eco_format!("{sign}∞") } else if value < 0.0 { eco_format!("{}{}", MINUS_SIGN, value.abs()) } else { diff --git a/tests/ref/float-display.png b/tests/ref/float-display.png index 6c33b372f0844139c2a34a50fad4c6e6dae12828..bfece012b1fb1750e748e56f692774ede7ff1d3f 100644 GIT binary patch delta 1846 zcmV-62g&%=47d)E7k|YF00000x?5?b000L6Nklr<519l-I-^nG9SKk!AG zw4K^Z9BoZPG!2R-L`U(8x2iD?pdyM3_|450G8_QeJ&H*2u_;Xy3E^QY|H_ zw>k$G6zy|C)>ABh*zPyK=g&U-QsBaBfZbIw`4Kw?;ljb|M^RmZFxdYzJ)Zi4KlVrt zzX8`Ta|JJlzP1f(Q#@7-u@85W)Wp|%Sjkv8RL3ASod5fBKH9u7aU!DVBv`{E>?g9L ztbeG}K7}1qkXMj0KxKglh=2wB> z8c+fTw z4+AQIn&r(ipR>gJZ83iue_9lY>wS{zB!n0FCW1Kp;dS85V;1HZJQExDTxROr;eTeV zJL7?wrO+CQDU@QBgoi{~LSm%r*u}T4u%Fogv|8}I?pDu4)`K~?8t>7O=Wye0F2+kb zTx$luEGD^@JGr=)&~O}BF#1L2yN7I`%^=Ae3E`=jJ9O`Su-D7hN!VKz z-O-s`wHqv}435}`+s)O>l2*8!iGNGY#Izi6O9+p90oS*4&8@_fZEh^x zJv}%(yCM&oTHqZ_Su>aMaa?a1pZ@ih#?_h6xU?ar#Atn63wW+(@ zKtc_s&zM_E;}KxtuudHiVFPVCY5f-a%Yf$+tGK&o>|-apM`26zr){0NEg|68Sm8*Y z+WO?qs@x3@@2QouQo~Pdz<;x^EN}zxTPqX6qGM zV6W9`bpRCyzlSfWcdY1?ZL4$rkqyInxYrZ|`SHjGn=U+Nwt)v_Wq%GFUzS-#Km;t{ z7l1Vi!B<~Z1|BXAkQ*K!dQ?46r_gY{;a3K}t*aFQ5wL&-{1aiT z=3v{%iOrL;!`cZ~UJTp6<>5`FSG8Y zj@`8_)$UTYTbGVfh2m|Mwhlz42v%h%7b!s&q#z9h5ojQ^(W0;*SgJq;gbks1;VLK~ z*8nCYBq8^Ir%pS4*S_%adHUjvsrWe@=ouz;T$?yRu`&<}7^ zKDe@eXg9E&{5sITMm~5saIO@jA#!)0J^p_8J5`l8-s9M!v%HbAnv3aoH?c5!Y3`KzhSR&$76|M*Z@~N zy*pMWETQmKvIey~2>-bY6IgRO*pX|zeUw7|Gk^K@;ba%HTN4A1%MBW;)h`cDuB$ri zfr4o)f7%x`|1(&4;hDgdEdbGtN#&~jlW_5a<`bwdLkt|5&P}Dg;?EC3O{UL=F8TfePIvQlDZIgaEVLvcHC+D3THbvpB7IR+brx)~D(AmX1Vq3B{$)5Yr3~zjtye1o>$GfkDFGjAAbdax_*5f19w-6V7PHN-1Wd+- zDJnCeBtLCHPt8Dg3%zs4vNo5`L3`_w7503N+!!rYiwZ1GH{7 z+COKb?OQ#6S(vVh!}BjPZb}Hh7+Bmw!oQn=^AA~Hr1LFCymtj_S%MMUfmFc034cs+ z^hKdpOL$1sq@~AsPF{M&21i&4L8AfRZ@pRexOOmaYr%hF_6gh-&81XHH`n&bFZE=! zajO{5MmkRc>*l`5f9;q9G0HV8_nBK>KfTrCPTyoEspqIyLVtL{4|u*^1rva24#w{S%R|GMd%akOM@DcD4lluo zTLeVF0{%I;`@iw?==8;$eLE@)M)Q0`KRG1w?@(Hu0v9WDp-C$_92UHN*uI;nz$M&j z?x_5b3DCXKXxH+OWm73@7bgqjB!}0txP=1;>jB*muNF13^wyD9oZ18lv6{FMc+1HPsq=zqBpfccx93}3S|+uqU1$~WzgL_h>A;9r6ptJML(Up@fb z)yoGbv%eo`-PQ$;$ZYxGKuIhBiCu8+vMlgeetv!>!H#X$et>V7uF3-YZ8n<=sQcgt z_;S|%t%I^Hb#XARbEX9Ec0Ev@ifnM-#fPkPa<8Vwh3m^2n+S-21xoxBaJE8l)AP!} zGlmek;i>BC>ISlr9d?e5jm_FlWUbLEw7FggDg$?D+eAPFEMNius^RYdGhop9$K>(b P00000NkvXXu0mjfT^|hD diff --git a/tests/ref/float-repr.png b/tests/ref/float-repr.png index 8b5109697362abe88dc53daca25774eb0be1eb92..7b49e9d1520f09b2b3b67da2bc7a59073eeb3bf8 100644 GIT binary patch literal 2443 zcmV;633T>}P)DSZ8(X{CRBG2$_DFOMF_clWwegCH(RgCK4~%lC8AL7xLF60;1muwWz63#T zP#6INawsZ@I@~gh!+i}5bA8ujsoJVk^2(vD?Dns!t6zSqtDpKl-OpRRp?OP$MOcJI z*eq}j=&Q130DWe)aIi7-J#bSN9R`~k9x=GX zRyUZI6+uDtnwHL$sRuP69b)1WE8WHU%z02X=Hpo?V4A z(kx6iU_Bb|NPEWeo?V?-03TsmVIKHH$gLpDsKLJ0q)QFu1+kZV4&d>Co2jr7r37-N zM3&6&W{@-8&mGMIC;lrR$zH4Av9qc1Fe!1=goa<3B~lsyHZzc&C{KXjP(Kwor6+yc1swaIGsrK^_I>6Y{gC_M_ zQ+OP>fGg>>2o6XK#o3;E$l<2E`a~ zsGLzo_~<7|zVQ4Aml~*yg-yJ)g(^4Zjq(7t>C6Tve2|azw^m-mcBwL$w6)V*4wp>g zCv}HI<8Up}r{POISELnhmqyCTF#< zutO0$+TqJimg)qBT}#;B#gEr=lb~>Z6q^m;SIs5_h4GHN!J(&`i&q-OfQYaNn*p9( zxCsr%C!Np(KG_msVeLAiGoW`rlKXPAr!Qi}35hJ=WC#R}(!2hWjK{z~Ej^wF?X5 zUIpYk6PP6ECb0nLdLT;>_=zu60nbn1+$1dAx$5+s+zL)nM3uyv)W?}tKp2@Ma36Pn@wL8&xE?JYXaSpu|Gm znTG}WW&EBF4;jElLQBjA&wfVBas8GPKLCMa#=j@Yxqry66;;MAHA6?^0QGvvlL5;0 zl%6vSeDkCWK0ywCnhSwDOc*6R-EOeCWuk8d0lb2>Ef#&~9EKL)XIrVZHRIyiFnr|> zN4hAufnq0L%ps0kNm z0|03D0|3_JQ9{7YcKmEs!6L$X?*uR6)8c-FvS^?m}cUTw)B>>!$RyGL$|F>0o0Kn}IEFvrqcbmRf;H$@yS-+?pP;TkEX`gzy zR<-tg?_$Bdw`(Ror>-v%&uT1jEjMHVyA{TFGz}*?)x=`Kk8(rSVT7Ioc6ex`WV)3d8T zN^$O5!S_#+oSK{ibYi(g__qspKYl}S(8)IhH`@se$0npvnpXZJtO)TRg*0jEiRawT z&Lc&Za-wsw;LKpc=HgiY3O22zz8RDsOkelnDw_;_%Vsit77Mm51Txaze+4To0T|v) zwKD~&9}la(q4NAI%M;MAB{E)f=C5&r*%{|$dfn2pDLT8aPw002ov JPDHLkV1hp?i|+sc delta 1921 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 C5SP>d diff --git a/tests/ref/ops-multiply-inf-with-length.png b/tests/ref/ops-multiply-inf-with-length.png index 749be0564fcde9ba2600b80530676cb248d6d8a0..0662d568b7240fd63a197e87076b1d220d3d7870 100644 GIT binary patch literal 2414 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 (0, 1, "a")) --- ops-compare-array-nested-failure --- -// Error: 3-42 cannot compare 3.5 with NaN +// Error: 3-42 cannot compare 3.5 with calc.nan #((0, "a", 3.5) <= (0, "a", float("nan"))) --- ops-divide-by-zero-float ---