]> gitweb.factorcode.org Git - factor.git/blob - extra/xkcd/xkcd.factor
Fixes #2966
[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/ \/\/imgs\.xkcd\.com\/comics\/[^\.]+\.(png|jpg)/
17     first-match >string "https:" prepend load-http-image ;
18
19 : comic-image. ( url -- )
20     comic-image image. ;
21
22 : comic-text ( url -- string )
23     scrape-html nip "transcript" find-by-id-between
24     html-text html-unescape ;
25
26 : comic-text. ( url -- )
27     comic-text 80 wrap-string print ;
28
29 : comic. ( url -- )
30     ui-running? [ comic-image. ] [ comic-text. ] if ;
31
32 PRIVATE>
33
34 : xkcd-url ( n -- url )
35     "https://xkcd.com/%s/" sprintf ;
36
37 : xkcd-image ( n -- image )
38     xkcd-url comic-image ;
39
40 : xkcd. ( n -- )
41     xkcd-url comic. ;
42
43 : random-xkcd. ( -- )
44     "https://c.xkcd.com/random/comic/" comic. ;
45
46 : latest-xkcd. ( -- )
47     "https://xkcd.com" comic. ;
48
49 TUPLE: xkcd number image ;
50
51 C: <xkcd> xkcd
52
53 SYNTAX: XKCD: scan-number dup xkcd-image <xkcd> suffix! ;
54
55 M: xkcd pprint* image>> <image-section> add-section ;