-
Notifications
You must be signed in to change notification settings - Fork 12
/
Copy path.functions_unicode
372 lines (327 loc) · 16.4 KB
/
.functions_unicode
1
2
3
4
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
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
# ~/.functions_unicode
# Defines shell functions for parsing unicode characters.
# Print characters from Unicode ranges matching rg-lang patterns
# Args: {name}
pl-print-chars() {
case "$1" in
# CJK Scripts (East Asian)
"chinese") pl-print-unicode-range 0x4E00 0x9FFF ;;
"chinese-ext") pl-print-unicode-range 0x3400 0x4DBF ;;
"chinese-rare") pl-print-unicode-range 0x20000 0x2A6DF ;;
"cjk-radicals") pl-print-unicode-range 0x2E80 0x2EFF ;;
"cjk-strokes") pl-print-unicode-range 0x31C0 0x31EF ;;
"cjk-symbols") pl-print-unicode-range 0x3200 0x32FF ;;
# Japanese Scripts
"japanese-half") pl-print-unicode-range 0xFF66 0xFF9F ;;
"japanese-kana")
pl-print-unicode-range 0x3040 0x309F # Hiragana
pl-print-unicode-range 0x30A0 0x30FF # Katakana
;;
# Korean Scripts
"korean-jamo") pl-print-unicode-range 0x1100 0x11FF ;;
"korean-compat") pl-print-unicode-range 0x3130 0x318F ;;
"korean-syllables") pl-print-unicode-range 0xAC00 0xD7AF ;;
"korean-jamo-ext") pl-print-unicode-range 0xA960 0xA97F ;;
# Indic Scripts (South Asian)
"bengali") pl-print-unicode-range 0x0980 0x09FF ;;
"devanagari") pl-print-unicode-range 0x0900 0x097F ;;
"gujarati") pl-print-unicode-range 0x0A80 0x0AFF ;;
"gurmukhi") pl-print-unicode-range 0x0A00 0x0A7F ;;
"kannada") pl-print-unicode-range 0x0C80 0x0CFF ;;
"malayalam") pl-print-unicode-range 0x0D00 0x0D7F ;;
"oriya") pl-print-unicode-range 0x0B00 0x0B7F ;;
"sinhala") pl-print-unicode-range 0x0D80 0x0DFF ;;
"tamil") pl-print-unicode-range 0x0B80 0x0BFF ;;
"telugu") pl-print-unicode-range 0x0C00 0x0C7F ;;
# Southeast Asian Scripts
"balinese") pl-print-unicode-range 0x1B00 0x1B7F ;;
"javanese") pl-print-unicode-range 0xA980 0xA9DF ;;
"khmer") pl-print-unicode-range 0x1780 0x17FF ;;
"lao") pl-print-unicode-range 0x0E80 0x0EFF ;;
"myanmar") pl-print-unicode-range 0x1000 0x109F ;;
"sundanese") pl-print-unicode-range 0x1B80 0x1BBF ;;
"thai") pl-print-unicode-range 0x0E00 0x0E7F ;;
# Middle Eastern Scripts
"arabic") pl-print-unicode-range 0x0621 0x0669 ;;
"hebrew") pl-print-unicode-range 0x0590 0x05FE ;;
"syriac") pl-print-unicode-range 0x0700 0x074F ;;
"thaana") pl-print-unicode-range 0x0780 0x07BF ;;
# Ancient Scripts
"ancient-greek") pl-print-unicode-range 0x10140 0x1018F ;;
"cuneiform") pl-print-unicode-range 0x12000 0x123FF ;;
"hieroglyph") pl-print-unicode-range 0x13000 0x1342F ;;
"linearb") pl-print-unicode-range 0x10000 0x1007F ;;
"phoenician") pl-print-unicode-range 0x10900 0x1091F ;;
# European Scripts
"armenian") pl-print-unicode-range 0x0531 0x0587 ;;
"coptic") pl-print-unicode-range 0x2C80 0x2CFF ;;
"cyrillic-ext")
pl-print-unicode-range 0x0400 0x04FF
pl-print-unicode-range 0x0500 0x052F ;;
"european") pl-print-unicode-range 0x0100 0x024F ;;
"glagolitic") pl-print-unicode-range 0x2C00 0x2C5F ;;
"gothic") pl-print-unicode-range 0x10330 0x1034F ;;
"greek") pl-print-unicode-range 0x0374 0x03FF ;;
"ogham") pl-print-unicode-range 0x1680 0x169F ;;
"olditalic") pl-print-unicode-range 0x10300 0x1032F ;;
"runic") pl-print-unicode-range 0x16A0 0x16FF ;;
# African Scripts
"adlam") pl-print-unicode-range 0x1E900 0x1E95F ;;
"bamum") pl-print-unicode-range 0xA6A0 0xA6FF ;;
"ethiopic") pl-print-unicode-range 0x1200 0x137F ;;
"nko") pl-print-unicode-range 0x07C0 0x07FF ;;
"tifinagh") pl-print-unicode-range 0x2D30 0x2D7F ;;
"vai") pl-print-unicode-range 0xA500 0xA63F ;;
# Symbolic and Technical
"arrows") pl-print-unicode-range 0x2190 0x21FF ;;
"box-drawing") pl-print-unicode-range 0x2500 0x257F ;;
"braille") pl-print-unicode-range 0x2800 0x28FF ;;
"currency") pl-print-unicode-range 0x20A0 0x20CF ;;
"dingbats") pl-print-unicode-range 0x2700 0x27BF ;;
"math-operators") pl-print-unicode-range 0x2200 0x22FF ;;
"math-symbols") pl-print-unicode-range 0x27C0 0x27EF ;;
"math-arrows") pl-print-unicode-range 0x27F0 0x27FF ;;
"math-ext") pl-print-unicode-range 0x1D400 0x1D7FF ;;
"phonetic") pl-print-unicode-range 0x1D00 0x1D7F ;;
"phonetic-ext") pl-print-unicode-range 0x1D80 0x1DBF ;;
"punctuation") pl-print-unicode-range 0x2000 0x206F ;;
"superscript") pl-print-unicode-range 0x2070 0x209F ;;
"tech-symbols") pl-print-unicode-range 0x2300 0x23FF ;;
# Game Symbols
"cards") pl-print-unicode-range 0x1F0A0 0x1F0FF ;;
"chess") pl-print-unicode-range 0x2654 0x265F ;;
"dice") pl-print-unicode-range 0x2680 0x2685 ;;
"domino") pl-print-unicode-range 0x1F030 0x1F093 ;;
"mahjong") pl-print-unicode-range 0x1F000 0x1F02F ;;
# Emoji Categories
"emoji") pl-print-unicode-range 0x1F300 0x1F9FF ;;
"emoji-basic") pl-print-unicode-range 0x1F1FF 0x1F600 ;;
"emoji-emotions") pl-print-unicode-range 0x1F600 0x1F64F ;;
"emoji-food") pl-print-unicode-range 0x1F32D 0x1F37F ;;
"emoji-transport") pl-print-unicode-range 0x1F680 0x1F6FF ;;
"emoji-misc") pl-print-unicode-range 0x1F300 0x1F5FF ;;
# Other Scripts
"mongolian") pl-print-unicode-range 0x1800 0x18AF ;;
"mongolian-ext") pl-print-unicode-range 0x11660 0x1167F ;;
"tibetan") pl-print-unicode-range 0x0F00 0x0FFF ;;
"yi") pl-print-unicode-range 0xA000 0xA48F ;;
# Combined Ranges
"cjk")
pl-print-unicode-range 0x4E00 0x9FFF # Basic
pl-print-unicode-range 0x3400 0x4DBF # Extension A
pl-print-unicode-range 0x20000 0x2A6DF # Extension B
;;
"east-asian")
pl-print-unicode-range 0x4E00 0x9FFF # CJK
pl-print-unicode-range 0x3040 0x30FF # Japanese
pl-print-unicode-range 0xAC00 0xD7AF # Korean
;;
"south-asian") pl-print-unicode-range 0x0900 0x0FFF ;;
"african-ext")
pl-print-unicode-range 0x1E900 0x1E95F # Adlam
pl-print-unicode-range 0x07C0 0x07FF # NKo
;;
"math-all")
pl-print-unicode-range 0x2200 0x22FF # Operators
pl-print-unicode-range 0x27C0 0x27FF # Symbols & Arrows
pl-print-unicode-range 0x2A00 0x2AFF # Supplemental
;;
"games-all")
pl-print-unicode-range 0x1F0A0 0x1F0FF # Cards
pl-print-unicode-range 0x2654 0x265F # Chess
pl-print-unicode-range 0x2680 0x2685 # Dice
pl-print-unicode-range 0x1F000 0x1F09F # Mahjong & Domino
;;
"music-all")
pl-print-unicode-range 0x1D100 0x1D1FF # Musical Symbols
pl-print-unicode-range 0x1D200 0x1D24F # Ancient Notation
;;
# Help
"help"|"--help"|"-h"|"")
echo "Usage: pl-print-chars TYPE"
echo "Print Unicode characters from specified script range"
echo
echo "Available Types:"
echo " CJK: chinese, chinese-ext, chinese-rare, cjk-radicals, cjk-strokes, cjk-symbols"
echo " Japanese: japanese-half, japanese-kana, japanese-kanji"
echo " Korean: korean-jamo, korean-compat, korean-syllables, korean-jamo-ext"
echo " Indic: bengali, devanagari, gujarati, gurmukhi, kannada, malayalam, oriya, sinhala, tamil, telugu"
echo " Southeast Asian: balinese, javanese, khmer, lao, myanmar, sundanese, thai"
echo " Middle Eastern: arabic, hebrew, syriac, thaana"
echo " Ancient: ancient-greek, cuneiform, hieroglyph, linearb, phoenician"
echo " European: armenian, coptic, cyrillic-ext, european, glagolitic, gothic, greek, ogham, olditalic, runic"
echo " African: adlam, bamum, ethiopic, nko, tifinagh, vai"
echo " Symbolic: arrows, box-drawing, braille, currency, dingbats, math-operators, math-symbols, math-arrows, math-ext"
echo " Technical: tech-symbols, phonetic, phonetic-ext, superscript"
echo " Games: cards, chess, dice, domino, mahjong"
echo " Emoji: emoji, emoji-basic, emoji-emotions, emoji-food, emoji-transport, emoji-misc"
echo " Other: mongolian, mongolian-ext, tibetan, yi"
echo " Combined: cjk, east-asian, south-asian, african-ext, math-all, games-all, music-all"
;;
*)
echo "Unknown char type: $1"
echo "Use 'pl-print-chars help' to see available options"
return 1
;;
esac
}
# Print Unicode range.
# Args: {range1} {range2}
pl-print-unicode-range() {
cat <<_EOF | perl
binmode(STDOUT, ":encoding(UTF-8)");
for (\$n = $1; \$n <= $2; \$n++) { print chr(\$n) }
_EOF
}
# Filters 2-3 unicode characters.
rg-23u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(printf '$1$2\n$2$3\n$1$2$3')"
}
# Filters 2-4 unicode characters.
rg-234u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(printf '$1$2\n$2$3\n$3$4\n$1$2$3\n$2$3$4\n$1$2$3$4')"
}
# Filters 2-5 unicode characters.
rg-2345u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(printf '$1$2\n$2$3\n$3$4\n$4$5\n$1$2$3\n$2$3$4\n$3$4$5\n$1$2$3$4\n$2$3$4$5\n$1$2$3$4$5')"
}
# Filters 3-6 unicode characters.
rg-3456u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(printf '$1$2$3\n$2$3$4\n$3$4$5\n$4$5$6\n$1$2$3$4\n$2$3$4$5\n$3$4$5$6\n$1$2$3$4$5\n$2$3$4$5$6\n$1$2$3$4$5$6')"
}
# Filters 3-7 unicode characters.
rg-34567u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(printf '$1$2$3\n$2$3$4\n$3$4$5\n$4$5$6\n$5$6$7\n$1$2$3$4\n$2$3$4$5\n$3$4$5$6\n$4$5$6$7\n$1$2$3$4$5\n$2$3$4$5$6\n$3$4$5$6$7\n$1$2$3$4$5$6\n$2$3$4$5$6$7\n$1$2$3$4$5$6$7')"
}
# Filters 3-8 unicode characters.
rg-345678u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(printf '$1$2$3\n$2$3$4\n$3$4$5\n$4$5$6\n$5$6$7\n$6$7$8\n$1$2$3$4\n$2$3$4$5\n$3$4$5$6\n$4$5$6$7\n$5$6$7$8\n$1$2$3$4$5\n$2$3$4$5$6\n$3$4$5$6$7\n$4$5$6$7$8\n$1$2$3$4$5$6\n$2$3$4$5$6$7\n$3$4$5$6$7$8\n$1$2$3$4$5$6$7\n$2$3$4$5$6$7$8\n$1$2$3$4$5$6$7$8')"
}
# Filters 3-9 unicode characters.
rg-3456789u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(printf '$1$2$3\n$2$3$4\n$3$4$5\n$4$5$6\n$5$6$7\n$6$7$8\n$7$8$9\n$1$2$3$4\n$2$3$4$5\n$3$4$5$6\n$4$5$6$7\n$5$6$7$8\n$6$7$8$9\n$1$2$3$4$5\n$2$3$4$5$6\n$3$4$5$6$7\n$4$5$6$7$8\n$5$6$7$8$9\n$1$2$3$4$5$6\n$2$3$4$5$6$7\n$3$4$5$6$7$8\n$4$5$6$7$8$9\n$1$2$3$4$5$6$7\n$2$3$4$5$6$7$8\n$3$4$5$6$7$8$9\n$1$2$3$4$5$6$7$8\n$2$3$4$5$6$7$8$9\n$1$2$3$4$5$6$7$8$9')"
}
# Filters all unicode characters.
rg-all-unicode() {
tee >/dev/null >(rg-23u) >(rg-234u) >(rg-2345u) >(rg-3456u) >(rg-34567u) >(rg-345678u) >(rg-3456789u)
}
# Filters 2 unicode characters.
rg-perm-2u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 4 4 + + 12 -t '$%$%' 2>/dev/null)"
}
# Permutate 3 unicode characters.
rg-perm-3u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 6 6 + + 123 -t '$%$%$%' 2>/dev/null)"
}
# Permutate 4 unicode characters.
rg-perm-4u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 8 8 + + 1234 -t '$%$%$%$%' 2>/dev/null)"
}
# Permutate 5 unicode characters.
rg-perm-5u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 10 10 + + 12345 -t '$%$%$%$%$%' 2>/dev/null)"
}
# Permutate 5 unicode characters into 3.
rg-perm-5u-to-3u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 6 6 + + 12345 -t '$%$%$%' 2>/dev/null)"
}
# Permutate 5 unicode characters into 4.
rg-perm-5u-to-4u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 8 8 + + 12345 -t '$%$%$%$%' 2>/dev/null)"
}
# Permutate 6 unicode characters into 3.
rg-perm-6u-to-3u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 6 6 + + 123456 -t '$%$%$%' 2>/dev/null)"
}
# Permutate 6 unicode characters into 4.
rg-perm-6u-to-4u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 8 8 + + 123456 -t '$%$%$%$%' 2>/dev/null)"
}
# Permutate 6 unicode characters into 5.
rg-perm-6u-to-5u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 10 10 + + 123456 -t '$%$%$%$%$%' 2>/dev/null)"
}
# Permutate 7 unicode characters into 3.
rg-perm-7u-to-3u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 6 6 + + 1234567 -t '$%$%$%' 2>/dev/null)"
}
# Permutate 7 unicode characters into 4.
rg-perm-7u-to-4u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 8 8 + + 1234567 -t '$%$%$%$%' 2>/dev/null)"
}
# Permutate 7 unicode characters into 5.
rg-perm-7u-to-5u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 10 10 + + 1234567 -t '$%$%$%$%$%' 2>/dev/null)"
}
# Permutate 8 unicode characters into 3.
rg-perm-8u-to-3u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 6 6 + + 12345678 -t '$%$%$%' 2>/dev/null)"
}
# Permutate 8 unicode characters into 4.
rg-perm-8u-to-4u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 8 8 + + 12345678 -t '$%$%$%$%' 2>/dev/null)"
}
# Permutate 8 unicode characters into 5.
rg-perm-8u-to-5u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 10 10 + + 12345678 -t '$%$%$%$%$%' 2>/dev/null)"
}
# Permutate 9 unicode characters into 3.
rg-perm-9u-to-3u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 6 6 + + 123456789 -t '$%$%$%' 2>/dev/null)"
}
# Permutate 9 unicode characters into 4.
rg-perm-9u-to-4u() {
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$(crunch 8 8 + + 123456789 -t '$%$%$%$%' 2>/dev/null)"
}
# Permutate 9 unicode characters into 5.
rg-perm-9u-to-5u() {
rg_r_arg="$(crunch 5 5 34567 -p 34567 2>/dev/null | sed -E 's/([0-9])/$\1/g;s/([0-9])\$/\1\$/g')"
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$rg_r_arg"
}
# Permutate 9 unicode characters into 6.
rg-perm-9u-to-6u() {
rg_r_arg="$(crunch 5 5 345678 -p 345678 2>/dev/null | sed -E 's/([0-9])/$\1/g;s/([0-9])\$/\1\$/g')"
rg -o '([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])([\x{0100}-\x{FFFF}])' \
-r "$rg_r_arg"
}
# Permutate 3-5 unicode characters.
rg-perm-345u() {
tee >(rg-perm-3u) >(rg-perm-4u) >(rg-perm-5u) >/dev/null
}
# Permutate 3-5 unicode characters.
rg-perm-56789u-to-3456u() {
tee \
>(rg-perm-5u) \
>(rg-perm-5u-to-3u) >(rg-perm-5u-to-4u) \
>(rg-perm-6u-to-3u) >(rg-perm-6u-to-4u) \
>(rg-perm-7u-to-3u) >(rg-perm-7u-to-4u) \
>(rg-perm-8u-to-3u) >(rg-perm-8u-to-4u) \
>(rg-perm-9u-to-3u) >(rg-perm-9u-to-4u) \
>(rg-perm-9u-to-5u) >(rg-perm-9u-to-6u) \
>/dev/null
}