-
Notifications
You must be signed in to change notification settings - Fork 77
/
emojitrans2.pl
executable file
·92 lines (87 loc) · 2.15 KB
/
emojitrans2.pl
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
#!/usr/bin/env -S perl -p
use feature 'unicode_strings';
use utf8;
BEGIN { binmode(STDOUT, ":utf8");
binmode(STDIN, ":utf8");
%specials = ('%' => 'percent',
'-' => 'minus',
'_' => 'underscore',
'>' => 'greater',
'<' => 'less',
',' => 'comma',
'.' => 'period',
'$' => 'dollar',
'!' => 'exclam',
'?' => 'question',
'+' => 'plus',
'/' => 'slash',
'#' => 'numbersign',
'@' => 'at',
'|' => 'bar',
'`' => 'grave',
'~' => 'asciitilde',
'^' => 'asciicircum',
'(' => 'parenleft',
')' => 'parenright',
'[' => 'bracketleft',
']' => 'bracketright',
'{' => 'braceleft',
'}' => 'braceright',
# Not strictly necessary:
'❴' => 'braceleft',
'❵' => 'braceright',
"'" => 'apostrophe',
'"' => 'quotedbl',
'\\' => 'backslash',
':' => 'colon',
';' => 'semicolon',
'=' => 'equal',
' ' => 'space',
'*' => 'asterisk',
'&' => 'ampersand',
'♫' => 'Multi_key',
'←' => 'Left',
'→' => 'Right',
'↑' => 'Up',
'↓' => 'Down',
'⇐' => 'BackSpace',
'⇤' => 'Home',
'⇥' => 'End',
'⇑' => 'Prior', # PageUp
'⇓' => 'Next', # PageDown
'↵' => 'Return',
'∇' => 'Delete', # Del, get it?
'˅' => 'Insert', # it'll do.
'˃' => 'Control_R',
'˂' => 'Control_L',
# Function-keys? ¹ ²..ˣ ᵉ ᵗ?
);
$specials = join "", keys %specials;
# Because of reasons
$specials =~ s/[]\\-]/\\$&/g;
$RE = qr{([[:alnum:]$specials]+)};
sub splitup {
my $arg=shift;
local $_;
my @out;
my $rv;
return "\{$arg\}" if length($arg) > 7;
@out=split //, $arg;
$rv="";
for (@out) {
$_ = $specials{$_} // $_;
$rv .= " <$_>";
}
return $rv;
}
}
unless (/^#/) {
my $hold=$_;
s/<M_>/<Multi_key>/;
s/<MM>/<Multi_key> <Multi_key>/;
s({($RE)})(splitup($1))e;
if (length($1) > 7) {
$_=$hold;
s/^<M([M_])>/### <M$1>/;
}
}