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