#use wml::std::tags

<perl>
use Time::Local;

# List of weekday names (used in modification dates)
%dow = (
        en => [ 'Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat' ],
        el => [ 'Äåõ', 'Ôñé', 'Ôåô', 'Ðåì', 'Ðáñ', 'Óáâ', 'Êõñ' ],
        ro => [ 'Duminicã', 'Luni', 'Marþi', 'Miercuri', 'Joi', 'Vineri', 'Sîmbãtã' ], 
        eo => [ 'Dim', 'Lun', 'Mar', 'Mer', '¬aý', 'Ven', 'Sab' ],
        tr => [ 'Paz', 'Pzt', 'Sa', 'Çar', 'Prþ', 'Cum', 'Cts' ],
        fi => [ 'su', 'ma', 'ti', 'ke', 'to', 'pe', 'la' ],
        pt => [ 'Domingo', 'Segunda', 'Terça', 'Quarta', 'Quinta', 'Sexta', 'Sábado' ],
        hr => [ 'nedjelja', 'ponedjeljak', 'utorak', 'srijeda', 'èetvrtak', 'petak', 'subota' ],
        fr => [ 'Dim', 'Lun', 'Mar', 'Mer', 'Jeu', 'Ven', 'Sam' ],
        nl => [ 'Zon', 'Maa', 'Din', 'Woe', 'Don', 'Vri', 'Zat' ],
        de => [ 'Sonntag', 'Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag' ],
        it => [ 'dom', 'lun', 'mar', 'mer', 'gio', 'ven', 'sab' ],
        ja => [ '(Æü)', '(·î)', '(²Ð)', '(¿å)', '(ÌÚ)', '(¶â)', '(ÅÚ)' ],
        pl => [ 'ni', 'pon', 'wt', '¶ro', 'czw', 'pt', 'so' ],
        es => [ 'Dom', 'Lun', 'Mar', 'Mie', 'Jue', 'Vie', 'Sab' ],
        da => [ 'Søn', 'Man', 'Tirs', 'Ons', 'Tors', 'Fre', 'Lør' ],
        no => [ 'Søn', 'Man', 'Tir', 'Ons', 'Tor', 'Fre', 'Lør' ],
        zh => [ '¤é', '¤@', '¤G', '¤T', '¥|', '¤­', '¤»' ],
        sv => [ 'Sön', 'Mån', 'Tis', 'Ons', 'Tor', 'Fre', 'Lör' ],
        ko => [ 'ÀÏ¿äÀÏ', '¿ù¿äÀÏ', 'È­¿äÀÏ', '¼ö¿äÀÏ',
         '¸ñ¿äÀÏ', '±Ý¿äÀÏ', 'Åä¿äÀÏ' ],
        hu => [ 'vasárnap', 'hétfõ', 'kedd', 'szerda', 'csütörtök', 'péntek', 'szombat' ],
        ar => [ 'ÃÍÏ', 'Ëää', 'ËáË' , 'ÑÈÚ', 'ÎãÓ', 'ÌãÚ', 'ÓÈÊ' ],
        ru => [ '÷ÓË', 'ðÎÄ', '÷ÔÒ', 'óÒÄ', 'þÔ×', 'ðÔÎ', 'óÂÔ' ],
        ca => ['Diumenge','Dilluns', 'Dimarts', 'Dimecres', 'Dijous', 'Divendres', 'Dissabte' ],
);

# List of month names (used in modification dates, and may be used in news 
# listings)
%moy = (
        en => [ 'Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun',
         'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec' ],
        el => [ 'Éáí', 'Öåâ', 'Ìáñ', 'Áðñ', 'Ìáé', 'Éïõí',
         'Éïõë', 'Áõã', 'Óåðô', 'Ïêô', 'Íïåì', 'Äåê' ],
        ro => [ 'ianuarie', 'februarie', 'martie', 'aprilie', 'mai',
         'iunie', 'iulie', 'august', 'septembrie', 'octombrie',
         'noiembrie', 'decembrie' ],
        eo => [ 'Jan', 'Feb', 'Mar', 'Apr', 'Maj', 'Jun',
         'Jul', 'Aýg', 'Sep', 'Okt', 'Nov', 'Dec' ],
        tr => [ 'Ocak', 'Þubat', 'Mart', 'Nisan', 'Mayýs', 'Haziran',
         'Temmuz', 'Aðustos', 'Eylül', 'Ekim', 'Kasým', 'Aralýk' ],
        fi => [ 'tammi', 'helmi', 'maalis', 'huhti', 'touko',
         'kesä', 'heinä', 'elo', 'syys', 'loka', 'marras', 'joulu' ],
        pt => [ 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho',
         'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ],
        hr => [ 'sijeènja', 'veljaèe', 'o¾ujka', 'travnja', 'svibnja',
         'lipnja', 'srpnja', 'kolovoza', 'rujna', 'listopada', 'studenog',
         'prosinca' ],
        fr => [ 'Jan', 'Fév', 'Mar', 'Avr', 'Mai', 'Jun',
         'Jui', 'Aoû', 'Sep', 'Oct', 'Nov', 'Déc' ],
        nl => [ 'Jan', 'Feb', 'Maa', 'Apr', 'Mei', 'Jun',
         'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dec' ],
        de => [ 'Jan', 'Feb', 'M&auml;r', 'Apr', 'Mai', 'Jun',
         'Jul', 'Aug', 'Sep', 'Okt', 'Nov', 'Dez' ],
        it => [ 'gen', 'feb', 'mar', 'apr', 'mag', 'giu',
         'lug', 'ago', 'set', 'ott', 'nov', 'dic' ],
        ja => [ '1', '2', '3', '4', '5', '6', '7', '8',
         '9', '10', '11', '12' ],
        pl => [ 'sty', 'lut', 'mar', 'kwie', 'maj', 'cze',
         'lip', 'sie', 'wrz', 'pa¼', 'lis', 'gru' ],
        es => [ 'Ene', 'Feb', 'Mar', 'Abr', 'May', 'Jun',
         'Jul', 'Ago', 'Sep', 'Oct', 'Nov', 'Dic' ],
        da => [ 'jan', 'feb', 'mar', 'apr', 'maj', 'jun',
         'jul', 'aug', 'sep', 'okt', 'nov', 'dec' ],
        no => [ 'jan', 'feb', 'mar', 'apr', 'mai', 'jun',
         'jul', 'aug', 'sep', 'okt', 'nov', 'des' ],
        zh => [ '1', '2', '3', '4', '5', '6', '7', '8',
         '9', '10', '11', '12' ],
#       zh => [ '¤@¤ë', '¤G¤ë', '¤T¤ë', '¥|¤ë', '¤­¤ë', '¤»¤ë',
#         '¤C¤ë', '¤K¤ë', '¤E¤ë', '¤Q¤ë', '¤Q¤@¤ë', '¤Q¤G¤ë' ],
        sv => [ 'jan', 'feb', 'mar', 'apr', 'maj', 'jun',
         'jul', 'aug', 'sep', 'okt', 'nov', 'dec' ],
        hu => [ 'január', 'február', 'március', 'április', 'május', 'június', 'július', 'augusztus', 'szeptember', 'október', 'november', 'december' ],
        ar => [ 'ÊíÈË', 'ÔÈÇØ', 'ÂÐÇÑ', 'äíÓÇä', 'ÃíøÇÑ', 'ÎÒíÑÇä', 'ÊãøæÒ', 'ÂÈ', 'Ãíáæá', 'ÊÔÑíä', 'ÎÔæÇä', 'ßÇäæä' ],
        ru => [ 'ñÎ×', 'æÅ×', 'íÁÒ', 'áÐÒ', 'íÁÊ', 'éÀÎ',
         'éÀÌ', 'á×Ç', 'óÅÎ', 'ïËÔ', 'îÏÑ', 'äÅË' ],
        ca => ['Gen', 'Feb', 'Mar', 'Abr', 'Mai', 'Jun', 'Jul', 'Ago', 'Set', 'Oct', 'Nov', 'Des' ],            
);

# List of long month names (may be used in "spoken" dates).
%longmoy = (
        en => [ 'January', 'February', 'March', 'April', 'May', 'June',
         'July', 'August', 'September', 'October', 'November', 'December' ],
        el => [ 'ÉáíïõÜñéïò', 'ÖåâñïõÜñéïò', 'ÌÜñôéïò', 'Áðñßëéïò', 'ÌÜéïò', 'Éïýíéïò',
         'Éïýëéïò', 'Áýãïõóôïò', 'ÓåðôÝìâñéïò', 'Ïêôþâñéïò', 'ÍïÝìâñéïò', 'ÄåêÝìâñéïò' ],
        eo => [ 'Januaro', 'Februaro', 'Marto', 'Aprilo', 'Majo', 'Junio',
         'Julio', 'Aýgusto', 'Septembro', 'Oktobro', 'Novembro', 'Decembro' ],
        ro => [ 'ianuarie', 'februarie', 'martie', 'aprilie', 'mai', 'iunie',
         'iulie', 'august', 'septembrie', 'octombrie', 'noiembrie', 'decembrie' ],
        fi => [ 'tammikuu', 'helmikuu', 'maaliskuu', 'huhtikuu', 'toukokuu',
                'kesäkuu', 'heinäkuu', 'elokuu', 'syyskuu', 'lokakuu',
                'marraskuu', 'joulukuu' ],
        hr => [ 'sijeènja', 'veljaèe', 'o¾ujka', 'travnja', 'svibnja',
         'lipnja', 'srpnja', 'kolovoza', 'rujna', 'listopada', 'studenog',
         'prosinca' ],
        de => [ 'Januar', 'Februar', 'M&auml;rz', 'April', 'Mai', 'Juni', 'Juli',
         'August', 'September', 'Oktober', 'November', 'Dezember' ],
        it => [ 'Gennaio', 'Febbraio', 'Marzo', 'Aprile', 'Maggio', 'Giugno', 'Luglio',
                'Agosto', 'Settembre', 'Ottobre', 'Novembre', 'Dicembre' ],
        no => [ 'januar', 'februar', 'mars', 'april', 'mai', 'juni',
         'juli', 'august', 'september', 'oktober', 'november', 'desember' ],
        sv => [ 'januari', 'februari', 'mars', 'april', 'maj', 'juni',
         'juli', 'augusti', 'september', 'oktober', 'november', 'december' ],
        da => [ 'januar', 'februar', 'marts', 'april', 'maj', 'juni', 'juli',
         'august', 'september', 'oktober', 'november', 'december' ],
        hu => [ 'január', 'február', 'március', 'április', 'május', 'június',
         'július', 'augusztus', 'szeptember', 'október', 'november', 'december' ],
        pl => [ 'stycznia', 'lutego', 'marca', 'kwietnia', 'maja', 'czerwca',
         'lipca', 'sierpnia', 'wrze¶nia', 'pa¼dziernika', 'listopada', 'grudnia'],
        pt => [ 'Janeiro', 'Fevereiro', 'Março', 'Abril', 'Maio', 'Junho', 'Julho', 'Agosto', 'Setembro', 'Outubro', 'Novembro', 'Dezembro' ],
        ca => ['Gener', 'Febrer', 'Març', 'Abril', 'Maig', 'Juny', 'Juliol', 'Agost', 'Setembre', 'Octubre', 'Novembre', 'Desembre' ],
);

# Date format (sprintf) for modification dates. If none is supplied, the
# standard format "Www, Mmm Dd HH:MM:SS UTC Yyyy" is used instead.
# Available variables are: $mday = day-of-month, $monnr = month number,
# $mon = month string (from %moy), $year = year number.
%dateform = (
        ca => '"%s, %2d. %s de %s., %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        da => '"%s %2d. %s %s kl. %02d.%02d.%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        de => '"%s den %d. %s %s um %02d:%02d:%02d Uhr %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        fr => '"%s, %2d. %s %s., %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        hr => '"%s, %2d. %s %s., %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        hu => '"%d. %s %d. %s, %02d:%02d:%02d %s", 1900+$year, $mon, $mday, $wday, $hour, $min, $sec, "UTC"',
        ja => '"%s Ç¯ %s ·î %s Æü %s %02d:%02d:%02d %s", 1900+$year, $mon, $mday, $wday, $hour, $min, $sec, "UTC"',
        nl => '"%s, %2d. %s %s., %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        no => '"%s %2d. %s %s kl. %02d.%02d.%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        pl => '"%s, %2d. %s %sr, %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        pt => '"%s, %2d de %s de %s, %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        ro => '"%s, %2d  %s %s., %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        ru => '"%s, %2d %s %s, %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        sv => '"%s %04d-%02d-%02d %02d.%02d.%02d %s", $wday, 1900+$year, $monnr+1, $mday, $hour, $min, $sec, "UTC"',
#       tr => '"%s, %2d. %s %s., %02d:%02d:%02d %s", $wday, $mday, $mon, 1900+$year, $hour, $min, $sec, "UTC"',
        zh => '"%s ¦~ %s ¤ë %s ¤é ¬P´Á%s %02d:%02d:%02d %s", 1900+$year, $mon, $mday, $wday, $hour, $min, $sec, "UTC"',
        ko => '"%s %4d ³â %2d ¿ù %2d ÀÏ %s %02d:%02d:%02d", "UTC", 1900+$year, $monnr+1, $mday, $wday, $hour, $min, $sec',
);

# Date format (sprintf) for news items. If none is supplied, the standard
# format "Dd Mmm Yyyy" is used instead.
# Available variables are: $mday = day-of-month, $mon = month number,
# $mon_str = month string (from %moy), $year = year number.
%newsdateform = (
        ca => '"%02d/%02d/%04d", $mday, $mon, $year',
        da => '"%2d. %s %04d", $mday, $mon_str, $year',
        de => '"%d. %s %04d", $mday, $mon_str, $year',
        fi => '"%2d.%2d.%04d", $mday, $mon, $year',
        hr => '"%02d. %02d. %04d.", $mday, $mon, $year',
        hu => '"%04d. %02d. %02d.", $year, $mon, $mday',
        ja => '"%04d Ç¯ %2d ·î %2d Æü", $year, $mon, $mday',
        no => '"%02d. %s %04d", $mday, $mon_str, $year',
        pl => '"%02d.%02d.%04d", $mday, $mon, $year',
        pt => '"%02d/%02d/%04d", $mday, $mon, $year',
        ro => '"%02d.%02d.%04d", $mday, $mon, $year',
        ru => '"%02d.%02d.%04d", $mday, $mon, $year',
        sv => '"%4d-%02d-%02d", $year, $mon, $mday',
        zh => '"%04d ¦~ %02d ¤ë %02d ¤é", $year, $mon, $mday',
        ko => '"%4d ³â %2d ¿ù %2d ÀÏ", $year, $mon, $mday',
);

# Date format (sprintf) for "spoken" dates (such as the current release date).
# If none is supplied, the date will be converted according to the
# newsdateform as specified above (i.e, if you want the same format for
# both, you only need to specify that. Any special cases (such as the
# st/nd/rd/th suffixes in English) are handled in the spokendate subroutine
# below.
# Available variables are: $mday = day-of-month, $mon = month number,
# $mon_str = month string (from %longmoy), $year = year number.
%spokendateform = (
        ca => '"%d %s de %d", $mday, $mon_str, $year',
        da => '"%d. %s %d", $mday, $mon_str, $year',
        de => '"%d. %s %d", $mday, $mon_str, $year',
        fi => '"%d. %sta %d", $mday, $mon_str, $year',
        hr => '"%d. %s %d.", $mday, $mon_str, $year',
        hu => '"%d. %s %d", $year, $mon_str, $mday',
        no => '"%d. %s %d", $mday, $mon_str, $year',
        pl => '"%d. %s %dr", $mday, $mon_str, $year',
        pt => '"%d de %s de %d", $mday, $mon_str, $year',
        ro => '"%d %s %d", $mday, $mon_str, $year',
        sv => '"%d %s %d", $mday, $mon_str, $year',
);

# This function creates a last modification time stamp for the web pages.
sub webwml_ctime {
        my ($time, $sec, $min, $hour, $mday, $monnr, $year, $wday, $yday, $isdst, $mon);
        # The last modification time of inputfile in ISO dd-mm-yyyy hh:mm:ss format.
        if (defined $(GEN_TIME)) {
                $WML_GEN_ISOTIME =~ /(\d+)-(..)-(\d+) (..):(..):(..)/;
                if ($1 <= 31) { # for WML 1.x
                        $time = timelocal($6, $5, $4, $1, $2-1, $3);
                } else { # for WML 2.x
                        $time = timelocal($6, $5, $4, $3, $2-1, $1);
                }
                # $lday=$1; $lmon=$2; $lyear=$3; $lhr=$4; $lmin=$5; $lsec=$6;
                # if ($lyear > 19000) { $lyear = 1900+($lyear-19000); }
                # $time = timelocal($lsec, $lmin, $lhr, $lday, $lmon-1, $lyear);
        }
        else {
                $WML_SRC_ISOTIME =~ /(\d+)-(..)-(\d+) (..):(..):(..)/;
                if ($1 <= 31) { # for WML 1.x
                        $time = timelocal($6, $5, $4, $1, $2-1, $3);
                } else { # for WML 2.x
                        $time = timelocal($6, $5, $4, $3, $2-1, $1);
                }
                # $lday=$1; $lmon=$2; $lyear=$3; $lhr=$4; $lmin=$5; $lsec=$6;
                # if ($lyear > 19000) { $lyear = 1900+($lyear-19000); }
                # $time = timelocal($lsec, $lmin, $lhr, $lday, $lmon-1, $lyear);
        }
        ($sec, $min, $hour, $mday, $monnr, $year, $wday, $yday, $isdst) = gmtime($time);
        $wday = $dow{$CUR_ISO_LANG}[$wday];
        $mon = $moy{$CUR_ISO_LANG}[$monnr];
        $str = defined($dateform{$CUR_ISO_LANG}) ? 
                eval("sprintf($dateform{$CUR_ISO_LANG})") :
                sprintf("%s, %s %2d %02d:%02d:%02d %s %04d",
                        $wday, $mon, $mday, $hour, $min, $sec, "UTC", 1900+$year);
        return $str;
}

# This function creates a terse date string for use in news articles.
# Input: A date in ISO format (YYYY-MM-DD).
sub newsdate {
        my ($year, $mon, $mday) = split /-/, $_[0];
        # Make sure the date is in the YYYY-MM-DD format
        return $_[0] unless $mday;
        return $_[0] if ($year < 1900);

        # Expand month number to string
        $mon_str = $moy{$CUR_ISO_LANG}[$mon - 1];

        # Return translated date
        return defined($newsdateform{$CUR_ISO_LANG}) ?
               eval("sprintf($newsdateform{$CUR_ISO_LANG})") :
               sprintf("%02d %s %04d", $mday, $mon_str, $year);
}

# This function creates a "spoken" date string for use in text, for example
# the date of the previous release.
# Input: A date in ISO format (YYYY-MM-DD).
sub spokendate {
        my ($year, $mon, $mday) = split /-/, $_[0];
        my $appday;
        # Make sure the date is in the YYYY-MM-DD format
        return $_[0] unless $mday;
        return $_[0] if ($year < 1900);

        # Expand month string
        $mon_str = $longmoy{$CUR_ISO_LANG}[$mon - 1];

        # Return translated date
        if ($CUR_ISO_LANG eq "en")
        {
                # Special handling of English: suffix the date with "st", "nd", "rd"
                # or "th", according to the numeric date.

                SWITCH: {
                        $appday = "st", last SWITCH if ($mday % 10 == 1 && $mday != 11);
                        $appday = "nd", last SWITCH if ($mday % 10 == 2 && $mday != 12);
                        $appday = "rd", last SWITCH if ($mday % 10 == 3 && $mday != 13);
                        $appday = "th";
                }

                return sprintf("%s %d%s, %d", $mon_str, $mday, $appday, $year);
        }
        # Add any other special cases here as elsif cases
        else
        {
                # Return translated date, fall back to newsdate if no
                # spokendateform was defined
                return defined($spokendateform{$CUR_ISO_LANG}) ?
                       eval("sprintf($spokendateform{$CUR_ISO_LANG})") :
                       newsdate($_[0]);
        }
}
</perl>
