[interchange-cvs] interchange - kwalsh modified code/Filter/roman.filter

interchange-cvs at icdevgroup.org interchange-cvs at icdevgroup.org
Mon Jun 27 15:46:51 EDT 2005


User:      kwalsh
Date:      2005-06-27 19:46:51 GMT
Added:     code/Filter roman.filter
Log:
    * Added the "roman" filter which converts an integer into a string
      of Roman numerals.  I.e. "1968" to "MCMLXVIII".

Revision  Changes    Path
1.1                  interchange/code/Filter/roman.filter


rev 1.1, prev_rev 1.0
Index: roman.filter
===================================================================
# Copyright (c) 2005 Cursor Software Limited (http://www.cursor.biz/)
# Copyright (c) 2005 Interchange Development Group (http://www.icdevgroup.org/)
# Licensed under the GNU GPL. See file LICENSE for details.
# $Id: roman.filter,v 1.1 2005/06/27 19:46:51 kwalsh Exp $

CodeDef roman Filter
CodeDef roman Description Integer to Roman numerals
CodeDef roman Routine <<EOR
sub {
    my $val = shift;
    $val =~ s/\D+//g;
    $val =~ m/(\d*?)(\d{1,3})$/;

    my $buf = 'M' x $1;
    my @digits = reverse(split('',$2));

    my @numerals = (
        [ '', 'I', 'II', 'III', 'IV', 'V', 'VI', 'VII', 'VIII', 'IX', ],
        [ '', 'X', 'XX', 'XXX', 'XL', 'L', 'LX', 'LXX', 'LXXX', 'XC', ],
        [ '', 'C', 'CC', 'CCC', 'CD', 'D', 'DC', 'DCC', 'DCCC', 'CM', ],
    );

    for (my $i = $#digits; $i >= 0; $i--) {
        $buf .= $numerals[$i]->[$digits[$i]];
    }
    return $buf;
}
EOR








More information about the interchange-cvs mailing list