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