Skip to content

Commit 0e6ed75

Browse files
authored
Fix LaTeX completions of Greek variants, add \frakI and \frakR (#39148)
* Fix LaTeX completions of Greek variants, add \frakI and \frakR * Remove \Join completion It is redundant with \join * Add canonical symbol->LaTeX mapping for ambiguous cases A test checks that all ambiguous cases are handled. * Replace \dots suggestion with \ldots
1 parent 35fcfda commit 0e6ed75

File tree

3 files changed

+69
-21
lines changed

3 files changed

+69
-21
lines changed

stdlib/REPL/src/docview.jl

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,11 @@ function symbol_latex(s::String)
334334
REPLCompletions.emoji_symbols))
335335
symbols_latex[v] = k
336336
end
337+
338+
# Overwrite with canonical mapping when a symbol has several completions (#39148)
339+
merge!(symbols_latex, REPLCompletions.symbols_latex_canonical)
337340
end
341+
338342
return get(symbols_latex, s, "")
339343
end
340344
function repl_latex(io::IO, s::String)

stdlib/REPL/src/latex_symbols.jl

Lines changed: 59 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,10 @@ end
7676
# Finally, we also add some symbols manually (at the top) as needed,
7777
# and edited others for consistency (e.g. #21646 and #14751).
7878

79+
# When a symbol has several completions, a canonical reverse mapping is
80+
# specified at the bottom of this file. The complete reverse mapping is
81+
# generated lazily in docview.jl.
82+
7983
# "font" prefixes
8084
const bold = "\\bf"
8185
const italic = "\\it"
@@ -182,7 +186,7 @@ const latex_symbols = Dict(
182186
"\\^iota" => "",
183187
"\\^phi" => "",
184188
"\\^chi" => "",
185-
"\\^Phi" => "",
189+
"\\^ltphi" => "",
186190
"\\^uparrow" => "",
187191
"\\^downarrow" => "",
188192
"\\^!" => "",
@@ -1827,6 +1831,7 @@ const latex_symbols = Dict(
18271831
frak*"E" => "𝔈", # mathematical fraktur capital e
18281832
frak*"F" => "𝔉", # mathematical fraktur capital f
18291833
frak*"G" => "𝔊", # mathematical fraktur capital g
1834+
frak*"I" => "", # black-letter capital i (manual addition)
18301835
frak*"J" => "𝔍", # mathematical fraktur capital j
18311836
frak*"K" => "𝔎", # mathematical fraktur capital k
18321837
frak*"L" => "𝔏", # mathematical fraktur capital l
@@ -1835,6 +1840,7 @@ const latex_symbols = Dict(
18351840
frak*"O" => "𝔒", # mathematical fraktur capital o
18361841
frak*"P" => "𝔓", # mathematical fraktur capital p
18371842
frak*"Q" => "𝔔", # mathematical fraktur capital q
1843+
frak*"R" => "", # black-letter capital r (manual addition)
18381844
frak*"S" => "𝔖", # mathematical fraktur capital s
18391845
frak*"T" => "𝔗", # mathematical fraktur capital t
18401846
frak*"U" => "𝔘", # mathematical fraktur capital u
@@ -2257,7 +2263,7 @@ const latex_symbols = Dict(
22572263
bold*"beta" => "𝛃", # mathematical bold small beta
22582264
bold*"gamma" => "𝛄", # mathematical bold small gamma
22592265
bold*"delta" => "𝛅", # mathematical bold small delta
2260-
bold*"epsilon" => "𝛆", # mathematical bold small epsilon
2266+
bold*"varepsilon" => "𝛆", # mathematical bold small epsilon
22612267
bold*"zeta" => "𝛇", # mathematical bold small zeta
22622268
bold*"eta" => "𝛈", # mathematical bold small eta
22632269
bold*"theta" => "𝛉", # mathematical bold small theta
@@ -2279,7 +2285,7 @@ const latex_symbols = Dict(
22792285
bold*"psi" => "𝛙", # mathematical bold small psi
22802286
bold*"omega" => "𝛚", # mathematical bold small omega
22812287
bold*"partial" => "𝛛", # mathematical bold partial differential
2282-
bold*"varepsilon" => "𝛜", # mathematical bold epsilon symbol
2288+
bold*"epsilon" => "𝛜", # mathematical bold epsilon symbol
22832289
bold*"vartheta" => "𝛝", # mathematical bold theta symbol
22842290
bold*"varkappa" => "𝛞", # mathematical bold kappa symbol
22852291
bold*"phi" => "𝛟", # mathematical bold phi symbol
@@ -2315,7 +2321,7 @@ const latex_symbols = Dict(
23152321
italic*"beta" => "𝛽", # mathematical italic small beta
23162322
italic*"gamma" => "𝛾", # mathematical italic small gamma
23172323
italic*"delta" => "𝛿", # mathematical italic small delta
2318-
italic*"epsilon" => "𝜀", # mathematical italic small epsilon
2324+
italic*"varepsilon" => "𝜀", # mathematical italic small epsilon
23192325
italic*"zeta" => "𝜁", # mathematical italic small zeta
23202326
italic*"eta" => "𝜂", # mathematical italic small eta
23212327
italic*"theta" => "𝜃", # mathematical italic small theta
@@ -2332,15 +2338,15 @@ const latex_symbols = Dict(
23322338
italic*"sigma" => "𝜎", # mathematical italic small sigma
23332339
italic*"tau" => "𝜏", # mathematical italic small tau
23342340
italic*"upsilon" => "𝜐", # mathematical italic small upsilon
2335-
italic*"phi" => "𝜑", # mathematical italic small phi
2341+
italic*"varphi" => "𝜑", # mathematical italic small phi
23362342
italic*"chi" => "𝜒", # mathematical italic small chi
23372343
italic*"psi" => "𝜓", # mathematical italic small psi
23382344
italic*"omega" => "𝜔", # mathematical italic small omega
23392345
italic*"partial" => "𝜕", # mathematical italic partial differential
2340-
italic*"varepsilon" => "𝜖", # mathematical italic epsilon symbol
2346+
italic*"epsilon" => "𝜖", # mathematical italic epsilon symbol
23412347
italic*"vartheta" => "𝜗", # mathematical italic theta symbol
23422348
italic*"varkappa" => "𝜘", # mathematical italic kappa symbol
2343-
italic*"varphi" => "𝜙", # mathematical italic phi symbol
2349+
italic*"phi" => "𝜙", # mathematical italic phi symbol
23442350
italic*"varrho" => "𝜚", # mathematical italic rho symbol
23452351
italic*"varpi" => "𝜛", # mathematical italic pi symbol
23462352
bolditalic*"Alpha" => "𝜜", # mathematical bold italic capital alpha
@@ -2373,7 +2379,7 @@ const latex_symbols = Dict(
23732379
bolditalic*"beta" => "𝜷", # mathematical bold italic small beta
23742380
bolditalic*"gamma" => "𝜸", # mathematical bold italic small gamma
23752381
bolditalic*"delta" => "𝜹", # mathematical bold italic small delta
2376-
bolditalic*"epsilon" => "𝜺", # mathematical bold italic small epsilon
2382+
bolditalic*"varepsilon" => "𝜺", # mathematical bold italic small epsilon
23772383
bolditalic*"zeta" => "𝜻", # mathematical bold italic small zeta
23782384
bolditalic*"eta" => "𝜼", # mathematical bold italic small eta
23792385
bolditalic*"theta" => "𝜽", # mathematical bold italic small theta
@@ -2390,15 +2396,15 @@ const latex_symbols = Dict(
23902396
bolditalic*"sigma" => "𝝈", # mathematical bold italic small sigma
23912397
bolditalic*"tau" => "𝝉", # mathematical bold italic small tau
23922398
bolditalic*"upsilon" => "𝝊", # mathematical bold italic small upsilon
2393-
bolditalic*"phi" => "𝝋", # mathematical bold italic small phi
2399+
bolditalic*"varphi" => "𝝋", # mathematical bold italic small phi
23942400
bolditalic*"chi" => "𝝌", # mathematical bold italic small chi
23952401
bolditalic*"psi" => "𝝍", # mathematical bold italic small psi
23962402
bolditalic*"omega" => "𝝎", # mathematical bold italic small omega
23972403
bolditalic*"partial" => "𝝏", # mathematical bold italic partial differential
2398-
bolditalic*"varepsilon" => "𝝐", # mathematical bold italic epsilon symbol
2404+
bolditalic*"epsilon" => "𝝐", # mathematical bold italic epsilon symbol
23992405
bolditalic*"vartheta" => "𝝑", # mathematical bold italic theta symbol
24002406
bolditalic*"varkappa" => "𝝒", # mathematical bold italic kappa symbol
2401-
bolditalic*"varphi" => "𝝓", # mathematical bold italic phi symbol
2407+
bolditalic*"phi" => "𝝓", # mathematical bold italic phi symbol
24022408
bolditalic*"varrho" => "𝝔", # mathematical bold italic rho symbol
24032409
bolditalic*"varpi" => "𝝕", # mathematical bold italic pi symbol
24042410
boldsans*"Alpha" => "𝝖", # mathematical sans-serif bold capital alpha
@@ -2431,7 +2437,7 @@ const latex_symbols = Dict(
24312437
boldsans*"beta" => "𝝱", # mathematical sans-serif bold small beta
24322438
boldsans*"gamma" => "𝝲", # mathematical sans-serif bold small gamma
24332439
boldsans*"delta" => "𝝳", # mathematical sans-serif bold small delta
2434-
boldsans*"epsilon" => "𝝴", # mathematical sans-serif bold small epsilon
2440+
boldsans*"varepsilon" => "𝝴", # mathematical sans-serif bold small epsilon
24352441
boldsans*"zeta" => "𝝵", # mathematical sans-serif bold small zeta
24362442
boldsans*"eta" => "𝝶", # mathematical sans-serif bold small eta
24372443
boldsans*"theta" => "𝝷", # mathematical sans-serif bold small theta
@@ -2448,15 +2454,15 @@ const latex_symbols = Dict(
24482454
boldsans*"sigma" => "𝞂", # mathematical sans-serif bold small sigma
24492455
boldsans*"tau" => "𝞃", # mathematical sans-serif bold small tau
24502456
boldsans*"upsilon" => "𝞄", # mathematical sans-serif bold small upsilon
2451-
boldsans*"phi" => "𝞅", # mathematical sans-serif bold small phi
2457+
boldsans*"varphi" => "𝞅", # mathematical sans-serif bold small phi
24522458
boldsans*"chi" => "𝞆", # mathematical sans-serif bold small chi
24532459
boldsans*"psi" => "𝞇", # mathematical sans-serif bold small psi
24542460
boldsans*"omega" => "𝞈", # mathematical sans-serif bold small omega
24552461
boldsans*"partial" => "𝞉", # mathematical sans-serif bold partial differential
2456-
boldsans*"varepsilon" => "𝞊", # mathematical sans-serif bold epsilon symbol
2462+
boldsans*"epsilon" => "𝞊", # mathematical sans-serif bold epsilon symbol
24572463
boldsans*"vartheta" => "𝞋", # mathematical sans-serif bold theta symbol
24582464
boldsans*"varkappa" => "𝞌", # mathematical sans-serif bold kappa symbol
2459-
boldsans*"varphi" => "𝞍", # mathematical sans-serif bold phi symbol
2465+
boldsans*"phi" => "𝞍", # mathematical sans-serif bold phi symbol
24602466
boldsans*"varrho" => "𝞎", # mathematical sans-serif bold rho symbol
24612467
boldsans*"varpi" => "𝞏", # mathematical sans-serif bold pi symbol
24622468
bolditalicsans*"Alpha" => "𝞐", # mathematical sans-serif bold italic capital alpha
@@ -2489,7 +2495,7 @@ const latex_symbols = Dict(
24892495
bolditalicsans*"beta" => "𝞫", # mathematical sans-serif bold italic small beta
24902496
bolditalicsans*"gamma" => "𝞬", # mathematical sans-serif bold italic small gamma
24912497
bolditalicsans*"delta" => "𝞭", # mathematical sans-serif bold italic small delta
2492-
bolditalicsans*"epsilon" => "𝞮", # mathematical sans-serif bold italic small epsilon
2498+
bolditalicsans*"varepsilon" => "𝞮", # mathematical sans-serif bold italic small epsilon
24932499
bolditalicsans*"zeta" => "𝞯", # mathematical sans-serif bold italic small zeta
24942500
bolditalicsans*"eta" => "𝞰", # mathematical sans-serif bold italic small eta
24952501
bolditalicsans*"theta" => "𝞱", # mathematical sans-serif bold italic small theta
@@ -2506,15 +2512,15 @@ const latex_symbols = Dict(
25062512
bolditalicsans*"sigma" => "𝞼", # mathematical sans-serif bold italic small sigma
25072513
bolditalicsans*"tau" => "𝞽", # mathematical sans-serif bold italic small tau
25082514
bolditalicsans*"upsilon" => "𝞾", # mathematical sans-serif bold italic small upsilon
2509-
bolditalicsans*"phi" => "𝞿", # mathematical sans-serif bold italic small phi
2515+
bolditalicsans*"varphi" => "𝞿", # mathematical sans-serif bold italic small phi
25102516
bolditalicsans*"chi" => "𝟀", # mathematical sans-serif bold italic small chi
25112517
bolditalicsans*"psi" => "𝟁", # mathematical sans-serif bold italic small psi
25122518
bolditalicsans*"omega" => "𝟂", # mathematical sans-serif bold italic small omega
25132519
bolditalicsans*"partial" => "𝟃", # mathematical sans-serif bold italic partial differential
2514-
bolditalicsans*"varepsilon" => "𝟄", # mathematical sans-serif bold italic epsilon symbol
2520+
bolditalicsans*"epsilon" => "𝟄", # mathematical sans-serif bold italic epsilon symbol
25152521
bolditalicsans*"vartheta" => "𝟅", # mathematical sans-serif bold italic theta symbol
25162522
bolditalicsans*"varkappa" => "𝟆", # mathematical sans-serif bold italic kappa symbol
2517-
bolditalicsans*"varphi" => "𝟇", # mathematical sans-serif bold italic phi symbol
2523+
bolditalicsans*"phi" => "𝟇", # mathematical sans-serif bold italic phi symbol
25182524
bolditalicsans*"varrho" => "𝟈", # mathematical sans-serif bold italic rho symbol
25192525
bolditalicsans*"varpi" => "𝟉", # mathematical sans-serif bold italic pi symbol
25202526
bold*"Digamma" => "\U1d7ca", # mathematical bold capital digamma
@@ -2575,7 +2581,6 @@ const latex_symbols = Dict(
25752581
"\\leftouterjoin" => "", # left outer join
25762582
"\\rightouterjoin" => "", # right outer join
25772583
"\\fullouterjoin" => "", # full outer join
2578-
"\\Join" => "", # join
25792584
"\\join" => "", # join
25802585
"\\underbar" => "̲", # combining low line
25812586
"\\underleftrightarrow" => "͍", # underleftrightarrow accent
@@ -2613,3 +2618,37 @@ const latex_symbols = Dict(
26132618
"\\0/3" => "", # vulgar fraction zero thirds
26142619
"\\1/4" => "¼", # vulgar fraction one quarter
26152620
)
2621+
2622+
2623+
# Canonical reverse mapping for symbols that have several completions (#39148).
2624+
#
2625+
# These duplicate mappings can be investigated with the folllowing commands:
2626+
#=
2627+
ls = REPL.REPLCompletions.latex_symbols; symbols = values(ls)
2628+
duplicates = [v for v in unique(symbols) if count(==(v), symbols) > 1]
2629+
[(v, REPL.symbol_latex(v)) => findall(==(v), ls) for v in duplicates]
2630+
=#
2631+
const symbols_latex_canonical = Dict(
2632+
"ð" => "\\dh",
2633+
"" => "\\ldots",
2634+
"" => "\\emptyset",
2635+
"" => "\\euler",
2636+
"" => "\\female",
2637+
"" => "\\ge",
2638+
"" => "\\iff",
2639+
"" => "\\Im",
2640+
"" => "\\impliedby",
2641+
"" => "\\implies",
2642+
"" => "\\le",
2643+
"" => "\\llbracket",
2644+
"" => "\\male",
2645+
"" => "\\del",
2646+
"" => "\\planck",
2647+
"" => "\\Re",
2648+
"" => "\\rrbracket",
2649+
"" => "\\sqrt",
2650+
"̶" => "\\sout",
2651+
"" => "\\to",
2652+
"ε" => "\\varepsilon",
2653+
"" => "\\xor",
2654+
)

stdlib/REPL/test/docview.jl

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
# This file is a part of Julia. License is MIT: https://julialang.org/license
22

33
using Test
4-
import REPL
4+
import REPL, REPL.REPLCompletions
55
import Markdown
66

77
@testset "symbol completion" begin
@@ -19,6 +19,11 @@ import Markdown
1919
Core.eval(Main, REPL.helpmode(buf, "ᵞ₁₂₃¹²³α"))
2020
String(take!(buf))
2121
end, "\"ᵞ₁₂₃¹²³α\" can be typed by \\^gamma<tab>\\_123<tab>\\^123<tab>\\alpha<tab>\n")
22+
23+
# Check that all symbols with several completions have a canonical mapping (#39148)
24+
symbols = values(REPLCompletions.latex_symbols)
25+
duplicates = [v for v in unique(symbols) if count(==(v), symbols) > 1]
26+
@test all(duplicates .∈ Ref(keys(REPLCompletions.symbols_latex_canonical)))
2227
end
2328

2429
@testset "Non-Markdown" begin

0 commit comments

Comments
 (0)