[devel] польские файлы
Alexey Tourbin
=?iso-8859-1?q?at_=CE=C1_altlinux=2Eru?=
Пн Окт 6 19:38:24 MSD 2003
По поводу польских файлов предлагаю следующее. Алгоритм никакой,
но на польских файлах срабатывает хорошо за счет non-ascii. Было бы
интересно сделать обучающую машину, но на это может уйти много времени.
--- /usr/lib/rpm/find-provides~ 2003-09-27 22:27:57 +0400
+++ /usr/lib/rpm/find-provides 2003-10-06 19:35:16 +0400
@@ -146,7 +146,7 @@
# Ignore symlinks for non-PAM scripts.
[ ! -L "$f" ] || return 0
- if [ -z "${t##perl script text*}" -o -z "${t##Perl5 module source text}" ] || [ -z "${f%%*.p[lmh]}" -a -z "${t##*text*}" ]; then
+ if [ -z "${t##perl script text*}" -o -z "${f%%*.p[lmh]}" ]; then
if [ -n "$FIND_PERL" ]; then
[ -z "$LIST_PERL" ] && LIST_PERL="$f" || LIST_PERL="$LIST_PERL
$f"
--- /usr/lib/rpm/perl.req 2003-09-30 14:42:01 +0000
+++ RPM/SOURCES/rpm-perl.req 2003-10-06 15:28:05 +0000
@@ -276,9 +276,18 @@ sub process_file {
process_line($_);
}
unless (close PIPE) {
- $method ne 'relaxed'
- and die "$fname: deparse failed.\n"
- or warn "$fname: deparse failed.\n";
+ if ($method eq 'relaxed') {
+ warn "$fname\: deparse failed, but I don't care\n";
+ } elsif ($method eq 'strict') {
+ die "$fname\: deparse failed.\n";
+ } else {
+ my $v = isPerl($fname);
+ if ($v > 0) {
+ die "$fname\: deparse failed. isPerl=$v\n";
+ } else {
+ warn "$fname\: deparse failed, isPerl=$v, ok\n";
+ }
+ }
}
}
@@ -390,3 +399,56 @@ foreach my $k (keys %req) {
}
# nothing special?
print "perl-base\n" unless %req;
+
+# auxiliary stuff
+sub count($$) {
+ debug "$_[0] $_[1]";
+}
+
+sub isPerl {
+ my $fname = shift;
+ chomp $fname;
+ open(FILE, $fname) || die;
+ local $_ = join "" => <FILE>;
+ close FILE;
+ debug "processing $fname";
+ my ($n, @n);
+
+# POSITIVE
+# variables
+ @n = /[$%@]\w+/g;
+ count @n, "variables";
+ $n += @n;
+# comments
+ @n = /^\s*#/gm;
+ count @n, "comments";
+ $n += @n;
+# blocks
+ @n = /{$|^\s*}/gm;
+ count @n, "blocks";
+ $n += @n;
+# keywords
+ @n = /\b(unless|foreach|package|sub|use|strict)\b/gm;
+ count @n, "keywords";
+ $n += @n;
+# pod
+ @n = /^=(?:back|begin|cut|end|for|head|item|over|pod)/gm;
+ count @n, "pod sections";
+ $n += @n;
+# modules
+ @n = /^1;$/gm;
+ count @n, "`1;'";
+ $n += @n;
+
+# NEGATIVE
+# non-ascii characters
+ @n = /[^[:ascii:]]/g;
+ count @n, "non-ascii characters";
+ $n -= @n;
+# prolog
+ @n = /:-/g;
+ count @n, "prolog :- operators";
+ $n -= @n;
+# density
+ $n /= -s $fname;
+}
----------- следующая часть -----------
Было удалено вложение не в текстовом формате...
Имя : =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Тип : application/pgp-signature
Размер : 189 байтов
Описание: =?iso-8859-1?q?=CF=D4=D3=D5=D4=D3=D4=D7=D5=C5=D4?=
Url : <http://lists.altlinux.org/pipermail/devel/attachments/20031006/ea9a431f/attachment-0001.bin>
Подробная информация о списке рассылки Devel