1
0
mirror of https://git.savannah.gnu.org/git/emacs.git synced 2025-01-23 18:47:57 +00:00

(displayed-month, displayed-year)

(original-date): Move declarations where needed.
(islamic-calendar-day-number): Remove unused local variable `day'.
(calendar-goto-islamic-date): Doc fix.
(holiday-islamic): Use unless.
(list-islamic-diary-entries, mark-islamic-diary-entries): Move some
constant variables outside the loop.  Use dolist.
(mark-islamic-calendar-date-pattern): Move definition before use.
Use unless.
(mark-islamic-diary-entries): Doc fix.
(insert-islamic-diary-entry, insert-monthly-islamic-diary-entry)
(insert-yearly-islamic-diary-entry): Use let rather than let*.
This commit is contained in:
Glenn Morris 2008-03-14 07:13:59 +00:00
parent 9c0b91874c
commit f852191f5e
2 changed files with 197 additions and 195 deletions

View File

@ -51,6 +51,19 @@
(list-hebrew-diary-entries, mark-hebrew-diary-entries): Move some
constant variables outside the loop. Use dolist.
* calendar/cal-islam.el (displayed-month, displayed-year)
(original-date): Move declarations where needed.
(islamic-calendar-day-number): Remove unused local variable `day'.
(calendar-goto-islamic-date): Doc fix.
(holiday-islamic): Use unless.
(list-islamic-diary-entries, mark-islamic-diary-entries): Move some
constant variables outside the loop. Use dolist.
(mark-islamic-calendar-date-pattern): Move definition before use.
Use unless.
(mark-islamic-diary-entries): Doc fix.
(insert-islamic-diary-entry, insert-monthly-islamic-diary-entry)
(insert-yearly-islamic-diary-entry): Use let rather than let*.
* calendar/cal-julian.el (calendar-absolute-from-julian): Move
definition before use. Remove un-needed local `day'.
(calendar-goto-julian-date, calendar-goto-astro-day-number): Doc fix.

View File

@ -36,10 +36,6 @@
;;; Code:
(defvar displayed-month)
(defvar displayed-year)
(defvar original-date)
(require 'cal-julian)
(defvar calendar-islamic-month-name-array
@ -64,11 +60,10 @@
(defun islamic-calendar-day-number (date)
"Return the day number within the year of the Islamic date DATE."
(let* ((month (extract-calendar-month date))
(day (extract-calendar-day date)))
(+ (* 30 (/ month 2))
(* 29 (/ (1- month) 2))
day)))
(let ((month (extract-calendar-month date)))
(+ (* 30 (/ month 2))
(* 29 (/ (1- month) 2))
(extract-calendar-day date))))
(defun calendar-absolute-from-islamic (date)
"Absolute date of Islamic DATE.
@ -79,10 +74,17 @@ Gregorian date Sunday, December 31, 1 BC."
(year (extract-calendar-year date))
(y (% year 30))
(leap-years-in-cycle
(cond
((< y 3) 0) ((< y 6) 1) ((< y 8) 2) ((< y 11) 3) ((< y 14) 4)
((< y 17) 5) ((< y 19) 6) ((< y 22) 7) ((< y 25) 8) ((< y 27) 9)
(t 10))))
(cond ((< y 3) 0)
((< y 6) 1)
((< y 8) 2)
((< y 11) 3)
((< y 14) 4)
((< y 17) 5)
((< y 19) 6)
((< y 22) 7)
((< y 25) 8)
((< y 27) 9)
(t 10))))
(+ (islamic-calendar-day-number date) ; days so far this year
(* (1- year) 354) ; days in all non-leap years
(* 11 (/ year 30)) ; leap days in complete cycles
@ -142,7 +144,7 @@ Driven by the variable `calendar-date-display-form'."
;;;###cal-autoload
(defun calendar-goto-islamic-date (date &optional noecho)
"Move cursor to Islamic DATE; echo Islamic date unless NOECHO is t."
"Move cursor to Islamic DATE; echo Islamic date unless NOECHO is non-nil."
(interactive
(let* ((today (calendar-current-date))
(year (calendar-read
@ -169,6 +171,9 @@ Driven by the variable `calendar-date-display-form'."
(calendar-absolute-from-islamic date)))
(or noecho (calendar-print-islamic-date)))
(defvar displayed-month) ; from generate-calendar
(defvar displayed-year)
;;;###holiday-autoload
(defun holiday-islamic (month day string)
"Holiday on MONTH, DAY (Islamic) called STRING.
@ -181,10 +186,9 @@ nil if it is not visible in the current calendar window."
(m (extract-calendar-month islamic-date))
(y (extract-calendar-year islamic-date))
(date))
(if (< m 1)
nil ; Islamic calendar doesn't apply
(unless (< m 1) ; Islamic calendar doesn't apply
(increment-calendar-month m y (- 10 month))
(if (> m 7) ; Islamic date might be visible
(if (> m 7) ; Islamic date might be visible
(let ((date (calendar-gregorian-from-absolute
(calendar-absolute-from-islamic (list month day y)))))
(if (calendar-date-is-visible-p date)
@ -195,6 +199,7 @@ nil if it is not visible in the current calendar window."
(date string specifier &optional marker globcolor literal))
(defvar number) ; from diary-list-entries
(defvar original-date)
;;;###diary-autoload
(defun list-islamic-diary-entries ()
@ -214,44 +219,39 @@ marked in the calendar. This function is provided for use with
(gdate original-date)
(mark (regexp-quote diary-nonmarking-symbol)))
(dotimes (idummy number)
(let* ((d diary-date-forms)
(idate (calendar-islamic-from-absolute
(let* ((idate (calendar-islamic-from-absolute
(calendar-absolute-from-gregorian gdate)))
(month (extract-calendar-month idate))
(day (extract-calendar-day idate))
(year (extract-calendar-year idate)))
(while d
(let*
((date-form (if (equal (car (car d)) 'backup)
(cdr (car d))
(car d)))
(backup (equal (car (car d)) 'backup))
(dayname
(format "%s\\|%s\\.?"
(calendar-day-name gdate)
(calendar-day-name gdate 'abbrev)))
(calendar-month-name-array
calendar-islamic-month-name-array)
(monthname
(concat
"\\*\\|"
(calendar-month-name month)))
(month (concat "\\*\\|0*" (int-to-string month)))
(day (concat "\\*\\|0*" (int-to-string day)))
(year
(concat
"\\*\\|0*" (int-to-string year)
(if abbreviated-calendar-year
(concat "\\|" (int-to-string (% year 100)))
"")))
(regexp
(concat
"\\(\\`\\|\^M\\|\n\\)" mark "?"
(regexp-quote islamic-diary-entry-symbol)
"\\("
(mapconcat 'eval date-form "\\)\\(")
"\\)"))
(case-fold-search t))
(year (extract-calendar-year idate))
backup)
(dolist (date-form diary-date-forms)
(if (setq backup (eq (car date-form) 'backup))
(setq date-form (cdr date-form)))
(let* ((dayname
(format "%s\\|%s\\.?"
(calendar-day-name gdate)
(calendar-day-name gdate 'abbrev)))
(calendar-month-name-array
calendar-islamic-month-name-array)
(monthname
(concat "\\*\\|" (calendar-month-name month)))
(month (concat "\\*\\|0*" (int-to-string month)))
(day (concat "\\*\\|0*" (int-to-string day)))
(year
(concat "\\*\\|0*" (int-to-string year)
(if abbreviated-calendar-year
(concat "\\|" (int-to-string (% year 100)))
"")))
;; FIXME ^M can go now.
(regexp
(concat
"\\(\\`\\|\^M\\|\n\\)" mark "?"
(regexp-quote islamic-diary-entry-symbol)
"\\("
(mapconcat 'eval date-form "\\)\\(")
"\\)"))
(case-fold-search t))
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(if backup (re-search-backward "\\<" nil t))
@ -276,124 +276,13 @@ marked in the calendar. This function is provided for use with
(buffer-substring-no-properties entry-start (point))
(buffer-substring-no-properties
(1+ date-start) (1- entry-start))
(copy-marker entry-start))))))
(setq d (cdr d))))
(copy-marker entry-start))))))))
(setq gdate
(calendar-gregorian-from-absolute
(1+ (calendar-absolute-from-gregorian gdate)))))
(set-buffer-modified-p diary-modified))
(goto-char (point-min))))
(declare-function diary-name-pattern "diary-lib"
(string-array &optional abbrev-array paren))
(declare-function mark-calendar-days-named "diary-lib"
(dayname &optional color))
;;;###diary-autoload
(defun mark-islamic-diary-entries ()
"Mark days in the calendar window that have Islamic date diary entries.
Each entry in `diary-file' (or included files) visible in the calendar window
is marked. Islamic date entries are prefaced by `islamic-diary-entry-symbol'
\(normally an `I'). The same `diary-date-forms' govern the style of the Islamic
calendar entries, except that the Islamic month names must be spelled in full.
The Islamic months are numbered from 1 to 12 with Muharram being 1 and 12 being
Dhu al-Hijjah. Islamic date diary entries that begin with a
`diary-nonmarking-symbol' will not be marked in the calendar. This function is
provided for use as part of the `nongregorian-diary-marking-hook'."
(let ((d diary-date-forms))
(while d
(let*
((date-form (if (equal (car (car d)) 'backup)
(cdr (car d))
(car d))) ; ignore 'backup directive
(dayname (diary-name-pattern calendar-day-name-array
calendar-day-abbrev-array))
(monthname
(format "%s\\|\\*"
(diary-name-pattern calendar-islamic-month-name-array)))
(month "[0-9]+\\|\\*")
(day "[0-9]+\\|\\*")
(year "[0-9]+\\|\\*")
(l (length date-form))
(d-name-pos (- l (length (memq 'dayname date-form))))
(d-name-pos (if (/= l d-name-pos) (+ 2 d-name-pos)))
(m-name-pos (- l (length (memq 'monthname date-form))))
(m-name-pos (if (/= l m-name-pos) (+ 2 m-name-pos)))
(d-pos (- l (length (memq 'day date-form))))
(d-pos (if (/= l d-pos) (+ 2 d-pos)))
(m-pos (- l (length (memq 'month date-form))))
(m-pos (if (/= l m-pos) (+ 2 m-pos)))
(y-pos (- l (length (memq 'year date-form))))
(y-pos (if (/= l y-pos) (+ 2 y-pos)))
(regexp
(concat
"\\(\\`\\|\^M\\|\n\\)"
(regexp-quote islamic-diary-entry-symbol)
"\\("
(mapconcat 'eval date-form "\\)\\(")
"\\)"))
(case-fold-search t))
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(let* ((dd-name
(if d-name-pos
(buffer-substring
(match-beginning d-name-pos)
(match-end d-name-pos))))
(mm-name
(if m-name-pos
(buffer-substring
(match-beginning m-name-pos)
(match-end m-name-pos))))
(mm (string-to-number
(if m-pos
(buffer-substring
(match-beginning m-pos)
(match-end m-pos))
"")))
(dd (string-to-number
(if d-pos
(buffer-substring
(match-beginning d-pos)
(match-end d-pos))
"")))
(y-str (if y-pos
(buffer-substring
(match-beginning y-pos)
(match-end y-pos))))
(yy (if (not y-str)
0
(if (and (= (length y-str) 2)
abbreviated-calendar-year)
(let* ((current-y
(extract-calendar-year
(calendar-islamic-from-absolute
(calendar-absolute-from-gregorian
(calendar-current-date)))))
(y (+ (string-to-number y-str)
(* 100 (/ current-y 100)))))
(if (> (- y current-y) 50)
(- y 100)
(if (> (- current-y y) 50)
(+ y 100)
y)))
(string-to-number y-str)))))
(if dd-name
(mark-calendar-days-named
(cdr (assoc-string dd-name
(calendar-make-alist
calendar-day-name-array
0 nil calendar-day-abbrev-array) t)))
(if mm-name
(setq mm (if (string-equal mm-name "*") 0
(cdr (assoc-string
mm-name
(calendar-make-alist
calendar-islamic-month-name-array) t)))))
(mark-islamic-calendar-date-pattern mm dd yy)))))
(setq d (cdr d)))))
;;;###diary-autoload
(defun mark-islamic-calendar-date-pattern (month day year)
"Mark dates in calendar window that conform to Islamic date MONTH/DAY/YEAR.
@ -415,10 +304,9 @@ A value of 0 in any position is a wildcard."
(m (extract-calendar-month islamic-date))
(y (extract-calendar-year islamic-date))
(date))
(if (< m 1)
nil ; Islamic calendar doesn't apply
(unless (< m 1) ; Islamic calendar doesn't apply
(increment-calendar-month m y (- 10 month))
(if (> m 7) ; Islamic date might be visible
(if (> m 7) ; Islamic date might be visible
(let ((date (calendar-gregorian-from-absolute
(calendar-absolute-from-islamic
(list month day y)))))
@ -453,21 +341,126 @@ A value of 0 in any position is a wildcard."
(mark-visible-calendar-date
(calendar-gregorian-from-absolute date)))))))))
(declare-function diary-name-pattern "diary-lib"
(string-array &optional abbrev-array paren))
(declare-function mark-calendar-days-named "diary-lib"
(dayname &optional color))
;;;###diary-autoload
(defun mark-islamic-diary-entries ()
"Mark days in the calendar window that have Islamic date diary entries.
Mark each entry in `diary-file' (or included files) visible in the calendar
window. Islamic date entries are prefaced by `islamic-diary-entry-symbol'
\(normally an `I'). The same `diary-date-forms' govern the style
of the Islamic calendar entries, except that the Islamic month
names must be spelled in full. The Islamic months are numbered
from 1 to 12 with Muharram being 1 and 12 being Dhu al-Hijjah.
Islamic date diary entries that begin with `diary-nonmarking-symbol'
are not marked. This function is provided for use as part of
`nongregorian-diary-marking-hook'."
(let ((dayname (diary-name-pattern calendar-day-name-array
calendar-day-abbrev-array))
(monthname
(format "%s\\|\\*"
(diary-name-pattern calendar-islamic-month-name-array)))
(month "[0-9]+\\|\\*")
(day "[0-9]+\\|\\*")
(year "[0-9]+\\|\\*")
(case-fold-search t))
(dolist (date-form diary-date-forms)
(if (eq (car date-form) 'backup) ; ignore 'backup directive
(setq date-form (cdr date-form)))
(let* ((l (length date-form))
(d-name-pos (- l (length (memq 'dayname date-form))))
(d-name-pos (if (/= l d-name-pos) (+ 2 d-name-pos)))
(m-name-pos (- l (length (memq 'monthname date-form))))
(m-name-pos (if (/= l m-name-pos) (+ 2 m-name-pos)))
(d-pos (- l (length (memq 'day date-form))))
(d-pos (if (/= l d-pos) (+ 2 d-pos)))
(m-pos (- l (length (memq 'month date-form))))
(m-pos (if (/= l m-pos) (+ 2 m-pos)))
(y-pos (- l (length (memq 'year date-form))))
(y-pos (if (/= l y-pos) (+ 2 y-pos)))
(regexp
(concat
"\\(\\`\\|\^M\\|\n\\)"
(regexp-quote islamic-diary-entry-symbol)
"\\("
(mapconcat 'eval date-form "\\)\\(")
"\\)")))
(goto-char (point-min))
(while (re-search-forward regexp nil t)
(let* ((dd-name
(if d-name-pos
(buffer-substring
(match-beginning d-name-pos)
(match-end d-name-pos))))
(mm-name
(if m-name-pos
(buffer-substring
(match-beginning m-name-pos)
(match-end m-name-pos))))
(mm (string-to-number
(if m-pos
(buffer-substring
(match-beginning m-pos)
(match-end m-pos))
"")))
(dd (string-to-number
(if d-pos
(buffer-substring
(match-beginning d-pos)
(match-end d-pos))
"")))
(y-str (if y-pos
(buffer-substring
(match-beginning y-pos)
(match-end y-pos))))
(yy (if (not y-str)
0
(if (and (= (length y-str) 2)
abbreviated-calendar-year)
(let* ((current-y
(extract-calendar-year
(calendar-islamic-from-absolute
(calendar-absolute-from-gregorian
(calendar-current-date)))))
(y (+ (string-to-number y-str)
(* 100 (/ current-y 100)))))
(if (> (- y current-y) 50)
(- y 100)
(if (> (- current-y y) 50)
(+ y 100)
y)))
(string-to-number y-str)))))
(if dd-name
(mark-calendar-days-named
(cdr (assoc-string dd-name
(calendar-make-alist
calendar-day-name-array
0 nil calendar-day-abbrev-array) t)))
(if mm-name
(setq mm (if (string-equal mm-name "*") 0
(cdr (assoc-string
mm-name
(calendar-make-alist
calendar-islamic-month-name-array) t)))))
(mark-islamic-calendar-date-pattern mm dd yy))))))))
;;;###cal-autoload
(defun insert-islamic-diary-entry (arg)
"Insert a diary entry.
For the Islamic date corresponding to the date indicated by point.
Prefix argument ARG makes the entry nonmarking."
(interactive "P")
(let* ((calendar-month-name-array calendar-islamic-month-name-array))
(let ((calendar-month-name-array calendar-islamic-month-name-array))
(make-diary-entry
(concat
islamic-diary-entry-symbol
(calendar-date-string
(calendar-islamic-from-absolute
(calendar-absolute-from-gregorian
(calendar-cursor-to-date t)))
nil t))
(concat islamic-diary-entry-symbol
(calendar-date-string
(calendar-islamic-from-absolute
(calendar-absolute-from-gregorian (calendar-cursor-to-date t)))
nil t))
arg)))
;;;###cal-autoload
@ -476,16 +469,15 @@ Prefix argument ARG makes the entry nonmarking."
For the day of the Islamic month corresponding to the date indicated by point.
Prefix argument ARG makes the entry nonmarking."
(interactive "P")
(let* ((calendar-date-display-form
(if european-calendar-style '(day " * ") '("* " day )))
(calendar-month-name-array calendar-islamic-month-name-array))
(let ((calendar-date-display-form (if european-calendar-style
'(day " * ")
'("* " day )))
(calendar-month-name-array calendar-islamic-month-name-array))
(make-diary-entry
(concat
islamic-diary-entry-symbol
(calendar-date-string
(calendar-islamic-from-absolute
(calendar-absolute-from-gregorian
(calendar-cursor-to-date t)))))
(concat islamic-diary-entry-symbol
(calendar-date-string
(calendar-islamic-from-absolute
(calendar-absolute-from-gregorian (calendar-cursor-to-date t)))))
arg)))
;;;###cal-autoload
@ -494,18 +486,15 @@ Prefix argument ARG makes the entry nonmarking."
For the day of the Islamic year corresponding to the date indicated by point.
Prefix argument ARG makes the entry nonmarking."
(interactive "P")
(let* ((calendar-date-display-form
(if european-calendar-style
'(day " " monthname)
'(monthname " " day)))
(calendar-month-name-array calendar-islamic-month-name-array))
(let ((calendar-date-display-form (if european-calendar-style
'(day " " monthname)
'(monthname " " day)))
(calendar-month-name-array calendar-islamic-month-name-array))
(make-diary-entry
(concat
islamic-diary-entry-symbol
(calendar-date-string
(calendar-islamic-from-absolute
(calendar-absolute-from-gregorian
(calendar-cursor-to-date t)))))
(concat islamic-diary-entry-symbol
(calendar-date-string
(calendar-islamic-from-absolute
(calendar-absolute-from-gregorian (calendar-cursor-to-date t)))))
arg)))
(defvar date)