mirror of
https://github.com/belluzj/fantasque-sans.git
synced 2024-12-22 15:31:31 +01:00
Allows hardcoding sequences to ignore ligatures
- Certain operator combinations - especially those involving equals signs - look wrong when some of them form ligatures. - All current rules from FiraCode were ported over, but many are currently irrelevant for this font. Those are commented out of the file. - Fixes issue #118
This commit is contained in:
parent
824cd6a9f8
commit
bb0e4dc3af
|
@ -3,6 +3,7 @@
|
||||||
# Adapted from https://github.com/tonsky/FiraCode/blob/master/gen_calt.clj
|
# Adapted from https://github.com/tonsky/FiraCode/blob/master/gen_calt.clj
|
||||||
|
|
||||||
from textwrap import dedent
|
from textwrap import dedent
|
||||||
|
from collections import defaultdict
|
||||||
import tempfile
|
import tempfile
|
||||||
|
|
||||||
|
|
||||||
|
@ -44,7 +45,7 @@ def rule(liga):
|
||||||
[LIG f i] LIG
|
[LIG f i] LIG
|
||||||
[ f f i] LIG }
|
[ f f i] LIG }
|
||||||
"""
|
"""
|
||||||
# ignores:
|
# standard ignores:
|
||||||
# ignore sub {0} {0}' {1};
|
# ignore sub {0} {0}' {1};
|
||||||
# ignore sub {0}' {1} {1};
|
# ignore sub {0}' {1} {1};
|
||||||
rules = [
|
rules = [
|
||||||
|
@ -52,6 +53,9 @@ def rule(liga):
|
||||||
ignore(head=liga[0], suffix=(liga[1:] + [liga[-1]])),
|
ignore(head=liga[0], suffix=(liga[1:] + [liga[-1]])),
|
||||||
]
|
]
|
||||||
|
|
||||||
|
# hardcoded ignores, i.e. `<||>`
|
||||||
|
rules.extend(ignores[tuple(liga)])
|
||||||
|
|
||||||
name = "_".join(liga)
|
name = "_".join(liga)
|
||||||
# substitution logic
|
# substitution logic
|
||||||
# sub {0}' {1} by LIG;
|
# sub {0}' {1} by LIG;
|
||||||
|
@ -81,5 +85,112 @@ def ignore(prefix=None, head=None, suffix=None):
|
||||||
return "ignore sub{0} {1}'{2};".format(pref, head, rest)
|
return "ignore sub{0} {1}'{2};".format(pref, head, rest)
|
||||||
|
|
||||||
|
|
||||||
|
ignores = defaultdict(
|
||||||
|
list,
|
||||||
|
{
|
||||||
|
("slash", "asterisk"): [
|
||||||
|
"ignore sub slash' asterisk slash;",
|
||||||
|
"ignore sub asterisk slash' asterisk;",
|
||||||
|
],
|
||||||
|
("asterisk", "slash"): [
|
||||||
|
"ignore sub slash asterisk' slash;",
|
||||||
|
"ignore sub asterisk' slash asterisk;",
|
||||||
|
],
|
||||||
|
# ("asterisk", "asterisk"): [
|
||||||
|
# "ignore sub slash asterisk' asterisk;",
|
||||||
|
# "ignore sub asterisk' asterisk slash;",
|
||||||
|
# ],
|
||||||
|
# ("asterisk", "asterisk", "asterisk"): [
|
||||||
|
# "ignore sub slash asterisk' asterisk asterisk;",
|
||||||
|
# "ignore sub asterisk' asterisk asterisk slash;",
|
||||||
|
# ],
|
||||||
|
# <||>
|
||||||
|
("less", "bar", "bar"): ["ignore sub less' bar bar greater;"],
|
||||||
|
("bar", "bar", "greater"): ["ignore sub less bar' bar greater;"],
|
||||||
|
# # :>=
|
||||||
|
# ("colon", "greater"): ["ignore sub colon' greater equal;"],
|
||||||
|
# # {|}
|
||||||
|
# ("braceleft", "bar"): ["ignore sub braceleft' bar braceright;"],
|
||||||
|
# ("bar", "braceright"): ["ignore sub braceleft bar' braceright;"],
|
||||||
|
# # [|]
|
||||||
|
# ("bracketleft", "bar"): ["ignore sub bracketleft' bar bracketright;"],
|
||||||
|
# ("bar", "bracketright"): ["ignore sub bracketleft bar' bracketright;"],
|
||||||
|
# # <*>>> <+>>> <$>>>
|
||||||
|
# ("greater", "greater", "greater"): [
|
||||||
|
# "ignore sub [asterisk plus dollar] greater' greater greater;"
|
||||||
|
# ],
|
||||||
|
# # <<<*> <<<+> <<<$>
|
||||||
|
# ("less", "less", "less"): ["ignore sub less' less less [asterisk plus dollar];"],
|
||||||
|
# # =:=
|
||||||
|
# ("colon", "equal"): ["ignore sub equal colon' equal;"],
|
||||||
|
# =!=
|
||||||
|
("exclam", "equal"): ["ignore sub equal exclam' equal;"],
|
||||||
|
# =!==
|
||||||
|
("exclam", "equal", "equal"): ["ignore sub equal exclam' equal equal;"],
|
||||||
|
# =<= <=< <=> <=| <=: <=! <=/
|
||||||
|
("less", "equal"): [
|
||||||
|
"ignore sub equal less' equal;",
|
||||||
|
"ignore sub less' equal [less greater bar colon exclam slash];",
|
||||||
|
],
|
||||||
|
# >=<
|
||||||
|
# =>= >=> >=< >=| >=: >=! >=/
|
||||||
|
("greater", "equal"): [
|
||||||
|
"ignore sub equal greater' equal;",
|
||||||
|
"ignore sub greater' equal [less greater bar colon exclam slash];",
|
||||||
|
],
|
||||||
|
# <*>> <+>> <$>>
|
||||||
|
# >>->> >>=>>
|
||||||
|
("greater", "greater"): [
|
||||||
|
# "ignore sub [asterisk plus dollar] greater' greater;",
|
||||||
|
# "ignore sub [hyphen equal] greater' greater;",
|
||||||
|
# "ignore sub greater' greater [hyphen equal];",
|
||||||
|
],
|
||||||
|
# <<*> <<+> <<$>
|
||||||
|
# <<-<< <<=<<
|
||||||
|
("less", "less"): [
|
||||||
|
# "ignore sub less' less [asterisk plus dollar];",
|
||||||
|
# "ignore sub [hyphen equal] less' less;",
|
||||||
|
# "ignore sub less' less [hyphen equal];",
|
||||||
|
],
|
||||||
|
# ||-|| ||=||
|
||||||
|
("bar", "bar"): [
|
||||||
|
"ignore sub [hyphen equal] bar' bar;",
|
||||||
|
"ignore sub bar' bar [hyphen equal];",
|
||||||
|
],
|
||||||
|
# # <--> >--< |--|
|
||||||
|
# ("hyphen", "hyphen"): [
|
||||||
|
# "ignore sub [less greater bar] hyphen' hyphen;",
|
||||||
|
# "ignore sub hyphen' hyphen [less greater bar];",
|
||||||
|
# ],
|
||||||
|
# # <---> >---< |---|
|
||||||
|
# ("hyphen", "hyphen", "hyphen"):
|
||||||
|
# "ignore sub [less greater bar] hyphen' hyphen hyphen;",
|
||||||
|
# "ignore sub hyphen' hyphen hyphen [less greater bar];",
|
||||||
|
# ],
|
||||||
|
("equal", "equal"): [ # ==
|
||||||
|
# "ignore sub bracketleft equal' equal;", # [==
|
||||||
|
# "ignore sub equal' equal bracketright;",# ==]
|
||||||
|
"ignore sub equal [colon exclam] equal' equal;", # =:== =!==
|
||||||
|
# "ignore sub [less greater bar slash] equal' equal;", # <== >== |== /==
|
||||||
|
# "ignore sub equal' equal [less greater bar slash];", # ==< ==> ==| ==/
|
||||||
|
"ignore sub equal' equal [colon exclam] equal;", # ==:= ==!=
|
||||||
|
],
|
||||||
|
# [===[ ]===]
|
||||||
|
# [=== ===]
|
||||||
|
# <===> >===< |===| /===/ =:=== =!=== ===:= ===!=
|
||||||
|
("equal", "equal", "equal"): [
|
||||||
|
# "ignore sub bracketleft equal' equal equal;",
|
||||||
|
# "ignore sub equal' equal equal bracketright;",
|
||||||
|
"ignore sub equal [colon exclam] equal' equal equal;",
|
||||||
|
"ignore sub [less greater bar slash] equal' equal equal;",
|
||||||
|
# "ignore sub equal' equal equal [less greater bar slash];",
|
||||||
|
"ignore sub equal' equal equal [colon exclam] equal;",
|
||||||
|
],
|
||||||
|
# #118 https://
|
||||||
|
("slash", "slash"): ["ignore sub colon slash' slash;"],
|
||||||
|
},
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
def indent(text, prefix):
|
def indent(text, prefix):
|
||||||
return '\n'.join(prefix + line for line in text.split('\n'))
|
return '\n'.join(prefix + line for line in text.split('\n'))
|
||||||
|
|
Loading…
Reference in New Issue
Block a user