35 lines
953 B
Factor
35 lines
953 B
Factor
! Copyright (C) 2008 Slava Pestov.
|
|
! See http://factorcode.org/license.txt for BSD license.
|
|
IN: html.templates.chloe.syntax
|
|
USING: accessors kernel sequences combinators kernel namespaces
|
|
classes.tuple assocs splitting words arrays memoize parser lexer
|
|
io io.files io.encodings.utf8 io.streams.string
|
|
unicode.case mirrors fry math urls
|
|
multiline xml xml.data xml.writer xml.utilities
|
|
html.elements
|
|
html.components
|
|
html.templates ;
|
|
|
|
SYMBOL: tags
|
|
|
|
tags global [ H{ } clone or ] change-at
|
|
|
|
: define-chloe-tag ( name quot -- ) swap tags get set-at ;
|
|
|
|
: CHLOE:
|
|
scan parse-definition define-chloe-tag ; parsing
|
|
|
|
: chloe-ns "http://factorcode.org/chloe/1.0" ; inline
|
|
|
|
: chloe-name? ( name -- ? )
|
|
url>> chloe-ns = ;
|
|
|
|
XML-NS: chloe-name http://factorcode.org/chloe/1.0
|
|
|
|
: required-attr ( tag name -- value )
|
|
tuck chloe-name attr
|
|
[ nip ] [ " attribute is required" append throw ] if* ;
|
|
|
|
: optional-attr ( tag name -- value )
|
|
chloe-name attr ;
|