view release on metacpan or search on metacpan
        - Add the %{method} specifier for strftime
        - In the Locale::xx modules, add some methods for compatibility with 
        DateTime::Locale: month_names, am_pms, day_names, full_date_format, etc.
        - Still more propaganda in the on_date method
        - Insert empty lines in the on_date method, so the today example script
        can now wrap the text
        - The "ce_jour" method is removed, use the "on_date" method with 
        a parameter set to "fr" instead.
        - Check the few possible values for the locale and the time-zone.
        - Add a few tests.
        - The eg/result directory contains the year 213 calendar now.
        INCOMPATIBLE CHANGES
        - The decimal equivalent of the 1..12 clock is the 1..10 clock, 
        not 1..5. This is because it represents the numbers printed on clockfaces.
        - The decade method returns a 2-element list, just like DateTime's
        week method. And by the way, the decade method is aliased to week.
0.06  Septidi 27 Frimaire CCXII, jour du liège (Wednesday 2003-12-17)
        - add test for nanoseconds... and fixed nanosecond related bug
        - add basic support for Locale, with two languages: French and English
        - add much more shameless propaganda for the French Revolutionary armies
0.05  Décadi 30 Fructidor CCXI, jour du panier (Tuesday 2003-09-16)
        - removed the reference to Makefile.PL in README
        - pod fixes thanks to Iain Truskett
        - add minimal support for nanoseconds (so conversion Greg â FR â Greg will not
        lose the precision)
        - add much stuff for the events that occurred in Vendémiaire
        - replace the CCXI calendars by CCXII calendars in the eg/result directory.
0.04  Primidi 11 Thermidor CCXI, jour du panis (Tuesday 2003-07-29)
        - the _offset_from_local_time was unduly commented out. Fixed.
        - removed Makefile.PL. Or rather, replaced by a file suggesting that
        the user adopts Module::Build instead of ExtUtils::MakeMaker.
0.03  Primidi 11 Floréal CCXI, jour de la rhubarbe (Wednesday 2003-04-30)
        - I had forgotten the Roman.pm prerequisite in Makefile.PL. Fixed.
        - A few words about Roman.pm in README, too.
{
   "abstract" : "Converting dates to or from the French Revolutionary calendar",
   "author" : [
      "Jean Forget <JFORGET@cpan.org>"
   ],
   "dynamic_config" : 0,
   "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
   "license" : [
      "perl_5"
   ],
   "meta-spec" : {
      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",
---
abstract: 'Converting dates to or from the French Revolutionary calendar'
author:
  - 'Jean Forget <JFORGET@cpan.org>'
build_requires:
  ExtUtils::MakeMaker: '0'
  List::Util: '1.33'
  Test::More: '0'
  strict: '0'
  warnings: '0'
configure_requires:
  ExtUtils::MakeMaker: '0'
Makefile.PL view on Meta::CPAN
#     GNU General Public License for more details.
#
#     You should have received a copy of the GNU General Public License
#     along with this program; if not, contact the Free Software Foundation,
#     Inc., <https://www.fsf.org/>.
#
use strict;
use ExtUtils::MakeMaker;
WriteMakefile
(
    'ABSTRACT'       => 'Converting dates to or from the French Revolutionary calendar',
    'PL_FILES'       => {},
    'INSTALLDIRS'    => 'site',
    'NAME'           => 'DateTime::Calendar::FrenchRevolutionary',
    'EXE_FILES'      => [],
    'VERSION_FROM'   => 'lib/DateTime/Calendar/FrenchRevolutionary.pm',
    'PREREQ_PM' => {
                     'Test::More'                     => 0,
                     'DateTime'                       => 0.14,
                     'Roman'                          => 1.22,
                     'Params::Validate'               => 0,
DateTime::Calendar::FrenchRevolutionary version 0.17
====================================================
DateTime::Calendar::FrenchRevolutionary is copyright (c) 2003,
2004, 2010, 2011, 2012, 2014, 2016, 2019, 2021 Jean Forget
This is  a companion module  to DateTime.pm. It implements  the French
Revolutionary calendar and decimal time.
INSTALLATION
The simplest  way, of course, is  using a CPAN  client: CPAN.pm, cpanp
(from CPANPLUS.pm) or cpanm (from App::cpanminus).
If you downloaded  the .tar.gz archive, or if you  cloned the git repo
with
  git clone https://github.com/jforget/DateTime-Calendar-FrenchRevolutionary.git
This directory  contains a  few examples of  program using  the French
Revolutionary calendar module. There are:
today -- the name says it all.  Typically called from your .profile.
prt_cal -- to generate a HTML file, containing the calendar for a given
French Revolutionary year.
g2r_table -- to generate a HTML  file, which will give a few tables to
convert  a  Gredorian  date  into  a French  Revolutionary  date.  The
instructions for use are included.
r2g_table -- the opposite of g2r_table.
labels_* -- auxiliary files, used by prt_cal, g2r_table and r2g_table,
for language-dependant values, especially the instructions for use.
eg/g2r_table view on Meta::CPAN
  $_ = eval "qq($labels{usage2})";
  print;
}
__END__
=encoding utf8
=head1 NAME
g2r_table -  Print a few  charts which can  be used to convert  a date from the Gregorian calendar to the French Revolutionary calendar.
=head1 SYNOPSIS
g2r_table [--columns=I<number>] [--example=I<date>] [--lang=I<language>] [--table-workaround]
=head1 DESCRIPTION
This program prints five tables, plus  a small text showing how to use
these tables.   The output uses  UTF-8 encoding and HTML  format. When
printed  from  a  table-aware   web  browser,  these  tables  allow  a
computer-less user to convert dates from the Gregorian calendar to the
French Revolutionary calendar.
=head1 OPTIONS
=over 4
=item columns
The  number of  columns in  the first  table.  This  number must  be a
multiple of 4  (because of the 4-year quasi-cycle  for leap days) plus
one (for the first line, giving  year intervals). So you can choose 5,
eg/labels_en view on Meta::CPAN
#     Inc., <https://www.fsf.org/>.
#
#
# The labels hash, under an assumed name
#
use utf8;
use strict;
use warnings;
my %labels =
(  calendar  => 'Calendar'
 , month3    => [ qw(Jan Feb Mar Apr May Jun Jul Aug Sep Oct Nov Dec) ]
 , week1     => [ qw(M T W T F S S) ]
 , add_days  => 'Additional Days'
 , month     => [ qw(January February March April May June July August September 
                 October November December) ]
 , title1    => "Year to letter"
 , title2    => { b => "Beginning of Year", m => "Middle of Year", e => "End of Year" }
 , title3    => "Month names and day names"
 , year_ttl  => "Year"
 , titleg2r  => "Converting dates from Gregorian to French Revolutionary"
eg/labels_fr view on Meta::CPAN
#     along with this program; if not, contact the Free Software Foundation,
#     Inc., <https://www.fsf.org/>.
#
# Le hachage des libellés
#
use utf8;
use strict;
use warnings;
my %labels =
(  calendar  => 'Calendrier'
 , month3    => [ qw(jan fév mars avr mai juin juil août sep oct nov déc) ]
 , week1     => [ qw(L M M J V S D) ]
 , add_days  => 'Jours complémentaires'
 , month     => [ qw(Janvier Février Mars Avril Mai Juin Juillet Août Septembre 
                 Octobre Novembre Décembre) ]
 , title1    => "Lettres pour une année"
 , title2    => { b => "Début d'année", m => "Milieu d'année", e => "Fin d'année" }
 , title3    => "Nom des mois et des jours"
 , year_ttl  => "Année"
 , titleg2r  => "Conversion de dates du calendrier grégorien vers le calendrier républicain"
#!/usr/local/bin/perl -w
#
#     Example script for DateTime::Calendar::FrenchRevolutionary:
#     print a French Revolutionary calendar
#     Copyright (C) 2003, 2004, 2010, 2011, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
#     See the license in the embedded documentation below.
#
use utf8;
use strict;
use DateTime::Calendar::FrenchRevolutionary;
use Getopt::Long;
use Roman;
use FindBin;
sub prt_cal {
  my $year   = $_[0];           # French revolutionary year
  my $year_1 = $year + 1791;    # first corresponding Gregorian year
  my $year_2 = $year + 1792;    # second corresponding Gregorian year
  # HTML header
  print <<"EOT";
<html>
<head><title>$labels{calendar}</title>
<meta http-equiv='content-type' content='Text/html; charset=utf-8' />
</head>
<body>
EOT
  print qq(<p align='center'><img src='$pict'>\n) if $pict;
  # Column headers for the first six months
  print <<"EOT";
<h2 align='center'>@{[ Roman $year ]}</h2>
<h3 align='center'>$year_1-$year_2</h3>
<table border width='90%'>
  my $date_g = DateTime->from_object(object => $date_r);
  sprintf "%2d (%s %2d)", $rd, $labels{week1}[$date_g->day_of_week_0], $date_g->day;
}
__END__
=encoding utf8
=head1 NAME
prt_cal -- print a French Revolutionary calendar
=head1 SYNOPSIS
  prt_cal [--lang=I<language>] [--kitten=I<file>] year
=head1 DESCRIPTION
This  program  prints  a  calendar,  using  the  French  Revolutionary
calendar.   It is  not  limited  to the  historical  period when  this
calendar was in use, you can ask for any year after its beginning. For
example,  you  can  print  the   calendar  for  the  year  211,  which
corresponds to 2002-2003  in the Gregorian calendar. The  output is in
HTML,  and  contains  brief   indications  for  which  Gregorian  date
corresponds to each French Revolutionary date.
=head1 OPTIONS
=over 4
=item language
Some  values  are  language  dependant:  Gregorian  weekday  initials,
English (default)
=item fr
French
=back
=item kitten
In France, traditionnally, the  postal service sells calendars for the
next year during November / December. These calendars usually have the
picture  of  one  or  more  kittens  in a  basket,  or  a  mountainous
landscape. So, you can do the  same with this program, by specifying a
JPEG or GIF  URL, which contains the photo of kittens  or a picture of
mountains.  Don't  even  think  of  using  anything  else,  especially
pictures involving scantily clad ladies.
You can try
  https://images.google.com/images?hl=en&lr=&ie=ISO-8859-1&output=search&q=kitten+basket
  https://images.google.com/images?hl=en&lr=&ie=ISO-8859-1&output=search&q=mountains
but do not even think about
  https://images.google.com/images?q=Delacroix+libert%C3%A9+guidant+peuple&hl=en&lr=&ie=UTF-8&output=search
=back
=head1 PARAMETERS
There  is  a single  parameter,  the  year,  according to  the  French
Revolutionary calendar.  This parameter  is numeric (Roman  number not
permitted).
=head1 KNOWN BUGS
If given several years, the program prints all the requested calendars
on standard output  as a single stream. There  are HTML delimiters for
each, but they are concatenated.
=head1 AUTHOR
Jean Forget <JFORGET@cpan.org>
=head1 LICENSE STUFF
Copyright  (c) 2003,  2004, 2010,  2012, 2014,  2016, 2019,  2021 Jean
eg/r2g_table view on Meta::CPAN
  $_ = eval "qq($labels{usage4})";
  print;
}
__END__
=encoding utf8
=head1 NAME
r2g_table -  Print a few  charts which can  be used to convert  a date from the French Revolutionary calendar to the Gregorian calendar.
=head1 SYNOPSIS
r2g_table [--columns=I<nb>] [--example=I<date>] [--lang=I<language>] [--table-workaround]
=head1 DESCRIPTION
This program prints three tables, plus a small text showing how to use
these tables.   The output uses  UTF-8 encoding and HTML  format. When
printed  from  a  table-aware   web  browser,  these  tables  allow  a
computer-less  user to  convert  dates from  the French  Revolutionary
calendar to the Gregorian calendar.
=head1 OPTIONS
=over 4
=item columns
The number of columns in the  the first table. This must be a multiple
of 4, plus  1. With 5, you  get a narrow table with  many lines, while
with 13 or even 17, you get a wide table with fewer lines.
#!/usr/local/bin/perl -w
#
#     Example script for DateTime::Calendar::FrenchRevolutionary:
#     display the current date in various calendars
#
#     Copyright (C) 2003, 2004, 2010, 2011, 2012, 2014, 2016, 2019, 2021 Jean Forget, all rights reserved
#
#     This program is distributed under the same terms as Perl 5.16.3:
#     GNU Public License version 1 or later and Perl Artistic License
#
#     You can find the text of the licenses in the F<LICENSE> file or at
#     L<https://dev.perl.org/licenses/artistic.html>
#     and L<https://www.gnu.org/licenses/gpl-1.0.html>.
#
# Check the shebang line and then just call this script from your .profile
use strict;
use DateTime;
use Text::Wrap;
$Text::Wrap::columns = 80; # or whatever your console likes
# or else, read recipe 1.17 from Perl Cookbook (2d ed)
my $dg = DateTime->now;
print "\nGregorian calendar\n";
print $dg->iso8601, $dg->strftime(", %A %d %B %Y%n");
print "JD : ", $dg->jd, " MJD : ", $dg->mjd, "\n";
eval 'use DateTime::Calendar::Julian';
unless ($@) {
  my $d = DateTime::Calendar::Julian->now;
  print "\nJulian calendar\n";
  print $d->iso8601, $d->strftime(", %A %d %B %Y%n");
}
eval 'use DateTime::Calendar::Mayan';
unless ($@) {
  my $d = DateTime::Calendar::Mayan->now;
  print "\nMayan calendar\n";
  print $d->bktuk, " (baktun, katun, tun, uinal, kin)\n";
}
eval 'use DateTime::Calendar::FrenchRevolutionary';
unless ($@) {
  my $dr = DateTime::Calendar::FrenchRevolutionary->now;
  print "\nFrench Revolution\n";
  print $dr->iso8601, $dr->strftime(", %A %d %B %EY, %Ej%n"); # in French
  (my $text = fill('', '', $dr->on_date('en'))) =~ s/\n\n+/\n/g;
  print $text;                                                # in English
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for converting to/from the French Revolutionary calendar
# Copyright (c) 2003, 2004, 2010, 2011, 2012, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
    my $new_dt = (ref $self)->new( %old_p, %p );
    %$self = %$new_dt;
    return $self;
}
sub set_time_zone { } # do nothing, only 'floating' allowed
# Internal functions
use constant REV_BEGINNING  => 654415; # RD value for 1 Vendémiaire I in the Revolutionary calendar
use constant NORMAL_YEAR    => 365;
use constant LEAP_YEAR      => 366;
use constant FOUR_YEARS     =>  4 * NORMAL_YEAR + 1; # one leap year every four years
use constant CENTURY        => 25 * FOUR_YEARS - 1;  # centuries aren't leap years...
use constant FOUR_CENTURIES =>  4 * CENTURY + 1;     # ...except every four centuries that are.
use constant FOUR_MILLENIA  => 10 * FOUR_CENTURIES - 1; # ...except every four millenia that are not.
# number of days between the start of the revolutionary calendar, and the
# beginning of year n - 1 as long as the equinox rule is in effect
my @YEARS_BEGINS=    (0, 365, 730, 1096, 1461, 1826, 2191, 2557, 2922, 3287, 3652,
                   4018, 4383, 4748, 5113, 5479, 5844);
sub _is_leap_year {
    my ($self, $year) = @_;
    # Autumn equinox from I to XIX
    return 1 if ($year == 3) or ($year == 7) or ($year == 11) or ($year == 15);
    return 0 if ($year < 20);
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
      $y   += $x * 100;
      $doy -= $x * CENTURY;
      $x    = int ($doy / FOUR_YEARS);
      $y   += $x * 4;
      $doy -= $x * FOUR_YEARS;
      $x    = int ($doy / NORMAL_YEAR);
      # The integer division above divides the 4-year period, 1461 days,
      # into 5 parts: 365, 365, 365, 365 and 1. This mathematically sound operation
      # is wrong with respect to the calendar, which needs to divide
      # into 4 parts: 365, 365, 365 and 366. Therefore the adjustment below.
      $x    = 3 if $x == 4; # last day of the 4-year period
      $y   += $x;
      $doy -= $x * NORMAL_YEAR;
      ++$y; # because of 0-based mathematics vs 1-based chronology
      ++$doy;
    }
    my $d  = $doy % 30 || 30;
    my $m = ($doy - $d) / 30 + 1;
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
The documentation  uses the  word I<décade> (the  first "e"  having an
acute  accent). This  French word  is  I<not> the  translation of  the
English  word  "decade"  (ten-year  period).  It  means  a  ten-I<day>
period.
For  your  information, the  French  word  for  a ten-year  period  is
I<décennie>.
=head2 Description
The Revolutionary calendar was in  use in France from 24 November 1793
(4 Frimaire  II) to 31  December 1805 (10  Nivôse XIV). An  attempt to
apply  the  decimal rule  (the  basis of  the  metric  system) to  the
calendar. Therefore, the week  disappeared, replaced by the décade. In
addition, all months have exactly 3 décades, no more, no less.
At first,  the year was  beginning on the  equinox of autumn,  for two
reasons.  First, the  republic had  been established  on  22 September
1792, which  happened to be the  equinox, and second,  the equinox was
the symbol of equality, the day and the night lasting exactly 12 hours
each. It  was therefore  in tune with  the republic's  motto "Liberty,
Equality, Fraternity". But  it was not practical, so  Romme proposed a
leap year rule similar to the Gregorian calendar rule.
In his book I<The French Revolution>, the XIXth century writer Thomas
Carlyle proposes these translations for the month names:
=over 4
=item Vendémiaire -> Vintagearious
=item Brumaire -> Fogarious
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
Fructidor. These days  are called I<Sans-Culottides>.  For programming
purposes, they are  considered as a 13th month  (much shorter than the
12 others).
There was also an attempt to decimalize the day's subunits, with 1 day
= 10 hours, 1 hour = 100 minutes and 1 minute = 100 seconds.  But this
reform was put on hold after two years or so and it never reappeared.
Other reforms to decimalize the time has been proposed during the last
part of  the XIXth  Century, but these  reforms were not  applied too.
And they are irrelevant for this French Revolutionary calendar module.
=head1 METHODS
Since  the week  has been  replaced by  the décade,  the corresponding
method  names  still   are  C<decade_number>,  C<day_of_decade>,  etc.
English  speakers, please  note that  this has  nothing to  do  with a
10-year period.
The module supports both  Anglo-Babylonian time (24x60x60) and decimal
time.    The  accessors  for   ABT  are   C<abt_hour>,  C<abt_minute>,
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
Only the values  C<fr> (French), C<en> (English),  C<es> (Spanish) and
C<it> (Italian)  are allowed. Default  is French. No other  values are
possible, even territory variants such as C<fr_BE> or C<en_US>.
=back
=item * from_epoch( epoch => $epoch )
Creates a  date object from a  timestamp value. This  timestamp is the
number of seconds since the computer epoch, not the calendar epoch.
=item * now( )
Creates  a date  object that  corresponds to  the precise  instant the
method is called.
=item * from_object( object => $object, ... )
Creates a date  object by converting another object  from the DateTime
suite.  The preferred way for calendar to calendar conversion.
=item * last_day_of_month( ... )
Same as C<new>,  except that the C<day> parameter  is forbidden and is
automatically set to  the end of the month.  If the C<month> parameter
is 13 for the additional days, the  day is set to the end of the year,
either the 5th or the 6th additional day.
=item * clone
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
=item * hms
Returns  a composite  string with  the three  time elements.  Uses the
decimal  time.   An  optional  parameter  allows  you  to  choose  the
separator (C<:> by default).
=item * iso8601
Returns the  date and time  is a format  similar to what  ISO-8601 has
specified for the Gregorian calendar.
=item * is_leap_year
Returns a true value if the year is a leap year, false else.
=item * decade_number, week_number
Returns the I<décade> number. C<%U>, C<%V> or C<%W> in C<strftime>.
=item * decade, week
Returns a 2-element list, with  the year number and the décade number.
Since the  I<décade> is always  aligned with a  month and then  with a
year, the year element is always the same as the date's year.  Anyhow,
this is done for compatibility with DateTime's C<week> method.
=item * utc_rd_values
Returns the  current UTC Rata Die  days, seconds and  nanoseconds as a
3-element list.  This exists primarily to allow other calendar modules
to create objects based on the values provided by this object.
=item * jd, mjd
These  return the Julian  Day and  Modified Julian  Day, respectively.
The value returned is a floating point number.  The fractional portion
of the number represents the time portion of the datetime.
=item * utc_rd_as_seconds
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
Using your system's  epoch time may be error-prone,  since epoch times
have such a limited range  on 32-bit machines.  Additionally, the fact
that different  operating systems  have different epoch  beginnings is
another source of bugs.
=item * on_date
Gives  a  few historical  events  that took  place  on  the same  date
(day+month, irrespective of the  year).  These events occur during the
period of use  of the calendar, that is, no  later than Gregorian year
1805. The  related  events either  were  located  in  France, or  were
battles in which a French army was involved.
This  method accepts  one  optional argument,  the  language. For  the
moment, only  "en" for English and  "fr" for French  are available. If
not given, the method will use the date object's current locale.
Not all eligible events are portrayed there. The events database will
be expanded in future versions.
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
The month as a decimal number (1  to 13). Unlike %m, a leading zero is
replaced by a space.
=item * %F
Equivalent to %Y-%m-%d (the ISO 8601 date format)
=item * %g
Strictly similar to  %y, since I<décades> are always  aligned with the
beginning of the year in this calendar.
=item * %G
Strictly similar to  %Y, since I<décades> are always  aligned with the
beginning of the year in this calendar.
=item * %h
Equivalent to %b.
=item * %H
The hour as a decimal number using a 10-hour clock (range 0 to 9).
The result is a single-char string.
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
The year as a decimal number including the century.
=item * %Ey
The year as a lowercase Roman number.
=item * %EY
The year as a uppercase Roman  number, which is the traditional way to
write years when using the French Revolutionary calendar.
=item * %z
The   time-zone  as   hour  offset   from  UTC.    Required   to  emit
RFC822-conformant dates (using "%a, %d %b %Y %H:%M:%S %z").  Since the
module does not  support time zones, this gives  silly results and you
cannot  be RFC822-conformant.  Anyway,  RFC822 requires  the Gregorian
calendar, doesn't it?
=item * %Z
The  time  zone  or  name  or abbreviation,  should  the  module  have
supported them.
=item * %*
The feast for the day, in long format ("jour de la pomme de terre").
Also available as %Ej.
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
=back
=head1 PROBLEMS AND KNOWN BUGS
=head2 Time Zones
Only the I<floating> time zone  is supported.  Time zones were created
in  the  late  XIXth  century,  at  a  time  when  fast  communication
(railroads)  and instant  communication (electric  telegraph)  made it
necessary.  But at this time, the French Revolutionary calendar was no
longer in use.
=head2 Leap Seconds
They are not supported.
=head2 I18N
For  the  moment,  only  French,  English,  Spanish  and  Italian  are
available. For the  English translation, I have  used Thomas Carlyle's
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
=head2 Feasts
The various  sources for  the feasts  are somewhat  contradictory. The
most obvious  example if  the 4th  additional day,  which is  "Jour de
l'opinion" (day of opinion) in some  documents and "Jour de la raison"
(day of reason) in others.
In addition, the sources have several slight differences between them.
All of  them obviously include some  typos. [Annexe] is chosen  as the
reference since it is the  definitive legislative text that officially
defines names of days in  the French revolutionary calendar. This text
introduces  amendments  to  the  original calendar  set  up  by  Fabre
d'Ãglantine in [Fabre], and gives  in annex the amended calendar. When
there is  a difference between  the amended calendar and  [Fabre] with
amendments  (yes it  can happen!),  [Fabre] version  prevails. Obvious
typos  in  [Annexe] (yes  it  can  happen!)  are preserved,  with  the
exception  of accented  letters  because they  are  fuzzy rendered  in
original prints, or  cannot be printed at all at  that time on letters
in uppercase.
The bracket  references refer  to entries in  the "SEE  ALSO" section,
"Internet" subsection below.
=head1 SUPPORT
lib/DateTime/Calendar/FrenchRevolutionary.pm view on Meta::CPAN
L<DateTime>
L<DateTime::Calendar::Pataphysical>
L<Date::Convert::French_Rev> or L<https://github.com/jforget/Date-Convert-French_Rev>
L<Date::Converter>
=head2 Other Software
F<calendar/cal-french.el>  in emacs-21.2  or later  or xemacs  21.1.8,
forked in L<https://github.com/jforget/emacs-lisp-cal-french>
=head2 Books
Quid 2001, M and D Frémy, publ. Robert Laffont
Agenda Républicain 197 (1988/89), publ. Syros Alternatives
Any French schoolbook about the French Revolution
The French Revolution, Thomas Carlyle, Oxford University Press
Calendrier Militaire, anonymous
Histoire de l'heure en France, Jacques Gapaillard, publ. Vuibert -- ADAPT
=head2 Internet
L<https://github.com/houseabsolute/DateTime.pm/wiki>
L<http://www.faqs.org/faqs/calendars/faq/part3/>
L<https://zapatopi.net/metrictime/>
L<http://datetime.mongueurs.net/>
L<https://www.allhotelscalifornia.com/kokogiakcom/frc/default.asp>
L<https://github.com/jhbadger/FrenchRevCal-ruby>
L<https://en.wikipedia.org/wiki/French_Republican_Calendar>
lib/DateTime/Calendar/FrenchRevolutionary/Locale.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing localised strings for the French Revolutionary calendar
# Copyright (c) 2003, 2004, 2010, 2011, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/en.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing English strings for the French Revolutionary calendar
# Copyright (c) 2003, 2004, 2010, 2011, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale::en;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/en.pm view on Meta::CPAN
# But this module is a revolutionary one, so it discards all old traditions.
"Ah ! ça ira ! ça ira !";
__END__
=encoding utf8
=head1 NAME
DateTime::Calendar::FrenchRevolutionary::Locale::en -- English localization for the French 
revolutionary calendar.
=head1 SYNOPSIS
  use DateTime::Calendar::FrenchRevolutionary::Locale;
  my $english_locale = DateTime::Calendar::FrenchRevolutionary::Locale->load('en');
  my $english_month_name =$english_locale->month_name($date);
=head1 DESCRIPTION
lib/DateTime/Calendar/FrenchRevolutionary/Locale/en.pm view on Meta::CPAN
This module provides the following class methods:
=over 4
=item * new
Returns an  object instance,  which is just  a convenient value  to be
stored in a variable.
Contrary to  the widely used Gregorian  calendar, there is  no need to
customize a French Revolutionary calendar locale. Therefore, there are
no instance data and no instance methods.
=item * month_name ($date)
Returns an English translation for C<$date>'s month, where C<$date> is
a C<DateTime::Calendar::FrenchRevolutionary> object.
=item * month_abbreviation ($date)
Returns a 3-letter abbreviation for the English month name.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/en.pm view on Meta::CPAN
animal or tool that correspond to C<$date>'s feast.
Note: in some cases, the feast French name is left untranslated, while
in some other cases, the  translation is inadequate. If you are fluent
in both French and English, do not hesitate to send corrections to the
author.
=item * feast_long ($date)
Same  as  C<feast_short>, with  a  "day"  suffix,  as in  the  current
calendar's "groundhog day" or "Colombus day".
=item * feast_caps ($date)
Same as C<feast_long> with capitalized first letters.
=item * on_date ($date)
Gives a small text about the  events which occurred the same month and
day as C<$date> between the calendar's epoch (22 Sep 1792) and the day
it was rescinded (31 Dec 1805).
Most of these events come  from an anonymous propaganda book published
in year  VIII (1799--1800). The others are  common knowledge available
in any French History book or any encyclopedia.
=item * full_date_format, long_date_format, medium_date_format, short_date_format
Class  methods,  giving four  C<strftime>  canned  formats for  dates,
without the need to remember all the C<%> specifiers.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/es.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing Spanish strings for the French Revolutionary calendar
# Copyright (c) 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale::es;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/es.pm view on Meta::CPAN
# But this module is a revolutionary one, so it discards all old traditions.
"Ah ! ça ira ! ça ira !";
__END__
=encoding utf8
=head1 NAME
DateTime::Calendar::FrenchRevolutionary::Locale::es -- Spanish localization for the French 
revolutionary calendar.
=head1 SYNOPSIS
  use DateTime::Calendar::FrenchRevolutionary::Locale;
  my $spanish_locale = DateTime::Calendar::FrenchRevolutionary::Locale->load('es');
  my $spanish_month_name =$spanish_locale->month_name($date);
=head1 DESCRIPTION
lib/DateTime/Calendar/FrenchRevolutionary/Locale/es.pm view on Meta::CPAN
This module provides the following class methods:
=over 4
=item * new
Returns an  object instance,  which is just  a convenient value  to be
stored in a variable.
Contrary to  the widely used Gregorian  calendar, there is  no need to
customize a French Revolutionary calendar locale. Therefore, there are
no instance data and no instance methods.
=item * month_name ($date)
Returns an Spanish translation for C<$date>'s month, where C<$date> is
a C<DateTime::Calendar::FrenchRevolutionary> object.
=item * month_abbreviation ($date)
Returns a 3-letter abbreviation for the Spanish month name.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/fr.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing French strings for the French Revolutionary calendar
# Copyright (c) 2003, 2004, 2010, 2011, 2014, 2016, 2019, 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale::fr;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/fr.pm view on Meta::CPAN
# But this module is a revolutionary one, so it discards all old traditions.
"Dansons la carmagnole, vive le son du canon.";
__END__
=encoding utf8
=head1 NAME
DateTime::Calendar::FrenchRevolutionary::Locale::fr -- French localization for the French 
revolutionary calendar.
=head1 SYNOPSIS
  use DateTime::Calendar::FrenchRevolutionary::Locale;
  my $french_locale = DateTime::Calendar::FrenchRevolutionary::Locale->load('fr');
  my $french_month_name =$french_locale->month_name($date);
=head1 DESCRIPTION
lib/DateTime/Calendar/FrenchRevolutionary/Locale/fr.pm view on Meta::CPAN
This module provides the following class methods:
=over 4
=item * new
Returns an  object instance,  which is just  a convenient value  to be
stored in a variable.
Contrary to  the widely used Gregorian  calendar, there is  no need to
customize a French Revolutionary calendar locale. Therefore, there are
no instance data and no instance methods.
=item * month_name ($date)
Returns  the French  name for  C<$date>'s month,  where C<$date>  is a
C<DateTime::Calendar::FrenchRevolutionary> object.
=item * month_abbreviation ($date)
Returns a 3-letter abbreviation for the French month name.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/fr.pm view on Meta::CPAN
Same  as  C<feast_short>, with  a  "jour"  prefix.
=item * feast_caps ($date)
Same as C<feast_long> with capitalized first letters.
=item * on_date ($date)
Gives a small text about the  events which occurred the same month and
day as C<$date> between the calendar's epoch (22 Sep 1792) and the day
it was rescinded (31 Dec 1805).
Most of these events come  from an anonymous propaganda book published
in year  VIII (1799--1800). The others are  common knowledge available
in any French History book or any encyclopedia.
=item * full_date_format, long_date_format, medium_date_format, short_date_format
Class  methods,  giving four  C<strftime>  canned  formats for  dates,
without the need to remember all the C<%> specifiers.
lib/DateTime/Calendar/FrenchRevolutionary/Locale/it.pm view on Meta::CPAN
# -*- encoding: utf-8; indent-tabs-mode: nil -*-
#
# Perl DateTime extension for providing Italian strings for the French Revolutionary calendar
# Copyright (c) 2021 Jean Forget. All rights reserved.
#
# See the license in the embedded documentation below.
#
package DateTime::Calendar::FrenchRevolutionary::Locale::it;
use utf8;
use strict;
use warnings;
lib/DateTime/Calendar/FrenchRevolutionary/Locale/it.pm view on Meta::CPAN
# But this module is a revolutionary one, so it discards all old traditions.
"Ah ! ça ira ! ça ira !";
__END__
=encoding utf8
=head1 NAME
DateTime::Calendar::FrenchRevolutionary::Locale::it -- Italian localization for the French 
revolutionary calendar.
=head1 SYNOPSIS
  use DateTime::Calendar::FrenchRevolutionary::Locale;
  my $italian_locale = DateTime::Calendar::FrenchRevolutionary::Locale->load('it');
  my $italian_month_name =$italian_locale->month_name($date);
=head1 DESCRIPTION
lib/DateTime/Calendar/FrenchRevolutionary/Locale/it.pm view on Meta::CPAN
This module provides the following class methods:
=over 4
=item * new
Returns an  object instance,  which is just  a convenient value  to be
stored in a variable.
Contrary to  the widely used Gregorian  calendar, there is  no need to
customize a French Revolutionary calendar locale. Therefore, there are
no instance data and no instance methods.
=item * month_name ($date)
Returns an Italian translation for C<$date>'s month, where C<$date> is
a C<DateTime::Calendar::FrenchRevolutionary> object.
=item * month_abbreviation ($date)
Returns a 3-letter abbreviation for the Italian month name.