]> gitweb.factorcode.org Git - factor.git/blob - basis/xml/dispatch/dispatch.factor
Merge branch 'master' into experimental
[factor.git] / basis / xml / dispatch / dispatch.factor
1 ! Copyright (C) 2005, 2009 Daniel Ehrenberg
2 ! See http://factorcode.org/license.txt for BSD license.
3 USING: words assocs kernel accessors parser sequences summary
4 lexer splitting fry ;
5 IN: xml.dispatch
6
7 TUPLE: process-missing process tag ;
8 M: process-missing summary
9     drop "Tag not implemented on process" ;
10
11 : run-process ( tag word -- )
12     2dup "xtable" word-prop
13     [ dup main>> ] dip at* [ 2nip call ] [
14         drop \ process-missing boa throw
15     ] if ;
16
17 : PROCESS:
18     CREATE
19     dup H{ } clone "xtable" set-word-prop
20     dup '[ _ run-process ] define ; parsing
21
22 : TAG:
23     scan scan-word
24     parse-definition
25     swap "xtable" word-prop
26     rot "/" split [ [ 2dup ] dip swap set-at ] each 2drop ;
27     parsing