]> gitweb.factorcode.org Git - factor.git/blob - extra/xkcd/xkcd.factor
regexp: remove R" R[ and R{, there are still plenty of options and better ones to...
[factor.git] / extra / xkcd / xkcd.factor
1 ! Copyright (C) 2011 John Benediktsson
2 ! See http://factorcode.org/license.txt for BSD license
3
4 USING: accessors formatting html.entities html.parser
5 html.parser.analyzer html.parser.printer http.client images.http
6 images.viewer images.viewer.prettyprint io kernel parser
7 prettyprint.custom prettyprint.sections regexp sequences strings
8 ui wrap.strings ;
9
10 IN: xkcd
11
12 <PRIVATE
13
14 : comic-image ( url -- image )
15     http-get nip
16     R@ http://imgs\.xkcd\.com/comics/[^\.]+\.(png|jpg)@
17     first-match >string load-http-image ;
18
19 : comic-image. ( url -- )
20     comic-image image. ;
21
22 : comic-text ( url -- string )
23     http-get nip parse-html
24     "transcript" find-by-id-between
25     html-text html-unescape ;
26
27 : comic-text. ( url -- )
28     comic-text 80 wrap-string print ;
29
30 : comic. ( url -- )
31     ui-running? [ comic-image. ] [ comic-text. ] if ;
32
33 PRIVATE>
34
35 : xkcd-url ( n -- url )
36     "http://xkcd.com/%s/" sprintf ;
37
38 : xkcd-image ( n -- image )
39     xkcd-url comic-image ;
40
41 : xkcd. ( n -- )
42     xkcd-url comic. ;
43
44 : random-xkcd. ( -- )
45     "http://dynamic.xkcd.com/random/comic/" comic. ;
46
47 : latest-xkcd. ( -- )
48     "http://xkcd.com" comic. ;
49
50 TUPLE: xkcd number image ;
51
52 C: <xkcd> xkcd
53
54 SYNTAX: XKCD: scan-number dup xkcd-image <xkcd> suffix! ;
55
56 M: xkcd pprint* image>> <image-section> add-section ;