You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
pollen/pollen/scribblings/tag.html

2 lines
21 KiB
HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"/><title>Tag</title><link rel="stylesheet" type="text/css" href="scribble.css" title="default"/><link rel="stylesheet" type="text/css" href="racket.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-style.css" title="default"/><link rel="stylesheet" type="text/css" href="manual-racket.css" title="default"/><script type="text/javascript" src="scribble-common.js"></script><script type="text/javascript" src="manual-racket.js"></script><!--[if IE 6]><style type="text/css">.SIEHidden { overflow: hidden; }</style><![endif]--></head><body id="scribble-racket-lang-org"><div class="tocset"><div class="tocview"><div class="tocviewlist tocviewlisttopspace"><div class="tocviewtitle"><table cellspacing="0" cellpadding="0"><tr><td style="width: 1em;">&bull;</td><td></td><td><a href="file:///Users/mb/git/pollen/scribblings/tag.html" class="tocviewselflink" data-pltdoc="x">Tag</a></td></tr></table></div></div></div><div class="tocsub"><table class="tocsublist" cellspacing="0"><tr><td><span class="tocsublinknumber"></span><a href="#%28part._.Tag%29" class="tocsubseclink" data-pltdoc="x">Tag</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-default-tag-function%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">make-<wbr></wbr>default-<wbr></wbr>tag-<wbr></wbr>function</span></span></a></td></tr><tr><td><a href="#%28form._%28%28lib._pollen%2Ftag..rkt%29._define-tag-function%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktStxLink">define-<wbr></wbr>tag-<wbr></wbr>function</span></span></a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="versionbox"><span class="versionNoNav">6.3.0.14</span></div><h2><a name="(part._.Tag)"></a><a name="(mod-path._pollen/tag)"></a>Tag</h2><p><table cellspacing="0" cellpadding="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="stt"> </span><a href="file:///Users/mb/git/pollen/scribblings/tag.html" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/tag</span></a><span class="RktPn">)</span></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <span class="stt">pollen</span></span></td></tr></table></p><p>Convenience functions for working with tags.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" cellpadding="0" class="prototype RForeground"><tr><td valign="top"><span class="RktPn">(</span><a name="(def._((lib._pollen/tag..rkt)._make-default-tag-function))"></a><span title="Provided from: pollen/tag | Package: pollen"><span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-default-tag-function%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-default-tag-function</a></span></span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">id</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">kw-attr-name</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktVar">kw-attr-value</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td></tr><tr><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktMeta">...</span><span class="RktPn">)</span></td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top">&rarr;</td><td valign="top"><span class="hspace">&nbsp;</span></td><td valign="top"><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr?</span></span></span><span class="RktPn">)</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">id</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-tag?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">kw-attr-name</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">keyword?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">kw-attr-value</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Make a default tag function for <span class="RktVar">id</span>. The new tag function takes an optional set of X-expression attributes (<span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-attrs?</span></span></span>) followed by X-expression elements (<span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span>). From these, the tag function creates a tagged X-expression using <span class="RktVar">id</span> as the tag.</div></p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">pollen/tag</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">beaucoup</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-default-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-default-tag-function</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">em</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">beaucoup</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(em "Bonjour")</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">beaucoup</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">id</span><span class="hspace">&nbsp;</span><span class="RktVal">"greeting"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(em ((id "greeting")) "Bonjour")</span></p></td></tr></table></blockquote></div></p><p>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.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">pollen/tag</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">beaucoup</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-default-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-default-tag-function</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">em</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">beaucoup</span><span class="hspace">&nbsp;</span><span class="RktPn">#:id</span><span class="hspace">&nbsp;</span><span class="RktVal">"greeting"</span><span class="hspace">&nbsp;</span><span class="RktPn">#:class</span><span class="hspace">&nbsp;</span><span class="RktVal">"large"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(em ((class "large") (id "greeting")) "Bonjour")</span></p></td></tr></table></blockquote></div></p><p>You can also provide keyword arguments to <span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-default-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-default-tag-function</a></span> itself, and they will become default attributes for every use of the tag function.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">pollen/tag</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">beaucoup-small</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-default-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-default-tag-function</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">em</span><span class="hspace">&nbsp;</span><span class="RktPn">#:class</span><span class="hspace">&nbsp;</span><span class="RktVal">"small"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">beaucoup-small</span><span class="hspace">&nbsp;</span><span class="RktPn">#:id</span><span class="hspace">&nbsp;</span><span class="RktVal">"greeting"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(em ((class "small") (id "greeting")) "Bonjour")</span></p></td></tr></table></blockquote></div></p><p>Pollen also uses this function to provide the default behavior for undefined tags. See <span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span>.</p><p>Note that while default tag functions are typically used to generate tagged X-expressions, they don&rsquo;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 &#8212;&#160;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.</p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">pollen/tag</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">strange</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-default-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-default-tag-function</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktPn">#:class</span><span class="hspace">&nbsp;</span><span class="RktVal">"bizarre"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Invalid data types for elements</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">strange</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">+</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">*</span></span></span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(div ((class "bizarre")) #&lt;procedure:+&gt; #&lt;procedure:*&gt;)</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Double "class" attribute</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">strange</span><span class="hspace">&nbsp;</span><span class="RktPn">#:class</span><span class="hspace">&nbsp;</span><span class="RktVal">"spooky"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(div ((class "bizarre") (class "spooky")))</span></p></td></tr></table></blockquote></div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" cellpadding="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><table cellspacing="0" cellpadding="0" class="RktBlk RForeground"><tr><td><span class="RktPn">(</span><a name="(form._((lib._pollen/tag..rkt)._define-tag-function))"></a><span title="Provided from: pollen/tag | Package: pollen"><span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28form._%28%28lib._pollen%2Ftag..rkt%29._define-tag-function%29%29" class="RktStxDef RktStxLink" data-pltdoc="x">define-tag-function</a></span></span></td></tr><tr><td><span class="RktPn">(</span><span class="RktVar">tag-id</span><span class="hspace">&nbsp;</span><span class="RktVar">attr-id</span><span class="hspace">&nbsp;</span><span class="RktVar">elem-id</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVar">body</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span></td></tr></table></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Helper function for making custom tag functions. Handles parsing chores, including conversion of keyword arguments into attributes (described in <span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-default-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-default-tag-function</a></span>), and parses other attributes and elements normally.</div></p><p><div class="SIntrapara">Examples:</div><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">pollen/tag</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/mb/git/pollen/scribblings/tag.html#%28form._%28%28lib._pollen%2Ftag..rkt%29._define-tag-function%29%29" class="RktStxLink" data-pltdoc="x">define-tag-function</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym">tag-name</span><span class="hspace">&nbsp;</span><span class="RktSym">attrs</span><span class="hspace">&nbsp;</span><span class="RktSym">elems</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">new-name</span><span class="hspace">&nbsp;</span><span class="RktRdr">,</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">cons</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">zim</span><span class="hspace">&nbsp;</span><span class="RktVal">"zam"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktRdr">,@</span><span class="RktSym">elems</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" cellpadding="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">tag-name</span><span class="hspace">&nbsp;</span><span class="RktVal">"Hello world"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(new-name ((zim "zam")) "Hello world")</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">tag-name</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">key</span><span class="hspace">&nbsp;</span><span class="RktVal">"value"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"Hello world"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(new-name ((zim "zam") (key "value")) "Hello world")</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">tag-name</span><span class="hspace">&nbsp;</span><span class="RktPn">#:key</span><span class="hspace">&nbsp;</span><span class="RktVal">"value"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Hello world"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(new-name ((zim "zam") (key "value")) "Hello world")</span></p></td></tr></table></blockquote></div></p></div></div><div id="contextindicator">&nbsp;</div></body></html>