Skip to content

Commit f7fa4e2

Browse files
committed
implemented compatibility with DateTime::Locale v0.90 and greater
1 parent 87bd826 commit f7fa4e2

File tree

7 files changed

+126
-74
lines changed

7 files changed

+126
-74
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,5 +12,6 @@ Makefile.old
1212
MANIFEST.bak
1313
META.yml
1414
MYMETA.yml
15+
MYMETA.json
1516
nytprof.out
1617
pm_to_blib

Changes

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,11 @@
11
Revision history for HTML-CalendarMonth
22

3+
2.00 Tue Nov 17 13:48:44 EST 2015
4+
- Updated for compatibility with DateTime::Locale
5+
versions 0.90 and greater. Backwards compatibility
6+
retained.
7+
- updated tests
8+
39
1.26 Fri Aug 26 15:08:49 EDT 2011
410
- fixed css/header interactions
511
- updated tests

MANIFEST

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ t/21_narrow.t
2525
t/dat/bulk.dat
2626
t/dat/head.dat
2727
t/dat/i8n.dat
28+
t/dat/i8n_leg.dat
2829
t/dat/narrow.dat
2930
t/dat/odd.dat
3031
t/dat/woy.dat

lib/HTML/CalendarMonth/Locale.pm

Lines changed: 76 additions & 54 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package HTML::CalendarMonth::Locale;
22
{
3-
$HTML::CalendarMonth::Locale::VERSION = '1.26';
3+
$HTML::CalendarMonth::Locale::VERSION = '2.00';
44
}
55

66
# Front end class around DateTime::Locale. In addition to providing
@@ -14,86 +14,107 @@ use Carp;
1414

1515
use DateTime::Locale 0.45;
1616

17+
sub _locale_version { $DateTime::Locale::VERSION }
18+
19+
my($CODE_METHOD, $CODES_METHOD);
20+
if (_locale_version() > 0.46) {
21+
$CODE_METHOD = "code";
22+
$CODES_METHOD = "codes";
23+
}
24+
else {
25+
$CODE_METHOD = "id";
26+
$CODES_METHOD = "ids";
27+
}
28+
1729
my %Register;
1830

1931
sub new {
2032
my $class = shift;
2133
my $self = {};
2234
bless $self, $class;
2335
my %parms = @_;
24-
my $id = $parms{id} or croak "Locale id required (eg 'en_US')\n";
25-
$self->{id} = $id;
36+
# id is for backwards compatibility
37+
my $code = $parms{code} || $parms{id}
38+
or croak "Locale code required (eg 'en-US')\n";
2639
$self->{full_days} = defined $parms{full_days} ? $parms{full_days} : 0;
2740
$self->{full_months} = defined $parms{full_months} ? $parms{full_months} : 1;
28-
unless ($Register{$id}) {
29-
$Register{$id} = $self->locale->load($id)
30-
or croak "Problem loading locale '$id'\n";
41+
# returned code might be different from given code
42+
unless ($Register{$code}) {
43+
my $dtl = $self->locale->load($code)
44+
or croak "Problem loading locale '$code'";
45+
$Register{$code} = $Register{$dtl->$CODE_METHOD} = { loc => $dtl };
3146
}
47+
$self->{code} = $Register{$code}{loc}->$CODE_METHOD;
3248
$self;
3349
}
3450

3551
sub locale { 'DateTime::Locale' }
3652

37-
sub loc { $Register{shift->id} }
53+
sub loc { $Register{shift->code}{loc} }
54+
55+
sub locales { shift->locale->$CODES_METHOD }
3856

39-
sub locales { shift->locale->ids }
57+
sub code { shift->{code} }
58+
*id = *code;
4059

41-
sub id { shift->{id} }
4260
sub full_days { shift->{full_days} }
4361
sub full_months { shift->{full_months} }
4462

4563
sub first_day_of_week { shift->loc->first_day_of_week % 7 }
4664

4765
sub days {
4866
my $self = shift;
49-
my $id = $self->id;
50-
unless ($Register{$id}{days}) {
51-
my $method = $self->full_days > 0 ? 'day_stand_alone_wide'
52-
: 'day_stand_alone_abbreviated';
67+
my $code = $self->code;
68+
unless ($Register{$code}{days}) {
69+
my $method = $self->full_days ? 'day_stand_alone_wide'
70+
: 'day_stand_alone_abbreviated';
5371
# adjust to H::CM standard expectation, 1st day Sun
5472
# Sunday is first, regardless of what the calendar considers to be
5573
# the first day of the week
5674
my @days = @{$self->loc->$method};
5775
unshift(@days, pop @days);
58-
$Register{$id}{days} = \@days;
76+
$Register{$code}{days} = \@days;
5977
}
60-
wantarray ? @{$Register{$id}{days}} : $Register{$id}{days};
78+
wantarray ? @{$Register{$code}{days}} : $Register{$code}{days};
6179
}
6280

6381
sub narrow_days {
6482
my $self = shift;
65-
my $id = $self->id;
66-
unless ($Register{$id}{narrow_days}) {
83+
my $code = $self->code;
84+
unless ($Register{$code}{narrow_days}) {
6785
# Sunday is first, regardless of what the calendar considers to be
6886
# the first day of the week
6987
my @days = @{ $self->loc->day_stand_alone_narrow };
7088
unshift(@days, pop @days);
71-
$Register{$id}{narrow_days} = \@days;
89+
$Register{$code}{narrow_days} = \@days;
7290
}
73-
wantarray ? @{$Register{$id}{narrow_days}} : $Register{$id}{narrow_days};
91+
wantarray ? @{$Register{$code}{narrow_days}}
92+
: $Register{$code}{narrow_days};
7493
}
7594

7695
sub months {
7796
my $self = shift;
78-
my $id = $self->id;
79-
unless ($Register{$id}{months}) {
97+
my $code = $self->code;
98+
unless ($Register{$code}{months}) {
8099
my $method = $self->full_months > 0 ? 'month_stand_alone_wide'
81100
: 'month_stand_alone_abbreviated';
82-
$Register{$id}{months} = [@{$self->loc->$method}];
101+
$Register{$code}{months} = [@{$self->loc->$method}];
83102
}
84-
wantarray ? @{$Register{$id}{months}} : $Register{$id}{months};
103+
wantarray ? @{$Register{$code}{months}} : $Register{$code}{months};
85104
}
86105

87106
sub narrow_months {
88107
my $self = shift;
89-
my $id = $self->id;
90-
$Register{$id}{narrow_months} ||= [$self->loc->month_stand_alone_narrow];
91-
wantarray ? @{$Register{$id}{narrow_months}} : $Register{$id}{narrow_months};
108+
my $code = $self->code;
109+
$Register{$code}{narrow_months}
110+
||= [@{$self->loc->month_stand_alone_narrow}];
111+
wantarray ? @{$Register{$code}{narrow_months}}
112+
: $Register{$code}{narrow_months};
92113
}
93114

94115
sub days_minmatch {
95116
my $self = shift;
96-
$Register{$self->id}{days_mm}
117+
$Register{$self->code}{days_mm}
97118
||= $self->lc_minmatch_hash($self->days);
98119
}
99120
*minmatch = \&days_minmatch;
@@ -104,10 +125,9 @@ sub _days_minmatch_pattern {
104125
}
105126
*minmatch_pattern = \&_days_minmatch_pattern;
106127

107-
108128
sub months_minmatch {
109129
my $self = shift;
110-
$Register{$self->id}{months_mm}
130+
$Register{$self->code}{months_mm}
111131
||= $self->lc_minmatch_hash($self->months);
112132
}
113133

@@ -118,14 +138,15 @@ sub _months_minmatch_pattern {
118138

119139
sub daynums {
120140
my $self = shift;
121-
my $id = $self->id;
122-
unless ($Register{$id}{daynum}) {
141+
my $code = $self->code;
142+
unless ($Register{$code}{daynum}) {
123143
my %daynum;
124144
my $days = $self->days;
125145
$daynum{$days->[$_]} = $_ foreach 0 .. $#$days;
126-
$Register{$id}{daynum} = \%daynum;
146+
$Register{$code}{daynum} = \%daynum;
127147
}
128-
$Register{$id}{daynum};
148+
wantarray ? %{$Register{$code}{daynum}}
149+
: $Register{$code}{daynum};
129150
}
130151

131152
sub _daymatch {
@@ -148,14 +169,15 @@ sub dayname { (shift->_daymatch(@_))[1] }
148169

149170
sub monthnums {
150171
my $self = shift;
151-
my $id = $self->id;
152-
unless ($Register{$id}{monthnum}) {
172+
my $code = $self->code;
173+
unless ($Register{$code}{monthnum}) {
153174
my %monthnum;
154175
my $months = $self->months;
155176
$monthnum{$months->[$_]} = $_ foreach 0 .. $#$months;
156-
$Register{$id}{monthnum} = \%monthnum;
177+
$Register{$code}{monthnum} = \%monthnum;
157178
}
158-
$Register{$id}{monthnum};
179+
wantarray ? %{$Register{$code}{monthnum}}
180+
: $Register{$code}{monthnum};
159181
}
160182

161183
sub _monthmatch {
@@ -181,8 +203,8 @@ sub monthname { (shift->_monthmatch(@_))[1] }
181203
sub locale_map {
182204
my $self = shift;
183205
my %map;
184-
foreach my $id ($self->locales) {
185-
$map{$id} = $self->locale->load($id)->name;
206+
foreach my $code ($self->locales) {
207+
$map{$code} = $self->locale->load($code)->name;
186208
}
187209
wantarray ? %map : \%map;
188210
}
@@ -263,17 +285,17 @@ HTML::CalendarMonth::Locale - Front end class for DateTime::Locale
263285
264286
use HTML::CalendarMonth::Locale;
265287
266-
my $loc = HTML::CalendarMonth::Locale->new( id => 'en_US' );
288+
my $loc = HTML::CalendarMonth::Locale->new( code => 'en-US' );
267289
268290
# list of days of the week for locale
269291
my @days = $loc->days;
270292
271293
# list of months of the year for locale
272294
my @months = $loc->months;
273295
274-
# the name of the current locale, as supplied the id parameter to
296+
# the name of the current locale, as supplied the code parameter to
275297
# new()
276-
my $locale_name = $loc->id;
298+
my $locale_name = $loc->code;
277299
278300
# the actual DateTime::Locale object
279301
my $loc = $loc->loc;
@@ -284,9 +306,9 @@ HTML::CalendarMonth::Locale - Front end class for DateTime::Locale
284306
285307
HTML::CalendarMonth utilizes the powerful locale capabilities of
286308
DateTime::Locale for rendering its calendars. The default locale is
287-
'en_US' but many others are available. To see this list, invoke the
309+
'en-US' but many others are available. To see this list, invoke the
288310
class method HTML::CalendarMonth::Locale->locales() which in turn
289-
invokes DateTime::Locale::ids().
311+
invokes DateTime::Locale::codes().
290312
291313
This module is mostly intended for internal usage within
292314
HTML::CalendarMonth, but some of its functionality may be of use for
@@ -302,9 +324,9 @@ Constructor. Takes the following parameters:
302324
303325
=over
304326
305-
=item id
327+
=item code
306328
307-
Locale id, e.g. 'en_US'.
329+
Locale code, e.g. 'en-US'.
308330
309331
=item full_days
310332
@@ -318,9 +340,9 @@ Default 1, use full months.
318340
319341
=back
320342
321-
=item id()
343+
=item code()
322344
323-
Returns the locale id used during object construction.
345+
Returns the locale code used during object construction.
324346
325347
=item locale()
326348
@@ -329,18 +351,18 @@ several class methods of specific interest. See L<DateTime::Locale>.
329351
330352
=item locale_map()
331353
332-
Returns a hash of all available locales, mapping their id to their
354+
Returns a hash of all available locales, mapping their code to their
333355
full name.
334356
335357
=item loc()
336358
337-
Accessor method for the DateTime::Locale instance as specified by C<id>.
359+
Accessor method for the DateTime::Locale instance as specified by C<code>.
338360
See L<DateTime::Locale>.
339361
340362
=item locales()
341363
342-
Lists all available locale ids. Equivalent to locale()->ids(), or
343-
DateTime::Locale->ids().
364+
Lists all available locale codes. Equivalent to locale()->codes(), or
365+
DateTime::Locale->codes().
344366
345367
=item days()
346368
@@ -430,12 +452,12 @@ Matthew P. Sisk, E<lt>F<sisk@mojotoad.com>E<gt>
430452
431453
=head1 COPYRIGHT
432454
433-
Copyright (c) 2010 Matthew P. Sisk. All rights reserved. All wrongs
455+
Copyright (c) 2015 Matthew P. Sisk. All rights reserved. All wrongs
434456
revenged. This program is free software; you can redistribute it and/or
435457
modify it under the same terms as Perl itself.
436458
437459
=head1 SEE ALSO
438460
439461
HTML::CalendarMonth(3), DateTime::Locale(3)
440462
441-
=for Pod::Coverage minmatch minmatch_pattern
463+
=for Pod::Coverage minmatch minmatch_pattern id

t/dat/i8n.dat

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,14 @@
1-
2010/03 ga_IE
1+
2010/03 ga-IE
22
<table class="hcm-table"><tr><td class="hcm-month-head" colspan="5">M&aacute;rta</td><td class="hcm-year-head" colspan="2">2010</td></tr><tr><td class="hcm-day-head">Domh</td><td class="hcm-day-head">Luan</td><td class="hcm-day-head">M&aacute;irt</td><td class="hcm-day-head">C&eacute;ad</td><td class="hcm-day-head">D&eacute;ar</td><td class="hcm-day-head">Aoine</td><td class="hcm-day-head">Sath</td></tr><tr><td></td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td></tr><tr><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td></tr><tr><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td></tr><tr><td>28</td><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td></tr></table>
3-
2010/03 es_MX
4-
<table class="hcm-table"><tr><td class="hcm-month-head" colspan="5">marzo</td><td class="hcm-year-head" colspan="2">2010</td></tr><tr><td class="hcm-day-head">lun</td><td class="hcm-day-head">mar</td><td class="hcm-day-head">mi&eacute;</td><td class="hcm-day-head">jue</td><td class="hcm-day-head">vie</td><td class="hcm-day-head">s&aacute;b</td><td class="hcm-day-head">dom</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td><td></td></tr></table>
5-
2010/03 fr_FR
3+
2010/03 es-MX
4+
<table class="hcm-table"><tr><td class="hcm-month-head" colspan=5>marzo</td><td class="hcm-year-head" colspan=2>2010</td></tr><tr><td class="hcm-day-head">dom.</td><td class="hcm-day-head">lun.</td><td class="hcm-day-head">mar.</td><td class="hcm-day-head">mi&eacute;.</td><td class="hcm-day-head">jue.</td><td class="hcm-day-head">vie.</td><td class="hcm-day-head">s&aacute;b.</td></tr><tr><td></td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td></tr><tr><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td></tr><tr><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td></tr><tr><td>28</td><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td></tr></table>
5+
2010/03 fr-FR
66
<table class="hcm-table"><tr><td class="hcm-month-head" colspan="5">mars</td><td class="hcm-year-head" colspan="2">2010</td></tr><tr><td class="hcm-day-head">lun.</td><td class="hcm-day-head">mar.</td><td class="hcm-day-head">mer.</td><td class="hcm-day-head">jeu.</td><td class="hcm-day-head">ven.</td><td class="hcm-day-head">sam.</td><td class="hcm-day-head">dim.</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td><td></td></tr></table>
7-
2010/03 de_DE
8-
<table class="hcm-table"><tr><td class="hcm-month-head" colspan="5">M&auml;rz</td><td class="hcm-year-head" colspan="2">2010</td></tr><tr><td class="hcm-day-head">Mo.</td><td class="hcm-day-head">Di.</td><td class="hcm-day-head">Mi.</td><td class="hcm-day-head">Do.</td><td class="hcm-day-head">Fr.</td><td class="hcm-day-head">Sa.</td><td class="hcm-day-head">So.</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td><td></td></tr></table>
9-
2010/03 ru_RU
10-
<table class="hcm-table"><tr><td class="hcm-month-head" colspan="5">&#x41C;&#x430;&#x440;&#x442;</td><td class="hcm-year-head" colspan="2">2010</td></tr><tr><td class="hcm-day-head">&#x41F;&#x43D;</td><td class="hcm-day-head">&#x412;&#x442;</td><td class="hcm-day-head">&#x421;&#x440;</td><td class="hcm-day-head">&#x427;&#x442;</td><td class="hcm-day-head">&#x41F;&#x442;</td><td class="hcm-day-head">&#x421;&#x431;</td><td class="hcm-day-head">&#x412;&#x441;</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td><td></td></tr></table>
11-
2010/03 pt_BR
7+
2010/03 de-DE
8+
<table class="hcm-table"><tr><td class="hcm-month-head" colspan=5>M&auml;rz</td><td class="hcm-year-head" colspan=2>2010</td></tr><tr><td class="hcm-day-head">Mo</td><td class="hcm-day-head">Di</td><td class="hcm-day-head">Mi</td><td class="hcm-day-head">Do</td><td class="hcm-day-head">Fr</td><td class="hcm-day-head">Sa</td><td class="hcm-day-head">So</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td><td></td></tr></table>
9+
2010/03 ru-RU
10+
<table class="hcm-table"><tr><td class="hcm-month-head" colspan=5>&#x43C;&#x430;&#x440;&#x442;</td><td class="hcm-year-head" colspan=2>2010</td></tr><tr><td class="hcm-day-head">&#x43F;&#x43D;</td><td class="hcm-day-head">&#x432;&#x442;</td><td class="hcm-day-head">&#x441;&#x440;</td><td class="hcm-day-head">&#x447;&#x442;</td><td class="hcm-day-head">&#x43F;&#x442;</td><td class="hcm-day-head">&#x441;&#x431;</td><td class="hcm-day-head">&#x432;&#x441;</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td><td></td></tr></table>
11+
2010/03 pt-BR
1212
<table class="hcm-table"><tr><td class="hcm-month-head" colspan="5">mar&ccedil;o</td><td class="hcm-year-head" colspan="2">2010</td></tr><tr><td class="hcm-day-head">seg</td><td class="hcm-day-head">ter</td><td class="hcm-day-head">qua</td><td class="hcm-day-head">qui</td><td class="hcm-day-head">sex</td><td class="hcm-day-head">s&aacute;b</td><td class="hcm-day-head">dom</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td><td></td></tr></table>
13-
2010/03 zu_ZA
14-
<table class="hcm-table"><tr><td class="hcm-month-head" colspan="5">uMashi</td><td class="hcm-year-head" colspan="2">2010</td></tr><tr><td class="hcm-day-head">Mso</td><td class="hcm-day-head">Bil</td><td class="hcm-day-head">Tha</td><td class="hcm-day-head">Sin</td><td class="hcm-day-head">Hla</td><td class="hcm-day-head">Mgq</td><td class="hcm-day-head">Son</td></tr><tr><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td><td>7</td></tr><tr><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td><td>14</td></tr><tr><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td><td>21</td></tr><tr><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td><td>28</td></tr><tr><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td><td></td></tr></table>
13+
2010/03 zu-ZA
14+
<table class="hcm-table"><tr><td class="hcm-month-head" colspan=5>Mashi</td><td class="hcm-year-head" colspan=2>2010</td></tr><tr><td class="hcm-day-head">Son</td><td class="hcm-day-head">Mso</td><td class="hcm-day-head">Bil</td><td class="hcm-day-head">Tha</td><td class="hcm-day-head">Sin</td><td class="hcm-day-head">Hla</td><td class="hcm-day-head">Mgq</td></tr><tr><td></td><td>1</td><td>2</td><td>3</td><td>4</td><td>5</td><td>6</td></tr><tr><td>7</td><td>8</td><td>9</td><td>10</td><td>11</td><td>12</td><td>13</td></tr><tr><td>14</td><td>15</td><td>16</td><td>17</td><td>18</td><td>19</td><td>20</td></tr><tr><td>21</td><td>22</td><td>23</td><td>24</td><td>25</td><td>26</td><td>27</td></tr><tr><td>28</td><td>29</td><td>30</td><td>31</td><td></td><td></td><td></td></tr></table>

0 commit comments

Comments
 (0)