unicode_matching/
lib.rs

1use std::collections::BTreeMap;
2
3/// Full set of matching brackets/quotes
4pub const MATCHING: &[(&str, &str)] = &[
5    ("(", ")"),
6    ("[", "]"),
7    ("{", "}"),
8    ("«", "»"),
9    ("‘", "’"),
10    ("“", "”"),
11    ("‹", "›"),
12    ("⁅", "⁆"),
13    ("⁽", "⁾"),
14    ("₍", "₎"),
15    ("⌈", "⌉"),
16    ("⌊", "⌋"),
17    ("〈", "〉"),
18    ("❨", "❩"),
19    ("❪", "❫"),
20    ("❬", "❭"),
21    ("❮", "❯"),
22    ("❰", "❱"),
23    ("❲", "❳"),
24    ("❴", "❵"),
25    ("⟅", "⟆"),
26    ("⟦", "⟧"),
27    ("⟨", "⟩"),
28    ("⟪", "⟫"),
29    ("⟬", "⟭"),
30    ("⟮", "⟯"),
31    ("⦃", "⦄"),
32    ("⦅", "⦆"),
33    ("⦇", "⦈"),
34    ("⦉", "⦊"),
35    ("⦋", "⦌"),
36    ("⦍", "⦎"),
37    ("⦏", "⦐"),
38    ("⦑", "⦒"),
39    ("⦓", "⦔"),
40    ("⦕", "⦖"),
41    ("⦗", "⦘"),
42    ("⧘", "⧙"),
43    ("⧚", "⧛"),
44    ("⧼", "⧽"),
45    ("⸂", "⸃"),
46    ("⸄", "⸅"),
47    ("⸉", "⸊"),
48    ("⸌", "⸍"),
49    ("⸜", "⸝"),
50    ("⸠", "⸡"),
51    ("⸢", "⸣"),
52    ("⸤", "⸥"),
53    ("⸦", "⸧"),
54    ("⸨", "⸩"),
55    ("⹕", "⹖"),
56    ("⹗", "⹘"),
57    ("⹙", "⹚"),
58    ("⹛", "⹜"),
59    ("〈", "〉"),
60    ("《", "》"),
61    ("「", "」"),
62    ("『", "』"),
63    ("【", "】"),
64    ("〔", "〕"),
65    ("〖", "〗"),
66    ("〘", "〙"),
67    ("〚", "〛"),
68    ("﴾", "﴿"),
69    ("︗", "︘"),
70    ("︵", "︶"),
71    ("︷", "︸"),
72    ("︹", "︺"),
73    ("︻", "︼"),
74    ("︽", "︾"),
75    ("︿", "﹀"),
76    ("﹁", "﹂"),
77    ("﹃", "﹄"),
78    ("﹇", "﹈"),
79    ("﹙", "﹚"),
80    ("﹛", "﹜"),
81    ("﹝", "﹞"),
82    ("(", ")"),
83    ("[", "]"),
84    ("{", "}"),
85    ("⦅", "⦆"),
86    ("「", "」"),
87    // Extra:
88    ("<", ">"),
89    ("'", "'"),
90    ("\"", "\""),
91];
92
93/// Generate a [`BTreeMap`] with the matching close bracket/quote for each open bracket/quote
94pub fn close() -> BTreeMap<&'static str, &'static str> {
95    MATCHING.iter().cloned().collect()
96}
97
98/// Generate a [`BTreeMap`] with the matching open bracket/quote for each close bracket/quote
99pub fn open() -> BTreeMap<&'static str, &'static str> {
100    MATCHING
101        .iter()
102        .cloned()
103        .map(|(open, close)| (close, open))
104        .collect()
105}
106
107/// Generate a [`BTreeMap`] with an entry for each pair of opening and closing brackets/quotes
108pub fn matching() -> BTreeMap<&'static str, &'static str> {
109    MATCHING
110        .iter()
111        .cloned()
112        .flat_map(|(open, close)| [(open, close), (close, open)])
113        .collect()
114}