factor/unmaintained/4DNav/space-file-decoder/space-file-decoder.factor

56 lines
1.8 KiB
Factor
Executable File

! Copyright (C) 2008 Jeff Bigot
! See http://factorcode.org/license.txt for BSD license.
USING: adsoda xml xml.utilities xml.dispatch accessors combinators
sequences math.parser kernel splitting values continuations ;
IN: 4DNav.space-file-decoder
: decode-number-array ( x -- y ) "," split [ string>number ] map ;
PROCESS: adsoda-read-model ( tag -- )
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 )
dup
[
[ file>xml "space" tags-named first adsoda-read-model ]
[ drop <space> ] recover
] [ drop <space> ] if
;