-
Notifications
You must be signed in to change notification settings - Fork 0
/
noccom
executable file
·54 lines (45 loc) · 1.07 KB
/
noccom
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
#!/usr/bin/env sh
# compat: +ash +bash +dash +zsh
# TODO: what's the minimum version of perl required for this?
noccom() { ### @-
### strip C-like comments; both multi-line and single-line.
# the first expression is taken from this FAQ:
# https://perldoc.perl.org/perlfaq6.html#How-do-I-use-a-regular-expression-to-strip-C-style-comments-from-a-file%3f
[ -s ~/.local/bin/noccom ] || cat > ~/.local/bin/noccom <<EOF
#!/usr/bin/env perl
\$/ = undef;
\$_ = <>;
s{
/\\*[^*]*\\*+([^/*][^*]*\\*+)*/
|
//([^\\\\]
|
[^\\n][\\n]?)*?\\n
|
(
"(?:\\\\.|[^"\\\\])*"
|
'(?:\\\\.|[^'\\\\])*'
|
.[^/"'\\\\]*
)
}{defined \$3 ? \$3 : ""}gxse;
s{
\\\\?\\n\\s*([{}])?\\s*(;*)\\s*(?=\\\\?\\n)
|
(
\\#[^\\n]*\\n
|
"(?:\\\\.|[^"\\\\])*"
|
'(?:\\\\.|[^'\\\\])*'
|
.[^#/"'\\\\\\n]*
)
}{defined \$3 ? \$3 : (defined \$1 ? " ".\$1.\$2 : \$2)}gxse;
s#(^|\\n)\\s+#\$1#gs;
print;
EOF
perl ~/.local/bin/noccom "$@"
}
[ -n "${preload+-}" ] || noccom "$@"