-! Copyright (C) 2008 Jeff Bigot\r
-! See http://factorcode.org/license.txt for BSD license.\r
-USING: adsoda xml xml.traversal xml.syntax accessors \r
-combinators sequences math.parser kernel splitting values \r
-continuations ;\r
-IN: 4DNav.space-file-decoder\r
-\r
-: decode-number-array ( x -- y ) \r
- "," split [ string>number ] map ;\r
-\r
-TAGS: adsoda-read-model ( tag -- model )\r
-\r
-TAG: dimension adsoda-read-model \r
- children>> first string>number ;\r
-TAG: direction adsoda-read-model \r
- children>> first decode-number-array ;\r
-TAG: color adsoda-read-model \r
- children>> first decode-number-array ;\r
-TAG: name adsoda-read-model \r
- children>> first ;\r
-TAG: face adsoda-read-model \r
- children>> first decode-number-array ;\r
-\r
-TAG: solid adsoda-read-model \r
- <solid> swap \r
- { \r
- [ "dimension" tag-named adsoda-read-model >>dimension ]\r
- [ "name" tag-named adsoda-read-model >>name ] \r
- [ "color" tag-named adsoda-read-model >>color ] \r
- [ "face" \r
- tags-named [ adsoda-read-model cut-solid ] each ] \r
- } cleave\r
- ensure-adjacencies\r
-;\r
-\r
-TAG: light adsoda-read-model \r
- <light> swap \r
- { \r
- [ "direction" tag-named adsoda-read-model >>direction ]\r
- [ "color" tag-named adsoda-read-model >>color ] \r
- } cleave\r
-;\r
-\r
-TAG: space adsoda-read-model \r
- <space> swap \r
- { \r
- [ "dimension" tag-named adsoda-read-model >>dimension ]\r
- [ "name" tag-named adsoda-read-model >>name ] \r
- [ "color" tag-named \r
- adsoda-read-model >>ambient-color ] \r
- [ "solid" tags-named \r
- [ adsoda-read-model suffix-solids ] each ] \r
- [ "light" tags-named \r
- [ adsoda-read-model suffix-lights ] each ]\r
- } cleave\r
-;\r
-\r
-: read-model-file ( path -- x )\r
- [\r
- [ file>xml "space" tag-named adsoda-read-model ] \r
- [ 2drop <space> ] recover \r
- ] [ <space> ] if*\r
-;\r
-\r
+! Copyright (C) 2008 Jeff Bigot
+! See http://factorcode.org/license.txt for BSD license.
+USING: adsoda xml xml.traversal xml.syntax accessors
+combinators sequences math.parser kernel splitting values
+continuations ;
+IN: 4DNav.space-file-decoder
+
+: decode-number-array ( x -- y )
+ "," split [ string>number ] map ;
+
+TAGS: adsoda-read-model ( tag -- model )
+
+TAG: dimension adsoda-read-model
+ children>> first string>number ;
+TAG: direction adsoda-read-model
+ children>> first decode-number-array ;
+TAG: color adsoda-read-model
+ children>> first decode-number-array ;
+TAG: name adsoda-read-model
+ children>> first ;
+TAG: face adsoda-read-model
+ children>> first decode-number-array ;
+
+TAG: solid adsoda-read-model
+ <solid> swap
+ {
+ [ "dimension" tag-named adsoda-read-model >>dimension ]
+ [ "name" tag-named adsoda-read-model >>name ]
+ [ "color" tag-named adsoda-read-model >>color ]
+ [ "face"
+ tags-named [ adsoda-read-model cut-solid ] each ]
+ } cleave
+ ensure-adjacencies
+;
+
+TAG: light adsoda-read-model
+ <light> swap
+ {
+ [ "direction" tag-named adsoda-read-model >>direction ]
+ [ "color" tag-named adsoda-read-model >>color ]
+ } cleave
+;
+
+TAG: space adsoda-read-model
+ <space> swap
+ {
+ [ "dimension" tag-named adsoda-read-model >>dimension ]
+ [ "name" tag-named adsoda-read-model >>name ]
+ [ "color" tag-named
+ adsoda-read-model >>ambient-color ]
+ [ "solid" tags-named
+ [ adsoda-read-model suffix-solids ] each ]
+ [ "light" tags-named
+ [ adsoda-read-model suffix-lights ] each ]
+ } cleave
+;
+
+: read-model-file ( path -- x )
+ [
+ [ file>xml "space" tag-named adsoda-read-model ]
+ [ 2drop <space> ] recover
+ ] [ <space> ] if*
+;
+