Commit 094ae2ab authored by Gnus developers's avatar Gnus developers Committed by Katsumi Yamaoka
Browse files

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.
parent f8ab8c1f
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.
......
......@@ -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."
......
......@@ -366,15 +366,13 @@ on your system, you could say something like:
(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)
......
......@@ -399,15 +399,16 @@ there.")
"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)
......
......@@ -45,6 +45,157 @@ absolute value without any unit."
: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 @@ 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
(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.
......
......@@ -502,6 +502,8 @@ START, and END."
(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)))))))
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment