Fix $or
[factor/jcg.git] / extra / 4DNav / space-file-decoder / space-file-decoder.factor
blob158917ca3eaa5651cc77fa61e979b52ba9101a31
1 ! Copyright (C) 2008 Jeff Bigot\r
2 ! See http://factorcode.org/license.txt for BSD license.\r
3 USING: adsoda\r
4 xml\r
5 xml.utilities\r
6 accessors\r
7 combinators\r
8 sequences\r
9 math.parser\r
10 kernel\r
11 splitting\r
12 values\r
13 continuations\r
14 ;\r
15 IN: 4DNav.space-file-decoder\r
17 : decode-number-array ( x -- y )  "," split [ string>number ] map ;\r
19 PROCESS: adsoda-read-model ( tag -- )\r
21 TAG: dimension adsoda-read-model children>> first string>number ;\r
22 TAG: direction adsoda-read-model children>> first decode-number-array ;\r
23 TAG: color     adsoda-read-model children>> first decode-number-array ;\r
24 TAG: name      adsoda-read-model children>> first ;\r
25 TAG: face      adsoda-read-model children>> first decode-number-array ;\r
27 TAG: solid adsoda-read-model \r
28     <solid> swap  \r
29     { \r
30         [ "dimension" tag-named adsoda-read-model >>dimension ] \r
31         [ "name"      tag-named adsoda-read-model >>name ] \r
32         [ "color"     tag-named adsoda-read-model >>color ] \r
33         [ "face"      tags-named [ adsoda-read-model cut-solid ] each ] \r
34     } cleave\r
35     ensure-adjacencies\r
36 ;\r
38 TAG: light adsoda-read-model \r
39    <light> swap  \r
40     { \r
41         [ "direction" tag-named adsoda-read-model >>direction ] \r
42         [ "color"     tag-named adsoda-read-model >>color ] \r
43     } cleave\r
44 ;\r
46 TAG: space adsoda-read-model \r
47     <space> swap  \r
48     { \r
49         [ "dimension" tag-named adsoda-read-model >>dimension ] \r
50         [ "name"      tag-named adsoda-read-model >>name ] \r
51         [ "color"     tag-named adsoda-read-model >>ambient-color ] \r
52         [ "solid"     tags-named [ adsoda-read-model suffix-solids ] each ] \r
53         [ "light"     tags-named [ adsoda-read-model suffix-lights ] each ]         \r
54     } cleave\r
55 ;\r
57 : read-model-file ( path -- x )\r
58   dup\r
59   [\r
60     [ file>xml "space" tags-named first adsoda-read-model ] \r
61     [ drop <space> ] recover \r
62   ] [  drop <space> ] if \r
64 ;\r