I am currently upgrading our intranet Wiki installation to 1.21 (yes, we are one version
behind), and I have faced the problem with deprecated message functions, as outlined at
mediawiki.org<http://www.mediawiki.org/wiki/Manual:Messages_API#Deprecat…ns>.
For instance:
Instead of:
wfMsg( 'key' );
Do:
wfMessage( 'key' )->text();
The problem of course is that the parametrized messages can have arbitrary parameters
which can be themselves function calls, making simple regexp substitution infeasible.
Well, I figured out that Perl can be used to solve this problem, because Perl allows
arbitrary recursive regexps, which are conveniently accessible via the Regexp::Common
module. Something like this does the trick:
use Regexp::Common;
# Convert 'wfMsg->(...)' to 'wfMessage(...)->text()'
sub fix_wfMsg ($) {
(my $string = shift) =~
s/wfMsg\s*($RE{balanced}{-parens=>'()'})/wfMessage$1->text()/g;
return $string;
}
This method would take the string you provide (should be the entire file contents, to
account for multi-line wfMsg calls), and do the appropriate string substitution to replace
the deprecated call with the correct one, accounting for nested recursive parentheses. As
far as I can tell, the only thing it can get wrong in unbalanced parentheses in comments,
e.g. if your line ends in '// unbalanced paren (' type of comment.
I hope this helps someone.