Browse Source

Catching bugs

Nikita Prokopov 4 years ago
parent
commit
524a28629b

File diff suppressed because it is too large
+ 5 - 0
FiraCode.glyphs


+ 78 - 45
clojure/fira_code/calt.clj

@@ -32,9 +32,20 @@
         " " (str/join " " (drop 1 liga))
         ";\n"))))
 
+;; #346 We need << <<< >> >>> || ||| substituted before -- --- == ===
+;; so that `ignore [less greater bar] hyphen hyphen` would not trigger
+(def priority?
+  #{["less" "less"]
+    ["less" "less" "less"]
+    ["greater" "greater"]
+    ["greater" "greater" "greater"]
+    ["bar" "bar"]
+    ["bar" "bar" "bar"]})
+
 
 (def ignores
-  { ["slash" "asterisk"]
+  (coll/multimap-by str
+    ["slash" "asterisk"]
     (str
       "  ignore sub slash' asterisk slash;\n"
       "  ignore sub asterisk slash' asterisk;\n")
@@ -65,23 +76,6 @@
     ["colon" "greater"]
     "  ignore sub colon' greater equal;\n"
 
-    ;; #346 =:=
-    ["colon" "equal"]
-    "  ignore sub equal colon' equal;\n"
-
-    ;; #346 =!=
-    ["exclam" "equal"]
-    "  ignore sub equal exclam' equal;\n"
-
-    ;; #346 <=< <=> <=| <=: <=! <=/
-    ["less" "equal"]
-    "  ignore sub less' equal [less greater bar colon exclam slash];\n"
-    
-    ;; #548 >=<
-    ;; #346 >=> >=< >=| >=: >=! >=/
-    ["greater" "equal"]
-    "  ignore sub greater' equal [less greater bar colon exclam slash];\n"
-
     ;; #593 {|}
     ["braceleft" "bar"]
     "  ignore sub braceleft' bar braceright;\n"
@@ -97,55 +91,92 @@
     "  ignore sub bracketleft bar' bracketright;\n"
 
     ;; #410 <*>> <+>> <$>>
-    ;; #346 >>->> >>=>>
     ["greater" "greater"]
-    (str "  ignore sub [asterisk plus dollar hyphen equal] greater' greater;\n"
-         "  ignore sub greater' greater [hyphen equal];\n")
-
+    "  ignore sub [asterisk plus dollar] greater' greater;\n"
+    
     ;; #410 <*>>> <+>>> <$>>>
-    ;; #346 >>>->>> >>>=>>>
     ["greater" "greater" "greater"]
     "  ignore sub [asterisk plus dollar] greater' greater greater;\n"
 
     ;; #410 <<*> <<+> <<$>
-    ;; #346 <<-<< <<=<<
     ["less" "less"]
-    (str "  ignore sub [hyphen equal] less' less;\n"
-         "  ignore sub less' less [asterisk plus dollar hyphen equal];\n")
+    "  ignore sub less' less [asterisk plus dollar];\n"
 
     ;; #410 <<<*> <<<+> <<<$>
     ["less" "less" "less"]
     "  ignore sub less' less less [asterisk plus dollar];\n"
 
-    ;; #968 [==
-    ;; #346 <==> >==< |==| /==/ 
+    ;; #968 [== ==]
     ["equal" "equal"]
-    (str "  ignore sub [bracketleft less greater bar slash] equal' equal;\n"
-         "  ignore sub equal' equal [bracketright less greater bar slash] ;\n")
+    (str "  ignore sub bracketleft equal' equal;\n"
+         "  ignore sub equal' equal bracketright;\n")
 
-    ;; #968 [===
-    ;; #346 <===> >===< |===| /===/
+    ;; #968 [=== ===]
     ["equal" "equal" "equal"]
-    (str "  ignore sub [bracketleft less greater bar slash] equal' equal equal;\n"
-         "  ignore sub equal' equal equal [bracketright less greater bar slash];\n")
+    (str "  ignore sub bracketleft equal' equal equal;\n"
+         "  ignore sub equal' equal equal bracketright;\n")
 
-    ;; #968 [--
-    ;; #346 <--> >--< |--|
-    ["hyphen" "hyphen"]
-    (str "  ignore sub [bracketleft less greater bar] hyphen' hyphen;\n"
-         "  ignore sub hyphen' hyphen [bracketright less greater bar];\n")
+    ;; #346 =:=
+    ["colon" "equal"]
+    "  ignore sub equal colon' equal;\n"
 
-    ;; #968 [---
-    ;; #346 <---> >---< |---|
-    ["hyphen" "hyphen" "hyphen"]
-    (str "  ignore sub [bracketleft less greater bar] hyphen' hyphen hyphen;\n"
-         "  ignore sub hyphen' hyphen hyphen [bracketright less greater bar];\n")
+    ;; #346 =!=
+    ["exclam" "equal"]
+    "  ignore sub equal exclam' equal;\n"
+    ;; #346 =!==
+    ["exclam" "equal" "equal"]
+    "  ignore sub equal exclam' equal equal;\n"
+
+    ;; #346 =<= <=< <=> <=| <=: <=! <=/
+    ["less" "equal"]
+    (str "  ignore sub equal less' equal;\n"
+         "  ignore sub less' equal [less greater bar colon exclam slash];\n")
+    
+    ;; #548 >=<
+    ;; #346 =>= >=> >=< >=| >=: >=! >=/
+    ["greater" "equal"]
+    (str "  ignore sub equal greater' equal;\n"
+         "  ignore sub greater' equal [less greater bar colon exclam slash];\n")
+
+    ;; #346 >>->> >>=>>
+    ["greater" "greater"]
+    (str "  ignore sub [hyphen equal] greater' greater;\n"
+         "  ignore sub greater' greater [hyphen equal];\n")
+
+    ;; #346 <<-<< <<=<<
+    ["less" "less"]
+    (str "  ignore sub [hyphen equal] less' less;\n"
+         "  ignore sub less' less [hyphen equal];\n")
 
     ;; #346 ||-|| ||=||
     ["bar" "bar"]
     (str "  ignore sub [hyphen equal] bar' bar;\n"
          "  ignore sub bar' bar [hyphen equal];\n")
-})
+
+    ;; #346 <--> >--< |--|
+    ["hyphen" "hyphen"]
+    (str "  ignore sub [less greater bar] hyphen' hyphen;\n"
+         "  ignore sub hyphen' hyphen [less greater bar];\n")
+
+    ;; #346 <---> >---< |---|
+    ["hyphen" "hyphen" "hyphen"]
+    (str "  ignore sub [less greater bar] hyphen' hyphen hyphen;\n"
+         "  ignore sub hyphen' hyphen hyphen [less greater bar];\n")
+
+    ;; #346 <==> >==< |==| /==/ =:== =!== ==:= ==!=
+    ["equal" "equal"]
+    (str "  ignore sub equal [colon exclam] equal' equal;\n"
+         "  ignore sub [less greater bar slash] equal' equal;\n"
+         "  ignore sub equal' equal [less greater bar slash] ;\n"
+         "  ignore sub equal' equal [colon exclam] equal;\n")
+
+    ;; #346 <===> >===< |===| /===/ =:=== =!=== ===:= ===!=
+    ["equal" "equal" "equal"]
+    (str "  ignore sub equal [colon exclam] equal' equal equal;\n"
+         "  ignore sub [less greater bar slash] equal' equal equal;\n"
+         "  ignore sub equal' equal equal [less greater bar slash];\n"
+         "  ignore sub equal' equal equal [colon exclam] equal;\n")
+))
 
 
 ;; DO NOT generate ignores at all
@@ -238,6 +269,8 @@
 
 (defn compare-ligas [l1 l2]
   (cond
+    (and (priority? l1) (not (priority? l2))) -1
+    (and (not (priority? l1)) (priority? l2)) 1
     (> (count l1) (count l2)) -1
     (< (count l1) (count l2)) 1
     :else (compare l1 l2)))

+ 10 - 1
clojure/fira_code/coll.clj

@@ -13,4 +13,13 @@
     (fn [m k vs]
       (assoc m k (value-fn vs)))
     {}
-    (group-by key-fn xs)))
+    (group-by key-fn xs)))
+
+
+(defn multimap-by [f & kvs]
+  (reduce
+    (fn [m [k v]]
+      (if (contains? m k)
+        (update m k f v)
+        (assoc m k v)))
+    {} (partition 2 kvs)))

+ 0 - 51
features/calt/arrows.fea

@@ -1,51 +0,0 @@
-### Arbitrary-length arrows #346
-
-lookup arrows {
-  # Disable |||
-  ignore sub bar bar' bar hyphen;
-  ignore sub bar bar' hyphen;
-  ignore sub [hyphen_start.arw hyphen_end.arw] bar' bar bar;
-
-  # continue hyphen
-  sub [less_start.arw less_less_start.arw less_middle.arw less_less_middle.arw greater_start.arw greater_greater_start.arw greater_middle.arw greater_greater_middle.arw bar_start.arw bar_bar_start.arw bar_middle.arw bar_bar_middle.arw hyphen_start.arw hyphen_end.arw] hyphen' by hyphen_end.arw;
-
-  # double middles
-  sub [hyphen_start.arw hyphen_end.arw] less.spacer    less'    hyphen by less_less_middle.arw;
-  sub [hyphen_start.arw hyphen_end.arw] less'          less     hyphen by less.spacer;
-  sub [hyphen_start.arw hyphen_end.arw] greater.spacer greater' hyphen by greater_greater_middle.arw;
-  sub [hyphen_start.arw hyphen_end.arw] greater'       greater  hyphen by greater.spacer;
-  sub [hyphen_start.arw hyphen_end.arw] bar.spacer     bar'     hyphen by bar_bar_middle.arw;
-  sub [hyphen_start.arw hyphen_end.arw] bar'           bar      hyphen by bar.spacer;
-
-  # single middles
-  sub [hyphen_start.arw hyphen_end.arw] less'    hyphen by less_middle.arw;
-  sub [hyphen_start.arw hyphen_end.arw] greater' hyphen by greater_middle.arw;
-  sub [hyphen_start.arw hyphen_end.arw] bar'     hyphen by bar_middle.arw;
-
-  # double ends
-  sub [hyphen_start.arw hyphen_end.arw] less.spacer    less'    by less_less_end.arw;
-  sub [hyphen_start.arw hyphen_end.arw] less'          less     by less.spacer;
-  sub [hyphen_start.arw hyphen_end.arw] greater.spacer greater' by greater_greater_end.arw;
-  sub [hyphen_start.arw hyphen_end.arw] greater'       greater  by greater.spacer;
-  sub [hyphen_start.arw hyphen_end.arw] bar.spacer     bar'     by bar_bar_end.arw;
-  sub [hyphen_start.arw hyphen_end.arw] bar'           bar      by bar.spacer;
-
-  # single ends
-  sub [hyphen_start.arw hyphen_end.arw] less'    by less_end.arw;
-  sub [hyphen_start.arw hyphen_end.arw] greater' by greater_end.arw;
-  sub [hyphen_start.arw hyphen_end.arw] bar'     by bar_end.arw;
-
-  # double beginnings
-  sub less.spacer    less'    hyphen by less_less_start.arw;
-  sub less'          less     hyphen by less.spacer;
-  sub greater.spacer greater' hyphen by greater_greater_start.arw;
-  sub greater'       greater  hyphen by greater.spacer;
-  sub bar.spacer     bar'     hyphen by bar_bar_start.arw;
-  sub bar'           bar      hyphen by bar.spacer;
-
-  # single beginnings
-  sub less'    hyphen by less_start.arw;
-  sub greater' hyphen by greater_start.arw;
-  sub bar'     hyphen by bar_start.arw;
-  sub hyphen' [hyphen less greater bar] by hyphen_start.arw;
-} arrows;

+ 0 - 63
features/calt/double_arrows.fea

@@ -1,63 +0,0 @@
-lookup double_arrows {
-  # Disable |||
-  ignore sub bar bar' bar equal;
-  ignore sub bar bar' equal;
-  ignore sub [equal_start.darw equal_end.darw] bar' bar bar;
-
-  # continue hyphen
-  sub [less_start.darw less_less_start.darw less_middle.darw less_less_middle.darw greater_start.darw greater_greater_start.darw greater_middle.darw greater_greater_middle.darw bar_start.darw bar_bar_start.darw bar_middle.darw bar_bar_middle.darw slash_start.darw slash_middle.darw colon_middle.darw exclam_middle.darw equal_start.darw equal_end.darw] equal' by equal_end.darw;
-
-  # double middles
-  sub [equal_start.darw equal_end.darw] less.spacer    less'    equal by less_less_middle.darw;
-  sub [equal_start.darw equal_end.darw] less'          less     equal by less.spacer;
-  sub [equal_start.darw equal_end.darw] greater.spacer greater' equal by greater_greater_middle.darw;
-  sub [equal_start.darw equal_end.darw] greater'       greater  equal by greater.spacer;
-  sub [equal_start.darw equal_end.darw] bar.spacer     bar'     equal by bar_bar_middle.darw;
-  sub [equal_start.darw equal_end.darw] bar'           bar      equal by bar.spacer;
-
-  # single middles
-  sub [equal_start.darw equal_end.darw] less'    equal by less_middle.darw;
-  sub [equal_start.darw equal_end.darw] greater' equal by greater_middle.darw;
-  sub [equal_start.darw equal_end.darw] bar'     equal by bar_middle.darw;
-  sub [equal_start.darw equal_end.darw] slash'   equal by slash_middle.darw;
-  sub [equal_start.darw equal_end.darw] colon'   equal by colon_middle.darw;
-  sub [equal_start.darw equal_end.darw] exclam'  equal by exclam_middle.darw;
-
-  # double ends
-  sub [equal_start.darw equal_end.darw] less.spacer    less'    by less_less_end.darw;
-  sub [equal_start.darw equal_end.darw] less'          less     by less.spacer;
-  sub [equal_start.darw equal_end.darw] greater.spacer greater' by greater_greater_end.darw;
-  sub [equal_start.darw equal_end.darw] greater'       greater  by greater.spacer;
-  sub [equal_start.darw equal_end.darw] bar.spacer     bar'     by bar_bar_end.darw;
-  sub [equal_start.darw equal_end.darw] bar'           bar      by bar.spacer;
-
-  # single ends
-  sub [equal_start.darw equal_end.darw] less'    by less_end.darw;
-  sub [equal_start.darw equal_end.darw] greater' by greater_end.darw;
-  sub [equal_start.darw equal_end.darw] bar'     by bar_end.darw;
-  sub [equal_start.darw equal_end.darw] slash'   by slash_end.darw;
-
-  # double beginnings
-  sub less.spacer    less'    equal by less_less_start.darw;
-  sub less'          less     equal by less.spacer;
-  sub greater.spacer greater' equal by greater_greater_start.darw;
-  sub greater'       greater  equal by greater.spacer;
-  sub bar.spacer     bar'     equal by bar_bar_start.darw;
-  sub bar'           bar      equal by bar.spacer;
-
-  # Disable >=< #548
-  sub greater' equal less [equal less] by greater_start.darw;
-  ignore sub greater' equal less;
-  
-  # Disable =< #479 #468 #424 #406 #355 #305
-  sub equal' less [equal less] by equal_start.darw;
-  ignore sub equal' less;
-
-  # single beginnings
-  sub less'    equal by less_start.darw;
-  sub greater' equal by greater_start.darw;
-  sub bar'     equal by bar_start.darw;
-  sub slash'   equal by slash_start.darw;
-  sub equal'  [equal less greater bar colon exclam slash] by equal_start.darw;
-
-} double_arrows;

+ 65 - 0
features/calt/equal_arrows.fea

@@ -0,0 +1,65 @@
+lookup equal_arrows {
+  # Disable |||
+  ignore sub bar bar' bar equal;
+  ignore sub bar bar' equal;
+  ignore sub [equal_start.darw equal_middle.darw] bar' bar bar;
+
+  # equal middle & end
+  sub [less_start.darw less_less_start.darw less_middle.darw less_less_middle.darw greater_start.darw greater_greater_start.darw greater_middle.darw greater_greater_middle.darw bar_start.darw bar_bar_start.darw bar_middle.darw bar_bar_middle.darw slash_start.darw slash_middle.darw colon_middle.darw exclam_middle.darw equal_start.darw equal_middle.darw] equal' [equal less greater bar slash colon exclam] by equal_middle.darw;
+
+  sub [less_start.darw less_less_start.darw less_middle.darw less_less_middle.darw greater_start.darw greater_greater_start.darw greater_middle.darw greater_greater_middle.darw bar_start.darw bar_bar_start.darw bar_middle.darw bar_bar_middle.darw slash_start.darw slash_middle.darw colon_middle.darw exclam_middle.darw equal_start.darw equal_middle.darw] equal' by equal_end.darw;
+
+  # double middles
+  sub [equal_start.darw equal_middle.darw] less.spacer    less'    equal by less_less_middle.darw;
+  sub [equal_start.darw equal_middle.darw] less'          less     equal by less.spacer;
+  sub [equal_start.darw equal_middle.darw] greater.spacer greater' equal by greater_greater_middle.darw;
+  sub [equal_start.darw equal_middle.darw] greater'       greater  equal by greater.spacer;
+  sub [equal_start.darw equal_middle.darw] bar.spacer     bar'     equal by bar_bar_middle.darw;
+  sub [equal_start.darw equal_middle.darw] bar'           bar      equal by bar.spacer;
+
+  # single middles
+  sub [equal_start.darw equal_middle.darw] less'    equal by less_middle.darw;
+  sub [equal_start.darw equal_middle.darw] greater' equal by greater_middle.darw;
+  sub [equal_start.darw equal_middle.darw] bar'     equal by bar_middle.darw;
+  sub [equal_start.darw equal_middle.darw] slash'   equal by slash_middle.darw;
+  sub [equal_start.darw equal_middle.darw] colon'   equal by colon_middle.darw;
+  sub [equal_start.darw equal_middle.darw] exclam'  equal by exclam_middle.darw;
+
+  # double ends
+  sub [equal_start.darw equal_middle.darw] less.spacer    less'    by less_less_end.darw;
+  sub [equal_start.darw equal_middle.darw] less'          less     by less.spacer;
+  sub [equal_start.darw equal_middle.darw] greater.spacer greater' by greater_greater_end.darw;
+  sub [equal_start.darw equal_middle.darw] greater'       greater  by greater.spacer;
+  sub [equal_start.darw equal_middle.darw] bar.spacer     bar'     by bar_bar_end.darw;
+  sub [equal_start.darw equal_middle.darw] bar'           bar      by bar.spacer;
+
+  # single ends
+  sub [equal_start.darw equal_middle.darw] less'    by less_end.darw;
+  sub [equal_start.darw equal_middle.darw] greater' by greater_end.darw;
+  sub [equal_start.darw equal_middle.darw] bar'     by bar_end.darw;
+  sub [equal_start.darw equal_middle.darw] slash'   by slash_end.darw;
+
+  # double beginnings
+  sub less.spacer    less'    equal by less_less_start.darw;
+  sub less'          less     equal by less.spacer;
+  sub greater.spacer greater' equal by greater_greater_start.darw;
+  sub greater'       greater  equal by greater.spacer;
+  sub bar.spacer     bar'     equal by bar_bar_start.darw;
+  sub bar'           bar      equal by bar.spacer;
+
+  # Disable >=< #548
+  sub greater' equal less [equal less] by greater_start.darw;
+  ignore sub greater' equal less;
+  
+  # Disable =< #479 #468 #424 #406 #355 #305
+  sub equal' less [equal less] by equal_start.darw;
+  ignore sub equal' less;
+
+  # single beginnings
+  sub less'    equal by less_start.darw;
+  sub greater' equal by greater_start.darw;
+  sub bar'     equal by bar_start.darw;
+  sub slash'   equal by slash_start.darw;
+  sub equal'  [equal less greater bar colon exclam slash] by equal_start.darw;
+
+} equal_arrows;

+ 54 - 0
features/calt/hyphen_arrows.fea

@@ -0,0 +1,54 @@
+
+### Arbitrary-length arrows #346
+
+lookup hyphen_arrows {
+  # Disable |||
+  ignore sub bar bar' bar hyphen;
+  ignore sub bar bar' hyphen;
+  ignore sub [hyphen_start.arw hyphen_middle.arw] bar' bar bar;
+
+  # hyphen middle & end
+  sub [less_start.arw less_less_start.arw less_middle.arw less_less_middle.arw greater_start.arw greater_greater_start.arw greater_middle.arw greater_greater_middle.arw bar_start.arw bar_bar_start.arw bar_middle.arw bar_bar_middle.arw hyphen_start.arw hyphen_middle.arw] hyphen' [hyphen less greater bar] by hyphen_middle.arw;
+
+  sub [less_start.arw less_less_start.arw less_middle.arw less_less_middle.arw greater_start.arw greater_greater_start.arw greater_middle.arw greater_greater_middle.arw bar_start.arw bar_bar_start.arw bar_middle.arw bar_bar_middle.arw hyphen_start.arw hyphen_middle.arw] hyphen' by hyphen_end.arw;
+
+  # double middles
+  sub [hyphen_start.arw hyphen_middle.arw] less.spacer    less'    hyphen by less_less_middle.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] less'          less     hyphen by less.spacer;
+  sub [hyphen_start.arw hyphen_middle.arw] greater.spacer greater' hyphen by greater_greater_middle.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] greater'       greater  hyphen by greater.spacer;
+  sub [hyphen_start.arw hyphen_middle.arw] bar.spacer     bar'     hyphen by bar_bar_middle.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] bar'           bar      hyphen by bar.spacer;
+
+  # single middles
+  sub [hyphen_start.arw hyphen_middle.arw] less'    hyphen by less_middle.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] greater' hyphen by greater_middle.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] bar'     hyphen by bar_middle.arw;
+
+  # double ends
+  sub [hyphen_start.arw hyphen_middle.arw] less.spacer    less'    by less_less_end.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] less'          less     by less.spacer;
+  sub [hyphen_start.arw hyphen_middle.arw] greater.spacer greater' by greater_greater_end.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] greater'       greater  by greater.spacer;
+  sub [hyphen_start.arw hyphen_middle.arw] bar.spacer     bar'     by bar_bar_end.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] bar'           bar      by bar.spacer;
+
+  # single ends
+  sub [hyphen_start.arw hyphen_middle.arw] less'    by less_end.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] greater' by greater_end.arw;
+  sub [hyphen_start.arw hyphen_middle.arw] bar'     by bar_end.arw;
+
+  # double beginnings
+  sub less.spacer    less'    hyphen by less_less_start.arw;
+  sub less'          less     hyphen by less.spacer;
+  sub greater.spacer greater' hyphen by greater_greater_start.arw;
+  sub greater'       greater  hyphen by greater.spacer;
+  sub bar.spacer     bar'     hyphen by bar_bar_start.arw;
+  sub bar'           bar      hyphen by bar.spacer;
+
+  # single beginnings
+  sub less'    hyphen by less_start.arw;
+  sub greater' hyphen by greater_start.arw;
+  sub bar'     hyphen by bar_start.arw;
+  sub hyphen' [hyphen less greater bar] by hyphen_start.arw;
+} hyphen_arrows;

+ 6 - 0
features/calt/underscore_arrows.fea

@@ -1,8 +1,14 @@
 lookup underscore_arrows {
+  # middle parts
   sub [underscore_start.uarw underscore_middle.uarw] bar' underscore by bar_middle.uarw;
+
   sub [underscore_start.uarw underscore_middle.uarw bar_middle.uarw] underscore' bar underscore by underscore_middle.uarw;
   sub [underscore_start.uarw underscore_middle.uarw bar_middle.uarw] underscore' underscore by underscore_middle.uarw;
+
+  # ends
   sub [underscore_start.uarw underscore_middle.uarw bar_middle.uarw] underscore' by underscore_end.uarw;
+  
+  # beginnings
   sub underscore' bar underscore by underscore_start.uarw; 
   sub underscore' underscore by underscore_start.uarw; 
 } underscore_arrows;

+ 159 - 30
showcases/v3/showcases.txt

@@ -93,42 +93,171 @@ r 0 123456789 & && $ <$ <$> $> @ <= >=
 
 # Arbitrary-length arrows #346
 
-<--------------------------------------------<<
------ ----< ---<< ----> --->> ----| ---||
-<---- <---< <--<< <---> <-->> <---| <--|| --<--
-<<--- <<--< <<-<< <<--> <<->> <<--| <<-|| -<<-
->---- >---< >--<< >---> >-->> >---| >--|| -->--
->>--- >>--< >>-<< >>--> >>->> >>--| >>-|| ->>-
-|---- |---< |--<< |---> |-->> |---| |--|| --|--
-||--- ||--< ||-<< ||--> ||->> ||--| ||-|| -||-
+<---------------------------------------------<<
+<-     <--  <--- <----   ---->  --->   -->    ->
+>-     >--  >--- >----   ----<  ---<   --<    -<
+|-     |--  |--- |----   ----|  ---|   --|    -|
+<<-   <<-- <<--- <<---- ---->> --->>  -->>   ->>
+>>-   >>-- >>--- >>---- ----<< ---<<  --<<   -<<
+||-   ||-- ||--- ||---- ----|| ---||  --||   -||
+----- ----< ---<< ---->  --->> ----| ---||
+<---- <---< <--<< <--->  <-->> <---| <--|| --<--
+<<--- <<--< <<-<< <<-->  <<->> <<--| <<-|| -<<-
+>---- >---< >--<< >--->  >-->> >---| >--|| -->--
+>>--- >>--< >>-<< >>-->  >>->> >>--| >>-|| ->>-
+|---- |---< |--<< |--->  |-->> |---| |--|| --|--
+||--- ||--< ||-<< ||-->  ||->> ||--| ||-|| -||-
+|-<-<<->>->-|-||-|
 |--<--<<-->>-->--|--||--|
+|---<---<<--->>--->---|---||---|
+
+<     -<     --<     ---<     ----<
+<-    -<-    --<-    ---<-    ----<-
+<--   -<--   --<--   ---<--   ----<--
+<---  -<---  --<---  ---<---  ----<---
+<---- -<---- --<---- ---<---- ----<----
+
+>     ->     -->     --->     ---->
+>-    ->-    -->-    --->-    ---->-
+>--   ->--   -->--   --->--   ---->--
+>---  ->---  -->---  --->---  ---->---
+>---- ->---- -->---- --->---- ---->----
+
+|     -|     --|     ---|     ----|
+|-    -|-    --|-    ---|-    ----|-
+|--   -|--   --|--   ---|--   ----|--
+|---  -|---  --|---  ---|---  ----|---
+|---- -|---- --|---- ---|---- ----|----
+
+<<     -<<     --<<     ---<<     ----<<
+<<-    -<<-    --<<-    ---<<-    ----<<-
+<<--   -<<--   --<<--   ---<<--   ----<<--
+<<---  -<<---  --<<---  ---<<---  ----<<---
+<<---- -<<---- --<<---- ---<<---- ----<<----
+
+>>     ->>     -->>     --->>     ---->>
+>>-    ->>-    -->>-    --->>-    ---->>-
+>>--   ->>--   -->>--   --->>--   ---->>--
+>>---  ->>---  -->>---  --->>---  ---->>---
+>>---- ->>---- -->>---- --->>---- ---->>----
+
+||     -||     --||     ---||     ----||
+||-    -||-    --||-    ---||-    ----||-
+||--   -||--   --||--   ---||--   ----||--
+||---  -||---  --||---  ---||---  ----||---
+||---- -||---- --||---- ---||---- ----||----
+
+<====================================================<<
+<=     <==   <=== <====   ====>  ===>   ==>    =>
+>=     >==   >=== >====   ====<  ===<   ==<    =<
+|=     |==   |=== |====   ====|  ===|   ==|    =|
+<<=   <<==  <<=== <<==== ====>> ===>>  ==>>   =>>
+>>=   >>==  >>=== >>==== ====<< ===<<  ==<<   =<<
+||=   ||==  ||=== ||==== ====|| ===||  ==||   =||
+===== ====< ===<< ====>   ===>> ====| ===|| ====/
+<==== <===< <==<< <===>   <==>> <===| <==|| <===/ ==<==
+<<=== <<==< <<=<< <<==>   <<=>> <<==| <<=|| <<==/ =<<=
+>==== >===< >==<< >===>   >==>> >===| >==|| >===/ ==>==
+>>=== >>==< >>=<< >>==>   >>=>> >>==| >>=|| >>==/ =>>=
+|==== |===< |==<< |===>   |==>> |===| |==|| |===/ ==|==
+||=== ||==< ||=<< ||==>   ||=>> ||==| ||=|| ||==/ =||=
+/==== /===< /==<< /===>   /==>> /===| /==|| /===/ ==/==
+|=<=<<=>>=>=|=||=/=:=!=|
+|==<==<<==>>==>==|==||==/==:==!==|
+|===<===<<===>>===>===|===||===/===:===!===|
+
+<     =<     ==<     ===<     ====<
+<=    =<=    ==<=    ===<=    ====<=
+<==   =<==   ==<==   ===<==   ====<==
+<===  =<===  ==<===  ===<===  ====<===
+<==== =<==== ==<==== ===<==== ====<====
+
+>     =>     ==>     ===>     ====>
+>=    =>=    ==>=    ===>=    ====>=
+>==   =>==   ==>==   ===>==   ====>==
+>===  =>===  ==>===  ===>===  ====>===
+>==== =>==== ==>==== ===>==== ====>====
+
+|     =|     ==|     ===|     ====|
+|=    =|=    ==|=    ===|=    ====|=
+|==   =|==   ==|==   ===|==   ====|==
+|===  =|===  ==|===  ===|===  ====|===
+|==== =|==== ==|==== ===|==== ====|====
+
+<<     =<<     ==<<     ===<<     ====<<
+<<=    =<<=    ==<<=    ===<<=    ====<<=
+<<==   =<<==   ==<<==   ===<<==   ====<<==
+<<===  =<<===  ==<<===  ===<<===  ====<<===
+<<==== =<<==== ==<<==== ===<<==== ====<<====
+
+>>     =>>     ==>>     ===>>     ====>>
+>>=    =>>=    ==>>=    ===>>=    ====>>=
+>>==   =>>==   ==>>==   ===>>==   ====>>==
+>>===  =>>===  ==>>===  ===>>===  ====>>===
+>>==== =>>==== ==>>==== ===>>==== ====>>====
+
+||     =||     ==||     ===||     ====||
+||=    =||=    ==||=    ===||=    ====||=
+||==   =||==   ==||==   ===||==   ====||==
+||===  =||===  ==||===  ===||===  ====||===
+||==== =||==== ==||==== ===||==== ====||====
+
+/     =/     ==/     ===/     ====/
+/=    =/=    ==/=    ===/=    ====/=
+/==   =/==   ==/==   ===/==   ====/==
+/===  =/===  ==/===  ===/===  ====/===
+/==== =/==== ==/==== ===/==== ====/====
+
+:     =:     ==:     ===:     ====:
+:=    =:=    ==:=    ===:=    ====:=
+:==   =:==   ==:==   ===:==   ====:==
+:===  =:===  ==:===  ===:===  ====:===
+:==== =:==== ==:==== ===:==== ====:====
+
+!     =!     ==!     ===!     ====!
+!=    =!=    ==!=    ===!=    ====!=
+!==   =!==   ==!==   ===!==   ====!==
+!===  =!===  ==!===  ===!===  ====!===
+!==== =!==== ==!==== ===!==== ====!====
+
+_ __ ___ ____
+_|_ __|_ _|__ __|__
+_| |_ _||_ __| ___| |__ |___
+
+# Progress bars
+
+[>----------]
+[=>---------]
+[==>--------]
+[===>-------]
+[====>------]
+[=====>-----]
+[======>----]
+[=======>---]
+[========>--]
+[=========>-]
+[==========>]
+
+# Sanity check
+
 - -- --- |> <| ||> <|| <!-- -~ .- ~-
+
+= == === .= ..= := ::= != !== ?= #= ^= 
+<= <=< <=> <=|
+>=
+#548 >=< >=> >=| >=<< >>=< 
+#479 #468 #424 #406 #355 #305 =< ==< =<< |=<
+#574 :>=
+#621 <||>
+
 <<<-<<< <<<--<<< <<<---<<< <<<----<<<
 >>>->>> >>>-->>> >>>--->>> >>>---->>>
 |||-||| |||--||| |||---||| |||----|||
+//- //-- //--- //----
+///- ///-- ///--- ///----
 
-<============================================<<
-===== ====< ===<< ====> ===>> ====| ===|| ====/
-<==== <===< <==<< <===> <==>> <===| <==|| <===/ ==<==
-<<=== <<==< <<=<< <<==> <<=>> <<==| <<=|| <<==/ =<<=
->==== >===< >==<< >===> >==>> >===| >==|| >===/ ==>==
->>=== >>==< >>=<< >>==> >>=>> >>==| >>=|| >>==/ =>>=
-|==== |===< |==<< |===> |==>> |===| |==|| |===/ ==|==
-||=== ||==< ||=<< ||==> ||=>> ||==| ||=|| ||==/ =||=
-/==== /===< /==<< /===> /==>> /===| /==|| /===/ ==/==
-|==<==<<==>>==>==|==||==/==:==!==|
-.= ..= := ::= != !== ?= #= ^= 
-=:= =!= =/= >=:=> <=!=< |=/=| >>=:=!=/=>>
-/= /== //= //== //=== ///= ///== ///===
-= == === ====
-<= <=< <=> <=|
->= >=< >=> >=|
->=< >=<< >>=< 
-=< ==< =<< |=<
-:>= <||>
 <<<=<<< <<<==<<< <<<===<<< <<<====<<<
 >>>=>>> >>>==>>> >>>===>>> >>>====>>>
 |||=||| |||==||| |||===||| |||====|||
-
-_ __ ___ ____ _|_ __|_ _|__ __|__
-_| |_ _||_ __| ___| |__ |___
+//= //== //=== //====
+///= ///== ///=== ///====

Some files were not shown because too many files changed in this diff