diff --git a/Scripts/features.py b/Scripts/features.py index 307004b..6117c2d 100644 --- a/Scripts/features.py +++ b/Scripts/features.py @@ -3,6 +3,7 @@ # Adapted from https://github.com/tonsky/FiraCode/blob/master/gen_calt.clj from textwrap import dedent +from collections import defaultdict import tempfile @@ -44,7 +45,7 @@ def rule(liga): [LIG f i] LIG [ f f i] LIG } """ - # ignores: + # standard ignores: # ignore sub {0} {0}' {1}; # ignore sub {0}' {1} {1}; rules = [ @@ -52,6 +53,9 @@ def rule(liga): ignore(head=liga[0], suffix=(liga[1:] + [liga[-1]])), ] + # hardcoded ignores, i.e. `<||>` + rules.extend(ignores[tuple(liga)]) + name = "_".join(liga) # substitution logic # 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) +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): return '\n'.join(prefix + line for line in text.split('\n'))