File Coverage

blib/lib/DateTime/Calendar/Pataphysical.pm
Criterion Covered Total %
statement 207 211 98.1
branch 74 86 86.0
condition 27 36 75.0
subroutine 54 55 98.1
pod 35 41 85.3
total 397 429 92.5


line stmt bran cond sub pod time code
1             package DateTime::Calendar::Pataphysical;
2             $DateTime::Calendar::Pataphysical::VERSION = '0.06';
3 11     11   366933 use strict;
  11         21  
  11         306  
4 11     11   55 use warnings;
  11         21  
  11         355  
5 11     11   8718 use utf8;
  11         106  
  11         54  
6              
7 11     11   8115 use DateTime::Duration;
  11         1557350  
  11         303  
8 11     11   93 use DateTime::Locale;
  11         24  
  11         283  
9 11     11   55 use Params::Validate qw/validate SCALAR OBJECT/;
  11         20  
  11         1375  
10              
11             sub _floor {
12 2865     2865   3499 my $x = shift;
13 2865         3728 my $ix = int $x;
14 2865 100       5154 if ($ix <= $x) {
15 1634         3497 return $ix;
16             } else {
17 1231         2394 return $ix - 1;
18             }
19             }
20              
21 11         57 use overload ( 'fallback' => 1,
22             '<=>' => '_compare_overload',
23             'cmp' => '_compare_overload',
24             '-' => '_subtract_overload',
25             '+' => '_add_overload',
26 11     11   59 );
  11         20  
27              
28             {
29             my $DefaultLocale;
30             sub DefaultLocale {
31 760     760 0 1056 my $class = shift;
32              
33 760 100       1874 if (@_) {
34 11         20 my $lang = shift;
35              
36 11         62 DateTime::Locale->load($lang);
37              
38 11         54156 $DefaultLocale = $lang;
39             }
40              
41 760         20464 return $DefaultLocale;
42             }
43             }
44             __PACKAGE__->DefaultLocale('French');
45              
46             sub new {
47 407     407 1 15678 my $class = shift;
48 407         2865 my %p = validate( @_,
49             { year => {type => SCALAR},
50             month => {type => SCALAR, default => 1},
51             day => {type => SCALAR, default => 1},
52             rd_secs => { type => SCALAR, default => 0},
53             rd_nano => { type => SCALAR, default => 0},
54             locale => { type => SCALAR | OBJECT,
55             default => $class->DefaultLocale },
56             } );
57              
58 407         3668 my $self = bless \%p, $class;
59             $self->{locale} = DateTime::Locale->load($p{locale})
60 407 100       2618 unless (ref $self->{locale});
61              
62 407         9395 return $self;
63             }
64              
65             sub clone {
66 102     102 1 379 my $self = shift;
67              
68 102         626 return bless {%$self}, ref $self;
69             }
70              
71             sub set
72             {
73 6     6 1 4562 my $self = shift;
74 6         160 my %p = validate( @_,
75             { year => { type => SCALAR, optional => 1 },
76             month => { type => SCALAR, optional => 1 },
77             day => { type => SCALAR, optional => 1 },
78             locale => { type => SCALAR | OBJECT, optional => 1 },
79             } );
80              
81 6 100 100     61 if (exists $p{locale} && ! ref $p{locale}) {
82             $p{locale} = DateTime::Locale->load($p{locale})
83 2         9 }
84              
85 6         62 $self->{$_} = $p{$_} for keys %p;
86 6         21 return $self;
87             }
88              
89             sub truncate {
90 3     3 1 9 my $self = shift;
91 3         54 my %p = validate( @_,
92             { to =>
93             { regex => qr/^(?:year|month|day)$/ },
94             },
95             );
96 3         55 foreach my $f ( qw( day month year ) ) {
97 6 100       20 last if $p{to} eq $f;
98 3         6 $self->{$f} = 1;
99             }
100 3         26 return $self;
101             }
102              
103 0     0 0 0 sub locale { $_[0]->{locale} }
104              
105             sub is_leap_year {
106 16     16 1 23 my $self = shift;
107 16         29 my $year = $self->{year};
108 16 50       34 $year++ if $year < 0;
109 16 100 100     95 if ($year % 4 != 3 or ($year % 100 == 27 and $year % 400 != 127)) {
      66        
110 8         46 return 0;
111             } else {
112 8         38 return 1;
113             }
114             }
115              
116 229     229 1 2338 sub year { $_[0]->{year} }
117              
118 218     218 1 861 sub month { $_[0]->{month} }
119             *mon = \&month;
120              
121 1     1 0 11 sub month_0 { $_[0]->{month}-1 }
122             *mon_0 = \&month_0;
123              
124 219     219 1 782 sub day_of_month { $_[0]->{day} }
125             *day = \&day_of_month;
126             *mday = \&day_of_month;
127              
128 1     1 0 5 sub day_of_month_0 { $_[0]->{day} - 1 }
129             *day_0 = \&day_of_month_0;
130             *mday_0 = \&day_of_month_0;
131              
132             sub month_name {
133             return (qw/Absolu Haha As Sable Décervelage Gueules Pédale Clinamen
134 5     5 1 45 Palotin Merdre Gidouille Tatane Phalle/)[$_[0]->{month}-1];
135             }
136              
137             sub day_of_week {
138 8     8 1 13 my $self = shift;
139              
140 8 100       25 if ($self->{day} == 29) {
141 4         19 return undef;
142             } else {
143 4         21 return 1 + ($self->{day}-1) % 7;
144             }
145             }
146              
147             sub day_of_week_0 {
148 10     10 0 38 my $self = shift;
149              
150 10 100       48 if ($self->{day} == 29) {
151 1         4 return undef;
152             } else {
153 9         66 return +($self->{day}-1) % 7;
154             }
155             }
156              
157             sub day_name {
158 11     11 1 50 my $self = shift;
159              
160 11 100       31 if ($self->{day} == 29) {
161 4         8 my $name = 'hunyadi';
162 4         16 my $n = $self->{locale}->day_format_wide->[0];
163 4 100       28 $name = ucfirst $name if $n eq ucfirst $n;
164 4         16 return $name;
165             } else {
166 7   100     48 return $self->{locale}->day_format_wide->[($self->day_of_week_0 || 7)-1];
167             }
168             }
169              
170             sub week_number {
171 9     9 1 14 my $self = shift;
172              
173 9 100       25 if ($self->{day} == 29) {
174 5         16 return undef;
175             } else {
176 4         21 return 4*($self->{month} - 1) + int(($self->{day} - 1)/7) + 1;
177             }
178             }
179              
180 3     3 1 8 sub week_year { $_[0]->year }
181              
182 3     3 1 10 sub week { $_[0]->week_year, $_[0]->week_number }
183              
184             sub day_of_year {
185 5     5 1 9 my $self = shift;
186              
187 5         24 return $self->{day} + ($self->{month}-1) * 29;
188             }
189              
190             sub day_of_year_0 {
191 10     10 0 15 my $self = shift;
192              
193 10         61 return $self->{day} + ($self->{month}-1) * 29 - 1;
194             }
195              
196             sub ymd {
197 193     193 1 11062 my ($self, $sep) = @_;
198 193 100       479 $sep = '-' unless defined $sep;
199              
200             return sprintf( "%0.3d%s%0.2d%s%0.2d",
201             $self->{year}, $sep,
202             $self->{month}, $sep,
203 193         1546 $self->{day} );
204             }
205             *date = \&ymd;
206              
207             sub mdy {
208 2     2 1 4 my ($self, $sep) = @_;
209 2 100       8 $sep = '-' unless defined $sep;
210              
211             return sprintf( "%0.2d%s%0.2d%s%0.3d",
212             $self->{month}, $sep,
213             $self->{day}, $sep,
214 2         17 $self->{year} );
215             }
216             sub dmy {
217 2     2 1 3 my ($self, $sep) = @_;
218 2 100       7 $sep = '-' unless defined $sep;
219              
220             return sprintf( "%0.2d%s%0.2d%s%0.3d",
221             $self->{day}, $sep,
222             $self->{month}, $sep,
223 2         17 $self->{year} );
224             }
225              
226             sub datetime {
227 35     35 1 12705 my $self = shift;
228              
229             # EP = Ere Pataphysique
230 35         81 return $self->ymd() . 'EP';
231             }
232              
233             my %formats =
234             ( 'A' => sub { $_[0]->day_name },
235             'B' => sub { $_[0]->month_name },
236             'C' => sub { int( $_[0]->year / 100 ) },
237             'd' => sub { sprintf( '%02d', $_[0]->day_of_month ) },
238             'D' => sub { $_[0]->strftime( '%m/%d/%y' ) },
239             'e' => sub { sprintf( '%2d', $_[0]->day_of_month ) },
240             'F' => sub { $_[0]->ymd('-') },
241             'j' => sub { $_[0]->day_of_year },
242             'm' => sub { sprintf( '%02d', $_[0]->month ) },
243             'n' => sub { "\n" },
244             't' => sub { "\t" },
245             'u' => sub { $_[0]->day_of_week || 'H' },
246             'U' => sub { my $w = $_[0]->week_number;
247             defined $w ? sprintf('%02d', $w) : ' ' },
248             'w' => sub { my $dow = $_[0]->day_of_week;
249             defined $dow ? $dow-1 : 'H' },
250             'y' => sub { sprintf( '%02d', substr( $_[0]->year, -2 ) ) },
251             'Y' => sub { return $_[0]->year },
252             '%' => sub { '%' },
253             '*' => sub { $_[0]->feast },
254             );
255             $formats{W} = $formats{V} = $formats{U};
256              
257             sub strftime {
258 41     41 1 13270 my ($self, @r) = @_;
259              
260 41         89 foreach (@r) {
261 42 100       192 s/%([%*A-Za-z])/ $formats{$1} ? $formats{$1}->($self) : $1 /ge;
  45         196  
262 42 100       222 return $_ unless wantarray;
263             }
264 1         5 return @r;
265             }
266              
267             sub last_day_of_month {
268 6     6 1 22 my $class = shift;
269 6         165 my %p = validate( @_,
270             { year => { type => SCALAR },
271             month => { type => SCALAR },
272             locale => { type => SCALAR | OBJECT, optional => 1 },
273             }
274             );
275 6         38 $p{day} = 29;
276 6         24 return $class->new(%p);
277             }
278              
279             sub is_imaginary {
280 289     289 1 352 my $self = shift;
281              
282             return $self->{day} == 29 && $self->{month} != 11 &&
283 289   66     1535 ($self->{month} != 6 or !$self->is_leap_year);
284             }
285              
286             sub utc_rd_values {
287 284     284 1 6852 my $self = shift;
288              
289 284 100       650 return if $self->is_imaginary;
290              
291 270         453 my ($year, $month, $day) = @{$self}{qw/year month day/};
  270         657  
292 270 100       603 $year++ if $year < 0;
293              
294 270         335 my $cyear = $year;
295 270 100       573 $cyear++ if $month > 6;
296 270 100       568 $day++ if $month > 11;
297              
298 270         772 my $rd = 683984 + # 7 September 1873 = 28 Phalle '0'
299             ($year-1) * 365 + # normal years: 365 real days
300             _floor( .25 * $cyear) - # leap years
301             _floor(($cyear+72)/100) + # century years
302             _floor(($cyear+272)/400 ) +
303             + ($month - 1) * 28 + $day;
304 270         1058 return ($rd, $self->{rd_secs}, $self->{rd_nano});
305             }
306              
307             sub utc_rd_as_seconds {
308 41     41 1 15473 my $self = shift;
309 41         96 my ($rd_days, $rd_secs, $rd_nano) = $self->utc_rd_values;
310              
311 41 100       80 if (defined $rd_days) {
312 34         147 return $rd_days*24*60*60 + $rd_secs + $rd_nano * 1e-9;
313             } else {
314 7         25 return undef;
315             }
316             }
317              
318             sub from_object {
319 237     237 1 92004 my $class = shift;
320 237         1113 my %p = validate( @_,
321             { object => { type => OBJECT,
322             can => 'utc_rd_values',
323             },
324             locale => { type => SCALAR | OBJECT,
325             default => $class->DefaultLocale },
326             },
327             );
328              
329             $p{object} = $p{object}->clone->set_time_zone( 'floating' )
330 237 100       2398 if $p{object}->can( 'set_time_zone' );
331              
332 237         16068 my ( $rd_days, $rd_secs, $rd_nano ) = $p{object}->utc_rd_values;
333              
334 237         1727 my ($y, $m, $d) = $class->_rd2ymd( $rd_days );
335              
336             return $class->new( year => $y, month => $m, day => $d,
337             rd_secs => $rd_secs||0, rd_nano => $rd_nano||0,
338 237   100     1965 locale => $p{locale} );
      50        
339             }
340              
341             sub _rd2ymd {
342 342     342   525 my ($class, $rd) = @_;
343              
344             # Algorithm similar to the one on
345             # http://home.capecod.net/~pbaum/date/injdalg2.htm
346             # for the gregorian calendar
347              
348             # Number of days since 1 Pedale 127 (day after first extra leap day) =
349             # 24-02-2000
350 342         459 $rd -= 730173;
351              
352 342         839 my $a = _floor(($rd-0.25)/(100*365.2425));
353 342         858 my $b = $rd - 0.25 + $a - _floor($a/4);
354 342         726 my $y = _floor($b/365.25);
355 342         811 my $d = $rd + $a - _floor($a/4) - _floor(365.25*$y);
356              
357 342         466 my $m;
358 342 100       914 if ($d < 5*28 + 1) { # Before 29 Gidouille
    100          
    100          
359 149         308 $m = _floor(($d-1)/28);
360 149         276 $d -= $m * 28;
361             } elsif ($d == 5*28 + 1) { # 29 Gidouille
362 1         2 $m = 4;
363 1         2 $d = 29;
364             } elsif ($d < 366) { # Before 29 Gueules
365 190         381 $m = _floor(($d-2)/28);
366 190         347 $d -= $m*28 + 1;
367             } else { # 29 Gueules (leap day)
368 2         3 $m = 12;
369 2         5 $d = 29;
370             }
371              
372 342         399 $y += 127;
373 342         407 $m += 7;
374 342 100       738 if ($m > 13) {
375 138         144 $m -= 13;
376 138         176 $y ++;
377             }
378              
379             # There is no year 0
380 342 100       726 if ($y <= 0) {
381 3         4 $y--;
382             }
383              
384 342         794 return $y, $m, $d;
385             }
386              
387             sub from_epoch {
388 105     105 1 1456 my $class = shift;
389 105         543 my %p = validate( @_,
390             { epoch => { type => SCALAR },
391             locale => { type => SCALAR | OBJECT,
392             default => $class->DefaultLocale },
393             }
394             );
395              
396 105         724 my $rd = int($p{epoch}/(24*60*60) + 719163);
397              
398 105         291 my ($y, $m, $d) = $class->_rd2ymd( $rd );
399              
400             return $class->new( year => $y, month => $m, day => $d,
401 105         364 locale => $p{locale} );
402             }
403              
404 2     2 1 566 sub now { shift->from_epoch( epoch => (scalar time), @_ ) }
405              
406             sub _add_overload {
407 1     1   724 my ($dt, $dur, $reversed) = @_;
408 1 50       4 ($dur, $dt) = ($dt, $dur) if $reversed;
409              
410 1         3 my $new = $dt->clone;
411 1         8 $new->add_duration($dur);
412 1         3 return $new;
413             }
414              
415             sub _subtract_overload
416             {
417 1     1   7 my ( $date1, $date2, $reversed ) = @_;
418 1 50       3 ($date1, $date2) = ($date2, $date1) if $reversed;
419              
420 1 50       7 if ( UNIVERSAL::isa($date2, 'DateTime::Duration') ) {
421 0         0 my $new = $date1->clone;
422 0         0 $new->add_duration( $date2->inverse );
423 0         0 return $new;
424             } else {
425 1         4 return $date1->subtract_datetime($date2);
426             }
427             }
428              
429 5     5 1 27 sub add {return shift->add_duration(DateTime::Duration->new(@_)) }
430              
431 2     2 1 8 sub subtract { return shift->subtract_duration(DateTime::Duration->new(@_)) }
432              
433 2     2 1 125 sub subtract_duration { return $_[0]->add_duration( $_[1]->inverse ) }
434              
435             sub add_duration {
436 8     8 1 550 my ($self, $dur) = @_;
437              
438 8         29 my %deltas = $dur->deltas;
439              
440 8 50       115 $self->{year}++ if $self->{year} < 0;
441              
442 8 100       95 $self->{day} += $deltas{days} if $deltas{days};
443 8 100       22 $self->{month} += $deltas{months} if $deltas{months};
444              
445 8 100 100     41 if ($self->{day} < 1 or $self->{day} > 29) {
446 3         13 $self->{month} += _floor(($self->{day}-1)/29);
447 3         7 $self->{day} %= 29;
448             }
449 8 100 100     36 if ($self->{month} < 1 or $self->{month} > 13) {
450 3         10 $self->{year} += _floor(($self->{month}-1)/13);
451 3         6 $self->{month} %= 13;
452             }
453              
454 8 50       20 $self->{year}-- if $self->{year} <= 0;
455              
456 8         23 return $self;
457             }
458              
459             sub subtract_datetime {
460 1     1 1 2 my ($self, $dt) = @_;
461              
462 1         4 my ($syear, $dyear) = ($self->year, $dt->year);
463 1   33     7 $_ < 0 and $_++ for $syear, $dyear;
464              
465 1         4 my $days_diff = ($syear - $dyear ) * 377 +
466             ($self->month - $dt->month) * 29 +
467             ($self->day - $dt->day );
468 1         4 return DateTime::Duration->new( days => $days_diff );
469             }
470              
471 11     11   38808 use constant INFINITY => 100 ** 100 ** 100 ;
  11         21  
  11         804  
472 11     11   57 use constant NEG_INFINITY => -1 * (100 ** 100 ** 100);
  11         21  
  11         7249  
473              
474             sub _compare_overload
475             {
476             # note: $_[1]->compare( $_[0] ) is an error when $_[1] is not a
477             # DateTime (such as the INFINITY value)
478 104 50   104   795 return $_[2] ? - $_[0]->compare( $_[1] ) : $_[0]->compare( $_[1] );
479             }
480              
481             sub compare
482             {
483 104 50   104 1 317 my ($class, $dt1, $dt2) = ref $_[0] ? (undef, @_) : @_;
484              
485 104 50       234 return undef unless defined $dt2;
486              
487 104 50 33     331 return -1 if ! ref $dt2 && $dt2 == INFINITY;
488 104 50 33     253 return 1 if ! ref $dt2 && $dt2 == NEG_INFINITY;
489              
490 104 50       411 $dt2 = $class->from_object( object => $dt2 )
491             unless $dt2->isa('DateTime::Calendar::Pataphysical');
492              
493 104   100     236 return $dt1->year <=> $dt2->year || $dt1->month <=> $dt2->month ||
494             $dt1->day <=> $dt2->day;
495             }
496              
497              
498             my @feasts;
499              
500             sub feast {
501 5     5 1 16 return $feasts[ $_[0]->day_of_year_0 ][1];
502             }
503              
504             sub type_of_feast {
505 4     4 1 14 return $feasts[ $_[0]->day_of_year_0 ][0];
506             }
507              
508             # Feasts from
509             # http://perso.wanadoo.fr/mexiqueculture/nouvelles6-latumba.htm
510             @feasts = map [/(.) (.+)/], split /\n+/, <
511             1 Nativité d'Alfred Jarry
512             4 St Ptyx, silentiaire (Abolition de)
513             4 St Phénix, solipsiste et St Hyx, factotum
514             4 St Lucien de Samosate, voyageur
515             4 St Bardamu, voyageur
516             4 Ste Vérola, assistante sociale
517             4 St Alambic, abstracteur
518             3 Absinthe, ci-devant St Alfred
519             4 Descente du St Esprit (de Vin)
520             v Dilution
521             4 Ste Purée, sportswoman
522             v Vide
523             4 St Canterel, l'illuminateur
524             4 St Sophrotatos l'Arménien, pataphysicien
525             3 Éthernité
526             4 St Ibicrate le Géomètre, pataphysicien
527             v Céphalorgie
528             v Flûtes de Pan
529             4 Stes Grues, ophiophiles
530             4 Ste Mélusine, souillarde de cuisine
531             4 St Venceslas, duc
532             2 Emmanuel Dieu
533             4 Ste Varia-Miriam, amphibie
534             4 Sts Rakirs et Rastrons, porte-côtelettes
535             4 Nativité de Sa Magnificence Opach
536             4 St Joseb, notaire à la mode de Bretagne
537             4 Stes Gigolette et Gaufrette, dogaresses
538             v Xylostomie
539             v Le Jet Musical
540              
541             2 L'Âge du Dr Faustroll
542             4 Dissolution d'E. Poe, dinomythurge
543             4 St Gibus, franc-maçon
544             4 Ste Berthe de Courrière, égérie
545             4 Ste Belgique, nourrice
546             4 Ste Tourte, lyrique et Ste Bévue, sociologue
547             4 St Prout, abbé
548             2 Fête du Haha
549             v Tautologie
550             4 St Panmuphle, huissier
551             4 Sortie de St L. Cranach, apocalypticien
552             4 St Cosinus, savant
553             4 Bse Fenouillard, sainte famille
554             4 Exhibition de la Daromphe
555             3 Nativité de l'Œstre, artificier
556             4 Ste Vadrouille, emblème
557             4 St Homais d'Aquin, prudhomme
558             4 Nativité de Sa Magnificence le baron Mollet (St Pipe)
559             4 St Raphaël, apéritif et philistin
560             3 Strangulation de Bosse-de-Nage
561             3 Zimzoum de Bosse-de-Nage
562             2 Résurrection de Bosse-de-Nage
563             3 Chapeau de Bosse-de-Nage
564             4 St Cl. Terrasse, musicien des Phynances
565             4 St J.-P. Brisset, philologue, prince des penseurs
566             4 Commémoration du Cure-dent
567             1 Occultation d'Alfred Jarry
568             4 Fuite d'Ablou
569             v Marée Terrestre
570              
571             3 Nativité de Pantagruel
572             4 Ste Rrose Sélavy, héroïne
573             4 Couronnement de Lord Patchogue, miroitier
574             4 St Cravan, boxeur
575             4 St Van Meegeren, faussaire
576             4 St Omnibus, satyre
577             4 St Cyrano de Bergerac, explorateur
578             3 St Rimbe, oisif
579             v Équarrissage pour tous
580             4 St Abstrait, bourreau
581             4 St Ossian, barde postiche
582             3 Dispute du Signe + et du Signe -
583             3 Moustaches du Dr Faustroll
584             4 St P. Bonnard, peintre des Phynances
585             1 Navigation du Dr Faustroll
586             4 St Cap, captain
587             4 St Pangloss, humoriste passif
588             4 St Chambernac, pauvriseur
589             4 St Courtial des Péreires, aérostier et inventeur
590             4 St Olibrius, augure
591             4 St Possible, schizophrène
592             2 St Lautréamont
593             4 St Quincey, critique d'art
594             4 St Berbiguier, martyr
595             4 St Lewis Carroll, professeur
596             4 St Mensonger, évêque
597             4 Ste Visité, fille du précédent
598             4 Nativité de St Swift, chanoine
599             v Traversée du Miroir
600              
601             3 Noces de Balkis et de Salomon
602             4 St Doublemain, idéologue
603             4 St Phlegmon, doctrinaire
604             4 Ste Barbe (femme à), femme-canon
605             4 Ste Savate, avocate
606             4 St Navet et Ste Perruque, humanistes
607             4 St Birbe, juge
608             2 Conception du P. Ubu (A. J.)
609             4 St Sagouin, homme d'état
610             1 Exaltation d'Ubu Roi (Ubu d'hiver)
611             4 Nativité de St Grabbe, scherziste
612             4 Ste Choupe, mère de famille
613             4 St Flaive, concierge
614             4 Don Quichotte, champion du monde
615             2 Khurmookum du Dr Faustroll
616             4 St Nul, exempt
617             4 St Moyen, français
618             4 Ste Lurette, joconde
619             3 Gravidité de Mère Ubu
620             4 St Sabre, allopathe
621             4 Ste Tape, pompette
622             1 César - Antechrist
623             4 Ste Viole, vierge et martyre
624             4 Ste Pochetée, gouvernante
625             3 Nativité de l'Archéoptéryx
626             4 Monsieur Sisyphe
627             4 St Tic, conjoint
628             4 St Cervelas, penseur
629             v Aleph
630              
631             3 St Alaodine, virtuose
632             4 Sts Hassassins, praticiens
633             4 Astu
634             1 Décervelage
635             4 Sts Giron, Pile et Cotice, palotins
636             4 Sts Polonais, prolétaires
637             4 Sts Forçats, poliorcètes
638             3 St Bordure, capitaine
639             4 Dormition de Jacques Vaché, interprète
640             v Drapaud (érection du)
641             4 St Eustache, libérateur
642             4 St Landru, gynécologue
643             4 St Guillotin, médecin
644             4 Sts 4 Sans-Cou, enchanteurs
645             3 Conscience d'Ubu
646             4 St Mauvais, sujet
647             4 St Mandrin, poète et philosophe
648             4 Sts Pirates et Flibustiers, thaumaturges
649             4 St et Ste Cartouche, vétérinaires
650             4 St Outlaw, aristocrate
651             1 Chaire du Dr Faustroll
652             2 Ostention du Bâton à Physique
653             4 St Tank, animal
654             4 St Weidman, patriarche
655             4 St Petiot, expert
656             v Escrime
657             4 Sts Chemins de fer, assassins
658             v Repopulation
659             v Lit de Procruste
660              
661             3 Dépucelage de Mère Ubu
662             4 St Sigisbée, eunuque
663             4 St Anthropoïde, policier
664             4 Ste Goule ou Gudule, institutrice
665             4 Ste Gale, abbesse
666             4 Ste Touche, postulante
667             4 St Gueule, abbé
668             3 Fête de la Chandelle Verte
669             4 Ste Crêpe, laïque
670             4 St Préservatif, bedeau
671             4 St Baobab, célibataire
672             4 St Membre, compilateur
673             v Copulation
674             4 Nativité de St J. Verne, globe-trotter en chambre
675             3 Alice au Pays des Merveilles
676             4 St Münchhausen, baron
677             4 Le Bétrou, théurge
678             4 Nativité de St Deibler, prestidigitateur
679             4 St Sade ès liens
680             4 St Lafleur, valet
681             v Lavement
682             2 St Sexe, stylite
683             4 Occultation de St J. Torma, euphoriste
684             4 Conversion de St Matorel, bateleur
685             4 Ste Marmelade, inspirée
686             3 L'Amour Absolu, deliquium
687             4 Ste Tabagie, cosmogène
688             4 Sts Hylactor et Pamphagus
689             v Mouvement Perpétuel
690              
691             3 Érection du Surmâle
692             4 St André Marcueil, ascète cycliste
693             4 St Ellen, hile
694             4 St Michet, idéaliste
695             4 St Ouducul, trouvère
696             4 Vers Belges
697             4 St Gavroche, forain
698             3 La Machine à Inspirer l'Amour
699             4 St Remezy, évêque in partibus
700             4 Nativité de St Tancrède, jeune homme
701             4 Testament de P. Uccello, le mal illuminé
702             4 St Hari Seldon, psychohistorien galactique
703             4 Ste Valburge, succube
704             v Sabbat
705             3 Sts Adelphes, ésotéristes
706             4 Sts Templiers, adeptes
707             4 St Dricarpe, prosélyte
708             4 St Nosocome, carabin
709             4 Ste Goutte, fête militaire
710             4 Ste Cuisse, dame patronnesse
711             4 St Inscrit, Converti
712             2 St Sengle, déserteur
713             4 St Masquarade, uniforme
714             4 Nativité de St Stéphane, faune
715             4 St Poligraf Poligrafovitch, chien
716             4 St Pâle, mineur
717             3 St Valens, frère onirique
718             v Dédicace du Tripode
719             4 Bse Escampette, dynamiteuse
720              
721             3 St Ablou, page et St Haldern, duc
722             4 Sts Hiboux, maîtres-chanteurs
723             4 La Mandragore, solanée androïde
724             4 St Pagne, confident
725             4 Sts Aster et Vulpian, violateurs du Néant
726             4 St Ganymède, professionnel
727             v La Main de Gloire
728             3 La Machine à Peindre
729             4 Ste Trique, lunatique
730             4 Rémission des Poissons
731             4 St Maquereau, intercesseur
732             4 St Georges Dazet, poulpe au regard de soie
733             4 Nativité de Maldoror, corsaire aux cheveux d'or
734             4 Sortie d'A. Dürer, hermétiste
735             * Invention de la 'Pataphysique
736             4 Exit St Domenico Theotocopouli, el Greco
737             4 St Hiéronymus Bosch, démonarque
738             v Les 27 Êtres Issus des Livres Pairs
739             4 St Barbeau, procureur et Ste Morue, juste
740             v Capture du Fourneau
741             4 St Docteur Moreau, insulaire
742             2 Fête des Polyèdres
743             v Locus Solus
744             4 St Tupetu de Tupetu, organisateur de loteries
745             4 Exit St Goya, alchimiste
746             4 St Escargot, sybarite
747             4 Ste Hure de Chasteté, pénitente
748             4 St Turgescent, iconoclaste
749             v Cymbalum Mundi
750              
751             3 Sts Crocodiles, crocodiles
752             4 Fête des Écluses
753             4 Sts Trolls, pantins
754             4 Ste Susan Calvin, docteur
755             4 Ste Poignée, veuve et Ste Jutte, recluse
756             4 Ste Oneille, gourgandine
757             4 St Fénéon ès Liens
758             3 St Bougrelas, prince
759             4 Sts Boleslas et Ladislas, polonais
760             4 St Forficule, Barnabite
761             v Explosion du Palotin
762             v Réprobation du Travail
763             4 Esquive de St Léonard (de Vinci), illusionniste
764             4 St Équivoque, sans-culotte
765             3 Adoration du Pal
766             4 Déploration de St Achras, éleveur de Polyèdres
767             4 St Macrotatoure, caudataire
768             v Canotage
769             4 Occultation de St Gauguin, océanide
770             4 St Ti Belot, séide
771             4 Occultation de Sa Magnificence le Dr Sandomir
772             2 Sts Palotins des Phynances
773             4 Sts Quatrezoneilles, Herdanpo, Mousched-Gogh, palotins
774             4 Ste Lumelle, écuyère
775             4 Sts Potassons, acolythes
776             4 Ste Prétentaine, rosière
777             4 St Foin, coryphée
778             4 Nativité de St Satie, Grand Parcier de l'Église d'Art
779             v Erratum
780              
781             3 Accouchement de Ste Jeanne, papesse
782             v Le Moutardier du Pape
783             4 St Siège, sous-pape
784             4 Nativité de St H. Rousseau, douanier
785             4 St Crouducul, troupier
786             4 St Cucufat, mécène
787             4 Nativité de M. Plume, propriétaire
788             2 Cocuage de M. le P. Ubu
789             v Vidange
790             4 St Barbapoux, amant
791             4 St Memnon, vidangeur
792             4 Stes Miches, catéchumènes
793             4 Ste Lunette, solitaire
794             4 St Sphincter, profès
795             3 Sts Serpents d'Airain
796             4 Nativité de St Donatien A. François
797             4 St Woland, professeur
798             4 St Anal, cordelier et Ste Foire, anagogue
799             4 Ste Fétatoire, super
800             4 Ste Colombine, expurgée
801             4 Ste Pyrotechnie, illuminée
802             * Ontogénie Pataphysique
803             3 Interprétation de L'Umour
804             4 Ste Purge, sage-femme
805             2 Apparition D'Ubu Roi
806             4 Ste Barbaque, naïade
807             4 Sts Courts et Longs, gendarmes
808             4 St Raca, cagot
809             v Défaite du Mufle
810              
811             3 Ste Bouzine, esprit
812             4 St Lucullus, amateur (Bloomsday)
813             4 Ste Dondon, amazone
814             4 Ste Tripe, républicaine
815             4 St Ugolin, mansuet
816             4 St Dieu, retraité
817             4 St Bébé Toutout, évangéliste
818             3 Ste Boudouille, bayadère
819             4 Ste Outre, psychiatre
820             4 St Boudin, recteur
821             4 Sacre de Talou VII, empereur du Ponukélé
822             4 Ste Confiture, dévote et Ste Cliche, donatrice
823             4 Sts Instintestins, conseillers intimes
824             4 St Colon, artilleur
825             3 Ste Giborgne, vénérable
826             4 St Inventaire, poète
827             4 Ste Femelle, technicienne
828             2 Visitation de Mère Ubu
829             4 St Sein, tautologue
830             4 St Périnée, zélateur
831             4 St Spéculum, confesseur
832             2 Fête de Gidouille
833             4 St Ombilic, gymnosophiste
834             4 St Gris-gris, ventre
835             4 St Bouffre, pontife
836             4 Ste Goulache, odalisque
837             4 Ste Gandouse, hygiéniste
838             v Poche du Père Ubu
839             2 Nom d'Ubu
840              
841             1 Fête du P. Ubu (Ubu d'été)
842             4 Commémoration du P. Ébé
843             4 Ste Crapule, puriste et St Fantomas, archange
844             4 Ascension du Mouchard, statisticien, psychiatre et policier
845             4 St Arsouille, patricien
846             4 Sts Robot et Cornard, citoyens
847             4 St Biribi, taulier
848             2 Susception du Croc à Merdre
849             4 Sts Écrase-Merdre, sectateurs
850             4 Sts Pieds Nickelés, trinité
851             4 Stes Canicule et Canule, jouvencelles
852             4 Sts Cannibales, philanthropes
853             4 St Dada, prophète
854             4 Ste Anne, pèlerine, énergumène
855             2 Procession aux Phynances
856             4 Transfiguration de St V. van Gogh, transmutateur
857             4 Ste Flamberge, voyante
858             4 St Trou, chauffeur
859             4 Ste Taloche, matrone
860             4 St Tiberge, frère quêteur
861             4 Sts Catoblepas, lord et Anoblepas, amiral
862             2 Ubu ès Liens
863             4 St Pissembock, oncle
864             4 St Pissedoux, caporal des hommes libres
865             4 St Panurge, moraliste
866             4 St Glé, neurologue-aliéniste
867             4 St Pistolet à Merdre, jubilaire
868             4 Nativité de St Bruggle
869             v Le soleil solide froid
870              
871             3 St Chibre, planton
872             4 Ste Ruth, zélatrice
873             4 St Zebb, passe-partout
874             4 St Mnester, confesseur
875             2 Assomption de Ste Messaline
876             v Penis Angelicus
877             4 St Patrobas, pompier
878             3 Ste Léda, ajusteuse
879             4 St Godemiché, économe
880             4 Ste Nitouche, orante
881             4 Ste Lèchefrite, botteuse
882             4 Ste Andouille, amphibologue
883             4 Ste Bitre, ouvreuse et St Étalon, couvreur
884             3 Bataille de Morsang
885             3 Mort de Dionysos, surhomme
886             4 Nativité de St Vibescu, pohète et Commémoration de Ste Cuculine d'Ancône
887             4 Ste Gallinacée, cocotte
888             4 St Lingam, bouche-trou
889             4 St Prélote, capucin
890             4 St Pie VIII, navigant
891             3 St Erbrand, polytechnicien
892             2 Ste Dragonne, pyrophage
893             4 St Lazare, gare
894             4 Ste Orchidée, aumonière
895             4 Nativité apparente d'Artaud le Momo
896             4 Disparition de l'Ancien Breughel, incendiaire
897             4 St Priape, franc-tireur
898             3 Transfixion de Ste Messaline
899             v Le Termès
900             EOF
901              
902             1;
903             __END__