]> code.delx.au - gnu-emacs/commitdiff
Merge changes made in Gnus trunk.
authorGnus developers <ding@gnus.org>
Tue, 23 Nov 2010 22:24:15 +0000 (22:24 +0000)
committerKatsumi Yamaoka <yamaoka@jpl.org>
Tue, 23 Nov 2010 22:24:15 +0000 (22:24 +0000)
nnheader.el (nnheader-parse-head): Bug fix.  Properly position point when parsing headers.
nnspool.el (nnspool-insert-nov-head): Bug fix.  Make sure point is positioned properly when parsing headers.
shr-color.el (shr-color->hexadecimal): Add support for color names.
color-lab.el (boundp): Bind float-pi for Emacs < 23.3.
shr.el (shr-insert-color-overlay): Split stuff like "#444444 !important" to find the real colour.

lisp/gnus/ChangeLog
lisp/gnus/color-lab.el
lisp/gnus/nnheader.el
lisp/gnus/nnspool.el
lisp/gnus/shr-color.el
lisp/gnus/shr.el

index b501b5ec55c0d39c3e274dc34c47bdbb4be2815d..3717191ba32565d7b2ec32edec4c34eca00c3e6e 100644 (file)
@@ -1,5 +1,22 @@
+2010-11-23  Lars Magne Ingebrigtsen  <larsi@gnus.org>
+
+       * shr.el (shr-insert-color-overlay): Split stuff like
+       "#444444 !important" to find the real colour.
+
+2010-11-23  Andrew Cohen  <cohen@andy.bu.edu>
+
+       * nnheader.el (nnheader-parse-head): Bug fix.  Properly position
+       point when parsing headers.
+
+       * nnspool.el (nnspool-insert-nov-head): Bug fix.  Make sure point
+       is positioned properly when parsing headers.
+
 2010-11-23  Julien Danjou  <julien@danjou.info>
 
 2010-11-23  Julien Danjou  <julien@danjou.info>
 
+       * color-lab.el (boundp): Bind float-pi for Emacs < 23.3.
+
+       * shr-color.el (shr-color->hexadecimal): Add support for color names.
+
        * shr.el (shr-parse-style): Replace \n with space in style parsing.
 
        * shr-color.el (shr-color-hsl-to-rgb-fractions): Use shr-color-hue-to-rgb.
        * shr.el (shr-parse-style): Replace \n with space in style parsing.
 
        * shr-color.el (shr-color-hsl-to-rgb-fractions): Use shr-color-hue-to-rgb.
index 997bdbfc1458c669c2cb471a1c99d7d5544473dd..16f711a3c9a76a3b1c401778be499c8fd16ac2c0 100644 (file)
 
 ;;; Code:
 
 
 ;;; Code:
 
+;; Emacs < 23.3
+(unless (boundp 'float-pi)
+  (defconst float-pi (* 4 (atan 1)) "The value of Pi (3.1415926...)."))
+
 (defun rgb->hsv (red green blue)
   "Convert RED GREEN BLUE values to HSV representation.
 Hue is in radian. Saturation and values are between 0 and 1."
 (defun rgb->hsv (red green blue)
   "Convert RED GREEN BLUE values to HSV representation.
 Hue is in radian. Saturation and values are between 0 and 1."
index 4bf4588687eb472739d1af67551b409d2568c6be..08dc96d945bc044800ec923546828e4b19da8d1a 100644 (file)
@@ -366,15 +366,13 @@ on your system, you could say something like:
              (setq num 0
                    beg (point-min)
                    end (point-max))
              (setq num 0
                    beg (point-min)
                    end (point-max))
-           (goto-char (point-min))
            ;; Search to the beginning of the next header.  Error
            ;; messages do not begin with 2 or 3.
            (when (re-search-forward "^[23][0-9]+ " nil t)
            ;; Search to the beginning of the next header.  Error
            ;; messages do not begin with 2 or 3.
            (when (re-search-forward "^[23][0-9]+ " nil t)
-             (end-of-line)
              (setq num (read cur)
                    beg (point)
                    end (if (search-forward "\n.\n" nil t)
              (setq num (read cur)
                    beg (point)
                    end (if (search-forward "\n.\n" nil t)
-                           (- (point) 2)
+                           (goto-char  (- (point) 2))
                          (point)))))
       (with-temp-buffer
        (insert-buffer-substring cur beg end)
                          (point)))))
       (with-temp-buffer
        (insert-buffer-substring cur beg end)
index 35987277b3d312e5d04cb275ab0bc04d71153d52..1916c1ac9ad6aa0cc9dc438fc35d1baa4b1ea8c5 100644 (file)
@@ -399,15 +399,16 @@ there.")
   "Read the head of ARTICLE, convert to NOV headers, and insert."
   (save-excursion
     (let ((cur (current-buffer))
   "Read the head of ARTICLE, convert to NOV headers, and insert."
   (save-excursion
     (let ((cur (current-buffer))
-         buf)
+          buf)
       (setq buf (nnheader-set-temp-buffer " *nnspool head*"))
       (when (nnheader-insert-head
       (setq buf (nnheader-set-temp-buffer " *nnspool head*"))
       (when (nnheader-insert-head
-            (nnspool-article-pathname nnspool-current-group article))
-       (nnheader-insert-article-line article)
-       (let ((headers (nnheader-parse-head)))
-         (set-buffer cur)
-         (goto-char (point-max))
-         (nnheader-insert-nov headers)))
+             (nnspool-article-pathname nnspool-current-group article))
+        (nnheader-insert-article-line article)
+        (goto-char (point-min))
+        (let ((headers (nnheader-parse-head)))
+          (set-buffer cur)
+          (goto-char (point-max))
+          (nnheader-insert-nov headers)))
       (kill-buffer buf))))
 
 (defun nnspool-sift-nov-with-sed (articles file)
       (kill-buffer buf))))
 
 (defun nnspool-sift-nov-with-sed (articles file)
index 5a9aff9416d7a98835c9a3f39e2f6875677a7a97..d611609e39c2aca1d06302ea149d9ec7a7b32845 100644 (file)
@@ -45,6 +45,157 @@ absolute value without any unit."
   :group 'shr
   :type 'integer)
 
   :group 'shr
   :type 'integer)
 
+(defconst shr-color-html-colors-alist
+  '(("AliceBlue" . "#F0F8FF")
+    ("AntiqueWhite" . "#FAEBD7")
+    ("Aqua" . "#00FFFF")
+    ("Aquamarine" . "#7FFFD4")
+    ("Azure" . "#F0FFFF")
+    ("Beige" . "#F5F5DC")
+    ("Bisque" . "#FFE4C4")
+    ("Black" . "#000000")
+    ("BlanchedAlmond" . "#FFEBCD")
+    ("Blue" . "#0000FF")
+    ("BlueViolet" . "#8A2BE2")
+    ("Brown" . "#A52A2A")
+    ("BurlyWood" . "#DEB887")
+    ("CadetBlue" . "#5F9EA0")
+    ("Chartreuse" . "#7FFF00")
+    ("Chocolate" . "#D2691E")
+    ("Coral" . "#FF7F50")
+    ("CornflowerBlue" . "#6495ED")
+    ("Cornsilk" . "#FFF8DC")
+    ("Crimson" . "#DC143C")
+    ("Cyan" . "#00FFFF")
+    ("DarkBlue" . "#00008B")
+    ("DarkCyan" . "#008B8B")
+    ("DarkGoldenRod" . "#B8860B")
+    ("DarkGray" . "#A9A9A9")
+    ("DarkGrey" . "#A9A9A9")
+    ("DarkGreen" . "#006400")
+    ("DarkKhaki" . "#BDB76B")
+    ("DarkMagenta" . "#8B008B")
+    ("DarkOliveGreen" . "#556B2F")
+    ("Darkorange" . "#FF8C00")
+    ("DarkOrchid" . "#9932CC")
+    ("DarkRed" . "#8B0000")
+    ("DarkSalmon" . "#E9967A")
+    ("DarkSeaGreen" . "#8FBC8F")
+    ("DarkSlateBlue" . "#483D8B")
+    ("DarkSlateGray" . "#2F4F4F")
+    ("DarkSlateGrey" . "#2F4F4F")
+    ("DarkTurquoise" . "#00CED1")
+    ("DarkViolet" . "#9400D3")
+    ("DeepPink" . "#FF1493")
+    ("DeepSkyBlue" . "#00BFFF")
+    ("DimGray" . "#696969")
+    ("DimGrey" . "#696969")
+    ("DodgerBlue" . "#1E90FF")
+    ("FireBrick" . "#B22222")
+    ("FloralWhite" . "#FFFAF0")
+    ("ForestGreen" . "#228B22")
+    ("Fuchsia" . "#FF00FF")
+    ("Gainsboro" . "#DCDCDC")
+    ("GhostWhite" . "#F8F8FF")
+    ("Gold" . "#FFD700")
+    ("GoldenRod" . "#DAA520")
+    ("Gray" . "#808080")
+    ("Grey" . "#808080")
+    ("Green" . "#008000")
+    ("GreenYellow" . "#ADFF2F")
+    ("HoneyDew" . "#F0FFF0")
+    ("HotPink" . "#FF69B4")
+    ("IndianRed" . "#CD5C5C")
+    ("Indigo" . "#4B0082")
+    ("Ivory" . "#FFFFF0")
+    ("Khaki" . "#F0E68C")
+    ("Lavender" . "#E6E6FA")
+    ("LavenderBlush" . "#FFF0F5")
+    ("LawnGreen" . "#7CFC00")
+    ("LemonChiffon" . "#FFFACD")
+    ("LightBlue" . "#ADD8E6")
+    ("LightCoral" . "#F08080")
+    ("LightCyan" . "#E0FFFF")
+    ("LightGoldenRodYellow" . "#FAFAD2")
+    ("LightGray" . "#D3D3D3")
+    ("LightGrey" . "#D3D3D3")
+    ("LightGreen" . "#90EE90")
+    ("LightPink" . "#FFB6C1")
+    ("LightSalmon" . "#FFA07A")
+    ("LightSeaGreen" . "#20B2AA")
+    ("LightSkyBlue" . "#87CEFA")
+    ("LightSlateGray" . "#778899")
+    ("LightSlateGrey" . "#778899")
+    ("LightSteelBlue" . "#B0C4DE")
+    ("LightYellow" . "#FFFFE0")
+    ("Lime" . "#00FF00")
+    ("LimeGreen" . "#32CD32")
+    ("Linen" . "#FAF0E6")
+    ("Magenta" . "#FF00FF")
+    ("Maroon" . "#800000")
+    ("MediumAquaMarine" . "#66CDAA")
+    ("MediumBlue" . "#0000CD")
+    ("MediumOrchid" . "#BA55D3")
+    ("MediumPurple" . "#9370D8")
+    ("MediumSeaGreen" . "#3CB371")
+    ("MediumSlateBlue" . "#7B68EE")
+    ("MediumSpringGreen" . "#00FA9A")
+    ("MediumTurquoise" . "#48D1CC")
+    ("MediumVioletRed" . "#C71585")
+    ("MidnightBlue" . "#191970")
+    ("MintCream" . "#F5FFFA")
+    ("MistyRose" . "#FFE4E1")
+    ("Moccasin" . "#FFE4B5")
+    ("NavajoWhite" . "#FFDEAD")
+    ("Navy" . "#000080")
+    ("OldLace" . "#FDF5E6")
+    ("Olive" . "#808000")
+    ("OliveDrab" . "#6B8E23")
+    ("Orange" . "#FFA500")
+    ("OrangeRed" . "#FF4500")
+    ("Orchid" . "#DA70D6")
+    ("PaleGoldenRod" . "#EEE8AA")
+    ("PaleGreen" . "#98FB98")
+    ("PaleTurquoise" . "#AFEEEE")
+    ("PaleVioletRed" . "#D87093")
+    ("PapayaWhip" . "#FFEFD5")
+    ("PeachPuff" . "#FFDAB9")
+    ("Peru" . "#CD853F")
+    ("Pink" . "#FFC0CB")
+    ("Plum" . "#DDA0DD")
+    ("PowderBlue" . "#B0E0E6")
+    ("Purple" . "#800080")
+    ("Red" . "#FF0000")
+    ("RosyBrown" . "#BC8F8F")
+    ("RoyalBlue" . "#4169E1")
+    ("SaddleBrown" . "#8B4513")
+    ("Salmon" . "#FA8072")
+    ("SandyBrown" . "#F4A460")
+    ("SeaGreen" . "#2E8B57")
+    ("SeaShell" . "#FFF5EE")
+    ("Sienna" . "#A0522D")
+    ("Silver" . "#C0C0C0")
+    ("SkyBlue" . "#87CEEB")
+    ("SlateBlue" . "#6A5ACD")
+    ("SlateGray" . "#708090")
+    ("SlateGrey" . "#708090")
+    ("Snow" . "#FFFAFA")
+    ("SpringGreen" . "#00FF7F")
+    ("SteelBlue" . "#4682B4")
+    ("Tan" . "#D2B48C")
+    ("Teal" . "#008080")
+    ("Thistle" . "#D8BFD8")
+    ("Tomato" . "#FF6347")
+    ("Turquoise" . "#40E0D0")
+    ("Violet" . "#EE82EE")
+    ("Wheat" . "#F5DEB3")
+    ("White" . "#FFFFFF")
+    ("WhiteSmoke" . "#F5F5F5")
+    ("Yellow" . "#FFFF00")
+    ("YellowGreen" . "#9ACD32"))
+  "Alist of HTML colors.
+Each entry should have the form (COLOR-NAME . HEXADECIMAL-COLOR).")
+
 (defun shr-color-relative-to-absolute (number)
   "Convert a relative NUMBER to absolute. If NUMBER is absolute, return NUMBER.
 This will convert \"80 %\" to 204, \"100 %\" to 255 but \"123\" to \"123\"."
 (defun shr-color-relative-to-absolute (number)
   "Convert a relative NUMBER to absolute. If NUMBER is absolute, return NUMBER.
 This will convert \"80 %\" to 204, \"100 %\" to 255 but \"123\" to \"123\"."
@@ -78,30 +229,42 @@ This will convert \"80 %\" to 204, \"100 %\" to 255 but \"123\" to \"123\"."
   "Convert any color format to hexadecimal representation.
 Like rgb() or hsl()."
   (when color
   "Convert any color format to hexadecimal representation.
 Like rgb() or hsl()."
   (when color
-    (cond ((or (string-match
-                "rgb(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*)"
-                color)
-               (string-match
-                "rgba(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)"
-                color))
-           (format "#%02X%02X%02X"
-                   (shr-color-relative-to-absolute (match-string-no-properties 1 color))
-                   (shr-color-relative-to-absolute (match-string-no-properties 2 color))
-                   (shr-color-relative-to-absolute (match-string-no-properties 3 color))))
-          ((or (string-match
-                "hsl(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*)"
-                color)
-               (string-match
-                "hsla(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)"
-                color))
-           (let ((h (/ (string-to-number (match-string-no-properties 1 color)) 360.0))
-                 (s (/ (string-to-number (match-string-no-properties 2 color)) 100.0))
-                 (l (/ (string-to-number (match-string-no-properties 3 color)) 100.0)))
-             (destructuring-bind (r g b)
-                 (shr-color-hsl-to-rgb-fractions h s l)
-               (format "#%02X%02X%02X" (* r 255) (* g 255) (* b 255)))))
-          (t
-           color))))
+    (cond
+     ;; Hexadecimal color: #abc or #aabbcc
+     ((string-match-p
+       "#[0-9a-fA-F]\\{3\\}[0-9a-fA-F]\\{3\\}?"
+       color)
+      color)
+     ;; rgb() or rgba() colors
+     ((or (string-match
+           "rgb(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*)"
+           color)
+          (string-match
+           "rgba(\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*\\([0-9]\\{1,3\\}\\(?:\s*%\\)?\\)\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)"
+           color))
+      (format "#%02X%02X%02X"
+              (shr-color-relative-to-absolute (match-string-no-properties 1 color))
+              (shr-color-relative-to-absolute (match-string-no-properties 2 color))
+              (shr-color-relative-to-absolute (match-string-no-properties 3 color))))
+     ;; hsl() or hsla() colors
+     ((or (string-match
+           "hsl(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*)"
+           color)
+          (string-match
+           "hsla(\s*\\([0-9]\\{1,3\\}\\)\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*\\([0-9]\\{1,3\\}\\)\s*%\s*,\s*[0-9]*\.?[0-9]+\s*%?\s*)"
+           color))
+      (let ((h (/ (string-to-number (match-string-no-properties 1 color)) 360.0))
+            (s (/ (string-to-number (match-string-no-properties 2 color)) 100.0))
+            (l (/ (string-to-number (match-string-no-properties 3 color)) 100.0)))
+        (destructuring-bind (r g b)
+            (shr-color-hsl-to-rgb-fractions h s l)
+          (format "#%02X%02X%02X" (* r 255) (* g 255) (* b 255)))))
+     ;; Color names
+     ((assoc color shr-color-html-colors-alist)
+      (cdr (assoc-string color shr-color-html-colors-alist t)))
+     ;; Unrecognized color :(
+     (t
+      nil))))
 
 (defun set-minimum-interval (val1 val2 min max interval &optional fixed)
   "Set minimum interval between VAL1 and VAL2 to INTERVAL.
 
 (defun set-minimum-interval (val1 val2 min max interval &optional fixed)
   "Set minimum interval between VAL1 and VAL2 to INTERVAL.
index 1efa31ad17686611bc368cfb1755604922265856..8398e8a6114fbd5eb618e0faec71719df146f6e9 100644 (file)
@@ -502,6 +502,8 @@ START, and END."
 
 (defun shr-insert-color-overlay (color start end)
   (when color
 
 (defun shr-insert-color-overlay (color start end)
   (when color
+    (when (string-match " " color)
+      (setq color (car (split-string color))))
     (let ((overlay (make-overlay start end)))
       (overlay-put overlay 'face (cons 'foreground-color
                                        (cadr (shr-color-check color)))))))
     (let ((overlay (make-overlay start end)))
       (overlay-put overlay 'face (cons 'foreground-color
                                        (cadr (shr-color-check color)))))))