changeset 111693:1cb16ad0d1bc

Merge changes made in Gnus trunk. 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.
author Katsumi Yamaoka <yamaoka@jpl.org>
date Tue, 23 Nov 2010 22:24:15 +0000
parents 565fc8de76e1
children bef4f575201b
files 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
diffstat 6 files changed, 219 insertions(+), 34 deletions(-) [+]
line wrap: on
line diff
--- a/lisp/gnus/ChangeLog	Tue Nov 23 22:27:22 2010 +0200
+++ b/lisp/gnus/ChangeLog	Tue Nov 23 22:24:15 2010 +0000
@@ -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>
 
+	* 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.
--- a/lisp/gnus/color-lab.el	Tue Nov 23 22:27:22 2010 +0200
+++ b/lisp/gnus/color-lab.el	Tue Nov 23 22:24:15 2010 +0000
@@ -26,6 +26,10 @@
 
 ;;; 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."
--- a/lisp/gnus/nnheader.el	Tue Nov 23 22:27:22 2010 +0200
+++ b/lisp/gnus/nnheader.el	Tue Nov 23 22:24:15 2010 +0000
@@ -366,15 +366,13 @@
 	      (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)
-	      (end-of-line)
 	      (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)
--- a/lisp/gnus/nnspool.el	Tue Nov 23 22:27:22 2010 +0200
+++ b/lisp/gnus/nnspool.el	Tue Nov 23 22:24:15 2010 +0000
@@ -399,15 +399,16 @@
   "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
-	     (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)
--- a/lisp/gnus/shr-color.el	Tue Nov 23 22:27:22 2010 +0200
+++ b/lisp/gnus/shr-color.el	Tue Nov 23 22:24:15 2010 +0000
@@ -45,6 +45,157 @@
   :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\"."
@@ -78,30 +229,42 @@
   "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.
--- a/lisp/gnus/shr.el	Tue Nov 23 22:27:22 2010 +0200
+++ b/lisp/gnus/shr.el	Tue Nov 23 22:24:15 2010 +0000
@@ -502,6 +502,8 @@
 
 (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)))))))