#lang scribble/manual @(require scribble/eval pollen/cache pollen/world (for-label racket (except-in pollen #%module-begin) txexpr pollen/tag pollen/render xml pollen/pagetree)) @(define my-eval (make-base-eval)) @(my-eval `(require pollen pollen/template xml)) @title{Tag} @defmodule[pollen/tag] Convenience functions for working with tags. @defproc[ (make-default-tag-function [id txexpr-tag?] [kw-attr-name keyword?] [kw-attr-value string?] ... ...) (-> txexpr?)] Make a default tag function for @racket[_id]. The new tag function takes an optional set of X-expression attributes (@racket[txexpr-attrs?]) followed by X-expression elements (@racket[txexpr-elements?]). From these, the tag function creates a tagged X-expression using @racket[_id] as the tag. @examples[ (require pollen/tag) (define beaucoup (make-default-tag-function 'em)) (beaucoup "Bonjour") (beaucoup '((id "greeting")) "Bonjour") ] Entering attributes this way can be cumbersome. So for convenience, the new tag function provides an alternative: any keyword arguments and their values will be interpreted as attributes. @examples[ (require pollen/tag) (define beaucoup (make-default-tag-function 'em)) (beaucoup #:id "greeting" #:class "large" "Bonjour") ] You can also provide keyword arguments to @racket[make-default-tag-function] itself, and they will become default attributes for every use of the tag function. @examples[ (require pollen/tag) (define beaucoup-small (make-default-tag-function 'em #:class "small")) (beaucoup-small #:id "greeting" "Bonjour") ] Pollen also uses this function to provide the default behavior for undefined tags. See @racket[#%top]. Note that while default tag functions are typically used to generate tagged X-expressions, they don't enforce any restrictions on input, so they also do not guarantee that you will in fact get a valid tagged X-expression as output. This is intentional — default tag functions are a coding convenience, and their output is likely to be processed by other tag functions, so raising the error here would be premature. @examples[ (require pollen/tag) (define strange (make-default-tag-function 'div #:class "bizarre")) (code:comment @#,t{Invalid data types for elements}) (strange + *) (code:comment @#,t{Double "class" attribute}) (strange #:class "spooky") ] @defform[ (define-tag-function (tag-id attr-id elem-id) body ...)] Helper function for making custom tag functions. Handles parsing chores, including conversion of keyword arguments into attributes (described in @racket[make-default-tag-function]), and parses other attributes and elements normally. @examples[ (require pollen/tag) (define-tag-function (tag-name attrs elems) `(new-name ,(cons '(zim "zam") attrs) ,@elems)) (tag-name "Hello world") (tag-name '((key "value")) "Hello world") (tag-name #:key "value" "Hello world") ]