;ELC ;;; Compiled ;;; in Emacs version 27.1 ;;; with all optimizations. ;;; This file uses dynamic docstrings, first added in Emacs 19.29. ;;; This file does not contain utf-8 non-ASCII characters, ;;; and so can be loaded in Emacs versions earlier than 23. ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;; (require 'calendar) #@46 Names of the months in the Persian calendar. (defconst calendar-persian-month-name-array ["Farvardin" "Ordibehest" "Xordad" "Tir" "Mordad" "Sahrivar" "Mehr" "Aban" "Azar" "Dey" "Bahman" "Esfand"] (#$ . 428)) (autoload 'calendar-julian-to-absolute "cal-julian") #@73 Absolute date of start of Persian calendar = March 19, 622 AD (Julian). (defconst calendar-persian-epoch 226896 (#$ . 695)) #@54 True if YEAR is a leap year on the Persian calendar. (defalias 'calendar-persian-leap-year-p #[(year) "\301\211\211\302X\203\303\\\202\304\\\305\"\306\"\307_\305\"\307W\207" [year mod 0 2346 2347 2820 768 683] 5 (#$ . 825)]) #@57 Return last day of MONTH, YEAR on the Persian calendar. (defalias 'calendar-persian-last-day-of-month #[(month year) "\302W\203\303\207\304W\204\305 !\203\306\207\307\207" [month year 7 31 12 calendar-persian-leap-year-p 30 29] 2 (#$ . 1063)]) #@159 Compute absolute date from Persian date DATE. The absolute date is the number of days elapsed since the (imaginary) Gregorian date Sunday, December 31, 1 BC. (defalias 'calendar-persian-to-absolute #[(date) "\211@\262\211A@\262\3068\262 \307W\203.\310 \n\311 \312\"TE!\313\314 \312\"_\\\202x\315\fS\316 S_\317\314 \320\\\312\"_\321\314\311 \320\\\312\"\322\"_\314\317\311\211 \320\\\312\"\322\"_\312\"\323\324\307\211 W\203s \325 \"\\T\211\202] *\n&+\207" [date year day month calendar-persian-epoch sum 2 0 calendar-persian-to-absolute mod 2820 1029983 floor + 365 683 2345 186 768 -568 1 calendar-persian-last-day-of-month m] 12 (#$ . 1322)]) #@50 Persian year corresponding to the absolute DATE. (defalias 'calendar-persian-year-from-absolute #[(date) "\306\307\211\310E!Z\311 \312\"\313 \312\"\311 \314\"\313 \314\"\311\315 \316\\_\312\"\317\315\n_\320\f_ \321U\203:S\202<\310$\211\307W\203LS\202N.\207" [date d0 n2820 d1 n768 d2 calendar-persian-to-absolute 1 -2345 floor 1029983 mod 280506 2820 366 + 768 1029617 n1 year] 6 (#$ . 1998)]) #@217 Compute the Persian equivalent for absolute date DATE. The result is a list of the form (MONTH DAY YEAR). The absolute date is the number of days elapsed since the imaginary Gregorian date Sunday, December 31, 1 BC. (defalias 'calendar-persian-from-absolute #[(date) "\306!\307\310\311 \312 \" E!V\203\nT T\202\n*T\311\f\307 E!SZ\f E+\207" [date year sum m month day calendar-persian-year-from-absolute 1 0 calendar-persian-to-absolute calendar-persian-last-day-of-month] 6 (#$ . 2422)]) #@58 String of Persian date of Gregorian DATE, default today. (defalias 'calendar-persian-date-string #[(&optional date) "\306\206\307 \211\3108\262\311\312U\203\313\314!\202Z\312V\203\220S\262\315\211\211@\262\211A@\262\3108\262\316S_\\\310V\203{\211\317\320_\\\321\245Z\262\211\312W\203\\\322!S\262\211\320\246\312U\205r\211\323\246\312U?\206r\211\324\246\312U\262\203{\211T\262\266\203\262\325_\320\245\323\245[\324\245%\202Z\322T!\262\326\211\211@\262\211A@\262\3108\262\316S_\\\310V\203\355\211\317\320_\\\321\245Z\262\211\312W\203\316\322!S\262\211\320\246\312U\205\344\211\323\246\312U?\206\344\211\324\246\312U\262\203\355\211T\262\266\203\262\325_\320\245\323\245[\324\245\327\211\211@\262\211A@\262\3108\262\316S_\\\310V\203T\211\317\320_\\\321\245Z\262\211\312W\2035\322!S\262\211\320\246\312U\205K\211\323\246\312U?\206K\211\324\246\312U\262\203T\211T\262\266\203\262&\266\203!\211\3108\262 \211@\262\f SH\330 \211A@\262!\330\n!\330 !\311\331\332 \333#.\207" [date persian-date y m calendar-persian-month-name-array monthname calendar-persian-from-absolute calendar-current-date 2 nil 0 user-error "There was no year zero" + 31 23 4 10 abs 100 400 365 - (12 31 -1) number-to-string mapconcat eval "" day year month dayname calendar-date-display-form] 20 (#$ . 2932)]) #@60 Show the Persian calendar equivalent of the selected date. (defalias 'calendar-persian-print-date #[nil "\300\301\302\303\304!!\"\207" [message "Persian date: %s" calendar-persian-date-string calendar-cursor-to-date t] 5 (#$ . 4327) nil]) #@92 Interactively read the arguments for a Persian date command. Reads a year, month, and day. (defalias 'calendar-persian-read-date #[nil "\306\307\310\311\312\313 \211\3148\262\315\316U\203\317\320!\202Z\316V\203\220S\262\321\211\211@\262\211A@\262\3148\262\322S_\\\314V\203{\211\323\324_\\\325\245Z\262\211\316W\203\\\326!S\262\211\324\246\316U\205r\211\327\246\316U?\206r\211\330\246\316U\262\203{\211T\262\266\203\262\331_\324\245\327\245[\330\245%\202Z\326T!\262\332\211\211@\262\211A@\262\3148\262\322S_\\\314V\203\355\211\323\324_\\\325\245Z\262\211\316W\203\316\326!S\262\211\324\246\316U\205\344\211\327\246\316U?\206\344\211\330\246\316U\262\203\355\211T\262\266\203\262\331_\324\245\327\245[\330\245\333\211\211@\262\211A@\262\3148\262\322S_\\\314V\203T\211\323\324_\\\325\245Z\262\211\316W\2035\326!S\262\211\324\246\316U\205K\211\327\246\316U?\206K\211\330\246\316U\262\203T\211T\262\266\203\262&\266\203!\3148\262!#\334\335\336\337\340\341\342\n\315\"\"\315\334$\343\n\344\"\"A\345 \"\306\346\347\f\"\350\" E-C\207" [year completion-ignore-case calendar-persian-month-name-array month last day calendar-read "Persian calendar year (not 0): " #[(x) "\301U?\207" [x 0] 2] number-to-string calendar-persian-from-absolute calendar-current-date 2 nil 0 user-error "There was no year zero" + 31 23 4 10 abs 100 400 365 - (12 31 -1) t assoc completing-read "Persian calendar month name: " mapcar list append calendar-make-alist 1 calendar-persian-last-day-of-month format "Persian calendar day (1-%d): " #[(x) "\302W\205  X\207" [x last 0] 2]] 23 (#$ . 4572)]) #@79 Move cursor to Persian date DATE. Echo Persian date unless NOECHO is non-nil. (defalias 'calendar-persian-goto-date #[(date &optional noecho) "\302\303\304!!!\210 \206\305 \207" [date noecho calendar-goto-date calendar-gregorian-from-absolute calendar-persian-to-absolute calendar-persian-print-date] 4 (#$ . 6250) (calendar-persian-read-date)]) #@50 Persian calendar equivalent of date diary entry. (defalias 'diary-persian-date #[nil "\301\302\303!\"\207" [date format "Persian date: %s" calendar-persian-date-string] 4 (#$ . 6605)]) (provide 'cal-persia)