Correct copyright years to reflect the original newsticker.el from
[bpt/emacs.git] / lisp / net / newsticker-reader.el
CommitLineData
2415d4c6
UJ
1;;; newsticker-reader.el --- Generic RSS reader functions.
2
931b2f31
GM
3;; Copyright (C) 2003, 2004, 2005, 2006, 2007, 2008
4;; Free Software Foundation, Inc.
2415d4c6
UJ
5
6;; This file is part of GNU Emacs.
7
8;; Author: Ulf Jasper <ulf.jasper@web.de>
9;; Filename: newsticker-reader.el
10;; URL: http://www.nongnu.org/newsticker
11;; Time-stamp: "7. Juni 2008, 15:34:08 (ulf)"
931b2f31 12;; CVS-Version: $Id: newsticker-reader.el,v 1.3 2008/06/10 03:08:58 gm Exp $
2415d4c6
UJ
13
14;; ======================================================================
15
16;; GNU Emacs is free software: you can redistribute it and/or modify
17;; it under the terms of the GNU General Public License as published by
18;; the Free Software Foundation, either version 3 of the License, or
19;; (at your option) any later version.
20
21;; GNU Emacs is distributed in the hope that it will be useful,
22;; but WITHOUT ANY WARRANTY; without even the implied warranty of
23;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
24;; GNU General Public License for more details.
25
26;; You should have received a copy of the GNU General Public License
27;; along with GNU Emacs. If not, see <http://www.gnu.org/licenses/>.
28
29;; ======================================================================
30;;; Commentary:
31
32;; See newsticker.el
33
34;; ======================================================================
35;;; Code:
36
37(require 'newsticker-backend)
38
39;; ======================================================================
40;;; Customization
41;; ======================================================================
42(defun newsticker--set-customvar-formatting (symbol value)
43 "Set newsticker-variable SYMBOL value to VALUE.
44Calls all actions which are necessary in order to make the new
45value effective."
46 (if (or (not (boundp symbol))
47 (equal (symbol-value symbol) value))
48 (set symbol value)
49 ;; something must have changed
50 (set symbol value)
51 (when (fboundp 'newsticker--forget-preformatted)
52 (newsticker--forget-preformatted))))
53
54;; ======================================================================
55;; reader
56(defgroup newsticker-reader nil
57 "Settings for the feed reader."
58 :group 'newsticker)
59
60(defcustom newsticker-frontend
61 'newsticker-treeview
62 "Newsticker frontend for reading news.
63This must be one of the functions `newsticker-plainview' or
64`newsticker-treeview'."
65 :type '(choice :tag "Frontend"
66 (const :tag "Single buffer (plainview)" newsticker-plainview)
67 (const :tag "Tree view (treeview)" newsticker-treeview))
68 :group 'newsticker-reader)
69
70;; image related things
71(defcustom newsticker-enable-logo-manipulations
72 t
73 "If non-nil newsticker manipulates logo images.
74This enables the following image properties: heuristic mask for all
75logos, and laplace-conversion for images without new items."
76 :type 'boolean
77 :group 'newsticker-reader)
78
79(defcustom newsticker-justification
80 'left
81 "How to fill item descriptions.
82If non-nil newsticker calls `fill-region' to wrap long lines in
83item descriptions. However, if an item description contains HTML
84text and `newsticker-html-renderer' is non-nil, filling is not
85done."
86 :type '(choice :tag "Justification"
87 (const :tag "No filling" nil)
88 (const :tag "Left" left)
89 (const :tag "Right" right)
90 (const :tag "Center" center)
91 (const :tag "Full" full))
92 :set 'newsticker--set-customvar-formatting
93 :group 'newsticker-reader)
94
95(defcustom newsticker-use-full-width
96 t
97 "Decides whether to use the full window width when filling.
98If non-nil newsticker sets `fill-column' so that the whole
99window is used when filling. See also `newsticker-justification'."
100 :type 'boolean
101 :set 'newsticker--set-customvar-formatting
102 :group 'newsticker-reader)
103
104(defcustom newsticker-html-renderer
105 nil
106 "Function for rendering HTML contents.
107If non-nil, newsticker.el will call this function whenever it finds
108HTML-like tags in item descriptions. Possible functions are, for
109example, `w3m-region', `w3-region', and (if you have htmlr.el installed)
110`newsticker-htmlr-render'.
111
112In order to make sure that the HTML renderer is loaded when you
113run newsticker, you should add one of the following statements to
114your .emacs. If you use w3m,
115
116 (autoload 'w3m-region \"w3m\"
117 \"Render region in current buffer and replace with result.\" t)
118
119 (autoload 'w3m-toggle-inline-image \"w3m\"
120 \"Toggle the visibility of an image under point.\" t)
121
122or, if you use w3,
123
124 (require 'w3-auto)
125
126or, if you use htmlr
127
128 (require 'htmlr)"
129 :type '(choice :tag "Function"
130 (const :tag "None" nil)
131 (const :tag "w3" w3-region)
132 (const :tag "w3m" w3m-region)
133 (const :tag "htmlr" newsticker-htmlr-render))
134 :set 'newsticker--set-customvar-formatting
135 :group 'newsticker-reader)
136
137(defcustom newsticker-date-format
138 "(%A, %H:%M)"
139 "Format for the date part in item and feed lines.
140See `format-time-string' for a list of valid specifiers."
141 :type 'string
142 :set 'newsticker--set-customvar-formatting
143 :group 'newsticker-reader)
144
145;; ======================================================================
146;;; Utility functions
147;; ======================================================================
148(defun newsticker--insert-enclosure (item keymap)
149 "Insert enclosure element of a news ITEM into the current buffer.
150KEYMAP will be applied."
151 (let ((enclosure (newsticker--enclosure item))
152 (beg (point)))
153 (when enclosure
154 (let ((url (cdr (assoc 'url enclosure)))
155 (length (string-to-number (or (cdr (assoc 'length enclosure))
156 "-1")))
157 (type (cdr (assoc 'type enclosure))))
158 (cond ((> length 1048576)
159 (insert (format "Enclosed file (%s, %1.2f MBytes)" type
160 (/ length 1048576))))
161 ((> length 1024)
162 (insert (format "Enclosed file (%s, %1.2f KBytes)" type
163 (/ length 1024))))
164 ((> length 0)
165 (insert (format "Enclosed file (%s, %1.2f Bytes)" type
166 length)))
167 (t
168 (insert (format "Enclosed file (%s, unknown size)" type))))
169 (add-text-properties beg (point)
170 (list 'mouse-face 'highlight
171 'nt-link url
172 'help-echo (format
173 "mouse-2: visit (%s)" url)
174 'keymap keymap
175 'nt-face 'enclosure
176 'nt-type 'desc))
177 (insert "\n")))))
178
179(defun newsticker--print-extra-elements (item keymap)
180 "Insert extra-elements of ITEM in a pretty form into the current buffer.
181KEYMAP is applied."
182 (let ((ignored-elements '(items link title description content
183 content:encoded dc:subject
184 dc:date entry item guid pubDate
185 published updated
186 enclosure))
187 (left-column-width 1))
188 (mapc (lambda (extra-element)
189 (when (listp extra-element) ;; take care of broken xml
190 ;; data, 2007-05-25
191 (unless (memq (car extra-element) ignored-elements)
192 (setq left-column-width (max left-column-width
193 (length (symbol-name
194 (car extra-element))))))))
195 (newsticker--extra item))
196 (mapc (lambda (extra-element)
197 (when (listp extra-element) ;; take care of broken xml
198 ;; data, 2007-05-25
199 (unless (memq (car extra-element) ignored-elements)
200 (newsticker--do-print-extra-element extra-element
201 left-column-width
202 keymap))))
203 (newsticker--extra item))))
204
205(defun newsticker--do-print-extra-element (extra-element width keymap)
206 "Actually print an EXTRA-ELEMENT using the given WIDTH.
207KEYMAP is applied."
208 (let ((name (symbol-name (car extra-element))))
209 (insert (format "%s: " name))
210 (insert (make-string (- width (length name)) ? )))
211 (let (;;(attributes (cadr extra-element)) ;FIXME!!!!
212 (contents (cddr extra-element)))
213 (cond ((listp contents)
214 (mapc (lambda (i)
215 (if (and (stringp i)
216 (string-match "^http://.*" i))
217 (let ((pos (point)))
218 (insert i " ") ; avoid self-reference from the
219 ; nt-link thing
220 (add-text-properties
221 pos (point)
222 (list 'mouse-face 'highlight
223 'nt-link i
224 'help-echo
225 (format "mouse-2: visit (%s)" i)
226 'keymap keymap)))
227 (insert (format "%s" i))))
228 contents))
229 (t
230 (insert (format "%s" contents))))
231 (insert "\n")))
232
233(defun newsticker--image-read (feed-name-symbol disabled)
234 "Read the cached image for FEED-NAME-SYMBOL from disk.
235If DISABLED is non-nil the image will be converted to a disabled look
236\(unless `newsticker-enable-logo-manipulations' is not t\).
237Return the image."
238 (let ((image-name (concat newsticker-imagecache-dirname "/"
239 (symbol-name feed-name-symbol)))
240 (img nil))
241 (when (file-exists-p image-name)
242 (condition-case error-data
243 (setq img (create-image
244 image-name nil nil
245 :conversion (and newsticker-enable-logo-manipulations
246 disabled
247 'disabled)
248 :mask (and newsticker-enable-logo-manipulations
249 'heuristic)
250 :ascent 70))
251 (error
252 (message "Error: cannot create image for %s: %s"
253 feed-name-symbol error-data))))
254 img))
255
256;; the functions we need for retrieval and display
257;;;###autoload
258(defun newsticker-show-news ()
259 "Start reading news. You may want to bind this to a key."
260 (interactive)
261 (newsticker-start t) ;; will start only if not running
262 (funcall newsticker-frontend))
263
264;; ======================================================================
265;;; Toolbar
266;; ======================================================================
267(defconst newsticker--next-item-image
bee1c0fe
GM
268 (and (fboundp 'image-type-available-p)
269 (image-type-available-p 'xpm)
270 (create-image "/* XPM */
2415d4c6
UJ
271static char * next_xpm[] = {
272\"24 24 42 1\",
273\" c None\",
274\". c #000000\",
275\"+ c #7EB6DE\",
276\"@ c #82BBE2\",
277\"# c #85BEE4\",
278\"$ c #88C1E7\",
279\"% c #8AC3E8\",
280\"& c #87C1E6\",
281\"* c #8AC4E9\",
282\"= c #8CC6EA\",
283\"- c #8CC6EB\",
284\"; c #88C2E7\",
285\"> c #8BC5E9\",
286\", c #8DC7EB\",
287\"' c #87C0E6\",
288\") c #8AC4E8\",
289\"! c #8BC5EA\",
290\"~ c #8BC4E9\",
291\"{ c #88C1E6\",
292\"] c #89C3E8\",
293\"^ c #86BFE5\",
294\"/ c #83BBE2\",
295\"( c #82BBE1\",
296\"_ c #86C0E5\",
297\": c #87C0E5\",
298\"< c #83BCE2\",
299\"[ c #81B9E0\",
300\"} c #81BAE1\",
301\"| c #78B0D9\",
302\"1 c #7BB3DB\",
303\"2 c #7DB5DD\",
304\"3 c #7DB6DD\",
305\"4 c #72A9D4\",
306\"5 c #75ACD6\",
307\"6 c #76AED7\",
308\"7 c #77AFD8\",
309\"8 c #6BA1CD\",
310\"9 c #6EA4CF\",
311\"0 c #6FA6D1\",
312\"a c #6298C6\",
313\"b c #659BC8\",
314\"c c #5C91C0\",
315\" \",
316\" \",
317\" . \",
318\" .. \",
319\" .+. \",
320\" .@#. \",
321\" .#$%. \",
322\" .&*=-. \",
323\" .;>,,,. \",
324\" .;>,,,=. \",
325\" .')!==~;. \",
326\" .#{]*%;^/. \",
327\" .(#_':#<. \",
328\" .+[@</}. \",
329\" .|1232. \",
330\" .4567. \",
331\" .890. \",
332\" .ab. \",
333\" .c. \",
334\" .. \",
335\" . \",
336\" \",
337\" \",
338\" \"};
339"
bee1c0fe
GM
340 'xpm t))
341 "Image for the next item button.")
2415d4c6
UJ
342
343(defconst newsticker--previous-item-image
bee1c0fe
GM
344 (and (fboundp 'image-type-available-p)
345 (image-type-available-p 'xpm)
346 (create-image "/* XPM */
2415d4c6
UJ
347static char * previous_xpm[] = {
348\"24 24 39 1\",
349\" c None\",
350\". c #000000\",
351\"+ c #7BB3DB\",
352\"@ c #83BCE2\",
353\"# c #7FB8DF\",
354\"$ c #89C2E7\",
355\"% c #86BFE5\",
356\"& c #83BBE2\",
357\"* c #8CC6EA\",
358\"= c #8BC4E9\",
359\"- c #88C2E7\",
360\"; c #85BEE4\",
361\"> c #8DC7EB\",
362\", c #89C3E8\",
363\"' c #8AC4E8\",
364\") c #8BC5EA\",
365\"! c #88C1E6\",
366\"~ c #8AC4E9\",
367\"{ c #8AC3E8\",
368\"] c #86C0E5\",
369\"^ c #87C0E6\",
370\"/ c #87C0E5\",
371\"( c #82BBE2\",
372\"_ c #81BAE1\",
373\": c #7FB7DF\",
374\"< c #7DB6DD\",
375\"[ c #7DB5DD\",
376\"} c #7CB4DC\",
377\"| c #79B1DA\",
378\"1 c #76ADD7\",
379\"2 c #77AFD8\",
380\"3 c #73AAD4\",
381\"4 c #70A7D1\",
382\"5 c #6EA5D0\",
383\"6 c #6CA2CE\",
384\"7 c #689ECB\",
385\"8 c #6399C7\",
386\"9 c #6095C4\",
387\"0 c #5C90C0\",
388\" \",
389\" \",
390\" . \",
391\" .. \",
392\" .+. \",
393\" .@#. \",
394\" .$%&. \",
395\" .*=-;. \",
396\" .>>*,%. \",
397\" .>>>*,%. \",
398\" .')**=-;. \",
399\" .;!,~{-%&. \",
400\" .;]^/;@#. \",
401\" .(@&_:+. \",
402\" .<[}|1. \",
403\" .2134. \",
404\" .567. \",
405\" .89. \",
406\" .0. \",
407\" .. \",
408\" . \",
409\" \",
410\" \",
411\" \"};
412"
bee1c0fe
GM
413 'xpm t))
414 "Image for the previous item button.")
2415d4c6
UJ
415
416(defconst newsticker--previous-feed-image
bee1c0fe
GM
417 (and (fboundp 'image-type-available-p)
418 (image-type-available-p 'xpm)
419 (create-image "/* XPM */
2415d4c6
UJ
420static char * prev_feed_xpm[] = {
421\"24 24 52 1\",
422\" c None\",
423\". c #000000\",
424\"+ c #70A7D2\",
425\"@ c #75ADD6\",
426\"# c #71A8D3\",
427\"$ c #79B1DA\",
428\"% c #7BB3DB\",
429\"& c #7DB5DD\",
430\"* c #83BBE2\",
431\"= c #7EB6DE\",
432\"- c #78B0D9\",
433\"; c #7FB7DE\",
434\"> c #88C2E7\",
435\", c #85BEE4\",
436\"' c #80B9E0\",
437\") c #80B8DF\",
438\"! c #8CC6EA\",
439\"~ c #89C3E8\",
440\"{ c #86BFE5\",
441\"] c #81BAE1\",
442\"^ c #7CB4DC\",
443\"/ c #7FB8DF\",
444\"( c #8DC7EB\",
445\"_ c #7BB3DC\",
446\": c #7EB7DE\",
447\"< c #8BC4E9\",
448\"[ c #8AC4E9\",
449\"} c #8AC3E8\",
450\"| c #87C0E6\",
451\"1 c #87C0E5\",
452\"2 c #83BCE2\",
453\"3 c #75ACD6\",
454\"4 c #7FB7DF\",
455\"5 c #77AED8\",
456\"6 c #71A8D2\",
457\"7 c #70A7D1\",
458\"8 c #76ADD7\",
459\"9 c #6CA2CE\",
460\"0 c #699FCC\",
461\"a c #73AAD4\",
462\"b c #6BA1CD\",
463\"c c #669CC9\",
464\"d c #6298C5\",
465\"e c #689ECB\",
466\"f c #6499C7\",
467\"g c #6095C3\",
468\"h c #5C91C0\",
469\"i c #5E93C2\",
470\"j c #5B90C0\",
471\"k c #588CBC\",
472\"l c #578CBC\",
473\"m c #5589BA\",
474\" \",
475\" \",
476\" ... . \",
477\" .+. .. \",
478\" .@. .#. \",
479\" .$. .%@. \",
480\" .&. .*=-. \",
481\" .;. .>,'%. \",
482\" .). .!~{]^. \",
483\" ./. .(!~{]_. \",
484\" .:. .!!<>,'%. \",
485\" .&. .~[}>{*=-. \",
486\" .$. .|1,2/%@. \",
487\" .3. .*]4%56. \",
488\" .7. .^$8#9. \",
489\" .0. .a7bc. \",
490\" .d. .efg. \",
491\" .h. .ij. \",
492\" .k. .l. \",
493\" .m. .. \",
494\" ... . \",
495\" \",
496\" \",
497\" \"};
498"
bee1c0fe
GM
499 'xpm t))
500 "Image for the previous feed button.")
2415d4c6
UJ
501
502(defconst newsticker--next-feed-image
bee1c0fe
GM
503 (and (fboundp 'image-type-available-p)
504 (image-type-available-p 'xpm)
505 (create-image "/* XPM */
2415d4c6
UJ
506static char * next_feed_xpm[] = {
507\"24 24 57 1\",
508\" c None\",
509\". c #000000\",
510\"+ c #6CA2CE\",
511\"@ c #75ADD6\",
512\"# c #71A8D3\",
513\"$ c #79B1DA\",
514\"% c #7EB7DE\",
515\"& c #7DB5DD\",
516\"* c #81BAE1\",
517\"= c #85BEE4\",
518\"- c #78B0D9\",
519\"; c #7FB7DE\",
520\"> c #83BCE3\",
521\", c #87C1E6\",
522\"' c #8AC4E9\",
523\") c #7BB3DB\",
524\"! c #80B8DF\",
525\"~ c #88C2E7\",
526\"{ c #8BC5E9\",
527\"] c #8DC7EB\",
528\"^ c #7CB4DC\",
529\"/ c #7FB8DF\",
530\"( c #84BDE3\",
531\"_ c #7BB3DC\",
532\": c #83BCE2\",
533\"< c #87C0E6\",
534\"[ c #8AC4E8\",
535\"} c #8BC5EA\",
536\"| c #8CC6EA\",
537\"1 c #88C1E6\",
538\"2 c #89C3E8\",
539\"3 c #8AC3E8\",
540\"4 c #7EB6DE\",
541\"5 c #82BBE1\",
542\"6 c #86C0E5\",
543\"7 c #87C0E5\",
544\"8 c #75ACD6\",
545\"9 c #7AB2DA\",
546\"0 c #81B9E0\",
547\"a c #82BBE2\",
548\"b c #71A8D2\",
549\"c c #70A7D1\",
550\"d c #74ACD6\",
551\"e c #699FCC\",
552\"f c #6EA5D0\",
553\"g c #72A9D4\",
554\"h c #669CC9\",
555\"i c #6298C5\",
556\"j c #679DCA\",
557\"k c #6BA1CD\",
558\"l c #6095C3\",
559\"m c #5C91C0\",
560\"n c #5F94C2\",
561\"o c #5B90C0\",
562\"p c #588CBC\",
563\"q c #578CBC\",
564\"r c #5589BA\",
565\" \",
566\" \",
567\" . ... \",
568\" .. .+. \",
569\" .@. .#. \",
570\" .$%. .@. \",
571\" .&*=. .-. \",
572\" .;>,'. .). \",
573\" .!=~{]. .^. \",
574\" ./(~{]]. ._. \",
575\" .%:<[}||. .). \",
576\" .&*=12'3~. .-. \",
577\" .$45=6<7. .@. \",
578\" .8940a:. .b. \",
579\" .cd-)&. .+. \",
580\" .efg8. .h. \",
581\" .ijk. .l. \",
582\" .mn. .o. \",
583\" .p. .q. \",
584\" .. .r. \",
585\" . ... \",
586\" \",
587\" \",
588\" \"};
589"
bee1c0fe
GM
590 'xpm t))
591 "Image for the next feed button.")
2415d4c6
UJ
592
593(defconst newsticker--mark-read-image
bee1c0fe
GM
594 (and (fboundp 'image-type-available-p)
595 (image-type-available-p 'xpm)
596 (create-image "/* XPM */
2415d4c6
UJ
597static char * mark_read_xpm[] = {
598\"24 24 44 1\",
599\" c None\",
600\". c #C20000\",
601\"+ c #BE0000\",
602\"@ c #C70000\",
603\"# c #CE0000\",
604\"$ c #C90000\",
605\"% c #BD0000\",
606\"& c #CB0000\",
607\"* c #D10000\",
608\"= c #D70000\",
609\"- c #D30000\",
610\"; c #CD0000\",
611\"> c #C60000\",
612\", c #D40000\",
613\"' c #DA0000\",
614\") c #DE0000\",
615\"! c #DB0000\",
616\"~ c #D60000\",
617\"{ c #D00000\",
618\"] c #DC0000\",
619\"^ c #E00000\",
620\"/ c #E40000\",
621\"( c #E10000\",
622\"_ c #DD0000\",
623\": c #D80000\",
624\"< c #E50000\",
625\"[ c #E70000\",
626\"} c #E60000\",
627\"| c #E20000\",
628\"1 c #E90000\",
629\"2 c #E80000\",
630\"3 c #E30000\",
631\"4 c #DF0000\",
632\"5 c #D90000\",
633\"6 c #CC0000\",
634\"7 c #C10000\",
635\"8 c #C30000\",
636\"9 c #BF0000\",
637\"0 c #B90000\",
638\"a c #BC0000\",
639\"b c #BB0000\",
640\"c c #B80000\",
641\"d c #B50000\",
642\"e c #B70000\",
643\" \",
644\" \",
645\" \",
646\" . + \",
647\" +@# $.% \",
648\" &*= -;> \",
649\" ,') !~{ \",
650\" ]^/ (_: \",
651\" (<[ }|) \",
652\" <[1 2<| \",
653\" }222[< \",
654\" }}}< \",
655\" 333| \",
656\" _4^4)] \",
657\" ~:' 5=- \",
658\" 6{- *#$ \",
659\" 7>$ @89 \",
660\" 0a+ %bc \",
661\" ddc edd \",
662\" ddd ddd \",
663\" d d \",
664\" \",
665\" \",
666\" \"};
667"
bee1c0fe
GM
668 'xpm t))
669 "Image for the mark read button.")
2415d4c6
UJ
670
671(defconst newsticker--mark-immortal-image
bee1c0fe
GM
672 (and (fboundp 'image-type-available-p)
673 (image-type-available-p 'xpm)
674 (create-image "/* XPM */
2415d4c6
UJ
675static char * mark_immortal_xpm[] = {
676\"24 24 93 2\",
677\" c None\",
678\". c #171717\",
679\"+ c #030303\",
680\"@ c #000000\",
681\"# c #181818\",
682\"$ c #090909\",
683\"% c #FFC960\",
684\"& c #FFCB61\",
685\"* c #FFCB62\",
686\"= c #FFC961\",
687\"- c #FFC75F\",
688\"; c #FFC65E\",
689\"> c #FFCA61\",
690\", c #FFCD63\",
691\"' c #FFCF65\",
692\") c #FFD065\",
693\"! c #FFCE64\",
694\"~ c #FFC35C\",
695\"{ c #FFC45D\",
696\"] c #FFD166\",
697\"^ c #FFD267\",
698\"/ c #FFD368\",
699\"( c #FFD167\",
700\"_ c #FFC05A\",
701\": c #010101\",
702\"< c #040404\",
703\"[ c #FFCC62\",
704\"} c #FFD569\",
705\"| c #FFD56A\",
706\"1 c #FFC860\",
707\"2 c #FFC25B\",
708\"3 c #FFBB56\",
709\"4 c #020202\",
710\"5 c #060606\",
711\"6 c #FFC15B\",
712\"7 c #FFC85F\",
713\"8 c #FFD469\",
714\"9 c #FFD66A\",
715\"0 c #FFBC57\",
716\"a c #1B1B1B\",
717\"b c #070707\",
718\"c c #FFBA55\",
719\"d c #FFB451\",
720\"e c #FFB954\",
721\"f c #FFB350\",
722\"g c #FFB652\",
723\"h c #FFBE58\",
724\"i c #FFCD64\",
725\"j c #FFD066\",
726\"k c #FFC059\",
727\"l c #FFB14E\",
728\"m c #0B0B0B\",
729\"n c #FFBB55\",
730\"o c #FFC15A\",
731\"p c #FFB552\",
732\"q c #FFAD4B\",
733\"r c #080808\",
734\"s c #FFAF4C\",
735\"t c #FFB853\",
736\"u c #FFA948\",
737\"v c #050505\",
738\"w c #FFB04E\",
739\"x c #FFB753\",
740\"y c #FFBC56\",
741\"z c #FFC55D\",
742\"A c #FFC55E\",
743\"B c #FFC45C\",
744\"C c #FFBD57\",
745\"D c #FFB854\",
746\"E c #FFB34F\",
747\"F c #FFAB4A\",
748\"G c #FFA545\",
749\"H c #FFAA49\",
750\"I c #FFB04D\",
751\"J c #FFB551\",
752\"K c #FFBF58\",
753\"L c #FFB24F\",
754\"M c #FFAC4A\",
755\"N c #FFA646\",
756\"O c #FFA344\",
757\"P c #FFA848\",
758\"Q c #FFB14F\",
759\"R c #FFAF4D\",
760\"S c #FFA546\",
761\"T c #FFA243\",
762\"U c #FFA445\",
763\"V c #FFAE4C\",
764\"W c #FFA444\",
765\"X c #FFA142\",
766\"Y c #FF9F41\",
767\"Z c #0A0A0A\",
768\"` c #FF9E40\",
769\" . c #FF9F40\",
770\" \",
771\" \",
772\" \",
773\" . + @ @ + # \",
774\" $ @ % & * * = - + + \",
775\" @ ; > , ' ) ' ! * - ~ @ \",
776\" @ { > ! ] ^ / / ( ' * ; _ : \",
777\" < _ ; [ ) / } | } / ] , 1 2 3 4 \",
778\" 5 6 7 , ] 8 9 9 9 } ^ ! = ~ 0 a \",
779\" b c 6 - , ] 8 9 9 9 } ^ ! % ~ 0 d 5 \",
780\" : e _ ; * ) / 8 } } / ] , 1 2 3 f 5 \",
781\" : g h { = i j ^ / ^ ] ! * ; k e l m \",
782\" : f n o ; > , ' ) ' ! * - 2 0 p q r \",
783\" : s g 0 6 ; % > * * = - ~ h t l u r \",
784\" v u w x y k ~ z A z B o C D E F G b \",
785\" 5 H I J e 0 h K h C c x L M N . \",
786\" 4 O P q Q d g x g J L R H S T < \",
787\" @ T U P F q V q M H N W X + \",
788\" @ Y T O W G G W O X Y @ \",
789\" 4 Z ` Y Y Y .` 4 4 \",
790\" 5 : : @ @ Z \",
791\" \",
792\" \",
793\" \"};
794"
bee1c0fe
GM
795 'xpm t))
796 "Image for the mark immortal button.")
2415d4c6
UJ
797
798(defconst newsticker--narrow-image
bee1c0fe
GM
799 (and (fboundp 'image-type-available-p)
800 (image-type-available-p 'xpm)
801 (create-image "/* XPM */
2415d4c6
UJ
802static char * narrow_xpm[] = {
803\"24 24 48 1\",
804\" c None\",
805\". c #000000\",
806\"+ c #969696\",
807\"@ c #9E9E9E\",
808\"# c #A4A4A4\",
809\"$ c #AAAAAA\",
810\"% c #AEAEAE\",
811\"& c #B1B1B1\",
812\"* c #B3B3B3\",
813\"= c #B4B4B4\",
814\"- c #B2B2B2\",
815\"; c #AFAFAF\",
816\"> c #ABABAB\",
817\", c #A6A6A6\",
818\"' c #A0A0A0\",
819\") c #989898\",
820\"! c #909090\",
821\"~ c #73AAD4\",
822\"{ c #7AB2DA\",
823\"] c #7FB8DF\",
824\"^ c #84BDE3\",
825\"/ c #88C2E7\",
826\"( c #8BC5E9\",
827\"_ c #8DC7EB\",
828\": c #8CC6EA\",
829\"< c #89C3E8\",
830\"[ c #86BFE5\",
831\"} c #81BAE1\",
832\"| c #7BB3DC\",
833\"1 c #75ACD6\",
834\"2 c #6DA4CF\",
835\"3 c #979797\",
836\"4 c #A3A3A3\",
837\"5 c #A8A8A8\",
838\"6 c #ADADAD\",
839\"7 c #ACACAC\",
840\"8 c #A9A9A9\",
841\"9 c #A5A5A5\",
842\"0 c #9A9A9A\",
843\"a c #929292\",
844\"b c #8C8C8C\",
845\"c c #808080\",
846\"d c #818181\",
847\"e c #838383\",
848\"f c #848484\",
849\"g c #858585\",
850\"h c #868686\",
851\"i c #828282\",
852\" \",
853\" \",
854\" \",
855\" .................. \",
856\" .+@#$%&*=*-;>,')!. \",
857\" .................. \",
858\" \",
859\" \",
860\" .................. \",
861\" .~{]^/(___:<[}|12. \",
862\" .................. \",
863\" \",
864\" \",
865\" .................. \",
866\" .!3@45>666789'0ab. \",
867\" .................. \",
868\" \",
869\" \",
870\" .................. \",
871\" .cccdefghhgficccc. \",
872\" .................. \",
873\" \",
874\" \",
875\" \"};
876"
bee1c0fe
GM
877 'xpm t))
878 "Image for the narrow image button.")
2415d4c6
UJ
879
880(defconst newsticker--get-all-image
bee1c0fe
GM
881 (and (fboundp 'image-type-available-p)
882 (image-type-available-p 'xpm)
883 (create-image "/* XPM */
2415d4c6
UJ
884static char * get_all_xpm[] = {
885\"24 24 70 1\",
886\" c None\",
887\". c #000000\",
888\"+ c #F3DA00\",
889\"@ c #F5DF00\",
890\"# c #F7E300\",
891\"$ c #F9E700\",
892\"% c #FAEA00\",
893\"& c #FBEC00\",
894\"* c #FBED00\",
895\"= c #FCEE00\",
896\"- c #FAEB00\",
897\"; c #F9E800\",
898\"> c #F8E500\",
899\", c #F6E000\",
900\"' c #F4DB00\",
901\") c #F1D500\",
902\"! c #EFD000\",
903\"~ c #B7CA00\",
904\"{ c #BFD100\",
905\"] c #C5D700\",
906\"^ c #CBDB00\",
907\"/ c #CFDF00\",
908\"( c #D2E200\",
909\"_ c #D4E400\",
910\": c #D3E300\",
911\"< c #D0E000\",
912\"[ c #CCDD00\",
913\"} c #C7D800\",
914\"| c #C1D300\",
915\"1 c #BACC00\",
916\"2 c #B1C500\",
917\"3 c #A8BC00\",
918\"4 c #20A900\",
919\"5 c #22AF00\",
920\"6 c #24B500\",
921\"7 c #26B900\",
922\"8 c #27BC00\",
923\"9 c #27BE00\",
924\"0 c #28BF00\",
925\"a c #27BD00\",
926\"b c #26BA00\",
927\"c c #25B600\",
928\"d c #23B100\",
929\"e c #21AB00\",
930\"f c #1FA400\",
931\"g c #1C9B00\",
932\"h c #21AA00\",
933\"i c #24B300\",
934\"j c #25B800\",
935\"k c #25B700\",
936\"l c #24B400\",
937\"m c #23B000\",
938\"n c #1FA500\",
939\"o c #1D9E00\",
940\"p c #20A800\",
941\"q c #21AC00\",
942\"r c #23B200\",
943\"s c #22AD00\",
944\"t c #1D9F00\",
945\"u c #20A700\",
946\"v c #1EA100\",
947\"w c #1C9C00\",
948\"x c #1DA000\",
949\"y c #1B9800\",
950\"z c #1A9600\",
951\"A c #1A9700\",
952\"B c #1A9500\",
953\"C c #199200\",
954\"D c #189100\",
955\"E c #178C00\",
956\" \",
957\" \",
958\" \",
959\" \",
960\" ................... \",
961\" .+@#$%&*=*&-;>,')!. \",
962\" ................... \",
963\" \",
964\" ................... \",
965\" .~{]^/(___:<[}|123. \",
966\" ................... \",
967\" \",
968\" ................... \",
969\" .45678909abcdefg. \",
970\" .h5icj7jklmeno. \",
971\" .pq5drrmshft. \",
972\" .fu4h4pnvw. \",
973\" .oxvxtwy. \",
974\" .zAAzB. \",
975\" .CCD. \",
976\" .E. \",
977\" . \",
978\" \",
979\" \"};
980"
bee1c0fe
GM
981 'xpm t))
982 "Image for the get all image button.")
2415d4c6
UJ
983
984(defconst newsticker--update-image
bee1c0fe
GM
985 (and (fboundp 'image-type-available-p)
986 (image-type-available-p 'xpm)
987 (create-image "/* XPM */
2415d4c6
UJ
988static char * update_xpm[] = {
989\"24 24 37 1\",
990\" c None\",
991\". c #076D00\",
992\"+ c #0A8600\",
993\"@ c #0A8800\",
994\"# c #098400\",
995\"$ c #087200\",
996\"% c #087900\",
997\"& c #098500\",
998\"* c #098100\",
999\"= c #087600\",
1000\"- c #097E00\",
1001\"; c #097F00\",
1002\"> c #0A8700\",
1003\", c #0A8C00\",
1004\"' c #097C00\",
1005\") c #098300\",
1006\"! c #0A8900\",
1007\"~ c #0A8E00\",
1008\"{ c #0B9200\",
1009\"] c #087700\",
1010\"^ c #076E00\",
1011\"/ c #076C00\",
1012\"( c #076B00\",
1013\"_ c #076A00\",
1014\": c #076900\",
1015\"< c #076800\",
1016\"[ c #066700\",
1017\"} c #066500\",
1018\"| c #066400\",
1019\"1 c #066300\",
1020\"2 c #066600\",
1021\"3 c #066200\",
1022\"4 c #076700\",
1023\"5 c #065E00\",
1024\"6 c #066100\",
1025\"7 c #065F00\",
1026\"8 c #066000\",
1027\" \",
1028\" \",
1029\" \",
1030\" . +@@@+# \",
1031\" $% &@ +* \",
1032\" =-# ; \",
1033\" %*>, ' \",
1034\" ')!~{ = \",
1035\" ]$ \",
1036\" ^ ^ \",
1037\" . . \",
1038\" / ( \",
1039\" _ : \",
1040\" < [ \",
1041\" } | \",
1042\" [[ \",
1043\" 1 $.:23 \",
1044\" 3 4}35 \",
1045\" 6 655 \",
1046\" 76 85 55 \",
1047\" 5555555 5 \",
1048\" \",
1049\" \",
1050\" \"};
1051"
bee1c0fe
GM
1052 'xpm t))
1053 "Image for the update button.")
2415d4c6
UJ
1054
1055(defconst newsticker--browse-image
bee1c0fe
GM
1056 (and (fboundp 'image-type-available-p)
1057 (image-type-available-p 'xpm)
1058 (create-image "/* XPM */
2415d4c6
UJ
1059static char * visit_xpm[] = {
1060\"24 24 39 1\",
1061\" c None\",
1062\". c #000000\",
1063\"+ c #FFFFFF\",
1064\"@ c #00E63D\",
1065\"# c #00E83E\",
1066\"$ c #00E73D\",
1067\"% c #00E93E\",
1068\"& c #00E63C\",
1069\"* c #00E53C\",
1070\"= c #00E23B\",
1071\"- c #00E33B\",
1072\"; c #00E83D\",
1073\"> c #00E13A\",
1074\", c #00DD38\",
1075\"' c #00DE38\",
1076\") c #00E23A\",
1077\"! c #00E43C\",
1078\"~ c #00DF39\",
1079\"{ c #00DB37\",
1080\"] c #00D634\",
1081\"^ c #00D734\",
1082\"/ c #00E039\",
1083\"( c #00DC37\",
1084\"_ c #00D835\",
1085\": c #00D332\",
1086\"< c #00CD2F\",
1087\"[ c #00DB36\",
1088\"} c #00D433\",
1089\"| c #00CF30\",
1090\"1 c #00DA36\",
1091\"2 c #00D936\",
1092\"3 c #00D533\",
1093\"4 c #00D131\",
1094\"5 c #00CE2F\",
1095\"6 c #00CC2F\",
1096\"7 c #00CA2D\",
1097\"8 c #00C62B\",
1098\"9 c #00C52A\",
1099\"0 c #00BE27\",
1100\" \",
1101\" \",
1102\" . \",
1103\" .+. \",
1104\" .+++. \",
1105\" .++.++. \",
1106\" .++.@.++. \",
1107\" .++.##$.++. \",
1108\" .++.%%%#&.++. \",
1109\" .++.$%%%#*=.++. \",
1110\" .++.-@;##$*>,.++. \",
1111\" .++.')!&@@*=~{].++. \",
1112\" .++.^{~>---)/(_:<.++. \",
1113\" .++.^[,~/~'(_}|.++. \",
1114\" .++.]_1[12^:|.++. \",
1115\" .++.:}33:45.++. \",
1116\" .++.<5567.++. \",
1117\" .++.889.++. \",
1118\" .++.0.++. \",
1119\" .++.++. \",
1120\" .+++. \",
1121\" .+. \",
1122\" . \",
1123\" \"};
1124"
bee1c0fe
GM
1125 'xpm t))
1126 "Image for the browse button.")
2415d4c6
UJ
1127
1128(provide 'newsticker-reader)
041fa0d4
MB
1129
1130;; arch-tag: c604b701-bdf1-4fc1-8d05-5fabd1939533
2415d4c6 1131;;; newsticker-reader.el ends here