* src/plugins/Calendar.py: 0000858: Patch for calendar enhancements and new Birthday Report
* src/plugins/holidays.xml: add holidays for France svn: r7969
This commit is contained in:
		@@ -1,6 +1,9 @@
 | 
			
		||||
2007-01-24  Douglas Blank  <dblank@cs.brynmawr.edu>
 | 
			
		||||
	* src/docgen/PdfDoc.py: 0000870: docgen/PdfDoc.py offset error, 
 | 
			
		||||
	  and missing italics
 | 
			
		||||
	* src/plugins/Calendar.py: 0000858: Patch for calendar enhancements 
 | 
			
		||||
	  and new Birthday Report
 | 
			
		||||
	* src/plugins/holidays.xml: add holidays for France
 | 
			
		||||
 | 
			
		||||
2007-01-23  Don Allingham  <don@gramps-project.org>
 | 
			
		||||
	* src/DataViews/_MediaView.py: add view option
 | 
			
		||||
 
 | 
			
		||||
@@ -201,40 +201,41 @@ class Calendar(Report):
 | 
			
		||||
        width = self.doc.get_usable_width()
 | 
			
		||||
        height = self.doc.get_usable_height()
 | 
			
		||||
        header = self.doc.tmargin
 | 
			
		||||
        self.draw_rectangle("border", 0, 0, width, height)
 | 
			
		||||
        self.doc.draw_bar("title", 0, 0, width, header)
 | 
			
		||||
        self.doc.draw_line("border", 0, header, width, header)
 | 
			
		||||
        self.draw_rectangle("CAL-Border", 0, 0, width, height)
 | 
			
		||||
        self.doc.draw_bar("CAL-Title", 0, 0, width, header)
 | 
			
		||||
        self.doc.draw_line("CAL-Border", 0, header, width, header)
 | 
			
		||||
        year = self["year"]
 | 
			
		||||
        title = "%s %d" % (GrampsLocale.long_months[month], year)
 | 
			
		||||
        font_height = pt2cm(1.25 * self["title"].get_size())
 | 
			
		||||
        self.doc.center_text("title", title, width/2, font_height + self["offset"]) # 1.0
 | 
			
		||||
        font_height = pt2cm(self["CAL-Title"].get_size())
 | 
			
		||||
        self.doc.center_text("CAL-Title", title, width/2, font_height * 0.25)
 | 
			
		||||
        cell_width = width / 7
 | 
			
		||||
        cell_height = (height - header)/ 6
 | 
			
		||||
        current_date = datetime.date(year, month, 1)
 | 
			
		||||
        spacing = pt2cm(1.25 * self["text"].get_size()) # 158
 | 
			
		||||
        spacing = pt2cm(1.25 * self["CAL-Text"].get_size()) # 158
 | 
			
		||||
        if current_date.isoweekday() != 7: # start dow here is 7, sunday
 | 
			
		||||
            current_ord = current_date.toordinal() - current_date.isoweekday()
 | 
			
		||||
        else:
 | 
			
		||||
            current_ord = current_date.toordinal()
 | 
			
		||||
        for day_col in range(7):
 | 
			
		||||
            self.doc.center_text("daynames", 
 | 
			
		||||
                                 GrampsLocale.long_days[day_col+1], # global
 | 
			
		||||
            font_height = pt2cm(self["CAL-Daynames"].get_size())
 | 
			
		||||
            self.doc.center_text("CAL-Daynames", 
 | 
			
		||||
                                 GrampsLocale.long_days[day_col+1],
 | 
			
		||||
                                 day_col * cell_width + cell_width/2,
 | 
			
		||||
                                 header - font_height/3.0 + self["offset"]) # .35 
 | 
			
		||||
                                 header - font_height * 1.5)
 | 
			
		||||
        for week_row in range(6):
 | 
			
		||||
            something_this_week = 0
 | 
			
		||||
            for day_col in range(7):
 | 
			
		||||
                thisday = current_date.fromordinal(current_ord)
 | 
			
		||||
                if thisday.month == month:
 | 
			
		||||
                    something_this_week = 1
 | 
			
		||||
                    self.draw_rectangle("border", day_col * cell_width,
 | 
			
		||||
                    self.draw_rectangle("CAL-Border", day_col * cell_width,
 | 
			
		||||
                                        header + week_row * cell_height,
 | 
			
		||||
                                        (day_col + 1) * cell_width,
 | 
			
		||||
                                        header + (week_row + 1) * cell_height)
 | 
			
		||||
                    last_edge = (day_col + 1) * cell_width
 | 
			
		||||
                    self.doc.center_text("numbers", str(thisday.day),
 | 
			
		||||
                    self.doc.center_text("CAL-Numbers", str(thisday.day),
 | 
			
		||||
                                         day_col * cell_width + cell_width/2,
 | 
			
		||||
                                         header + week_row * cell_height + .5 + self["offset"])
 | 
			
		||||
                                         header + week_row * cell_height)
 | 
			
		||||
                    list = self.calendar.get(month, {}).get(thisday.day, [])
 | 
			
		||||
                    position = 0.0 
 | 
			
		||||
                    for p in list:
 | 
			
		||||
@@ -242,17 +243,17 @@ class Calendar(Report):
 | 
			
		||||
                        position += (lines  * spacing)
 | 
			
		||||
                        current = 0
 | 
			
		||||
                        for line in p.split("\n"):
 | 
			
		||||
                            self.doc.write_at("text", line, 
 | 
			
		||||
                            self.doc.draw_text("CAL-Text", line, 
 | 
			
		||||
                                              day_col * cell_width + 0.1,
 | 
			
		||||
                                              header + (week_row + 1) * cell_height - position + (current * spacing) - 0.1)
 | 
			
		||||
                            current += 1
 | 
			
		||||
                current_ord += 1
 | 
			
		||||
        if not something_this_week:
 | 
			
		||||
            last_edge = 0
 | 
			
		||||
        font_height = pt2cm(1.25 * self["text1style"].get_size())
 | 
			
		||||
        self.doc.center_text("text1style", self["text1"], last_edge + (width - last_edge)/2, height - font_height * 3 + self["offset"]) # - 1.5
 | 
			
		||||
        self.doc.center_text("text2style", self["text2"], last_edge + (width - last_edge)/2, height - font_height * 2 + self["offset"]) # - 0.78
 | 
			
		||||
        self.doc.center_text("text3style", self["text3"], last_edge + (width - last_edge)/2, height - font_height * 1 + self["offset"]) # - 0.30
 | 
			
		||||
        font_height = pt2cm(1.5 * self["CAL-Text1style"].get_size())
 | 
			
		||||
        self.doc.center_text("CAL-Text1style", self["text1"], last_edge + (width - last_edge)/2, height - font_height * 3) 
 | 
			
		||||
        self.doc.center_text("CAL-Text2style", self["text2"], last_edge + (width - last_edge)/2, height - font_height * 2) 
 | 
			
		||||
        self.doc.center_text("CAL-Text3style", self["text3"], last_edge + (width - last_edge)/2, height - font_height * 1) 
 | 
			
		||||
        self.doc.end_page()
 | 
			
		||||
 | 
			
		||||
    def collect_data(self):
 | 
			
		||||
@@ -338,28 +339,26 @@ class CalendarReport(Calendar):
 | 
			
		||||
        # get data from database:
 | 
			
		||||
        self.collect_data()
 | 
			
		||||
        # generate the report:
 | 
			
		||||
        self.doc.start_page()
 | 
			
		||||
        self.doc.start_paragraph('title') 
 | 
			
		||||
        self.doc.start_paragraph('BIR-Title') 
 | 
			
		||||
        self.doc.write_text(str(self["titletext"]) + ": " + str(self["year"]))
 | 
			
		||||
        self.doc.end_paragraph()
 | 
			
		||||
        if self["text1"].strip() != "":
 | 
			
		||||
            self.doc.start_paragraph('text1style')
 | 
			
		||||
            self.doc.start_paragraph('BIR-Text1style')
 | 
			
		||||
            self.doc.write_text(str(self["text1"]))
 | 
			
		||||
            self.doc.end_paragraph()
 | 
			
		||||
        if self["text2"].strip() != "":
 | 
			
		||||
            self.doc.start_paragraph('text2style')
 | 
			
		||||
            self.doc.start_paragraph('BIR-Text2style')
 | 
			
		||||
            self.doc.write_text(str(self["text2"]))
 | 
			
		||||
            self.doc.end_paragraph()
 | 
			
		||||
        if self["text3"].strip() != "":
 | 
			
		||||
            self.doc.start_paragraph('text3style')
 | 
			
		||||
            self.doc.start_paragraph('BIR-Text3style')
 | 
			
		||||
            self.doc.write_text(str(self["text3"]))
 | 
			
		||||
            self.doc.end_paragraph()
 | 
			
		||||
        for month in range(1, 13):
 | 
			
		||||
            self.print_page(month)
 | 
			
		||||
        self.doc.end_page()
 | 
			
		||||
    def print_page(self, month):
 | 
			
		||||
        year = self["year"]
 | 
			
		||||
        self.doc.start_paragraph('monthstyle')
 | 
			
		||||
        self.doc.start_paragraph('BIR-Monthstyle')
 | 
			
		||||
        self.doc.write_text("%s %d" % (GrampsLocale.long_months[month], year))
 | 
			
		||||
        self.doc.end_paragraph()
 | 
			
		||||
        current_date = datetime.date(year, month, 1)
 | 
			
		||||
@@ -372,11 +371,11 @@ class CalendarReport(Calendar):
 | 
			
		||||
                for p in list:
 | 
			
		||||
                    p = p.replace("\n", " ")
 | 
			
		||||
                    if thisday not in started_day:
 | 
			
		||||
                        self.doc.start_paragraph("daystyle")
 | 
			
		||||
                        self.doc.write_text("%s %s\n" % (GrampsLocale.long_months[month], str(thisday.day)))
 | 
			
		||||
                        self.doc.start_paragraph("BIR-Daystyle")
 | 
			
		||||
                        self.doc.write_text("%s %s" % (GrampsLocale.long_months[month], str(thisday.day)))
 | 
			
		||||
                        self.doc.end_paragraph()
 | 
			
		||||
                        started_day[thisday] = 1
 | 
			
		||||
                    self.doc.start_paragraph("datastyle")
 | 
			
		||||
                    self.doc.start_paragraph("BIR-Datastyle")
 | 
			
		||||
                    self.doc.write_text(p)
 | 
			
		||||
                    self.doc.end_paragraph()
 | 
			
		||||
            current_ord += 1
 | 
			
		||||
@@ -472,12 +471,8 @@ class SelectionWidget(Widget):
 | 
			
		||||
        cell = gtk.CellRendererText()
 | 
			
		||||
        obj[keyword].pack_start(cell,True)
 | 
			
		||||
        obj[keyword].add_attribute(cell,'text',0)
 | 
			
		||||
        #index = 0
 | 
			
		||||
        for item in self["options"]:
 | 
			
		||||
            store.append(row=[item[2]])
 | 
			
		||||
            #if item[0] == default:
 | 
			
		||||
            #    obj[keyword].set_active(index)
 | 
			
		||||
            #index = index + 1
 | 
			
		||||
        obj[keyword].set_active(self.option_object[keyword])
 | 
			
		||||
        if self["frame"] != None:
 | 
			
		||||
            dialog.add_frame_option(self["frame"], self["label"], obj[keyword]) # 4th is help
 | 
			
		||||
@@ -563,7 +558,10 @@ class StyleWidget(Widget):
 | 
			
		||||
        "bold"      : 0,
 | 
			
		||||
        "italics"   : 0,
 | 
			
		||||
        "type_face" : BaseDoc.FONT_SERIF,
 | 
			
		||||
        "fill_color": None,
 | 
			
		||||
        "fill_color": (0xFF,0xFF, 0xFF),
 | 
			
		||||
        "borders"   : False,
 | 
			
		||||
        "justified" : "left",
 | 
			
		||||
        "indent"    : 0.0,
 | 
			
		||||
        }
 | 
			
		||||
    def make_default_style(self, default_style):
 | 
			
		||||
        f = BaseDoc.FontStyle()
 | 
			
		||||
@@ -574,14 +572,34 @@ class StyleWidget(Widget):
 | 
			
		||||
        p = BaseDoc.ParagraphStyle()
 | 
			
		||||
        p.set_font(f)
 | 
			
		||||
        p.set_description(self["label"])
 | 
			
		||||
        default_style.add_style(self["name"],p)
 | 
			
		||||
        p.set(first_indent=self["indent"])
 | 
			
		||||
        if self["justified"] == "left":
 | 
			
		||||
            p.set_alignment(BaseDoc.PARA_ALIGN_LEFT)       
 | 
			
		||||
        elif self["justified"] == "right":
 | 
			
		||||
            p.set_alignment(BaseDoc.PARA_ALIGN_RIGHT)       
 | 
			
		||||
        elif self["justified"] == "center":
 | 
			
		||||
            p.set_alignment(BaseDoc.PARA_ALIGN_CENTER)       
 | 
			
		||||
        if self["borders"]:
 | 
			
		||||
            p.set_top_border(True)
 | 
			
		||||
            p.set_left_border(True)
 | 
			
		||||
            p.set_bottom_border(True)
 | 
			
		||||
            p.set_right_border(True)
 | 
			
		||||
        else:
 | 
			
		||||
            p.set_top_border(False)
 | 
			
		||||
            p.set_left_border(False)
 | 
			
		||||
            p.set_bottom_border(False)
 | 
			
		||||
            p.set_right_border(False)
 | 
			
		||||
        default_style.add_style(self["name"], p)
 | 
			
		||||
    def define_graphics_style(self, document):
 | 
			
		||||
        g = BaseDoc.GraphicsStyle()
 | 
			
		||||
        g.set_paragraph_style(self["name"])
 | 
			
		||||
        if self["fill_color"]:
 | 
			
		||||
            g.set_fill_color(self["fill_color"])
 | 
			
		||||
        g.set_fill_color(self["fill_color"])
 | 
			
		||||
        if self["borders"]:
 | 
			
		||||
            g.set_line_width(1) 
 | 
			
		||||
        else:
 | 
			
		||||
            g.set_line_width(0) 
 | 
			
		||||
        # FIXME: add all other graphics items (color, etc) here
 | 
			
		||||
        document.add_draw_style(self["name"],g)
 | 
			
		||||
        document.add_draw_style(self["name"], g)
 | 
			
		||||
class FilterWidget(Widget):
 | 
			
		||||
    """
 | 
			
		||||
    A filter widget. This doesn't have the GTK code here, but should.
 | 
			
		||||
@@ -751,15 +769,8 @@ class CalendarOptions(NewReportOptions):
 | 
			
		||||
                        help = "Include holidays",
 | 
			
		||||
                        valid_text = "Select to include holidays",
 | 
			
		||||
                        ),
 | 
			
		||||
            NumberWidget(self, label = _("Offset"),
 | 
			
		||||
                        name  = "offset",
 | 
			
		||||
                        value = -0.5,
 | 
			
		||||
                        help  = "Distance to move text on page",
 | 
			
		||||
                        valid_text = "Any number",
 | 
			
		||||
                        frame = "Text Options"
 | 
			
		||||
                        ),                       
 | 
			
		||||
            StyleWidget(self, label = _('Title text and background color.'),
 | 
			
		||||
                        name = "title",
 | 
			
		||||
                        name = "CAL-Title",
 | 
			
		||||
                        size = 20,
 | 
			
		||||
                        italics = 1,
 | 
			
		||||
                        bold = 1,
 | 
			
		||||
@@ -767,38 +778,40 @@ class CalendarOptions(NewReportOptions):
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Border lines of calendar boxes.'),
 | 
			
		||||
                        name = "border",
 | 
			
		||||
                        name = "CAL-Border",
 | 
			
		||||
                        borders = True,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Calendar day numbers.'),
 | 
			
		||||
                        name = "numbers",
 | 
			
		||||
                        name = "CAL-Numbers",
 | 
			
		||||
                        size = 13,
 | 
			
		||||
                        bold = 1,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Daily text display.'),
 | 
			
		||||
                        name = "text",
 | 
			
		||||
                        name = "CAL-Text",
 | 
			
		||||
                        size = 9,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Days of the week text.'),
 | 
			
		||||
                        name = "daynames",
 | 
			
		||||
                        name = "CAL-Daynames",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        italics = 1,
 | 
			
		||||
                        bold = 1,
 | 
			
		||||
                        fill_color = (0xEA,0xEA,0xEA),
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Text at bottom, line 1.'),
 | 
			
		||||
                        name = "text1style",
 | 
			
		||||
                        name = "CAL-Text1style",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Text at bottom, line 2.'),
 | 
			
		||||
                        name = "text2style",
 | 
			
		||||
                        name = "CAL-Text2style",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Text at bottom, line 3.'),
 | 
			
		||||
                        name = "text3style",
 | 
			
		||||
                        name = "CAL-Text3style",
 | 
			
		||||
                        size = 9,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        ),
 | 
			
		||||
@@ -885,43 +898,49 @@ class CalendarReportOptions(NewReportOptions):
 | 
			
		||||
                        valid_text = "Select to include holidays",
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Title text style'),
 | 
			
		||||
                        name = "title",
 | 
			
		||||
                        name = "BIR-Title",
 | 
			
		||||
                        size = 14,
 | 
			
		||||
                        bold = 1,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        justified = "center",
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Data text style'),
 | 
			
		||||
                        name = "datastyle",
 | 
			
		||||
                        name = "BIR-Datastyle",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        indent = 1.0,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Month text style'),
 | 
			
		||||
                        name = "monthstyle",
 | 
			
		||||
                        name = "BIR-Monthstyle",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        bold = 1,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Day text style'),
 | 
			
		||||
                        name = "daystyle",
 | 
			
		||||
                        name = "BIR-Daystyle",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        bold = 1,
 | 
			
		||||
                        italics = 1,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        indent = .5,
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Extra text style, line 1.'),
 | 
			
		||||
                        name = "text1style",
 | 
			
		||||
                        name = "BIR-Text1style",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        justified = "center",
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Extra text style, line 2.'),
 | 
			
		||||
                        name = "text2style",
 | 
			
		||||
                        name = "BIR-Text2style",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        justified = "center",
 | 
			
		||||
                        ),
 | 
			
		||||
            StyleWidget(self, label = _('Extra text style, line 3.'),
 | 
			
		||||
                        name = "text3style",
 | 
			
		||||
                        name = "BIR-Text3style",
 | 
			
		||||
                        size = 12,
 | 
			
		||||
                        type_face = BaseDoc.FONT_SERIF,
 | 
			
		||||
                        justified = "center",
 | 
			
		||||
                        ),
 | 
			
		||||
            ]
 | 
			
		||||
 | 
			
		||||
@@ -1154,5 +1173,4 @@ register_report(
 | 
			
		||||
    author_name = "Douglas S. Blank",
 | 
			
		||||
    author_email = "dblank@cs.brynmawr.edu",
 | 
			
		||||
    description = _("Produces a report of birthdays and anniversaries"),
 | 
			
		||||
    unsupported = True,
 | 
			
		||||
    )
 | 
			
		||||
 
 | 
			
		||||
@@ -116,4 +116,37 @@
 | 
			
		||||
    <date name="Chinese New Year" value="2006/1/29" type="national" />
 | 
			
		||||
    <date name="Card Night" value="*/-1/thu/*" type="personal" />
 | 
			
		||||
  </country>
 | 
			
		||||
  <country name="FR">
 | 
			
		||||
    <date name="Jour de l'an" value="*/1/1" type="national" />
 | 
			
		||||
    <date name="Fête du travail" value="*/5/1" type="national" />
 | 
			
		||||
    <date name="Victoire 1945" value="*/5/8" type="national" />
 | 
			
		||||
    <date name="Fête nationale" value="*/7/14" type="national" />
 | 
			
		||||
    <date name="Armistice 1918" value="*/11/11" type="national" />
 | 
			
		||||
    <date name="Pâques" value="2007/4/8" type="religious" />
 | 
			
		||||
    <date name="Lundi de pâques" value="2007/4/9" type="religious" />
 | 
			
		||||
    <date name="Ascension" value="2007/5/17" type="religious" />
 | 
			
		||||
    <date name="Pentecôte" value="2007/5/27" type="religious" />
 | 
			
		||||
    <date name="Lundi de pentecôte" value="2007/5/28" type="religious" />
 | 
			
		||||
    <date name="Assomption" value="2007/8/15" type="religious" />
 | 
			
		||||
    <date name="Toussaint" value="2007/11/1" type="religious" />
 | 
			
		||||
    <date name="Noêl" value="*/12/25" type="religious" />
 | 
			
		||||
    <date name="Saint Etienne" value="*/12/26" type="religious" />
 | 
			
		||||
    <date name="Yom Kippur" value="2005/10/13" type="religious" />
 | 
			
		||||
    <date name="Yom Kippur" value="2006/10/02" type="religious" />
 | 
			
		||||
    <date name="Yom Kippur" value="2007/9/27" type="religious" />
 | 
			
		||||
    <date name="Yom Kippur" value="2008/10/09" type="religious" />
 | 
			
		||||
    <date name="Yom Kippur" value="2009/9/28" type="religious" />
 | 
			
		||||
    <date name="Yom Kippur" value="2010/9/18" type="religious" />
 | 
			
		||||
    <date name="début Hanukkah" value="2004/12/07" type="religious" />
 | 
			
		||||
    <date name="début Hanukkah" value="2005/12/25" type="religious" />
 | 
			
		||||
    <date name="début Hanukkah" value="2006/12/15" type="religious" />
 | 
			
		||||
    <date name="début Hanukkah" value="2007/12/04" type="religious" />
 | 
			
		||||
    <date name="début Hanukkah" value="2008/12/21" type="religious" />
 | 
			
		||||
    <date name="début Hanukkah" value="2009/12/11" type="religious" />
 | 
			
		||||
    <date name="début Hanukkah" value="2010/12/01" type="religious" />
 | 
			
		||||
    <date name="début Ramadan" value="2006/9/24" type="religious" />
 | 
			
		||||
    <date name="début Ramadan" value="2007/9/13" type="religious" />
 | 
			
		||||
    <date name="début Ramadan" value="2008/9/2" type="religious" />
 | 
			
		||||
    <date name="début Kwanzaa" value="*/12/26" type="religious" />
 | 
			
		||||
  </country>
 | 
			
		||||
</calendar>
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user