@ -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 ' ) )