Calendar-Plugin-Renderer

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

Revision history for Calendar::Plugin::Renderer

0.16  Sun Sep 15 20:25:00 2019
      - Moved author test scripts to xt/ subfolder.

0.15  Thu May 02 15:40:00 2019
      - Added test for Hebrew and Julian calendars.

0.14  Fri Nov 02 15:35:00 2018
      - Used namespace::autoclean instead.

0.13  Sat Feb 24 11:30:00 2018
      - Improved method exporting.

0.12  Fri Jan 06 12:00:00 2017
      - Added method validate_params() for <month> and <year>.

0.11  Wed Sep 14 10:30:00 2016
      - Added unit test scripts (t/meta-json.t and t/meta-yml.t).

0.10  Sat Jul 16 22:00:00 2016
      - Update pod document for method text_calendar().
      - Added key 'provides' to the Makefile.PL script as suggested by CPANTS.

0.09  Mon Jul 04 03:15:00 2016
      - Addressed issue raised in the CPAN Tester Report.
        http://www.cpantesters.org/cpan/report/c3d0dba4-3fc8-11e6-b825-5b09fd635119

0.08  Tue Jun 21 12:20:00 2016
      - Fixed 'consistent version' issue raised by CPANTS.

0.07  Sun Jun 19 05:15:00 2016
      - Added method text_calendar().
      - Updated method svg_calendar().
      - Made start index starts with 0 (Sun) for SVG format.
      - Refactored package Calendar::Plugin::Renderer::SVG.

0.06  Thu May 05 10:15:00 2016
      - Fixed max week row issue with regard to the Calendar::Hijri in particular.
      - Added test for every supported calendars.
      - Updated copyright year information.

0.05  Thu Dec 31 01:05:00 2015
      - Proposed fix for issue RT #110764.

0.04  Tue Dec 29 09:15:00 2015
      - Earlier attempt failed to fix the issue, giving another shot.

0.03  Tue Dec 29 02:00:00 2015
      - Attempted to fix the test failure reported by CPAN Testers.

MANIFEST  view on Meta::CPAN

README
lib/Calendar/Plugin/Renderer.pm
lib/Calendar/Plugin/Renderer/Util.pm
lib/Calendar/Plugin/Renderer/Text.pm
lib/Calendar/Plugin/Renderer/SVG.pm
lib/Calendar/Plugin/Renderer/SVG/Page.pm
lib/Calendar/Plugin/Renderer/SVG/Text.pm
lib/Calendar/Plugin/Renderer/SVG/Box.pm
lib/Calendar/Plugin/Renderer/SVG/Label.pm
t/00-load.t
t/calendar-plugin-renderer.t
t/bahai.xml
t/gregorian.xml
t/hebrew.xml
t/hijri.xml
t/julian.xml
t/persian.xml
t/saka.xml
t/fake-bahai.xml
t/fake-gregorian.xml
t/fake-hijri.xml

META.json  view on Meta::CPAN

{
   "abstract" : "Role to render calendar.",
   "author" : [
      "Mohammad S Anwar <mohammad.anwar@yahoo.com>"
   ],
   "dynamic_config" : 1,
   "generated_by" : "ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010",
   "license" : [
      "artistic_2"
   ],
   "meta-spec" : {
      "url" : "http://search.cpan.org/perldoc?CPAN::Meta::Spec",

META.yml  view on Meta::CPAN

---
abstract: 'Role to render calendar.'
author:
  - 'Mohammad S Anwar <mohammad.anwar@yahoo.com>'
build_requires:
  File::Temp: '0'
  Test::More: '0'
  XML::SemanticDiff: '0'
configure_requires:
  ExtUtils::MakeMaker: '0'
dynamic_config: 1
generated_by: 'ExtUtils::MakeMaker version 7.34, CPAN::Meta::Converter version 2.150010'

lib/Calendar/Plugin/Renderer.pm  view on Meta::CPAN

package Calendar::Plugin::Renderer;

$Calendar::Plugin::Renderer::VERSION   = '0.16';
$Calendar::Plugin::Renderer::AUTHORITY = 'cpan:MANWAR';

=head1 NAME

Calendar::Plugin::Renderer - Role to render calendar.

=head1 VERSION

Version 0.16

=cut

use 5.006;
use Data::Dumper;
use Term::ANSIColor::Markup;

use Calendar::Plugin::Renderer::Text;
use Calendar::Plugin::Renderer::SVG;

use Moo::Role;
use namespace::autoclean;

=head1 DESCRIPTION

Moo Role to render Calendar, currently in  SVG and Text format only. This role is
taken by the following calendars:

=over 4

=item * L<Calendar::Bahai>

=item * L<Calendar::Gregorian>

=item * L<Calendar::Hijri>

=item * L<Calendar::Persian>

lib/Calendar/Plugin/Renderer.pm  view on Meta::CPAN

    use Moo;
    use namespace::autoclean;
    with 'Calendar::Plugin::Renderer';

    package main;

    use strict; use warnings;
    use Cal;

    my $cal = Cal->new;
    print $cal->svg_calendar({
        start_index => 5,
        month_name  => 'January',
        days        => 31,
        year        => 2016 });

    print $cal->text_calendar({
        start_index => 5,
        month_name  => 'January',
        days        => 31,
        year        => 2016 });

=head1 METHODS

=head2 text_calendar(\%params)

Returns the color coded calendar as a scalar string.

Expected paramaeters are as below:

    +-------------+-------------------------------------------------------------+
    | Key         | Description                                                 |
    +-------------+-------------------------------------------------------------+
    | start_index | Index of first day of the month. (0-Sun,1-Mon etc)          |
    | month_name  | Calendar month.                                             |
    | days        | Days count in the month.                                    |
    | year        | Calendar year.                                              |
    | day_names   | Ref to a list of day name starting with Sunday. (Optional)  |
    +-------------+-------------------------------------------------------------+

=cut

sub text_calendar {
    my ($self, $params) = @_;

    unless (exists $params->{day_names}) {
        $params->{day_names} = [qw(Sun Mon Tue Wed Thu Fri Sat)];
    }

    my $text = Calendar::Plugin::Renderer::Text->new($params);

    my $line1 = $text->get_dashed_line;
    my $line2 = $text->get_month_header;
    my $line3 = $text->get_blocked_line;
    my $line4 = $text->get_day_header;
    my $empty = $text->get_empty_space;
    my $dates = $text->get_dates;

    my $calendar = join("\n", $line1, $line2, $line3, $line4, $line3, $empty.$dates)."\n";

    return Term::ANSIColor::Markup->colorize($calendar);
}

=head2 svg_calendar(\%params)

Returns the requested calendar month in SVG format.

Expected paramaeters are as below:

    +---------------+-----------------------------------------------------------+
    | Key           | Description                                               |
    +---------------+-----------------------------------------------------------+
    | start_index   | Index of first day of the month. (0-Sun,1-Mon etc)        |
    | month_name    | Calendar month.                                           |
    | days          | Days count in the month.                                  |
    | year          | Calendar year.                                            |
    | adjust_height | Adjust height of the rows in Calendar. (Optional)         |
    +---------------+-----------------------------------------------------------+

=cut

sub svg_calendar {
    my ($self, $params) = @_;

    my $svg = Calendar::Plugin::Renderer::SVG->new($params);
    $svg->process;

    return $svg->as_string;
}

=head2 validate_params($month, $year)

Validate given  C<$month>  and C<$year> as per the Calendar guidelines. C<$month>
can be "name" or "integer". If C<$month> is passed as "name"  then it converts it
it into its "integer" equivalent. Both parameters are optional. In  case they are
missing, it returns the current month and year of the selected calendar.

=cut

sub validate_params {
    my ($self, $month, $year) = @_;

    if (defined $month && defined $year) {
        $self->date->validate_month($month);
        $self->date->validate_year($year);

lib/Calendar/Plugin/Renderer.pm  view on Meta::CPAN

=head1 SEE ALSO

L<SVG::Calendar>

=head1 ACKNOWLEDGEMENT

Inspired by the package L<SVG::Calendar> so that it can be used as a plugin.

=head1 BUGS

Please report any bugs / feature requests to C<bug-calendar-plugin-renderer at rt.cpan.org>,
or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Plugin-Renderer>.
I will be notified, and then you'll automatically be notified of progress on your
bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Calendar::Plugin::Renderer

lib/Calendar/Plugin/Renderer/SVG.pm  view on Meta::CPAN

package Calendar::Plugin::Renderer::SVG;

$Calendar::Plugin::Renderer::SVG::VERSION   = '0.16';
$Calendar::Plugin::Renderer::SVG::AUTHORITY = 'cpan:MANWAR';

=head1 NAME

Calendar::Plugin::Renderer::SVG - Interface to render calendar in SVG format.

=head1 VERSION

Version 0.16

=cut

use 5.006;
use Data::Dumper;

lib/Calendar/Plugin/Renderer/SVG.pm  view on Meta::CPAN

    my $p_width  = sprintf("%d%s", $self->page->width,  $self->page->width_unit);
    my $view_box = sprintf("0 0 %d %d", $self->page->width, $self->page->height);

    my $svg = SVG->new(
        height   => $p_height,
        width    => $p_width,
        viewBox  => $view_box,
        -svg_version => '1.1',
        -pubid       => '-//W3C//DTD SVG 1.1//EN',
        -sysid       => 'http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd');
    my $calendar = $svg->group(id => 'calendar', label => "Calendar");

    my $month_label = $self->month_label;
    $calendar->text('id'    => "month",
                    'fill'  => 'blue',
                    'x'     => $month_label->x,
                    'y'     => $month_label->y,
                    'style' => $month_label->style)->cdata($month_label->text);

    my $year_label = $self->year_label;
    $calendar->text('id'    => "year",
                    'fill'  => 'blue',
                    'x'     => $year_label->x,
                    'y'     => $year_label->y,
                    'style' => $year_label->style)->cdata($year_label->text);

    my $boundary_box = $self->boundary_box;
    $calendar->rect('id'     => 'bounding_box',
                    'height' => $boundary_box->height - $self->adjust_height,
                    'width'  => $boundary_box->width - 14,
                    'x'      => $boundary_box->x + 7 + 7,
                    'y'      => $boundary_box->y,
                    'style'  => 'fill:none; stroke: blue; stroke-width: 0.5;');

    my $wdays = $self->wdays;
    foreach (0..6) {
        my $day = $calendar->tag('g',
                                 'id'           => "row0_col$_",
                                 'text-anchor'  => 'middle',
                                 'fill'         => 'none',
                                 'stroke'       => 'blue',
                                 'stroke-width' => '0.5');
        next unless defined $wdays->[$_];

        $day->rect('id'     => "box_row0_col$_",
                   'x'      => $wdays->[$_]->x,
                   'y'      => $wdays->[$_]->y,

lib/Calendar/Plugin/Renderer/SVG.pm  view on Meta::CPAN


    my $row      = $self->_row;
    my $days_box = $self->days_box;
    foreach my $r (1..$row) {
        foreach my $c (0..6) {
            my $g_id = sprintf("row%d_col%d"     , $r, $c);
            my $r_id = sprintf("box_row%d_col%d" , $r, $c);
            my $t_id = sprintf("text_row%d_col%d", $r, $c);
            next unless defined $days_box->[$r]->[$c];

            my $d = $calendar->tag('g',
                                   'id'           => "$g_id",
                                   'fill'         => 'none',
                                   'stroke'       => 'blue',
                                   'stroke-width' => '0.5');
            $d->rect('id'     => "$r_id",
                     'x'      => $days_box->[$r]->[$c]->x,
                     'y'      => $days_box->[$r]->[$c]->y,
                     'height' => $days_box->[$r]->[$c]->height,
                     'width'  => $days_box->[$r]->[$c]->width,
                     'fill'         => 'none',

lib/Calendar/Plugin/Renderer/SVG.pm  view on Meta::CPAN

=head1 AUTHOR

Mohammad S Anwar, C<< <mohammad.anwar at yahoo.com> >>

=head1 REPOSITORY

L<https://github.com/manwar/Calendar-Plugin-Renderer>

=head1 BUGS

Please report any bugs / feature requests to C<bug-calendar-plugin-renderer at rt.cpan.org>,
or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Plugin-Renderer>.
I will be notified, and then you'll automatically be notified of progress on your
bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Calendar::Plugin::Renderer::SVG

lib/Calendar/Plugin/Renderer/SVG/Box.pm  view on Meta::CPAN

package Calendar::Plugin::Renderer::SVG::Box;

$Calendar::Plugin::Renderer::SVG::Box::VERSION   = '0.16';
$Calendar::Plugin::Renderer::SVG::Box::AUTHORITY = 'cpan:MANWAR';

=head1 NAME

Calendar::Plugin::Renderer::SVG::Box - Interface to 'box' of calendar in SVG format.

=head1 VERSION

Version 0.16

=cut

use 5.006;
use Data::Dumper;

lib/Calendar/Plugin/Renderer/SVG/Box.pm  view on Meta::CPAN

=head1 AUTHOR

Mohammad S Anwar, C<< <mohammad.anwar at yahoo.com> >>

=head1 REPOSITORY

L<https://github.com/manwar/Calendar-Plugin-Renderer>

=head1 BUGS

Please report any bugs / feature requests to C<bug-calendar-plugin-renderer at rt.cpan.org>,
or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Plugin-Renderer>.
I will be notified, and then you'll automatically be notified of progress on your
bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Calendar::Plugin::Renderer::SVG::Box

lib/Calendar/Plugin/Renderer/SVG/Label.pm  view on Meta::CPAN

package Calendar::Plugin::Renderer::SVG::Label;

$Calendar::Plugin::Renderer::SVG::Label::VERSION   = '0.16';
$Calendar::Plugin::Renderer::SVG::Label::AUTHORITY = 'cpan:MANWAR';

=head1 NAME

Calendar::Plugin::Renderer::SVG::Label - Interface to 'label' of calendar in SVG format.

=head1 VERSION

Version 0.16

=cut

use 5.006;
use Data::Dumper;

lib/Calendar/Plugin/Renderer/SVG/Label.pm  view on Meta::CPAN

=head1 AUTHOR

Mohammad S Anwar, C<< <mohammad.anwar at yahoo.com> >>

=head1 REPOSITORY

L<https://github.com/manwar/Calendar-Plugin-Renderer>

=head1 BUGS

Please report any bugs / feature requests to C<bug-calendar-plugin-renderer at rt.cpan.org>,
or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Plugin-Renderer>.
I will be notified, and then you'll automatically be notified of progress on your
bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Calendar::Plugin::Renderer::SVG::Label

lib/Calendar/Plugin/Renderer/SVG/Page.pm  view on Meta::CPAN

package Calendar::Plugin::Renderer::SVG::Page;

$Calendar::Plugin::Renderer::SVG::Page::VERSION   = '0.16';
$Calendar::Plugin::Renderer::SVG::Page::AUTHORITY = 'cpan:MANWAR';

=head1 NAME

Calendar::Plugin::Renderer::SVG::Page - Interface to 'page' of calendar in SVG format.

=head1 VERSION

Version 0.16

=cut

use 5.006;
use Data::Dumper;

lib/Calendar/Plugin/Renderer/SVG/Page.pm  view on Meta::CPAN

=head1 AUTHOR

Mohammad S Anwar, C<< <mohammad.anwar at yahoo.com> >>

=head1 REPOSITORY

L<https://github.com/manwar/Calendar-Plugin-Renderer>

=head1 BUGS

Please report any bugs / feature requests to C<bug-calendar-plugin-renderer at rt.cpan.org>,
or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Plugin-Renderer>.
I will be notified, and then you'll automatically be notified of progress on your
bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Calendar::Plugin::Renderer::SVG::Page

lib/Calendar/Plugin/Renderer/SVG/Text.pm  view on Meta::CPAN

package Calendar::Plugin::Renderer::SVG::Text;

$Calendar::Plugin::Renderer::SVG::Text::VERSION   = '0.16';
$Calendar::Plugin::Renderer::SVG::Text::AUTHORITY = 'cpan:MANWAR';

=head1 NAME

Calendar::Plugin::Renderer::SVG::Text - Interface to 'text' of calendar in SVG format.

=head1 VERSION

Version 0.16

=cut

use 5.006;
use Data::Dumper;

lib/Calendar/Plugin/Renderer/SVG/Text.pm  view on Meta::CPAN

=head1 AUTHOR

Mohammad S Anwar, C<< <mohammad.anwar at yahoo.com> >>

=head1 REPOSITORY

L<https://github.com/manwar/Calendar-Plugin-Renderer>

=head1 BUGS

Please report any bugs / feature requests to C<bug-calendar-plugin-renderer at rt.cpan.org>,
or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Plugin-Renderer>.
I will be notified, and then you'll automatically be notified of progress on your
bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Calendar::Plugin::Renderer::SVG::Text

lib/Calendar/Plugin/Renderer/Text.pm  view on Meta::CPAN

package Calendar::Plugin::Renderer::Text;

$Calendar::Plugin::Renderer::Text::VERSION   = '0.16';
$Calendar::Plugin::Renderer::Text::AUTHORITY = 'cpan:MANWAR';

=head1 NAME

Calendar::Plugin::Renderer::Text - Interface to render calendar in text format.

=head1 VERSION

Version 0.16

=cut

use 5.006;
use Data::Dumper;

lib/Calendar/Plugin/Renderer/Text.pm  view on Meta::CPAN

has 'day_names'   => (is => 'ro', required => 1);

has 'max_days_name' => (is => 'rw');
has 'line_size'     => (is => 'rw');
has 'f'             => (is => 'rw');
has 's'             => (is => 'rw');
has 'month_head'    => (is => 'rw');

=head1 DESCRIPTION

Interface to render calendar in text format.

=head1 CONSTRUCTOR

It expects one parameter as a hash ref with keys mentioned in the below table.

    +-------------+-------------------------------------------------------------+
    | Key         | Description                                                 |
    +-------------+-------------------------------------------------------------+
    | start_index | Index (0-6) for the first day of the month, 0 for Sunday.   |
    | month_name  | Name of the given month.                                    |

lib/Calendar/Plugin/Renderer/Text.pm  view on Meta::CPAN

=head1 AUTHOR

Mohammad S Anwar, C<< <mohammad.anwar at yahoo.com> >>

=head1 REPOSITORY

L<https://github.com/manwar/Calendar-Plugin-Renderer>

=head1 BUGS

Please report any bugs / feature requests to C<bug-calendar-plugin-renderer at rt.cpan.org>,
or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Plugin-Renderer>.
I will be notified, and then you'll automatically be notified of progress on your
bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Calendar::Plugin::Renderer::Text

lib/Calendar/Plugin/Renderer/Util.pm  view on Meta::CPAN

=head1 AUTHOR

Mohammad S Anwar, C<< <mohammad.anwar at yahoo.com> >>

=head1 REPOSITORY

L<https://github.com/manwar/Calendar-Plugin-Renderer>

=head1 BUGS

Please report any bugs / feature requests to C<bug-calendar-plugin-renderer at rt.cpan.org>,
or through the web interface at L<http://rt.cpan.org/NoAuth/ReportBug.html?Queue=Calendar-Plugin-Renderer>.
I will be notified, and then you'll automatically be notified of progress on your
bug as I make changes.

=head1 SUPPORT

You can find documentation for this module with the perldoc command.

    perldoc Calendar::Plugin::Renderer::Util

t/bahai.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">Baha</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">172</text>
		<rect height="97.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/calendar-plugin-renderer.t  view on Meta::CPAN

#!/usr/bin/perl

package T;

use File::Temp qw(tempfile tempdir);
use Moo;
use namespace::autoclean;
with 'Calendar::Plugin::Renderer';

sub calendar_bahai {
    my ($self) = @_;

    # Month: 1, Year: 172
    return save($self->svg_calendar(
        {
            adjust_height => 21,
            start_index   => 6,
            month_name    => 'Baha',
            days          => 19,
            year          => 172
        }));
}

sub calendar_saka {
    my ($self) = @_;

    # Month: 1, Year: 1937
    return save($self->svg_calendar(
        {
            start_index => 0,
            month_name  => 'Chaitra',
            days        => 30,
            year        => 1937
        }));
}

sub calendar_hijri {
    my ($self) = @_;

    # Month: 7, Year: 1437
    return save($self->svg_calendar(
        {
            start_index => 6,
            month_name  => 'Rajab',
            days        => 30,
            year        => 1437
        }));
}

sub calendar_persian {
    my ($self) = @_;

    # Month: 2, Year: 1395
    return save($self->svg_calendar(
        {
            start_index => 3,
            month_name  => 'Ordibehesht',
            days        => 31,
            year        => 1395
        }));
}

sub calendar_gregorian {
    my ($self) = @_;

    # Month: 5, Year: 2016
    return save($self->svg_calendar(
        {
            start_index => 0,
            days        => 31,
            month_name  => 'May',
            year        => 2016
        }));
}

sub calendar_julian {
    my ($self) = @_;

    # Month: 4, Year: 2019
    return save($self->svg_calendar(
        {
            start_index => 0,
            days        => 30,
            month_name  => 'April',
            year        => 2019
        }));
}

sub calendar_hebrew {
    my ($self) = @_;

    # Month: 1, Year: 5779
    return save($self->svg_calendar(
        {
            start_index => 4,
            days        => 30,
            month_name  => 'Nisan',
            year        => 5779
        }));
}

sub save {
    my ($calendar) = @_;

    my $dir = tempdir(CLEANUP => 1);
    my ($fh, $filename) = tempfile(DIR => $dir);
    print $fh $calendar;
    close $fh;

    return $filename;
}

package main;

use 5.006;
use strict; use warnings;
use Test::More;
use XML::SemanticDiff;

my $xml = XML::SemanticDiff->new;
my $T   = T->new;
my $got_calendar_bahai     = $T->calendar_bahai;
my $got_calendar_gregorian = $T->calendar_gregorian;
my $got_calendar_hijri     = $T->calendar_hijri;
my $got_calendar_persian   = $T->calendar_persian;
my $got_calendar_saka      = $T->calendar_saka;
my $got_calendar_julian    = $T->calendar_julian;
my $got_calendar_hebrew    = $T->calendar_hebrew;

is(is_same_calendar($xml, $got_calendar_bahai,     't/bahai.xml'    ), 1, 'Bahai Calendar'    );
is(is_same_calendar($xml, $got_calendar_gregorian, 't/gregorian.xml'), 1, 'Gregorian Calendar');
is(is_same_calendar($xml, $got_calendar_hijri,     't/hijri.xml'    ), 1, 'Hijri Calendar'    );
is(is_same_calendar($xml, $got_calendar_hebrew,    't/hebrew.xml'   ), 1, 'Hebrew Calendar'     );
is(is_same_calendar($xml, $got_calendar_julian,    't/julian.xml'   ), 1, 'Julian Calendar'     );
is(is_same_calendar($xml, $got_calendar_persian,   't/persian.xml'  ), 1, 'Persian Calendar'  );
is(is_same_calendar($xml, $got_calendar_saka,      't/saka.xml'     ), 1, 'Saka Calendar'     );

is(is_same_calendar($xml, $got_calendar_bahai,     't/fake-bahai.xml'    ), 0, 'Fake Bahai Calendar'    );
is(is_same_calendar($xml, $got_calendar_gregorian, 't/fake-gregorian.xml'), 0, 'Fake Gregorian Calendar');
is(is_same_calendar($xml, $got_calendar_hijri,     't/fake-hijri.xml'    ), 0, 'Fake Hijri Calendar'    );
is(is_same_calendar($xml, $got_calendar_hebrew,    't/fake-hebrew.xml'   ), 0, 'Fake Hebrew Calendar'   );
is(is_same_calendar($xml, $got_calendar_julian,    't/fake-julian.xml'   ), 0, 'Fake Julian Calendar'   );
is(is_same_calendar($xml, $got_calendar_persian,   't/fake-persian.xml'  ), 0, 'Fake Persian Calendar'  );
is(is_same_calendar($xml, $got_calendar_saka,      't/fake-saka.xml'     ), 0, 'Fake Saka Calendar'     );

done_testing();

# PRIVATE METHOD

sub is_same_calendar {
    my ($xml, $got, $expected) = @_;

    my @changes = $xml->compare($got, $expected);
    return (scalar(@changes))?(0):(1);
}

t/fake-bahai.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" version="1.1" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1907692307692" x="22.2411764705882" y="154.44">FakeBaha</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1907692307692" x="201.6" y="154.44">172</text>
		<rect height="97.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.38" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.09538461538462" id="box_row0_col0" width="22.7294117647059" x="24.0264705882353" y="161.895897435897" />
			<text adjust="spacing" font-size="8.18584615384615" id="text_row0_col0" length="18.1835294117647" stroke="red" text-anchor="middle" x="35.3911764705882" y="169.172205128205">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.09538461538462" id="box_row0_col1" width="22.7294117647059" x="49.5970588235294" y="161.895897435897" />
			<text adjust="spacing" font-size="8.18584615384615" id="text_row0_col1" length="18.1835294117647" stroke="red" text-anchor="middle" x="60.9617647058823" y="169.172205128205">Mon</text>

t/fake-gregorian.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">Max</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">2000</text>
		<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/fake-hebrew.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 400" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g id="calendar" label="Calendar">
        <text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">Nisan</text>
        <text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">5779</text>
        <rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
        <g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
        	<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
        	<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
        </g>
        <g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
        	<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
        	<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/fake-hijri.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 15.6320" x="22.2412" y="154.4400">Rajab</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 15.6320" x="201.6000" y="154.4400">1400</text>
		<rect height="117.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="7.8160" id="box_row0_col0" width="22.7294" x="24.0265" y="161.4966" />
			<text adjust="spacing" font-size="7.0344" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="167.7494">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="7.8160" id="box_row0_col1" width="22.7294" x="49.5971" y="161.4966" />
			<text adjust="spacing" font-size="7.0344" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="167.7494">Mon</text>

t/fake-julian.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 400" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
    <g id="calendar" label="Calendar">
    	<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">April</text>
    	<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">2019</text>
    	<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
    	<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
    		<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
    		<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
    	</g>
    	<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
    		<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
    		<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/fake-persian.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">Ordibehesht</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">1300</text>
		<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/fake-saka.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" version="1.1" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1907692307692" x="22.2411764705882" y="154.44">FakeChaitra</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1907692307692" x="201.6" y="154.44">1937</text>
		<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.38" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.09538461538462" id="box_row0_col0" width="22.7294117647059" x="24.0264705882353" y="161.895897435897" />
			<text adjust="spacing" font-size="8.18584615384615" id="text_row0_col0" length="18.1835294117647" stroke="red" text-anchor="middle" x="35.3911764705882" y="169.172205128205">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.09538461538462" id="box_row0_col1" width="22.7294117647059" x="49.5970588235294" y="161.895897435897" />
			<text adjust="spacing" font-size="8.18584615384615" id="text_row0_col1" length="18.1835294117647" stroke="red" text-anchor="middle" x="60.9617647058823" y="169.172205128205">Mon</text>

t/gregorian.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">May</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">2016</text>
		<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/hebrew.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">Nisan</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">5779</text>
		<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/hijri.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 15.6320" x="22.2412" y="154.4400">Rajab</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 15.6320" x="201.6000" y="154.4400">1437</text>
		<rect height="117.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="7.8160" id="box_row0_col0" width="22.7294" x="24.0265" y="161.4966" />
			<text adjust="spacing" font-size="7.0344" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="167.7494">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="7.8160" id="box_row0_col1" width="22.7294" x="49.5971" y="161.4966" />
			<text adjust="spacing" font-size="7.0344" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="167.7494">Mon</text>

t/julian.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">April</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">2019</text>
		<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/persian.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">Ordibehesht</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">1395</text>
		<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>

t/saka.xml  view on Meta::CPAN

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg height="297mm" viewBox="0 0 210 297" width="210mm" xmlns="http://www.w3.org/2000/svg" xmlns:svg="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink">
	<g id="calendar" label="Calendar">
		<text fill="blue" id="month" style="font-size: 18.1908" x="22.2412" y="154.4400">Chaitra</text>
		<text fill="blue" id="year" style="text-align: end; text-anchor: end; font-size: 18.1908" x="201.6000" y="154.4400">1937</text>
		<rect height="118.24" id="bounding_box" style="fill:none; stroke: blue; stroke-width: 0.5;" width="179.2" x="22.4" y="160.3800" />
		<g fill="none" id="row0_col0" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col0" width="22.7294" x="24.0265" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col0" length="18.1835" stroke="red" text-anchor="middle" x="35.3912" y="169.1722">Sun</text>
		</g>
		<g fill="none" id="row0_col1" stroke="blue" stroke-width="0.5" text-anchor="middle">
			<rect height="9.0954" id="box_row0_col1" width="22.7294" x="49.5971" y="161.8959" />
			<text adjust="spacing" font-size="8.1859" id="text_row0_col1" length="18.1835" stroke="red" text-anchor="middle" x="60.9618" y="169.1722">Mon</text>



( run in 1.077 second using v1.01-cache-2.11-cpan-5dc5da66d9d )