</label>
]] string>html
] unit-test
+
+! Ensure we can parse <%factor "hi" print %> embedded code
+{ t } [
+ "resource:extra/websites/factorcode/index.fhtml" utf8 file-contents
+ string>html [ [ dup embedded-language? [ , ] [ drop ] if ] walk-html ] { } make length 0 >
+] unit-test
\ No newline at end of file
swap >>target
swap >>open ; inline
+TUPLE: embedded-language open payload close ;
+: <embedded-language> ( open payload close -- embedded-language )
+ embedded-language new
+ swap >>close
+ swap >>payload
+ swap >>open ; inline
+
TUPLE: doctype open close values ;
: <doctype> ( open values close -- doctype )
doctype new
-rot <doctype>
] if ;
+: read-embedded-language ( n string opening -- n string embedded-language )
+ "%" expect-and-span >string
+ [ take-tag-name >string ] dip swap append
+ [ "%>" slice-til-string [ >string ] bi@ ] dip
+ -rot
+ <embedded-language> ;
+
: read-open-tag ( n string opening -- n' string tag )
[ take-tag-name ] dip
[ read-props ] 2dip
] }
{ CHAR: ! [ read-doctype ] }
{ CHAR: ? [ read-processing-instruction ] }
+ { CHAR: % [ read-embedded-language ] }
[ drop read-open-tag ]
} case
] }
M: string walk-html call( obj -- ) ;
M: doctype walk-html call( obj -- ) ;
M: processing-instruction walk-html call( obj -- ) ;
+M: embedded-language walk-html call( obj -- ) ;
M: open-tag walk-html [ call( obj -- ) ] 2keep [ children>> ] dip [ walk-html ] curry each ;
M: self-close-tag walk-html [ call( obj -- ) ] 2keep [ children>> ] dip [ walk-html ] curry each ;
M: comment walk-html call( obj -- ) ;