1 ! Copyright (C) 2009 Slava Pestov.
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: kernel assocs math math.parser memoize
4 io.encodings.ascii io.files lexer parser
5 colors sequences splitting combinators.smart ascii ;
10 : parse-color ( line -- name color )
12 [ [ string>number 255 /f ] tri@ 1.0 <rgba> ] dip
13 [ blank? ] trim-head { { CHAR: \s CHAR: - } } substitute swap
16 : parse-rgb.txt ( lines -- assoc )
17 [ "!" head? not ] filter
18 [ 11 cut [ " \t" split harvest ] dip suffix ] map
19 [ parse-color ] H{ } map>assoc ;
21 MEMO: rgb.txt ( -- assoc )
22 "resource:basis/colors/constants/rgb.txt" ascii file-lines parse-rgb.txt ;
26 : named-colors ( -- keys ) rgb.txt keys ;
28 ERROR: no-such-color name ;
30 : named-color ( name -- color )
31 dup rgb.txt at [ ] [ no-such-color ] ?if ;
33 : COLOR: scan named-color parsed ; parsing