82 lines
2.8 KiB
Perl
82 lines
2.8 KiB
Perl
# TWiki Enterprise Collaboration Platform, http://TWiki.org/
|
|
#
|
|
# Copyright (C) 1999-2007 TWiki Contributors. All Rights Reserved.
|
|
# TWiki Contributors are listed in the AUTHORS file in the root of
|
|
# this distribution.
|
|
# NOTE: Please extend that file, not this notice.
|
|
#
|
|
# Additional copyrights apply to some or all of the code in this
|
|
# file as follows:
|
|
# Copyright (C) 2005 Martin Cleaver.
|
|
#
|
|
# This program is free software; you can redistribute it and/or
|
|
# modify it under the terms of the GNU General Public License
|
|
# as published by the Free Software Foundation; either version 2
|
|
# of the License, or (at your option) any later version. For
|
|
# more details read LICENSE in the root of this distribution.
|
|
#
|
|
# This program is distributed in the hope that it will be useful,
|
|
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
|
|
#
|
|
# As per the GPL, removal of this notice is prohibited.
|
|
|
|
use strict;
|
|
|
|
=pod
|
|
|
|
---+ package TWiki::Plurals
|
|
|
|
Handle conversion of plural topic names to singular form.
|
|
|
|
=cut
|
|
|
|
package TWiki::Plurals;
|
|
|
|
use TWiki;
|
|
|
|
=pod
|
|
|
|
---++ StaticMethod singularForm($web, $pluralForm) -> $singularForm
|
|
|
|
Try to singularise plural topic name.
|
|
* =$web= - the web the topic must be in
|
|
* =$pluralForm= - topic name
|
|
Returns undef if no singular form exists, otherwise returns the
|
|
singular form of the topic
|
|
|
|
I18N - Only apply plural processing if site language is English, or
|
|
if a built-in English-language web (Main, TWiki or Plugins). Plurals
|
|
apply to names ending in 's', where topic doesn't exist with plural
|
|
name.
|
|
|
|
SMELL: this is highly langauge specific, and shoud be overridable
|
|
on a per-installation basis.
|
|
|
|
=cut
|
|
|
|
sub singularForm {
|
|
my( $web, $pluralForm ) = @_;
|
|
$web =~ s#\.#/#go;
|
|
|
|
# SMELL Plural processing should be set per web
|
|
# SMELL Lang settings should be set per web
|
|
return undef unless( $TWiki::cfg{PluralToSingular} );
|
|
return undef unless( $pluralForm =~ /s$/ );
|
|
return undef unless( (defined($TWiki::cfg{Site}{Lang}) and $TWiki::cfg{Site}{Lang} eq 'en')
|
|
or $web eq $TWiki::cfg{UsersWebName}
|
|
or $web eq $TWiki::cfg{SystemWebName}
|
|
);
|
|
# Topic name is plural in form
|
|
my $singularForm = $pluralForm;
|
|
$singularForm =~ s/ies$/y/; # plurals like policy / policies
|
|
$singularForm =~ s/sses$/ss/; # plurals like address / addresses
|
|
$singularForm =~ s/ches$/ch/; # plurals like search / searches
|
|
$singularForm =~ s/(oes|os)$/o/; # plurals like veto / vetoes
|
|
$singularForm =~ s/([Xx])es$/$1/;# plurals like box / boxes
|
|
$singularForm =~ s/([^s])s$/$1/; # others, excluding ss like address(es)
|
|
return $singularForm
|
|
}
|
|
|
|
1;
|