Χρήστης:AtouBot/checkmatch.pl όποια μορφή PAGENAME

#!/usr/bin/perl

# αυτό το αρχείο πρέπει να μετονομαστεί σε checkmatch.pl πριν τρέξετε το parsexml.pl

binmode(STDOUT, ":utf8");
binmode(STDIN, ":utf8");

use utf8;

@cm_partsofspeech = ('ακρ', 'αντων', 'αρθρ', 'αριθ', 'αρκτ', 'εκφ', 'επιθ-εκφρ', 'επιθ', 'επι', 'επιρ', 'επιφ', 'καταλ-α-επιθ', 'καταλ-αθ-ουσ', 'καταλ-α-ουσ', 'καταλ-επιρ', 'καταλ-θ-ουσ', 'καταλ-ο-ουσ', 'καταλ-ρημ', 'μορφ-αντων', 'μορφ-αρθρ', 'μορφ-επιθ', 'μορφ-κυρ', 'μορφ-μτχ', 'μορφ-ουσ', 'μορφ-ρημ', 'κυρ', 'μτχ', 'μορ', 'ουσ', 'πολυ-ουσ', 'προθ', 'προ', 'ρημ', 'συνδ', 'συντ', 'σμμ', 'χαρ', 'συμβ');

# κρατάμε σελίδες που περιέχουν τουλάχιστον μία φορά ένα από τα παρακάτω
# {{-μέρος-λόγου-}}
# '''{{PAGENAME}}'''
# '''{{PAGENAME}}\n
# '''{{PAGENAME}}   \n
# {{PAGENAME}}
# εκτός από τα λήμματα από τις:  als, grc, διεθ, μγτ, μσν
#
# σημείωση: αν ένα λήμμα ανήκει στην als και σε μια άλλη γλώσσα 
# που δεν είναι στη λίστα εξαιρέσεων, και στην άλλη γλώσσα
# κάτω από κάποιο μέρος του λόγου βρίσκεται ένα από τα
# παραπάνω, το κρατάμε το λήμμα

sub checkmatch {
    $title=$page{'title'};
    foreach $lcode (keys %$contents) {
	%except = ('grc',1,'el',1, 'als',1,'διεθ',1,'μσν',1,'μτγ',1);   # αυτές οι γλώσσες δεν έχουν {{ξεν}} (προς το παρόν)
	foreach $lcode (keys %$contents) {
	    if (! ($except{$lcode})) {
		foreach $pc (@cm_partsofspeech) {
		    if (defined $contents->{$lcode}->{'parts'}->{$pc}->{'text'}) {
			if ($contents->{$lcode}->{'parts'}->{$pc}->{'text'} =~ /^(( *)\n)+('''|)\Q{{PAGENAME}}\E(( +)|\n|''')/) {
			    return(1);
			}
		    }
		}
	    }
	}
    }
    return(0);
}