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
|
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', "'" => 'apostrophe', '"' => 'quotedbl', '\\' => 'backslash', ':' => 'colon', ';' => 'semicolon', '=' => 'equal', ' ' => 'space', '*' => 'asterisk', '&' => 'ampersand', '♫' => 'Multi_key', '←' => 'Left', '→' => 'Right', '↑' => 'Up', '↓' => 'Down', '⇐' => 'BackSpace', '⇤' => 'Home', '⇥' => 'End', '⇑' => 'Prior', '⇓' => 'Next', '↵' => 'Return', '∇' => 'Delete', '˅' => 'Insert', '˃' => 'Control_R', '˂' => 'Control_L',
); $specials = join "", keys %specials;
$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>/; } }
|