Merge from emacs-24; up to 2012-12-06T01:39:03Z!monnier@iro.umontreal.ca
[bpt/emacs.git] / lisp / calc / calc.el
index ddba0fe..6f51be4 100644 (file)
@@ -464,6 +464,8 @@ to be identified as that note."
   :type 'string
   :group 'calc)
 
+(defvar math-format-date-cache) ; calc-forms.el
+
 (defface calc-nonselected-face
   '((t :inherit shadow
        :slant italic))
@@ -785,7 +787,9 @@ If nil, selections displayed but ignored.")
     "M-D-Y< H:mm:SSpp>"
     "D-M-Y< h:mm:SS>"
     "j<, h:mm:SS>"
-    "YYddd< hh:mm:ss>"))
+    "YYddd< hh:mm:ss>"
+    "ZYYY-MM-DD Www< hh:mm>"
+    "IYYY-Iww-w<Thh:mm:ss>"))
 
 (defcalcmodevar calc-autorange-units nil
   "If non-nil, automatically set unit prefixes to keep units in a reasonable range.")
@@ -2020,6 +2024,50 @@ See calc-keypad for details."
         (calc-refresh align)))
   (setq calc-refresh-count (1+ calc-refresh-count)))
 
+;; Dates that are built-in options for `calc-gregorian-switch' should be
+;; (YEAR MONTH DAY math-date-from-gregorian-dt(YEAR MONTH DAY)) for speed.
+(defcustom calc-gregorian-switch nil
+  "The first day the Gregorian calendar is used by Calc's date forms.
+This is `nil' (the default) if the Gregorian calendar is the only one used.
+Otherwise, it should be a list `(YEAR MONTH DAY)' when Calc begins to use
+the Gregorian calendar; Calc will use the Julian calendar for earlier dates.
+The dates in which different regions of the world began to use the
+Gregorian calendar vary quite a bit, even within a single country.
+If you want Calc's date forms to switch between the Julian and
+Gregorian calendar, you can specify the date or choose from several
+common choices.  Some of these choices should be taken with a grain
+of salt; for example different parts of France changed calendars at
+different times, and Sweden's change to the Gregorian calendar was
+complicated.  Also, the boundaries of the countries were different at
+the times of the calendar changes than they are now.
+The Vatican decided that the Gregorian calendar should take effect
+on 15 October 1582 (Gregorian), and many Catholic countries made
+the change then.  Great Britain and its colonies had the Gregorian
+calendar take effect on 14 September 1752 (Gregorian); this includes
+the United States."
+  :group 'calc
+  :version "24.4"
+  :type '(choice (const :tag "Always use the Gregorian calendar" nil)
+                 (const :tag "1582-10-15 - Italy, Poland, Portugal, Spain" (1582 10 15 577736))
+                 (const :tag "1582-12-20 - France" (1582 12 20 577802))
+                 (const :tag "1582-12-25 - Luxemburg" (1582 12 25 577807))
+                 (const :tag "1584-01-17 - Bohemia and Moravia" (1584 1 17 578195))
+                 (const :tag "1587-11-01 - Hungary" (1587 11 1 579579))
+                 (const :tag "1700-03-01 - Denmark" (1700 3 1 620607))
+                 (const :tag "1701-01-12 - Protestant Switzerland" (1701 1 12 620924))
+                 (const :tag "1752-09-14 - Great Britain and dominions" (1752 9 14 639797))
+                 (const :tag "1753-03-01 - Sweden" (1753 3 1 639965))
+                 (const :tag "1918-02-14 - Russia" (1918 2 14 700214))
+                 (const :tag "1919-04-14 - Romania" (1919 4 14 700638))
+                 (list :tag "(YEAR MONTH DAY)"
+                       (integer :tag "Year")
+                       (integer :tag "Month (integer)")
+                       (integer :tag "Day")))
+  :set (lambda (symbol value)
+         (set-default symbol value)
+         (setq math-format-date-cache nil)
+         (calc-refresh)))
+
 ;;;; The Calc Trail buffer.
 
 (defun calc-check-trail-aligned ()