comparison lisp/calendar/cal-french.el @ 20474:2ff24b456bb7

(calendar-french-single-byteify): New function. (calendar-goto-french-date): Use calendar-french-single-byteify instead of changing enable-multibyte-characters. test french-calendar-accents.
author Richard M. Stallman <rms@gnu.org>
date Sun, 21 Dec 1997 01:33:06 +0000
parents d179de7ad92e
children 129b8b78151c
comparison
equal deleted inserted replaced
20473:f8b70ad2fc2a 20474:2ff24b456bb7
62 62
63 (defconst french-calendar-multibyte-month-name-array 63 (defconst french-calendar-multibyte-month-name-array
64 ["Vendémiaire" "Brumaire" "Frimaire" "Nivôse" "Pluviôse" "Ventôse" 64 ["Vendémiaire" "Brumaire" "Frimaire" "Nivôse" "Pluviôse" "Ventôse"
65 "Germinal" "Floréal" "Prairial" "Messidor" "Thermidor" "Fructidor"]) 65 "Germinal" "Floréal" "Prairial" "Messidor" "Thermidor" "Fructidor"])
66 66
67 (defconst french-calendar-day-name-array
68 ["Primidi" "Duodi" "Tridi" "Quartidi" "Quintidi" "Sextidi" "Septidi"
69 "Octidi" "Nonidi" "Decadi"])
70
71 (defconst french-calendar-multibyte-special-days-array
72 ["de la Vertu" "du Génie" "du Labour" "de la Raison" "de la Récompense"
73 "de la Révolution"])
74
75 (defconst french-calendar-special-days-array
76 ["de la Vertu" "du Ge'nie" "du Labour" "de la Raison" "de la Re'compense"
77 "de la Re'volution"])
78
67 (defun french-calendar-month-name-array () 79 (defun french-calendar-month-name-array ()
68 (if (french-calendar-accents) 80 (if (french-calendar-accents)
69 french-calendar-multibyte-month-name-array 81 french-calendar-multibyte-month-name-array
70 french-calendar-month-name-array)) 82 french-calendar-month-name-array))
71 83
72 (defconst french-calendar-day-name-array
73 ["Primidi" "Duodi" "Tridi" "Quartidi" "Quintidi" "Sextidi" "Septidi"
74 "Octidi" "Nonidi" "Decadi"])
75
76 (defconst french-calendar-multibyte-special-days-array
77 ["de la Vertu" "du Génie" "du Labour" "de la Raison"
78 "de la Récompense" "de la Révolution"])
79
80 (defun french-calendar-day-name-array () 84 (defun french-calendar-day-name-array ()
81 french-calendar-day-name-array) 85 french-calendar-day-name-array)
82
83 (defconst french-calendar-special-days-array
84 ["de la Vertu" "du Ge'nie" "du Labour" "de la Raison" "de la Re'compense"
85 "de la Re'volution"])
86 86
87 (defun french-calendar-special-days-array () 87 (defun french-calendar-special-days-array ()
88 (if (french-calendar-accents) 88 (if (french-calendar-accents)
89 french-calendar-multibyte-special-days-array 89 french-calendar-multibyte-special-days-array
90 french-calendar-special-days-array)) 90 french-calendar-special-days-array))
194 (enable-multibyte-characters t)) 194 (enable-multibyte-characters t))
195 (if (string-equal f "") 195 (if (string-equal f "")
196 (message "Date is pre-French Revolution") 196 (message "Date is pre-French Revolution")
197 (message "French Revolutionary date: %s" f)))) 197 (message "French Revolutionary date: %s" f))))
198 198
199 ;; Convert a multibyte string to a singlebyte string
200 ;; that represents the same characters in Latin-1.
201 (defun calendar-french-single-byteify (string)
202 (if enable-multibyte-characters
203 string
204 (apply 'concat-chars
205 (mapcar (function (lambda (char) (logand char 255)))
206 (let ((enable-multibyte-characters t))
207 (string-to-list string))))))
208
199 (defun calendar-goto-french-date (date &optional noecho) 209 (defun calendar-goto-french-date (date &optional noecho)
200 "Move cursor to French Revolutionary date DATE. 210 "Move cursor to French Revolutionary date DATE.
201 Echo French Revolutionary date unless NOECHO is t." 211 Echo French Revolutionary date unless NOECHO is t."
202 (interactive 212 (interactive
203 (let* ((oldval enable-multibyte-characters) 213 (let ((oldval enable-multibyte-characters)
204 (year (unwind-protect 214 (accents (french-calendar-accents))
205 (progn 215 (months (french-calendar-month-name-array))
206 (setq-default enable-multibyte-characters t) 216 (special-days (french-calendar-special-days-array)))
217 (setq months (mapcar 'calendar-french-single-byteify months))
218 (setq special-days
219 (mapcar 'calendar-french-single-byteify special-days))
220 (let* ((year
221 (progn
222 (calendar-read
223 (if accents
224 (calendar-french-single-byteify
225 "Année de la Révolution (>0): ")
226 "Anne'e de la Re'volution (>0): ")
227 '(lambda (x) (> x 0))
228 (int-to-string
229 (extract-calendar-year
230 (calendar-french-from-absolute
231 (calendar-absolute-from-gregorian
232 (calendar-current-date))))))))
233 (month-list
234 (mapcar 'list
235 (append months
236 (if (french-calendar-leap-year-p year)
237 (mapcar
238 '(lambda (x) (concat "Jour " x))
239 french-calendar-special-days-array)
240 (reverse
241 (cdr;; we don't want rev. day in a non-leap yr.
242 (reverse
243 (mapcar
244 '(lambda (x)
245 (concat "Jour " x))
246 special-days))))))))
247 (completion-ignore-case t)
248 (month (cdr (assoc
249 (capitalize
250 (completing-read
251 "Mois ou Sansculottide: "
252 month-list
253 nil t))
254 (calendar-make-alist
255 month-list
256 1
257 '(lambda (x) (capitalize (car x)))))))
258 (decade (if (> month 12)
259 1
207 (calendar-read 260 (calendar-read
208 (if (french-calendar-accents) 261 (if accents
209 "Année de la Révolution (>0): " 262 (calendar-french-single-byteify
210 "Anne'e de la Re'volution (>0): ") 263 "Décade (1-3): ")
211 '(lambda (x) (> x 0)) 264 "De'cade (1-3): ")
212 (int-to-string 265 '(lambda (x) (memq x '(1 2 3))))))
213 (extract-calendar-year 266 (day (if (> month 12)
214 (calendar-french-from-absolute 267 (- month 12)
215 (calendar-absolute-from-gregorian 268 (calendar-read
216 (calendar-current-date))))))) 269 "Jour (1-10): "
217 (setq-default enable-multibyte-characters oldval))) 270 '(lambda (x) (and (<= 1 x) (<= x 10))))))
218 (month-list 271 (month (if (> month 12) 13 month))
219 (mapcar 'list 272 (day (+ day (* 10 (1- decade)))))
220 (append (french-calendar-month-name-array) 273 (list (list month day year)))))
221 (if (french-calendar-leap-year-p year)
222 (mapcar
223 '(lambda (x) (concat "Jour " x))
224 (french-calendar-special-days-array))
225 (reverse
226 (cdr;; we don't want rev. day in a non-leap yr.
227 (reverse
228 (mapcar
229 '(lambda (x) (concat "Jour " x))
230 (french-calendar-special-days-array)))))))))
231 (completion-ignore-case t)
232 (month (cdr (assoc
233 (capitalize
234 (completing-read
235 "Mois ou Sansculottide: "
236 month-list
237 nil t))
238 (calendar-make-alist
239 month-list
240 1
241 '(lambda (x) (capitalize (car x)))))))
242 (decade (if (> month 12)
243 1
244 (calendar-read
245 (if (french-calendar-accents)
246 "Décade (1-3): "
247 "De'cade (1-3): ")
248 '(lambda (x) (memq x '(1 2 3))))))
249 (day (if (> month 12)
250 (- month 12)
251 (calendar-read
252 "Jour (1-10): "
253 '(lambda (x) (and (<= 1 x) (<= x 10))))))
254 (month (if (> month 12) 13 month))
255 (day (+ day (* 10 (1- decade)))))
256 (list (list month day year))))
257 (calendar-goto-date (calendar-gregorian-from-absolute 274 (calendar-goto-date (calendar-gregorian-from-absolute
258 (calendar-absolute-from-french date))) 275 (calendar-absolute-from-french date)))
259 (or noecho (calendar-print-french-date))) 276 (or noecho (calendar-print-french-date)))
260 277
261 (defun diary-french-date () 278 (defun diary-french-date ()