Subject: Re: [RFC] Extend holiday-greek-orthodox-easter in calendar

From: Paul Eggert <[email-masked]>
Date: Thu, 13 Aug 2015 12:19:52 -0700

Foivos S. Zakkak wrote:
> With this extension one can use the following configuration or similar:

Thanks for the explanation.  I installed the attached patch, which should have 
the same effect, and am marking this as done.  Please let me know if it has any 
problems.
From 226e6dcf5696575615ae9bf26486e32de43b5aa4 Mon Sep 17 00:00:00 2001
From: Paul Eggert <[email-masked]>
Date: Thu, 13 Aug 2015 12:16:25 -0700
Subject: [PATCH] Optional args for holiday-greek-orthodox-easter
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit

* etc/NEWS: Document this.
* lisp/calendar/holidays.el (holiday-greek-orthodox-easter):
Add optional args N and STRING, mimicking the API and code of
‘holiday-easter-etc’.  From suggestion by Foivos S. Zakkak (Bug#21256).
---
 etc/NEWS                  |  3 +++
 lisp/calendar/holidays.el | 21 ++++++++++++++-------
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/etc/NEWS b/etc/NEWS
index 0a33a6e..3ec16f5 100644
--- a/etc/NEWS
+++ b/etc/NEWS
@@ -552,6 +552,9 @@ The option customizes which day headers receive the
 `calendar-weekend-header' face.
 
 ---
+*** New optional args N and STRING for ‘holiday-greek-orthodox-easter’.
+
+---
 *** Many items obsolete since at least version 23.1 have been removed.
 The majority were function/variable/face aliases, too numerous to list here.
 The remainder were:
diff --git a/lisp/calendar/holidays.el b/lisp/calendar/holidays.el
index 8085c1c..6d7cea6 100644
--- a/lisp/calendar/holidays.el
+++ b/lisp/calendar/holidays.el
@@ -791,8 +791,16 @@ is non-nil)."
 ;; Prior call to calendar-julian-from-absolute will autoload cal-julian.
 (declare-function calendar-julian-to-absolute "cal-julian" (date))
 
-(defun holiday-greek-orthodox-easter ()
-  "Date of Easter according to the rule of the Council of Nicaea."
+(defun holiday-greek-orthodox-easter (&optional n string)
+  "Date of Nth day after Easter (named STRING), if visible in calendar window.
+It is calculated according to the rule of the Council of Nicaea.
+Negative values of N are interpreted as days before Easter.
+STRING is used purely for display purposes.  The return value has
+the form ((MONTH DAY YEAR) STRING), where the date is that of the
+Nth day before or after Easter.
+
+For backwards compatibility, if this function is called with no
+arguments, it returns the date of Pascha (Greek Orthodox Easter)."
   (let* ((m displayed-month)
          (y displayed-year)
          (julian-year (progn
@@ -808,11 +816,10 @@ is non-nil)."
          (paschal-moon      ; day after full moon on or after March 21
           (- (calendar-julian-to-absolute (list 4 19 julian-year))
              shifted-epact))
-         (nicaean-easter           ; Sunday following the Paschal moon
-          (calendar-gregorian-from-absolute
-           (calendar-dayname-on-or-before 0 (+ paschal-moon 7)))))
-    (if (calendar-date-is-visible-p nicaean-easter)
-        (list (list nicaean-easter "Pascha (Greek Orthodox Easter)")))))
+	 (abs-easter (calendar-dayname-on-or-before 0 (+ paschal-moon 7)))
+	 (greg (calendar-gregorian-from-absolute (+ abs-easter (or n 0)))))
+    (if (calendar-date-is-visible-p greg)
+	(list (list greg (or string "Pascha (Greek Orthodox Easter)"))))))
 
 (provide 'holidays)
 
-- 
2.1.4