diff options
| author | Glenn Morris | 2008-03-16 01:27:15 +0000 |
|---|---|---|
| committer | Glenn Morris | 2008-03-16 01:27:15 +0000 |
| commit | f1700e2678ad6f8dea05ff8dacdb3bde2a2cf2b3 (patch) | |
| tree | a35ffebbd8b3750801c51c0eeea7be713e1d264f | |
| parent | 28c0279602d6004f51e679fee1acd31dc13af7f3 (diff) | |
| download | emacs-f1700e2678ad6f8dea05ff8dacdb3bde2a2cf2b3.tar.gz emacs-f1700e2678ad6f8dea05ff8dacdb3bde2a2cf2b3.zip | |
(diary-remind-message, mark-sexp-diary-entries, list-sexp-diary-entries)
(diary-font-lock-sexps): Use format rather than concat.
(diary): Remove un-needed let.
(view-other-diary-entries): Rename argument.
(diary-list-entries-2): New function.
(diary-list-entries-1, diary-list-entries): Use diary-list-entries-2.
(print-diary-entries): Use unless.
(diary-mark-entries-1): Change argument order, make all but
markfunc optional. Handle the standard (Gregorian) case. Use
match-string-no-properties. Handle marks.
(mark-diary-entries): Use diary-mark-entries-1.
(calendar-mark-complex, calendar-mark-1): New functions.
(diary-font-lock-keywords-1): New macro.
(diary-font-lock-keywords): Use diary-font-lock-keywords-1.
| -rw-r--r-- | lisp/ChangeLog | 75 | ||||
| -rw-r--r-- | lisp/calendar/diary-lib.el | 588 |
2 files changed, 338 insertions, 325 deletions
diff --git a/lisp/ChangeLog b/lisp/ChangeLog index 4de88625604..958b01e475a 100644 --- a/lisp/ChangeLog +++ b/lisp/ChangeLog | |||
| @@ -1,3 +1,78 @@ | |||
| 1 | 2008-03-16 Glenn Morris <rgm@gnu.org> | ||
| 2 | |||
| 3 | * calendar/diary-lib.el (calendar-mark-complex, calendar-mark-1): | ||
| 4 | New functions. | ||
| 5 | * calendar/cal-bahai.el (calendar-mark-1): Autoload it. | ||
| 6 | (calendar-bahai-mark-date-pattern): Add optional argument `color'. | ||
| 7 | Use calendar-mark-1. | ||
| 8 | * calendar/cal-hebrew.el (calendar-mark-complex): Autoload it. | ||
| 9 | (mark-hebrew-calendar-date-pattern): Add optional argument `color'. | ||
| 10 | Use calendar-mark-complex. | ||
| 11 | * calendar/cal-islam.el (calendar-mark-1): Autoload it. | ||
| 12 | (mark-islamic-calendar-date-pattern): Add optional argument `color'. | ||
| 13 | Use calendar-mark-1. | ||
| 14 | |||
| 15 | * calendar/calendar.el (calendar-mod): Remove. | ||
| 16 | * calendar/cal-china.el (calendar-chinese-from-absolute) | ||
| 17 | (calendar-chinese-date-string): Expand calendar-mod calls. | ||
| 18 | |||
| 19 | * calendar/cal-bahai.el (calendar-bahai-date-string): Use a single let. | ||
| 20 | (diary-bahai-insert-entry, diary-bahai-insert-monthly-entry) | ||
| 21 | (diary-bahai-insert-yearly-entry): Use let rather than let*. | ||
| 22 | Move obsolete aliases after the functions that replaced them. | ||
| 23 | |||
| 24 | * calendar/cal-hebrew.el (calendar-absolute-from-hebrew) | ||
| 25 | (hebrew-calendar-yahrzeit, insert-hebrew-diary-entry) | ||
| 26 | (insert-monthly-hebrew-diary-entry, insert-yearly-hebrew-diary-entry): | ||
| 27 | Use let rather than let*. | ||
| 28 | (calendar-hebrew-prompt-for-date): New function. | ||
| 29 | (calendar-goto-hebrew-date): Use calendar-hebrew-prompt-for-date. | ||
| 30 | (holiday-tisha-b-av-etc): Use unless, let. | ||
| 31 | |||
| 32 | * calendar/cal-islam.el (calendar-islamic-prompt-for-date): New func. | ||
| 33 | (calendar-goto-islamic-date): Use calendar-islamic-prompt-for-date. | ||
| 34 | |||
| 35 | * calendar/calendar.el (calendar-for-loop): Add indent spec. | ||
| 36 | |||
| 37 | * calendar/diary-lib.el (diary-remind-message, mark-sexp-diary-entries) | ||
| 38 | (list-sexp-diary-entries, diary-font-lock-sexps): Use format rather | ||
| 39 | than concat. | ||
| 40 | (diary): Remove un-needed let. | ||
| 41 | (view-other-diary-entries): Rename argument. | ||
| 42 | (diary-list-entries-2): New function. | ||
| 43 | (diary-list-entries-1, diary-list-entries): Use diary-list-entries-2. | ||
| 44 | (print-diary-entries): Use unless. | ||
| 45 | (diary-mark-entries-1): Change argument order, make all but | ||
| 46 | markfunc optional. Handle the standard (Gregorian) case. Use | ||
| 47 | match-string-no-properties. Handle marks. | ||
| 48 | (mark-diary-entries): Use diary-mark-entries-1. | ||
| 49 | (diary-font-lock-keywords-1): New macro. | ||
| 50 | (diary-font-lock-keywords): Use diary-font-lock-keywords-1. | ||
| 51 | |||
| 52 | 2008-03-16 Ulf Jasper <ulf.jasper@web.de> | ||
| 53 | |||
| 54 | * icalendar.el (icalendar-version): Increase to 0.18. | ||
| 55 | (icalendar-export-hidden-diary-entries): New variable. | ||
| 56 | (icalendar-export-region): Use icalendar-export-hidden-diary-entries. | ||
| 57 | In case of error, insert full error-val. | ||
| 58 | (icalendar-first-weekday-of-year): Remove `offset' argument. Doc fix. | ||
| 59 | Use calendar-day-of-week. Return the day number. | ||
| 60 | (icalendar--convert-weekly-to-ical): Use funcall rather than apply. | ||
| 61 | |||
| 62 | 2008-03-16 Craig Markwardt <Craig.Markwardt@nasa.gov> | ||
| 63 | |||
| 64 | * icalendar.el (icalendar-recurring-start-year): New variable. | ||
| 65 | (icalendar--diarytime-to-isotime): Fix treatment of 12:00pm - 12:59pm. | ||
| 66 | (icalendar-export-region): Ignore hidden diary entries. | ||
| 67 | (icalendar--convert-ordinary-to-ical): Fix case where event | ||
| 68 | spans across midnight boundary. | ||
| 69 | (icalendar-first-weekday-of-year): New function. | ||
| 70 | (icalendar--convert-weekly-to-ical): Allow user-selectable start | ||
| 71 | year for recurring events (Mozilla calendars do not propagate | ||
| 72 | recurring events forever, so year 2000 start date was not working). | ||
| 73 | (icalendar--convert-yearly-to-ical): Remove extra spaces in | ||
| 74 | formatting of BYMONTH and BYMONTHDAY (not allowed by ical spec). | ||
| 75 | |||
| 1 | 2008-03-15 Michael Albinus <michael.albinus@gmx.de> | 76 | 2008-03-15 Michael Albinus <michael.albinus@gmx.de> |
| 2 | 77 | ||
| 3 | * tramp.el (tramp-root-regexp): New defconst. | 78 | * tramp.el (tramp-root-regexp): New defconst. |
diff --git a/lisp/calendar/diary-lib.el b/lisp/calendar/diary-lib.el index d6b99a21411..deb0be41359 100644 --- a/lisp/calendar/diary-lib.el +++ b/lisp/calendar/diary-lib.el | |||
| @@ -228,8 +228,8 @@ after those with times." | |||
| 228 | (defcustom diary-remind-message | 228 | (defcustom diary-remind-message |
| 229 | '("Reminder: Only " | 229 | '("Reminder: Only " |
| 230 | (if (zerop (% days 7)) | 230 | (if (zerop (% days 7)) |
| 231 | (concat (int-to-string (/ days 7)) (if (= 7 days) " week" " weeks")) | 231 | (format "%d week%s" (/ days 7) (if (= 7 days) "" "s")) |
| 232 | (concat (int-to-string days) (if (= 1 days) " day" " days"))) | 232 | (format "%d day%s" days (if (= 1 days) "" "s"))) |
| 233 | " until " | 233 | " until " |
| 234 | diary-entry) | 234 | diary-entry) |
| 235 | "Pseudo-pattern giving form of reminder messages in the fancy diary display. | 235 | "Pseudo-pattern giving form of reminder messages in the fancy diary display. |
| @@ -306,8 +306,8 @@ by the variable `number-of-diary-entries'. A value of ARG less than 1 | |||
| 306 | does nothing. This function is suitable for execution in a `.emacs' file." | 306 | does nothing. This function is suitable for execution in a `.emacs' file." |
| 307 | (interactive "P") | 307 | (interactive "P") |
| 308 | (diary-check-diary-file) | 308 | (diary-check-diary-file) |
| 309 | (let ((date (calendar-current-date))) | 309 | (diary-list-entries (calendar-current-date) |
| 310 | (diary-list-entries date (if arg (prefix-numeric-value arg))))) | 310 | (if arg (prefix-numeric-value arg)))) |
| 311 | 311 | ||
| 312 | (define-obsolete-function-alias 'view-diary-entries 'diary-view-entries) | 312 | (define-obsolete-function-alias 'view-diary-entries 'diary-view-entries) |
| 313 | ;;;###cal-autoload | 313 | ;;;###cal-autoload |
| @@ -321,15 +321,15 @@ in the displayed three-month calendar." | |||
| 321 | (diary-list-entries (calendar-cursor-to-date t) arg)) | 321 | (diary-list-entries (calendar-cursor-to-date t) arg)) |
| 322 | 322 | ||
| 323 | ;;;###cal-autoload | 323 | ;;;###cal-autoload |
| 324 | (defun view-other-diary-entries (arg d-file) | 324 | (defun view-other-diary-entries (arg dfile) |
| 325 | "Prepare and display buffer of diary entries from an alternative diary file. | 325 | "Prepare and display buffer of diary entries from an alternative diary file. |
| 326 | Searches for entries that match ARG days, starting with the date indicated | 326 | Searches for entries that match ARG days, starting with the date indicated |
| 327 | by the cursor position in the displayed three-month calendar. | 327 | by the cursor position in the displayed three-month calendar. |
| 328 | D-FILE specifies the file to use as the diary file." | 328 | DFILE specifies the file to use as the diary file." |
| 329 | (interactive | 329 | (interactive |
| 330 | (list (prefix-numeric-value current-prefix-arg) | 330 | (list (prefix-numeric-value current-prefix-arg) |
| 331 | (read-file-name "Enter diary file name: " default-directory nil t))) | 331 | (read-file-name "Enter diary file name: " default-directory nil t))) |
| 332 | (let ((diary-file d-file)) | 332 | (let ((diary-file dfile)) |
| 333 | (diary-view-entries arg))) | 333 | (diary-view-entries arg))) |
| 334 | 334 | ||
| 335 | (defvar diary-syntax-table | 335 | (defvar diary-syntax-table |
| @@ -522,76 +522,96 @@ FILENAME being the file containing the diary entry." | |||
| 522 | (list marker (buffer-file-name) literal) | 522 | (list marker (buffer-file-name) literal) |
| 523 | globcolor)))))) | 523 | globcolor)))))) |
| 524 | 524 | ||
| 525 | (defvar number) | 525 | (defvar number) ; not clear this should use number |
| 526 | (defvar original-date) | 526 | |
| 527 | (defun diary-list-entries-2 (date mark globattr list-only | ||
| 528 | &optional months symbol) | ||
| 529 | "Internal subroutine of `diary-list-entries'. | ||
| 530 | Find diary entries applying to DATE, by searching from point-min for | ||
| 531 | each element of `diary-date-forms'. MARK indicates an entry is non-marking. | ||
| 532 | GLOBATTR is the list of global file attributes. If LIST-ONLY is | ||
| 533 | non-nil, don't change the buffer, only return a list of entries. | ||
| 534 | Optional array MONTHS replaces `calendar-month-name-array', and | ||
| 535 | means months cannot be abbreviated. Optional string SYMBOL marks diary | ||
| 536 | entries of the desired type. Returns non-nil if any entries were found." | ||
| 537 | (let* ((month (extract-calendar-month date)) | ||
| 538 | (day (extract-calendar-day date)) | ||
| 539 | (year (extract-calendar-year date)) | ||
| 540 | (dayname (format "%s\\|%s\\.?" (calendar-day-name date) | ||
| 541 | (calendar-day-name date 'abbrev))) | ||
| 542 | (calendar-month-name-array (or months calendar-month-name-array)) | ||
| 543 | (monthname (format "\\*\\|%s%s" (calendar-month-name month) | ||
| 544 | (if months "" | ||
| 545 | (format "\\|%s\\.?" | ||
| 546 | (calendar-month-name month 'abbrev))))) | ||
| 547 | (month (format "\\*\\|0*%d" month)) | ||
| 548 | (day (format "\\*\\|0*%d" day)) | ||
| 549 | (year (format "\\*\\|0*%d%s" year | ||
| 550 | (if abbreviated-calendar-year | ||
| 551 | ;; FIXME was %d in non-greg case. | ||
| 552 | (format "\\|%02d" (% year 100)) | ||
| 553 | ""))) | ||
| 554 | (case-fold-search t) | ||
| 555 | entry-found) | ||
| 556 | (dolist (date-form diary-date-forms) | ||
| 557 | (let ((backup (when (eq (car date-form) 'backup) | ||
| 558 | (setq date-form (cdr date-form)) | ||
| 559 | t)) | ||
| 560 | ;; date-form uses day etc as set above. | ||
| 561 | (regexp (format "^%s?%s\\(%s\\)" (regexp-quote mark) | ||
| 562 | (if symbol (regexp-quote symbol) "") | ||
| 563 | (mapconcat 'eval date-form "\\)\\(?:"))) | ||
| 564 | entry-start date-start temp) | ||
| 565 | (goto-char (point-min)) | ||
| 566 | (while (re-search-forward regexp nil t) | ||
| 567 | (if backup (re-search-backward "\\<" nil t)) | ||
| 568 | (if (and (bolp) (not (looking-at "[ \t]"))) | ||
| 569 | ;; Diary entry that consists only of date. | ||
| 570 | (backward-char 1) | ||
| 571 | ;; Found a nonempty diary entry--make it | ||
| 572 | ;; visible and add it to the list. | ||
| 573 | ;; Actual entry starts on the next-line? | ||
| 574 | (if (looking-at "[ \t]*\n[ \t]") (forward-line 1)) | ||
| 575 | (setq entry-found t | ||
| 576 | entry-start (point) | ||
| 577 | ;; If bolp, must have done (forward-line 1). | ||
| 578 | ;; FIXME Why number > 1? | ||
| 579 | date-start (line-end-position (if (and (bolp) (> number 1)) | ||
| 580 | -1 0))) | ||
| 581 | (forward-line 1) | ||
| 582 | (while (looking-at "[ \t]") ; continued entry | ||
| 583 | (forward-line 1)) | ||
| 584 | (unless (and (eobp) (not (bolp))) | ||
| 585 | (backward-char 1)) | ||
| 586 | (unless list-only | ||
| 587 | (remove-overlays date-start (point) 'invisible 'diary)) | ||
| 588 | (setq temp (diary-pull-attrs | ||
| 589 | (buffer-substring-no-properties | ||
| 590 | entry-start (point)) globattr)) | ||
| 591 | (add-to-diary-list | ||
| 592 | date (car temp) | ||
| 593 | (buffer-substring-no-properties (1+ date-start) (1- entry-start)) | ||
| 594 | (copy-marker entry-start) (cadr temp)))))) | ||
| 595 | entry-found)) | ||
| 596 | |||
| 597 | (defvar original-date) ; from diary-list-entries | ||
| 598 | (defvar file-glob-attrs) | ||
| 599 | (defvar list-only) | ||
| 527 | 600 | ||
| 528 | ;; FIXME use for list-diary-entries. | ||
| 529 | (defun diary-list-entries-1 (months symbol absfunc) | 601 | (defun diary-list-entries-1 (months symbol absfunc) |
| 530 | "List diary entries of a certain type. | 602 | "List diary entries of a certain type. |
| 531 | MONTHS is an array of month names. SYMBOL marks diary entries of the type | 603 | MONTHS is an array of month names. SYMBOL marks diary entries of the type |
| 532 | in question. ABSFUNC is a function that converts absolute dates to dates | 604 | in question. ABSFUNC is a function that converts absolute dates to dates |
| 533 | of the appropriate type." | 605 | of the appropriate type." |
| 534 | (if (< 0 number) | 606 | (let ((gdate original-date)) |
| 535 | (let ((gdate original-date) | 607 | (dotimes (idummy number) |
| 536 | (mark (regexp-quote diary-nonmarking-symbol))) | 608 | (diary-list-entries-2 |
| 537 | (dotimes (idummy number) | 609 | (funcall absfunc (calendar-absolute-from-gregorian gdate)) |
| 538 | (let* ((tdate (funcall absfunc | 610 | diary-nonmarking-symbol file-glob-attrs list-only months symbol) |
| 539 | (calendar-absolute-from-gregorian gdate))) | 611 | (setq gdate |
| 540 | (month (extract-calendar-month tdate)) | 612 | (calendar-gregorian-from-absolute |
| 541 | (day (extract-calendar-day tdate)) | 613 | (1+ (calendar-absolute-from-gregorian gdate)))))) |
| 542 | (year (extract-calendar-year tdate)) | 614 | (goto-char (point-min))) |
| 543 | backup) | ||
| 544 | (dolist (date-form diary-date-forms) | ||
| 545 | (if (setq backup (eq (car date-form) 'backup)) | ||
| 546 | (setq date-form (cdr date-form))) | ||
| 547 | (let* ((dayname | ||
| 548 | (format "%s\\|%s\\.?" | ||
| 549 | (calendar-day-name gdate) | ||
| 550 | (calendar-day-name gdate 'abbrev))) | ||
| 551 | (calendar-month-name-array months) | ||
| 552 | (monthname | ||
| 553 | (format "\\*\\|%s" (calendar-month-name month))) | ||
| 554 | (month (format "\\*\\|0*%s" (int-to-string month))) | ||
| 555 | (day (format "\\*\\|0*%s" (int-to-string day))) | ||
| 556 | (year | ||
| 557 | (format "\\*\\|0*%s%s" (int-to-string year) | ||
| 558 | (if abbreviated-calendar-year | ||
| 559 | (format "\\|%s" | ||
| 560 | (int-to-string (% year 100))) | ||
| 561 | ""))) | ||
| 562 | (regexp | ||
| 563 | (format "^%s?%s\\(%s\\)" mark (regexp-quote symbol) | ||
| 564 | (mapconcat 'eval date-form "\\)\\("))) | ||
| 565 | (case-fold-search t)) | ||
| 566 | (goto-char (point-min)) | ||
| 567 | (while (re-search-forward regexp nil t) | ||
| 568 | (if backup (re-search-backward "\\<" nil t)) | ||
| 569 | (if (and (bolp) (not (looking-at "[ \t]"))) | ||
| 570 | ;; Diary entry that consists only of date. | ||
| 571 | (backward-char 1) | ||
| 572 | ;; Found a nonempty diary entry--make it visible and | ||
| 573 | ;; add it to the list. | ||
| 574 | ;; Actual entry starts on the next-line? | ||
| 575 | (if (looking-at "[ \t]*\n[ \t]") (forward-line 1)) | ||
| 576 | (let ((entry-start (point)) | ||
| 577 | ;; If bolp, must have done (forward-line 1). | ||
| 578 | (date-start (line-end-position (if (bolp) -1 0)))) | ||
| 579 | (forward-line 1) | ||
| 580 | (while (looking-at "[ \t]") ; continued entry | ||
| 581 | (forward-line 1)) | ||
| 582 | (unless (and (eobp) (not (bolp))) | ||
| 583 | (backward-char 1)) | ||
| 584 | (remove-overlays date-start (point) 'invisible 'diary) | ||
| 585 | (add-to-diary-list | ||
| 586 | gdate | ||
| 587 | (buffer-substring-no-properties entry-start (point)) | ||
| 588 | (buffer-substring-no-properties | ||
| 589 | (1+ date-start) (1- entry-start)) | ||
| 590 | (copy-marker entry-start)))))))) | ||
| 591 | (setq gdate | ||
| 592 | (calendar-gregorian-from-absolute | ||
| 593 | (1+ (calendar-absolute-from-gregorian gdate)))))) | ||
| 594 | (goto-char (point-min)))) | ||
| 595 | 615 | ||
| 596 | (define-obsolete-function-alias 'list-diary-entries 'diary-list-entries) | 616 | (define-obsolete-function-alias 'list-diary-entries 'diary-list-entries) |
| 597 | (defun diary-list-entries (date number &optional list-only) | 617 | (defun diary-list-entries (date number &optional list-only) |
| @@ -669,86 +689,23 @@ If LIST-ONLY is non-nil don't modify or display the buffer, only return a list." | |||
| 669 | (save-excursion | 689 | (save-excursion |
| 670 | (setq file-glob-attrs (nth 1 (diary-pull-attrs nil ""))) | 690 | (setq file-glob-attrs (nth 1 (diary-pull-attrs nil ""))) |
| 671 | (with-syntax-table diary-syntax-table | 691 | (with-syntax-table diary-syntax-table |
| 672 | (let ((mark (regexp-quote diary-nonmarking-symbol))) | 692 | (goto-char (point-min)) |
| 673 | (goto-char (point-min)) | 693 | (unless list-only |
| 674 | (unless list-only | 694 | (let ((ol (make-overlay (point-min) (point-max) nil t nil))) |
| 675 | (let ((ol (make-overlay (point-min) (point-max) nil t nil))) | 695 | (set (make-local-variable 'diary-selective-display) t) |
| 676 | (set (make-local-variable 'diary-selective-display) t) | 696 | (overlay-put ol 'invisible 'diary) |
| 677 | (overlay-put ol 'invisible 'diary) | 697 | (overlay-put ol 'evaporate t))) |
| 678 | (overlay-put ol 'evaporate t))) | 698 | (dotimes (idummy number) |
| 679 | (dotimes (idummy number) | 699 | (let ((sexp-found (list-sexp-diary-entries date)) |
| 680 | (let ((month (extract-calendar-month date)) | 700 | (entry-found (diary-list-entries-2 |
| 681 | (day (extract-calendar-day date)) | 701 | date diary-nonmarking-symbol |
| 682 | (year (extract-calendar-year date)) | 702 | file-glob-attrs list-only))) |
| 683 | (entry-found (list-sexp-diary-entries date))) | 703 | (if diary-list-include-blanks |
| 684 | (dolist (date-form diary-date-forms) | 704 | (or sexp-found entry-found |
| 685 | (let* ((backup (when (eq (car date-form) 'backup) | 705 | (add-to-diary-list date "" "" "" ""))) |
| 686 | (setq date-form (cdr date-form)) | 706 | (setq date |
| 687 | t)) | 707 | (calendar-gregorian-from-absolute |
| 688 | (dayname | 708 | (1+ (calendar-absolute-from-gregorian date))))))) |
| 689 | (format "%s\\|%s\\.?" | ||
| 690 | (calendar-day-name date) | ||
| 691 | (calendar-day-name date 'abbrev))) | ||
| 692 | (monthname | ||
| 693 | (format "\\*\\|%s\\|%s\\.?" | ||
| 694 | (calendar-month-name month) | ||
| 695 | (calendar-month-name month 'abbrev))) | ||
| 696 | (month (concat "\\*\\|0*" (int-to-string month))) | ||
| 697 | (day (concat "\\*\\|0*" (int-to-string day))) | ||
| 698 | (year | ||
| 699 | (concat | ||
| 700 | "\\*\\|0*" (int-to-string year) | ||
| 701 | (if abbreviated-calendar-year | ||
| 702 | (concat "\\|" (format "%02d" (% year 100))) | ||
| 703 | ""))) | ||
| 704 | (regexp | ||
| 705 | (concat | ||
| 706 | "^" mark "?\\(" | ||
| 707 | ;; This must be let* so that date-form | ||
| 708 | ;; can use day etc. | ||
| 709 | (mapconcat 'eval date-form "\\)\\(?:") | ||
| 710 | "\\)")) | ||
| 711 | (case-fold-search t)) | ||
| 712 | (goto-char (point-min)) | ||
| 713 | (while (re-search-forward regexp nil t) | ||
| 714 | (if backup (re-search-backward "\\<" nil t)) | ||
| 715 | (if (and (bolp) (not (looking-at "[ \t]"))) | ||
| 716 | ;; Diary entry that consists only of date. | ||
| 717 | (backward-char 1) | ||
| 718 | ;; Found a nonempty diary entry--make it | ||
| 719 | ;; visible and add it to the list. | ||
| 720 | (setq entry-found t) | ||
| 721 | (if (looking-at "[ \t]*\n[ \t]") (forward-line 1)) | ||
| 722 | (let ((entry-start (point)) | ||
| 723 | (temp) | ||
| 724 | (date-start | ||
| 725 | (line-end-position | ||
| 726 | ;; FIXME Why number > 1? | ||
| 727 | (if (and (bolp) (> number 1)) -1 0)))) | ||
| 728 | (forward-line 1) | ||
| 729 | (while (looking-at "[ \t]") | ||
| 730 | (forward-line 1)) | ||
| 731 | (unless (and (eobp) (not (bolp))) | ||
| 732 | (backward-char 1)) | ||
| 733 | (unless list-only | ||
| 734 | (remove-overlays date-start (point) | ||
| 735 | 'invisible 'diary)) | ||
| 736 | (setq temp (diary-pull-attrs | ||
| 737 | (buffer-substring entry-start (point)) | ||
| 738 | file-glob-attrs)) | ||
| 739 | (add-to-diary-list | ||
| 740 | date | ||
| 741 | (car temp) | ||
| 742 | (buffer-substring | ||
| 743 | (1+ date-start) (1- entry-start)) | ||
| 744 | (copy-marker entry-start) (nth 1 temp))))))) | ||
| 745 | (or entry-found | ||
| 746 | (not diary-list-include-blanks) | ||
| 747 | (add-to-diary-list date "" "" "" "")) | ||
| 748 | (setq date | ||
| 749 | (calendar-gregorian-from-absolute | ||
| 750 | (1+ (calendar-absolute-from-gregorian date)))) | ||
| 751 | (setq entry-found nil))))) | ||
| 752 | (goto-char (point-min)) | 709 | (goto-char (point-min)) |
| 753 | (run-hooks 'nongregorian-diary-listing-hook | 710 | (run-hooks 'nongregorian-diary-listing-hook |
| 754 | 'list-diary-entries-hook) | 711 | 'list-diary-entries-hook) |
| @@ -1048,8 +1005,7 @@ the actual printing." | |||
| 1048 | (progn | 1005 | (progn |
| 1049 | (setq end (next-single-char-property-change | 1006 | (setq end (next-single-char-property-change |
| 1050 | start 'invisible)) | 1007 | start 'invisible)) |
| 1051 | (if (get-char-property start 'invisible) | 1008 | (unless (get-char-property start 'invisible) |
| 1052 | nil | ||
| 1053 | (with-current-buffer temp-buffer | 1009 | (with-current-buffer temp-buffer |
| 1054 | (insert-buffer-substring diary-buffer | 1010 | (insert-buffer-substring diary-buffer |
| 1055 | start (or end (point-max))))) | 1011 | start (or end (point-max))))) |
| @@ -1142,73 +1098,75 @@ argument PAREN is non-nil, the regexp is surrounded by parentheses." | |||
| 1142 | (defvar marking-diary-entry nil | 1098 | (defvar marking-diary-entry nil |
| 1143 | "True during the marking of diary entries, if current entry is marking.") | 1099 | "True during the marking of diary entries, if current entry is marking.") |
| 1144 | 1100 | ||
| 1145 | ;; FIXME use for mark-diary-entries. | 1101 | ;; file-glob-attrs bound in mark-diary-entries. |
| 1146 | (defun diary-mark-entries-1 (months symbol absfunc markfunc) | 1102 | (defun diary-mark-entries-1 (markfunc &optional months symbol absfunc) |
| 1147 | "Mark diary entries of a certain type. | 1103 | "Mark diary entries of a certain type. |
| 1148 | MONTHS is an array of month names. SYMBOL marks diary entries of the type | 1104 | MARKFUNC is a function that marks entries of the appropriate type |
| 1149 | in question. ABSFUNC is a function that converts absolute dates to dates | 1105 | matching a given date pattern. MONTHS is an array of month names. |
| 1150 | of the appropriate type. MARKFUNC is a function that marks entries | 1106 | SYMBOL marks diary entries of the type in question. ABSFUNC is a |
| 1151 | of the appropriate type matching a given date pattern." | 1107 | function that converts absolute dates to dates of the appropriate type. " |
| 1152 | (let ((dayname (diary-name-pattern calendar-day-name-array | 1108 | (let ((dayname (diary-name-pattern calendar-day-name-array |
| 1153 | calendar-day-abbrev-array)) | 1109 | calendar-day-abbrev-array)) |
| 1154 | (monthname (format "%s\\|\\*" (diary-name-pattern months))) | 1110 | (monthname (format "%s\\|\\*" |
| 1111 | (if months | ||
| 1112 | (diary-name-pattern months) | ||
| 1113 | (diary-name-pattern calendar-month-name-array | ||
| 1114 | calendar-month-abbrev-array)))) | ||
| 1155 | (month "[0-9]+\\|\\*") | 1115 | (month "[0-9]+\\|\\*") |
| 1156 | (day "[0-9]+\\|\\*") | 1116 | (day "[0-9]+\\|\\*") |
| 1157 | (year "[0-9]+\\|\\*") | 1117 | (year "[0-9]+\\|\\*") |
| 1158 | (case-fold-search t)) | 1118 | (case-fold-search t) |
| 1119 | ;; FIXME is this the right reason for 1 versus 2? | ||
| 1120 | ;; Should docs of symbols say must be single character? | ||
| 1121 | (inc (if symbol 2 1)) | ||
| 1122 | marks) | ||
| 1159 | (dolist (date-form diary-date-forms) | 1123 | (dolist (date-form diary-date-forms) |
| 1160 | (if (eq (car date-form) 'backup) ; ignore 'backup directive | 1124 | (if (eq (car date-form) 'backup) ; ignore 'backup directive |
| 1161 | (setq date-form (cdr date-form))) | 1125 | (setq date-form (cdr date-form))) |
| 1162 | (let* ((l (length date-form)) | 1126 | (let* ((l (length date-form)) |
| 1163 | (d-name-pos (- l (length (memq 'dayname date-form)))) | 1127 | (d-name-pos (- l (length (memq 'dayname date-form)))) |
| 1164 | (d-name-pos (if (/= l d-name-pos) (+ 2 d-name-pos))) | 1128 | (d-name-pos (if (/= l d-name-pos) (+ inc d-name-pos))) |
| 1165 | (m-name-pos (- l (length (memq 'monthname date-form)))) | 1129 | (m-name-pos (- l (length (memq 'monthname date-form)))) |
| 1166 | (m-name-pos (if (/= l m-name-pos) (+ 2 m-name-pos))) | 1130 | (m-name-pos (if (/= l m-name-pos) (+ inc m-name-pos))) |
| 1167 | (d-pos (- l (length (memq 'day date-form)))) | 1131 | (d-pos (- l (length (memq 'day date-form)))) |
| 1168 | (d-pos (if (/= l d-pos) (+ 2 d-pos))) | 1132 | (d-pos (if (/= l d-pos) (+ inc d-pos))) |
| 1169 | (m-pos (- l (length (memq 'month date-form)))) | 1133 | (m-pos (- l (length (memq 'month date-form)))) |
| 1170 | (m-pos (if (/= l m-pos) (+ 2 m-pos))) | 1134 | (m-pos (if (/= l m-pos) (+ inc m-pos))) |
| 1171 | (y-pos (- l (length (memq 'year date-form)))) | 1135 | (y-pos (- l (length (memq 'year date-form)))) |
| 1172 | (y-pos (if (/= l y-pos) (+ 2 y-pos))) | 1136 | (y-pos (if (/= l y-pos) (+ inc y-pos))) |
| 1173 | (regexp (format "^%s\\(%s\\)" (regexp-quote symbol) | 1137 | (regexp (format "^%s\\(%s\\)" |
| 1138 | (if symbol (regexp-quote symbol) "") | ||
| 1174 | (mapconcat 'eval date-form "\\)\\(")))) | 1139 | (mapconcat 'eval date-form "\\)\\(")))) |
| 1175 | (goto-char (point-min)) | 1140 | (goto-char (point-min)) |
| 1176 | (while (re-search-forward regexp nil t) | 1141 | (while (re-search-forward regexp nil t) |
| 1177 | (let* ((dd-name | 1142 | (let* ((dd-name |
| 1178 | (if d-name-pos | 1143 | (if d-name-pos |
| 1179 | (buffer-substring | 1144 | (match-string-no-properties d-name-pos))) |
| 1180 | (match-beginning d-name-pos) | ||
| 1181 | (match-end d-name-pos)))) | ||
| 1182 | (mm-name | 1145 | (mm-name |
| 1183 | (if m-name-pos | 1146 | (if m-name-pos |
| 1184 | (buffer-substring | 1147 | (match-string-no-properties m-name-pos))) |
| 1185 | (match-beginning m-name-pos) | ||
| 1186 | (match-end m-name-pos)))) | ||
| 1187 | (mm (string-to-number | 1148 | (mm (string-to-number |
| 1188 | (if m-pos | 1149 | (if m-pos |
| 1189 | (buffer-substring | 1150 | (match-string-no-properties m-pos) |
| 1190 | (match-beginning m-pos) | ||
| 1191 | (match-end m-pos)) | ||
| 1192 | ""))) | 1151 | ""))) |
| 1193 | (dd (string-to-number | 1152 | (dd (string-to-number |
| 1194 | (if d-pos | 1153 | (if d-pos |
| 1195 | (buffer-substring | 1154 | (match-string-no-properties d-pos) |
| 1196 | (match-beginning d-pos) | ||
| 1197 | (match-end d-pos)) | ||
| 1198 | ""))) | 1155 | ""))) |
| 1199 | (y-str (if y-pos | 1156 | (y-str (if y-pos |
| 1200 | (buffer-substring | 1157 | (match-string-no-properties y-pos))) |
| 1201 | (match-beginning y-pos) | ||
| 1202 | (match-end y-pos)))) | ||
| 1203 | (yy (if (not y-str) | 1158 | (yy (if (not y-str) |
| 1204 | 0 | 1159 | 0 |
| 1205 | (if (and (= (length y-str) 2) | 1160 | (if (and (= (length y-str) 2) |
| 1206 | abbreviated-calendar-year) | 1161 | abbreviated-calendar-year) |
| 1207 | (let* ((current-y | 1162 | (let* ((current-y |
| 1208 | (extract-calendar-year | 1163 | (extract-calendar-year |
| 1209 | (funcall absfunc | 1164 | (if absfunc |
| 1210 | (calendar-absolute-from-gregorian | 1165 | (funcall |
| 1211 | (calendar-current-date))))) | 1166 | absfunc |
| 1167 | (calendar-absolute-from-gregorian | ||
| 1168 | (calendar-current-date))) | ||
| 1169 | (calendar-current-date)))) | ||
| 1212 | (y (+ (string-to-number y-str) | 1170 | (y (+ (string-to-number y-str) |
| 1213 | (* 100 (/ current-y 100))))) | 1171 | (* 100 (/ current-y 100))))) |
| 1214 | (if (> (- y current-y) 50) | 1172 | (if (> (- y current-y) 50) |
| @@ -1217,19 +1175,26 @@ of the appropriate type matching a given date pattern." | |||
| 1217 | (+ y 100) | 1175 | (+ y 100) |
| 1218 | y))) | 1176 | y))) |
| 1219 | (string-to-number y-str))))) | 1177 | (string-to-number y-str))))) |
| 1178 | (setq marks (cadr (diary-pull-attrs | ||
| 1179 | (buffer-substring-no-properties | ||
| 1180 | (point) (line-end-position)) | ||
| 1181 | file-glob-attrs))) | ||
| 1220 | (if dd-name | 1182 | (if dd-name |
| 1221 | (mark-calendar-days-named | 1183 | (mark-calendar-days-named |
| 1222 | (cdr (assoc-string dd-name | 1184 | (cdr (assoc-string dd-name |
| 1223 | (calendar-make-alist | 1185 | (calendar-make-alist |
| 1224 | calendar-day-name-array | 1186 | calendar-day-name-array |
| 1225 | 0 nil calendar-day-abbrev-array) t))) | 1187 | 0 nil calendar-day-abbrev-array) t)) marks) |
| 1226 | (if mm-name | 1188 | (if mm-name |
| 1227 | (setq mm | 1189 | (setq mm |
| 1228 | (if (string-equal mm-name "*") 0 | 1190 | (if (string-equal mm-name "*") 0 |
| 1229 | (cdr (assoc-string | 1191 | (cdr (assoc-string |
| 1230 | mm-name | 1192 | mm-name |
| 1231 | (calendar-make-alist months) t))))) | 1193 | (if months (calendar-make-alist months) |
| 1232 | (funcall markfunc mm dd yy)))))))) | 1194 | (calendar-make-alist |
| 1195 | calendar-month-name-array | ||
| 1196 | 1 nil calendar-month-abbrev-array)) t))))) | ||
| 1197 | (funcall markfunc mm dd yy marks)))))))) | ||
| 1233 | 1198 | ||
| 1234 | ;;;###cal-autoload | 1199 | ;;;###cal-autoload |
| 1235 | (defun mark-diary-entries (&optional redraw) | 1200 | (defun mark-diary-entries (&optional redraw) |
| @@ -1252,17 +1217,7 @@ diary entries." | |||
| 1252 | (setq mark-diary-entries-in-calendar nil) | 1217 | (setq mark-diary-entries-in-calendar nil) |
| 1253 | (redraw-calendar)) | 1218 | (redraw-calendar)) |
| 1254 | (let ((marking-diary-entries t) | 1219 | (let ((marking-diary-entries t) |
| 1255 | (dayname | 1220 | file-glob-attrs) |
| 1256 | (diary-name-pattern calendar-day-name-array | ||
| 1257 | calendar-day-abbrev-array)) | ||
| 1258 | (monthname | ||
| 1259 | (format "%s\\|\\*" | ||
| 1260 | (diary-name-pattern calendar-month-name-array | ||
| 1261 | calendar-month-abbrev-array))) | ||
| 1262 | (month "[0-9]+\\|\\*") | ||
| 1263 | (day "[0-9]+\\|\\*") | ||
| 1264 | (year "[0-9]+\\|\\*") | ||
| 1265 | file-glob-attrs marks) | ||
| 1266 | (with-current-buffer (find-file-noselect (diary-check-diary-file) t) | 1221 | (with-current-buffer (find-file-noselect (diary-check-diary-file) t) |
| 1267 | (save-excursion | 1222 | (save-excursion |
| 1268 | (when (eq major-mode default-major-mode) (diary-mode)) | 1223 | (when (eq major-mode default-major-mode) (diary-mode)) |
| @@ -1270,81 +1225,7 @@ diary entries." | |||
| 1270 | (message "Marking diary entries...") | 1225 | (message "Marking diary entries...") |
| 1271 | (setq file-glob-attrs (nth 1 (diary-pull-attrs nil '()))) | 1226 | (setq file-glob-attrs (nth 1 (diary-pull-attrs nil '()))) |
| 1272 | (with-syntax-table diary-syntax-table | 1227 | (with-syntax-table diary-syntax-table |
| 1273 | (dolist (date-form diary-date-forms) | 1228 | (diary-mark-entries-1 'mark-calendar-date-pattern) |
| 1274 | (if (eq (car date-form) 'backup) | ||
| 1275 | (setq date-form (cdr date-form))) ; ignore 'backup directive | ||
| 1276 | (let* ((l (length date-form)) | ||
| 1277 | (d-name-pos (- l (length (memq 'dayname date-form)))) | ||
| 1278 | (d-name-pos (if (/= l d-name-pos) (1+ d-name-pos))) | ||
| 1279 | (m-name-pos (- l (length (memq 'monthname date-form)))) | ||
| 1280 | (m-name-pos (if (/= l m-name-pos) (1+ m-name-pos))) | ||
| 1281 | (d-pos (- l (length (memq 'day date-form)))) | ||
| 1282 | (d-pos (if (/= l d-pos) (1+ d-pos))) | ||
| 1283 | (m-pos (- l (length (memq 'month date-form)))) | ||
| 1284 | (m-pos (if (/= l m-pos) (1+ m-pos))) | ||
| 1285 | (y-pos (- l (length (memq 'year date-form)))) | ||
| 1286 | (y-pos (if (/= l y-pos) (1+ y-pos))) | ||
| 1287 | (regexp | ||
| 1288 | (concat | ||
| 1289 | "^\\(" | ||
| 1290 | (mapconcat 'eval date-form "\\)\\(") | ||
| 1291 | "\\)")) | ||
| 1292 | (case-fold-search t)) | ||
| 1293 | (goto-char (point-min)) | ||
| 1294 | (while (re-search-forward regexp nil t) | ||
| 1295 | (let* ((dd-name | ||
| 1296 | (if d-name-pos | ||
| 1297 | (match-string-no-properties d-name-pos))) | ||
| 1298 | (mm-name | ||
| 1299 | (if m-name-pos | ||
| 1300 | (match-string-no-properties m-name-pos))) | ||
| 1301 | (mm (string-to-number | ||
| 1302 | (if m-pos | ||
| 1303 | (match-string-no-properties m-pos) | ||
| 1304 | ""))) | ||
| 1305 | (dd (string-to-number | ||
| 1306 | (if d-pos | ||
| 1307 | (match-string-no-properties d-pos) | ||
| 1308 | ""))) | ||
| 1309 | (y-str (if y-pos | ||
| 1310 | (match-string-no-properties y-pos))) | ||
| 1311 | (yy (if (not y-str) | ||
| 1312 | 0 | ||
| 1313 | (if (and (= (length y-str) 2) | ||
| 1314 | abbreviated-calendar-year) | ||
| 1315 | (let* ((current-y | ||
| 1316 | (extract-calendar-year | ||
| 1317 | (calendar-current-date))) | ||
| 1318 | (y (+ (string-to-number y-str) | ||
| 1319 | (* 100 | ||
| 1320 | (/ current-y 100))))) | ||
| 1321 | (if (> (- y current-y) 50) | ||
| 1322 | (- y 100) | ||
| 1323 | (if (> (- current-y y) 50) | ||
| 1324 | (+ y 100) | ||
| 1325 | y))) | ||
| 1326 | (string-to-number y-str))))) | ||
| 1327 | (setq marks (nth 1 | ||
| 1328 | (diary-pull-attrs | ||
| 1329 | (buffer-substring-no-properties | ||
| 1330 | (point) (line-end-position)) | ||
| 1331 | file-glob-attrs))) | ||
| 1332 | (if dd-name | ||
| 1333 | (mark-calendar-days-named | ||
| 1334 | (cdr (assoc-string | ||
| 1335 | dd-name | ||
| 1336 | (calendar-make-alist | ||
| 1337 | calendar-day-name-array | ||
| 1338 | 0 nil calendar-day-abbrev-array) t)) marks) | ||
| 1339 | (if mm-name | ||
| 1340 | (setq mm | ||
| 1341 | (if (string-equal mm-name "*") 0 | ||
| 1342 | (cdr (assoc-string | ||
| 1343 | mm-name | ||
| 1344 | (calendar-make-alist | ||
| 1345 | calendar-month-name-array | ||
| 1346 | 1 nil calendar-month-abbrev-array) t))))) | ||
| 1347 | (mark-calendar-date-pattern mm dd yy marks)))))) | ||
| 1348 | (mark-sexp-diary-entries) | 1229 | (mark-sexp-diary-entries) |
| 1349 | (run-hooks 'nongregorian-diary-marking-hook | 1230 | (run-hooks 'nongregorian-diary-marking-hook |
| 1350 | 'mark-diary-entries-hook)) | 1231 | 'mark-diary-entries-hook)) |
| @@ -1358,15 +1239,14 @@ diary entries." | |||
| 1358 | Each entry in the diary file (or included files) visible in the calendar window | 1239 | Each entry in the diary file (or included files) visible in the calendar window |
| 1359 | is marked. See the documentation for the function `list-sexp-diary-entries'." | 1240 | is marked. See the documentation for the function `list-sexp-diary-entries'." |
| 1360 | (let* ((sexp-mark (regexp-quote sexp-diary-entry-symbol)) | 1241 | (let* ((sexp-mark (regexp-quote sexp-diary-entry-symbol)) |
| 1361 | (s-entry (concat "^\\(" | 1242 | (s-entry (format "^\\(%s(\\)\\|\\(%s%s(diary-remind\\)" sexp-mark |
| 1362 | sexp-mark "(\\)\\|\\(" | ||
| 1363 | (regexp-quote diary-nonmarking-symbol) | 1243 | (regexp-quote diary-nonmarking-symbol) |
| 1364 | sexp-mark "(diary-remind\\)")) | 1244 | sexp-mark)) |
| 1365 | (file-glob-attrs (nth 1 (diary-pull-attrs nil '()))) | 1245 | (file-glob-attrs (nth 1 (diary-pull-attrs nil '()))) |
| 1366 | m y first-date last-date mark file-glob-attrs) | 1246 | m y first-date last-date mark file-glob-attrs) |
| 1367 | (with-current-buffer calendar-buffer | 1247 | (with-current-buffer calendar-buffer |
| 1368 | (setq m displayed-month) | 1248 | (setq m displayed-month |
| 1369 | (setq y displayed-year)) | 1249 | y displayed-year)) |
| 1370 | (increment-calendar-month m y -1) | 1250 | (increment-calendar-month m y -1) |
| 1371 | (setq first-date | 1251 | (setq first-date |
| 1372 | (calendar-absolute-from-gregorian (list m 1 y))) | 1252 | (calendar-absolute-from-gregorian (list m 1 y))) |
| @@ -1396,22 +1276,17 @@ is marked. See the documentation for the function `list-sexp-diary-entries'." | |||
| 1396 | (if (bolp) (backward-char 1)) | 1276 | (if (bolp) (backward-char 1)) |
| 1397 | (setq entry (buffer-substring-no-properties entry-start (point)))) | 1277 | (setq entry (buffer-substring-no-properties entry-start (point)))) |
| 1398 | (calendar-for-loop date from first-date to last-date do | 1278 | (calendar-for-loop date from first-date to last-date do |
| 1399 | (when (setq mark | 1279 | (when (setq mark (diary-sexp-entry |
| 1400 | (diary-sexp-entry | 1280 | sexp entry |
| 1401 | sexp entry | 1281 | (calendar-gregorian-from-absolute date))) |
| 1402 | (calendar-gregorian-from-absolute | 1282 | ;; FIXME does this make sense? |
| 1403 | date))) | 1283 | (setq marks (diary-pull-attrs entry file-glob-attrs) |
| 1404 | ;; FIXME does this make sense? | 1284 | marks (nth 1 (diary-pull-attrs entry file-glob-attrs))) |
| 1405 | (setq marks (diary-pull-attrs | 1285 | (mark-visible-calendar-date |
| 1406 | entry file-glob-attrs) | 1286 | (calendar-gregorian-from-absolute date) |
| 1407 | marks (nth 1 (diary-pull-attrs | 1287 | (if (< 0 (length marks)) |
| 1408 | entry file-glob-attrs))) | 1288 | marks |
| 1409 | (mark-visible-calendar-date | 1289 | (if (consp mark) (car mark)))))))))) |
| 1410 | (calendar-gregorian-from-absolute date) | ||
| 1411 | (if (< 0 (length marks)) | ||
| 1412 | marks | ||
| 1413 | (if (consp mark) | ||
| 1414 | (car mark)))))))))) | ||
| 1415 | 1290 | ||
| 1416 | (defun mark-included-diary-files () | 1291 | (defun mark-included-diary-files () |
| 1417 | "Mark the diary entries from other diary files with those of the diary file. | 1292 | "Mark the diary entries from other diary files with those of the diary file. |
| @@ -1468,8 +1343,8 @@ Optional argument COLOR is passed to `mark-visible-calendar-date' as MARK." | |||
| 1468 | 1343 | ||
| 1469 | (defun mark-calendar-date-pattern (month day year &optional color) | 1344 | (defun mark-calendar-date-pattern (month day year &optional color) |
| 1470 | "Mark all dates in the calendar window that conform to MONTH/DAY/YEAR. | 1345 | "Mark all dates in the calendar window that conform to MONTH/DAY/YEAR. |
| 1471 | A value of 0 in any position is a wildcard. | 1346 | A value of 0 in any position is a wildcard. Optional argument COLOR is |
| 1472 | Optional argument COLOR is passed to `mark-visible-calendar-date' as MARK." | 1347 | passed to `mark-visible-calendar-date' as MARK." |
| 1473 | (with-current-buffer calendar-buffer | 1348 | (with-current-buffer calendar-buffer |
| 1474 | (let ((m displayed-month) | 1349 | (let ((m displayed-month) |
| 1475 | (y displayed-year)) | 1350 | (y displayed-year)) |
| @@ -1491,6 +1366,68 @@ Optional argument COLOR is passed to `mark-visible-calendar-date' as MARK." | |||
| 1491 | (mark-visible-calendar-date (list month (1+ i) year) color)) | 1366 | (mark-visible-calendar-date (list month (1+ i) year) color)) |
| 1492 | (mark-visible-calendar-date (list month p-day year) color)))) | 1367 | (mark-visible-calendar-date (list month p-day year) color)))) |
| 1493 | 1368 | ||
| 1369 | ;; Bahai, Hebrew, Islamic. | ||
| 1370 | (defun calendar-mark-complex (month day year fromabs &optional color) | ||
| 1371 | "Mark dates in the calendar conforming to MONTH DAY YEAR of some system. | ||
| 1372 | The function FROMABS converts absolute dates to the appropriate date system. | ||
| 1373 | Optional argument COLOR is passed to `mark-visible-calendar-date' as MARK." | ||
| 1374 | ;; Not one of the simple cases--check all visible dates for match. | ||
| 1375 | ;; Actually, the following code takes care of ALL of the cases, but | ||
| 1376 | ;; it's much too slow to be used for the simple (common) cases. | ||
| 1377 | (let ((m displayed-month) | ||
| 1378 | (y displayed-year) | ||
| 1379 | first-date last-date) | ||
| 1380 | (increment-calendar-month m y -1) | ||
| 1381 | (setq first-date (calendar-absolute-from-gregorian (list m 1 y))) | ||
| 1382 | (increment-calendar-month m y 2) | ||
| 1383 | (setq last-date (calendar-absolute-from-gregorian | ||
| 1384 | (list m (calendar-last-day-of-month m y) y))) | ||
| 1385 | (calendar-for-loop date from first-date to last-date do | ||
| 1386 | (let* ((i-date (funcall fromabs date)) | ||
| 1387 | (i-month (extract-calendar-month i-date)) | ||
| 1388 | (i-day (extract-calendar-day i-date)) | ||
| 1389 | (i-year (extract-calendar-year i-date))) | ||
| 1390 | (and (or (zerop month) | ||
| 1391 | (= month i-month)) | ||
| 1392 | (or (zerop day) | ||
| 1393 | (= day i-day)) | ||
| 1394 | (or (zerop year) | ||
| 1395 | (= year i-year)) | ||
| 1396 | (mark-visible-calendar-date | ||
| 1397 | (calendar-gregorian-from-absolute date) color)))))) | ||
| 1398 | |||
| 1399 | ;; Bahai, Islamic. | ||
| 1400 | (defun calendar-mark-1 (month day year fromabs toabs &optional color) | ||
| 1401 | "Mark dates in the calendar conforming to MONTH DAY YEAR of some system. | ||
| 1402 | The function FROMABS converts absolute dates to the appropriate date system. | ||
| 1403 | The function TOABDS carries out the inverse operation. Optional argument | ||
| 1404 | COLOR is passed to `mark-visible-calendar-date' as MARK." | ||
| 1405 | (save-excursion | ||
| 1406 | (set-buffer calendar-buffer) | ||
| 1407 | (if (and (not (zerop month)) (not (zerop day))) | ||
| 1408 | (if (not (zerop year)) | ||
| 1409 | ;; Fully specified date. | ||
| 1410 | (let ((date (calendar-gregorian-from-absolute | ||
| 1411 | (funcall toabs (list month day year))))) | ||
| 1412 | (if (calendar-date-is-visible-p date) | ||
| 1413 | (mark-visible-calendar-date date color))) | ||
| 1414 | ;; Month and day in any year--this taken from the holiday stuff. | ||
| 1415 | (let* ((i-date (funcall fromabs | ||
| 1416 | (calendar-absolute-from-gregorian | ||
| 1417 | (list displayed-month 15 displayed-year)))) | ||
| 1418 | (m (extract-calendar-month i-date)) | ||
| 1419 | (y (extract-calendar-year i-date)) | ||
| 1420 | date) | ||
| 1421 | (unless (< m 1) ; calendar doesn't apply | ||
| 1422 | (increment-calendar-month m y (- 10 month)) | ||
| 1423 | (if (> m 7) ; date might be visible | ||
| 1424 | (let ((date (calendar-gregorian-from-absolute | ||
| 1425 | (funcall toabs (list month day y))))) | ||
| 1426 | (if (calendar-date-is-visible-p date) | ||
| 1427 | (mark-visible-calendar-date date color))))))) | ||
| 1428 | (calendar-mark-complex month day year | ||
| 1429 | 'calendar-bahai-from-absolute color)))) | ||
| 1430 | |||
| 1494 | (defun sort-diary-entries () | 1431 | (defun sort-diary-entries () |
| 1495 | "Sort the list of diary entries by time of day." | 1432 | "Sort the list of diary entries by time of day." |
| 1496 | (setq diary-entries-list (sort diary-entries-list 'diary-entry-compare))) | 1433 | (setq diary-entries-list (sort diary-entries-list 'diary-entry-compare))) |
| @@ -1694,11 +1631,8 @@ A number of built-in functions are available for this type of diary entry: | |||
| 1694 | 1631 | ||
| 1695 | Marking these entries is *extremely* time consuming, so these entries are | 1632 | Marking these entries is *extremely* time consuming, so these entries are |
| 1696 | best if they are nonmarking." | 1633 | best if they are nonmarking." |
| 1697 | (let ((s-entry (concat "^" | 1634 | (let ((s-entry (format "^%s?%s(" (regexp-quote diary-nonmarking-symbol) |
| 1698 | (regexp-quote diary-nonmarking-symbol) | 1635 | (regexp-quote sexp-diary-entry-symbol))) |
| 1699 | "?" | ||
| 1700 | (regexp-quote sexp-diary-entry-symbol) | ||
| 1701 | "(")) | ||
| 1702 | entry-found file-glob-attrs marks) | 1636 | entry-found file-glob-attrs marks) |
| 1703 | (goto-char (point-min)) | 1637 | (goto-char (point-min)) |
| 1704 | (save-excursion | 1638 | (save-excursion |
| @@ -2216,8 +2150,8 @@ Fontify the region between BEG and END, quietly unless VERBOSE is non-nil." | |||
| 2216 | (defun diary-font-lock-sexps (limit) | 2150 | (defun diary-font-lock-sexps (limit) |
| 2217 | "Recognize sexp diary entry up to LIMIT for font-locking." | 2151 | "Recognize sexp diary entry up to LIMIT for font-locking." |
| 2218 | (if (re-search-forward | 2152 | (if (re-search-forward |
| 2219 | (concat "^" (regexp-quote diary-nonmarking-symbol) | 2153 | (format "^%s?\\(%s\\)" (regexp-quote diary-nonmarking-symbol) |
| 2220 | "?\\(" (regexp-quote sexp-diary-entry-symbol) "\\)") | 2154 | (regexp-quote sexp-diary-entry-symbol)) |
| 2221 | limit t) | 2155 | limit t) |
| 2222 | (condition-case nil | 2156 | (condition-case nil |
| 2223 | (save-restriction | 2157 | (save-restriction |
| @@ -2260,6 +2194,16 @@ names." | |||
| 2260 | '(1 diary-face))) | 2194 | '(1 diary-face))) |
| 2261 | diary-date-forms))) | 2195 | diary-date-forms))) |
| 2262 | 2196 | ||
| 2197 | (defmacro diary-font-lock-keywords-1 (markfunc listfunc feature months symbol) | ||
| 2198 | "Subroutine of the function `diary-font-lock-keywords'. | ||
| 2199 | If MARKFUNC is a member of `nongregorian-diary-marking-hook', or | ||
| 2200 | LISTFUNC of `nongregorian-diary-listing-hook', then require FEATURE | ||
| 2201 | and return a font-lock pattern matching array of MONTHS and marking SYMBOL." | ||
| 2202 | `(when (or (memq ',markfunc nongregorian-diary-marking-hook) | ||
| 2203 | (memq ',listfunc nongregorian-diary-listing-hook)) | ||
| 2204 | (require ',feature) | ||
| 2205 | (diary-font-lock-date-forms ,months ,symbol))) | ||
| 2206 | |||
| 2263 | (defvar calendar-hebrew-month-name-array-leap-year) | 2207 | (defvar calendar-hebrew-month-name-array-leap-year) |
| 2264 | (defvar calendar-islamic-month-name-array) | 2208 | (defvar calendar-islamic-month-name-array) |
| 2265 | (defvar calendar-bahai-month-name-array) | 2209 | (defvar calendar-bahai-month-name-array) |
| @@ -2270,27 +2214,21 @@ names." | |||
| 2270 | (append | 2214 | (append |
| 2271 | (diary-font-lock-date-forms calendar-month-name-array | 2215 | (diary-font-lock-date-forms calendar-month-name-array |
| 2272 | nil calendar-month-abbrev-array) | 2216 | nil calendar-month-abbrev-array) |
| 2273 | (when (or (memq 'mark-hebrew-diary-entries | 2217 | (diary-font-lock-keywords-1 mark-hebrew-diary-entries |
| 2274 | nongregorian-diary-marking-hook) | 2218 | list-hebrew-diary-entries |
| 2275 | (memq 'list-hebrew-diary-entries | 2219 | cal-hebrew |
| 2276 | nongregorian-diary-listing-hook)) | 2220 | calendar-hebrew-month-name-array-leap-year |
| 2277 | (require 'cal-hebrew) | 2221 | hebrew-diary-entry-symbol) |
| 2278 | (diary-font-lock-date-forms | 2222 | (diary-font-lock-keywords-1 mark-islamic-diary-entries |
| 2279 | calendar-hebrew-month-name-array-leap-year hebrew-diary-entry-symbol)) | 2223 | list-islamic-diary-entries |
| 2280 | (when (or (memq 'mark-islamic-diary-entries | 2224 | cal-islam |
| 2281 | nongregorian-diary-marking-hook) | 2225 | calendar-islamic-month-name-array |
| 2282 | (memq 'list-islamic-diary-entries | 2226 | islamic-diary-entry-symbol) |
| 2283 | nongregorian-diary-listing-hook)) | 2227 | (diary-font-lock-keywords-1 diary-bahai-mark-entries |
| 2284 | (require 'cal-islam) | 2228 | diary-bahai-list-entries |
| 2285 | (diary-font-lock-date-forms | 2229 | cal-bahai |
| 2286 | calendar-islamic-month-name-array islamic-diary-entry-symbol)) | 2230 | calendar-bahai-month-name-array |
| 2287 | (when (or (memq 'diary-bahai-mark-entries | 2231 | bahai-diary-entry-symbol) |
| 2288 | nongregorian-diary-marking-hook) | ||
| 2289 | (memq 'diary-bahai-list-entries | ||
| 2290 | nongregorian-diary-marking-hook)) | ||
| 2291 | (require 'cal-bahai) | ||
| 2292 | (diary-font-lock-date-forms | ||
| 2293 | calendar-bahai-month-name-array bahai-diary-entry-symbol)) | ||
| 2294 | (list | 2232 | (list |
| 2295 | (cons | 2233 | (cons |
| 2296 | (format "^%s.*$" (regexp-quote diary-include-string)) | 2234 | (format "^%s.*$" (regexp-quote diary-include-string)) |