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/pollen.html

33 lines
535 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>Pollen: the book is a program</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><!--[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;"><a href="javascript:void(0);" title="Expand/Collapse" class="tocviewtoggle" onclick="TocviewToggle(this,&quot;tocview_0&quot;);">&#9658;</a></td><td></td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html" class="tocviewselflink" data-pltdoc="x">Pollen:<span class="mywbr"> &nbsp;</span> the book is a program</a></td></tr></table></div><div class="tocviewsublistonly" style="display: none;" id="tocview_0"><table cellspacing="0" cellpadding="0"><tr><td align="right">1&nbsp;</td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Installation%29" class="tocviewlink" data-pltdoc="x">Installation</a></td></tr><tr><td align="right">2&nbsp;</td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Acknowledgments%29" class="tocviewlink" data-pltdoc="x">Acknowledgments</a></td></tr><tr><td align="right">3&nbsp;</td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Quick_start%29" class="tocviewlink" data-pltdoc="x">Quick start</a></td></tr><tr><td align="right">4&nbsp;</td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Why_.I_made_.Pollen%29" class="tocviewlink" data-pltdoc="x">Why I made Pollen</a></td></tr><tr><td align="right">5&nbsp;</td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Source_formats%29" class="tocviewlink" data-pltdoc="x">Source formats</a></td></tr><tr><td align="right">6&nbsp;</td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._reader%29" class="tocviewlink" data-pltdoc="x">&#9674; command overview</a></td></tr><tr><td align="right">7&nbsp;</td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Module_reference%29" class="tocviewlink" data-pltdoc="x">Module reference</a></td></tr><tr><td align="right">8&nbsp;</td><td><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.License___source_code%29" class="tocviewlink" data-pltdoc="x">License &amp; source code</a></td></tr></table></div></div></div><div class="tocsub"><table class="tocsublist" cellspacing="0"><tr><td><span class="tocsublinknumber"></span><a href="#%28part._.Pollen__the_book_is_a_program%29" class="tocsubseclink" data-pltdoc="x">Pollen:<span class="mywbr"> &nbsp;</span> the book is a program</a></td></tr><tr><td><span class="tocsublinknumber">1<tt>&nbsp;</tt></span><a href="#%28part._.Installation%29" class="tocsubseclink" data-pltdoc="x">Installation</a></td></tr><tr><td><span class="tocsublinknumber">2<tt>&nbsp;</tt></span><a href="#%28part._.Acknowledgments%29" class="tocsubseclink" data-pltdoc="x">Acknowledgments</a></td></tr><tr><td><span class="tocsublinknumber">3<tt>&nbsp;</tt></span><a href="#%28part._.Quick_start%29" class="tocsubseclink" data-pltdoc="x">Quick start</a></td></tr><tr><td><span class="tocsublinknumber">3.1<tt>&nbsp;</tt></span><a href="#%28part._.Creating_a_source_file%29" class="tocsubseclink" data-pltdoc="x">Creating a source file</a></td></tr><tr><td><span class="tocsublinknumber">3.2<tt>&nbsp;</tt></span><a href="#%28part._.Running_a_source_file%29" class="tocsubseclink" data-pltdoc="x">Running a source file</a></td></tr><tr><td><span class="tocsublinknumber">3.3<tt>&nbsp;</tt></span><a href="#%28part._.Naming__saving__and_rendering_a_source_file%29" class="tocsubseclink" data-pltdoc="x">Naming, saving, and rendering a source file</a></td></tr><tr><td><span class="tocsublinknumber">3.4<tt>&nbsp;</tt></span><a href="#%28part._.Using_the_development_server%29" class="tocsubseclink" data-pltdoc="x">Using the development server</a></td></tr><tr><td><span class="tocsublinknumber">3.5<tt>&nbsp;</tt></span><a href="#%28part._.The_plot_thickens%29" class="tocsubseclink" data-pltdoc="x">The plot thickens</a></td></tr><tr><td><span class="tocsublinknumber">3.6<tt>&nbsp;</tt></span><a href="#%28part._.Making_an_.H.T.M.L_page_with_.Pollen%29" class="tocsubseclink" data-pltdoc="x">Making an HTML page with Pollen</a></td></tr><tr><td><span class="tocsublinknumber">3.6.1<tt>&nbsp;</tt></span><a href="#%28part._.Making_an_.H.T.M.L_page_with_.Pollen_in_decoder_mode%29" class="tocsubseclink" data-pltdoc="x">Making an HTML page with Pollen in decoder mode</a></td></tr><tr><td><span class="tocsublinknumber">3.6.2<tt>&nbsp;</tt></span><a href="#%28part._.Using_the_.Pollen_dashboard%29" class="tocsubseclink" data-pltdoc="x">Using the Pollen dashboard</a></td></tr><tr><td><span class="tocsublinknumber">4<tt>&nbsp;</tt></span><a href="#%28part._.Why_.I_made_.Pollen%29" class="tocsubseclink" data-pltdoc="x">Why I made Pollen</a></td></tr><tr><td><span class="tocsublinknumber">4.1<tt>&nbsp;</tt></span><a href="#%28part._.The_web-development_problem%29" class="tocsubseclink" data-pltdoc="x">The web-<wbr></wbr>development problem</a></td></tr><tr><td><span class="tocsublinknumber">4.1.1<tt>&nbsp;</tt></span><a href="#%28part._.Why_not_a_content_management_system__like_.Word.Press_%29" class="tocsubseclink" data-pltdoc="x">Why not a content management system, like Word<span class="mywbr"> &nbsp;</span>Press?</a></td></tr><tr><td><span class="tocsublinknumber">4.1.2<tt>&nbsp;</tt></span><a href="#%28part._.Why_not_a_.C.S.S_preprocessor__like_.Sass_or_.L.E.S.S_%29" class="tocsubseclink" data-pltdoc="x">Why not a CSS preprocessor, like Sass or LESS?</a></td></tr><tr><td><span class="tocsublinknumber">4.1.3<tt>&nbsp;</tt></span><a href="#%28part._.Why_not_a_static_blog_generator__like_.Jekyll_or_.Pelican_%29" class="tocsubseclink" data-pltdoc="x">Why not a static blog generator, like Jekyll or Pelican?</a></td></tr><tr><td><span class="tocsublinknumber">4.1.4<tt>&nbsp;</tt></span><a href="#%28part._.Why_not_a_dynamic_templating_system__like_.Bottle_%29" class="tocsubseclink" data-pltdoc="x">Why not a dynamic templating system, like Bottle?</a></td></tr><tr><td><span class="tocsublinknumber">5<tt>&nbsp;</tt></span><a href="#%28part._.Source_formats%29" class="tocsubseclink" data-pltdoc="x">Source formats</a></td></tr><tr><td><span class="tocsublinknumber">6<tt>&nbsp;</tt></span><a href="#%28part._reader%29" class="tocsubseclink" data-pltdoc="x">&#9674; command overview</a></td></tr><tr><td><span class="tocsublinknumber">6.1<tt>&nbsp;</tt></span><a href="#%28part._.The_golden_rule%29" class="tocsubseclink" data-pltdoc="x">The golden rule</a></td></tr><tr><td><span class="tocsublinknumber">6.2<tt>&nbsp;</tt></span><a href="#%28part._.The_lozenge_glyph____%29" class="tocsubseclink" data-pltdoc="x">The lozenge glyph (&#9674;)</a></td></tr><tr><td><span class="tocsublinknumber">6.3<tt>&nbsp;</tt></span><a href="#%28part._.The_two_command_modes__text_mode___.Racket_mode%29" class="tocsubseclink" data-pltdoc="x">The two command modes:<span class="mywbr"> &nbsp;</span> text mode &amp; Racket mode</a></td></tr><tr><td><span class="tocsublinknumber">6.3.1<tt>&nbsp;</tt></span><a href="#%28part._.The_command_name%29" class="tocsubseclink" data-pltdoc="x">The command name</a></td></tr><tr><td><span class="tocsublinknumber">6.3.1.1<tt>&nbsp;</tt></span><a href="#%28part._.Invoking_tag_functions%29" class="tocsubseclink" data-pltdoc="x">Invoking tag functions</a></td></tr><tr><td><span class="tocsublinknumber">6.3.1.2<tt>&nbsp;</tt></span><a href="#%28part._.Invoking_other_functions%29" class="tocsubseclink" data-pltdoc="x">Invoking other functions</a></td></tr><tr><td><span class="tocsublinknumber">6.3.1.3<tt>&nbsp;</tt></span><a href="#%28part._.Inserting_the_value_of_a_variable%29" class="tocsubseclink" data-pltdoc="x">Inserting the value of a variable</a></td></tr><tr><td><span class="tocsublinknumber">6.3.1.4<tt>&nbsp;</tt></span><a href="#%28part._.Inserting_a_comment%29" class="tocsubseclink" data-pltdoc="x">Inserting a comment</a></td></tr><tr><td><span class="tocsublinknumber">6.3.2<tt>&nbsp;</tt></span><a href="#%28part._.The_.Racket_arguments%29" class="tocsubseclink" data-pltdoc="x">The Racket arguments</a></td></tr><tr><td><span class="tocsublinknumber">6.3.3<tt>&nbsp;</tt></span><a href="#%28part._.The_text_argument%29" class="tocsubseclink" data-pltdoc="x">The text argument</a></td></tr><tr><td><span class="tocsublinknumber">6.4<tt>&nbsp;</tt></span><a href="#%28part._.Further_reading%29" class="tocsubseclink" data-pltdoc="x">Further reading</a></td></tr><tr><td><span class="tocsublinknumber">7<tt>&nbsp;</tt></span><a href="#%28part._.Module_reference%29" class="tocsubseclink" data-pltdoc="x">Module reference</a></td></tr><tr><td><span class="tocsublinknumber">7.1<tt>&nbsp;</tt></span><a href="#%28part._.Cache%29" class="tocsubseclink" data-pltdoc="x">Cache</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fcache..rkt%29._current-cache%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">current-<wbr></wbr>cache</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fcache..rkt%29._cached-require%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">cached-<wbr></wbr>require</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fcache..rkt%29._make-cache%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">make-<wbr></wbr>cache</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fcache..rkt%29._reset-cache%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">reset-<wbr></wbr>cache</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fcache..rkt%29._cache-ref%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">cache-<wbr></wbr>ref</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.2<tt>&nbsp;</tt></span><a href="#%28part._.Decode%29" class="tocsubseclink" data-pltdoc="x">Decode</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">decode</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.2.1<tt>&nbsp;</tt></span><a href="#%28part._.Block%29" class="tocsubseclink" data-pltdoc="x">Block</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._project-block-tags%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">project-<wbr></wbr>block-<wbr></wbr>tags</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._register-block-tag%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">register-<wbr></wbr>block-<wbr></wbr>tag</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._block-txexpr~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">block-<wbr></wbr>txexpr?</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.2.2<tt>&nbsp;</tt></span><a href="#%28part._.Typography%29" class="tocsubseclink" data-pltdoc="x">Typography</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">whitespace?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">whitespace/<span class="mywbr"> &nbsp;</span>nbsp?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._smart-quotes%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">smart-<wbr></wbr>quotes</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._smart-dashes%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">smart-<wbr></wbr>dashes</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-linebreaks%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">detect-<wbr></wbr>linebreaks</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">detect-<wbr></wbr>paragraphs</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.3<tt>&nbsp;</tt></span><a href="#%28part._.File%29" class="tocsubseclink" data-pltdoc="x">File</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._preproc-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">preproc-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._markup-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">markup-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._template-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">template-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._null-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">null-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._scribble-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">scribble-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._pagetree-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">pagetree-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-preproc-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has-<wbr></wbr>preproc-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-markup-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has-<wbr></wbr>markup-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-template-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has-<wbr></wbr>template-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-null-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has-<wbr></wbr>null-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-scribble-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has-<wbr></wbr>scribble-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-preproc-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has/<span class="mywbr"> &nbsp;</span>is-<wbr></wbr>preproc-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-markup-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has/<span class="mywbr"> &nbsp;</span>is-<wbr></wbr>markup-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-template-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has/<span class="mywbr"> &nbsp;</span>is-<wbr></wbr>template-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-null-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has/<span class="mywbr"> &nbsp;</span>is-<wbr></wbr>null-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-scribble-source~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">has/<span class="mywbr"> &nbsp;</span>is-<wbr></wbr>scribble-<wbr></wbr>source?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3epreproc-source-path%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink"><span class="nobreak">-<wbr></wbr>&gt;</span>preproc-<wbr></wbr>source-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3emarkup-source-path%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink"><span class="nobreak">-<wbr></wbr>&gt;</span>markup-<wbr></wbr>source-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3etemplate-source-path%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink"><span class="nobreak">-<wbr></wbr>&gt;</span>template-<wbr></wbr>source-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3enull-source-path%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink"><span class="nobreak">-<wbr></wbr>&gt;</span>null-<wbr></wbr>source-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3escribble-source-path%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink"><span class="nobreak">-<wbr></wbr>&gt;</span>scribble-<wbr></wbr>source-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3eoutput-path%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink"><span class="nobreak">-<wbr></wbr>&gt;</span>output-<wbr></wbr>path</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.4<tt>&nbsp;</tt></span><a href="#%28part._.Pagetree%29" class="tocsubseclink" data-pltdoc="x">Pagetree</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">pagetree?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._validate-pagetree%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">validate-<wbr></wbr>pagetree</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">pagenode?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">pagenodeish?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._-~3epagenode%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink"><span class="nobreak">-<wbr></wbr>&gt;</span>pagenode</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.4.1<tt>&nbsp;</tt></span><a href="#%28part._.Navigation%29" class="tocsubseclink" data-pltdoc="x">Navigation</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">current-<wbr></wbr>pagetree</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">parent</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._children%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">children</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._siblings%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">siblings</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">previous</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%2A%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">previous*</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">next</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%2A%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">next*</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.4.2<tt>&nbsp;</tt></span><a href="#%28part._.Utilities%29" class="tocsubseclink" data-pltdoc="x">Utilities</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree-~3elist%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">pagetree-<wbr></wbr>&gt;list</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._in-pagetree~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">in-<wbr></wbr>pagetree?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._path-~3epagenode%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">path-<wbr></wbr>&gt;pagenode</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.5<tt>&nbsp;</tt></span><a href="#%28part._.Render%29" class="tocsubseclink" data-pltdoc="x">Render</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">render</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Frender..rkt%29._render-to-file%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">render-<wbr></wbr>to-<wbr></wbr>file</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Frender..rkt%29._render-to-file-if-needed%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">render-<wbr></wbr>to-<wbr></wbr>file-<wbr></wbr>if-<wbr></wbr>needed</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Frender..rkt%29._render-batch%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">render-<wbr></wbr>batch</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Frender..rkt%29._render-pagetree%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">render-<wbr></wbr>pagetree</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Frender..rkt%29._get-template-for%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">get-<wbr></wbr>template-<wbr></wbr>for</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.6<tt>&nbsp;</tt></span><a href="#%28part._.Template%29" class="tocsubseclink" data-pltdoc="x">Template</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._-~3ehtml%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink"><span class="nobreak">-<wbr></wbr>&gt;</span>html</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">select</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select%2A%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">select*</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-metas%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">select-<wbr></wbr>from-<wbr></wbr>metas</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-doc%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">select-<wbr></wbr>from-<wbr></wbr>doc</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.7<tt>&nbsp;</tt></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-tag-function%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">make-<wbr></wbr>tag-<wbr></wbr>function</span></span></a></td></tr><tr><td><span class="tocsublinknumber">7.8<tt>&nbsp;</tt></span><a href="#%28part._.Top%29" class="tocsubseclink" data-pltdoc="x">Top</a></td></tr><tr><td><a href="#%28form._%28%28lib._pollen%2Ftop..rkt%29._~23~25top%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span></a></td></tr><tr><td><a href="#%28form._%28%28lib._pollen%2Ftop..rkt%29._def%2Fc%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym">def/<span class="mywbr"> &nbsp;</span>c</span></a></td></tr><tr><td><span class="tocsublinknumber">7.9<tt>&nbsp;</tt></span><a href="#%28part._.World%29" class="tocsubseclink" data-pltdoc="x">World</a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amain-pollen-export%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>main-<wbr></wbr>pollen-<wbr></wbr>export</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3ameta-pollen-export%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>meta-<wbr></wbr>pollen-<wbr></wbr>export</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3aproject-require%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>project-<wbr></wbr>require</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acheck-project-requires-in-render~3f%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>check-<wbr></wbr>project-<wbr></wbr>requires-<wbr></wbr>in-<wbr></wbr>render?</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3aserver-extras-dir%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>server-<wbr></wbr>extras-<wbr></wbr>dir</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acurrent-server-extras-path%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>current-<wbr></wbr>server-<wbr></wbr>extras-<wbr></wbr>path</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apreproc-source-ext%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>preproc-<wbr></wbr>source-<wbr></wbr>ext</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amarkup-source-ext%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>markup-<wbr></wbr>source-<wbr></wbr>ext</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amarkdown-source-ext%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>markdown-<wbr></wbr>source-<wbr></wbr>ext</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3anull-source-ext%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>null-<wbr></wbr>source-<wbr></wbr>ext</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apagetree-source-ext%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>pagetree-<wbr></wbr>source-<wbr></wbr>ext</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3atemplate-source-ext%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>template-<wbr></wbr>source-<wbr></wbr>ext</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3ascribble-source-ext%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>scribble-<wbr></wbr>source-<wbr></wbr>ext</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3adecodable-extensions%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>decodable-<wbr></wbr>extensions</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-auto%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>mode-<wbr></wbr>auto</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-preproc%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>mode-<wbr></wbr>preproc</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-markup%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>mode-<wbr></wbr>markup</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-markdown%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>mode-<wbr></wbr>markdown</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-pagetree%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>mode-<wbr></wbr>pagetree</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3adefault-pagetree%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>default-<wbr></wbr>pagetree</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apagetree-root-node%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>pagetree-<wbr></wbr>root-<wbr></wbr>node</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acommand-marker%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>command-<wbr></wbr>marker</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3adefault-template-prefix%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>default-<wbr></wbr>template-<wbr></wbr>prefix</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3afallback-template%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>fallback-<wbr></wbr>template</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3atemplate-meta-key%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>template-<wbr></wbr>meta-<wbr></wbr>key</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3anewline%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>newline</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3alinebreak-separator%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>linebreak-<wbr></wbr>separator</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3aparagraph-separator%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>paragraph-<wbr></wbr>separator</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3adashboard-css%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>dashboard-<wbr></wbr>css</span></span></a></td></tr><tr><td><a href="#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apaths-excluded-from-dashboard%29%29" class="tocsubnonseclink" data-pltdoc="x"><span class="RktSym"><span class="RktValLink">world:<span class="mywbr"> &nbsp;</span>paths-<wbr></wbr>excluded-<wbr></wbr>from-<wbr></wbr>dashboard</span></span></a></td></tr><tr><td><span class="tocsublinknumber">8<tt>&nbsp;</tt></span><a href="#%28part._.License___source_code%29" class="tocsubseclink" data-pltdoc="x">License &amp; source code</a></td></tr></table></div></div><div class="maincolumn"><div class="main"><div class="versionbox"><span class="versionNoNav">6.0.0.5</span></div><h2><a name="(part._.Pollen__the_book_is_a_program)"></a>Pollen: the book is a program</h2><div class="SAuthorListBox"><span class="SAuthorList"><p class="author">Matthew Butterick &lt;<a href="mailto:mb@mbtype.com">mb@mbtype.com</a>&gt;</p></span></div><p>Pollen is a publishing system that helps authors create beautiful and functional web-based books. Pollen includes tools for writing, designing, programming, testing, and publishing.</p><p>I used Pollen to create my book <a href="http://practicaltypography.com">Butterick&rsquo;s Practical Typography</a>. Sure, go take a look. Is it better than the last digital book you encountered? Yes it is. Would you like your book to look like that? If so, keep reading.</p><p><div class="SIntrapara">At the core of Pollen is an argument:
</div><div class="SIntrapara"><ul><li><p>First, that digital books should be the best books we&rsquo;ve ever had. So far, they&rsquo;re not even close.</p></li><li><p>Second, that because digital books are software, an author shouldn&rsquo;t think of a book as merely data. <span style="font-weight: bold">The book is a program.</span></p></li><li><p>Third, that the way we make digital books better than their predecessors is by exploiting this programmability.</p></li></ul></div></p><p>That&rsquo;s what Pollen is for.</p><p>Not that you need to be a programmer to use Pollen. On the contrary, the Pollen language is markup-based, so you can write &amp; edit text naturally. But when you want to automate repetitive tasks, add cross-references, or pull in data from other sources, you can access a full programming language from within the text.</p><p>That language is Racket. I chose Racket because while the idea for Pollen had been with me for several years, it simply wasn&rsquo;t possible to build it with other languages. So if it&rsquo;s unfamiliar to you, don&rsquo;t panic. It was unfamiliar to me. Once you see what you can do with Pollen &amp; Racket, you may be persuaded. I was.</p><p>Or, if you can find a better digital-publishing tool, use that. But I&rsquo;m never going back to the way I used to work.</p><table cellspacing="0"><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Installation%29" class="toptoclink" data-pltdoc="x">1<span class="hspace">&nbsp;</span>Installation</a></p></td></tr><tr><td><p><span class="hspace"></span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Acknowledgments%29" class="toptoclink" data-pltdoc="x">2<span class="hspace">&nbsp;</span>Acknowledgments</a></p></td></tr><tr><td><p><span class="hspace"></span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Quick_start%29" class="toptoclink" data-pltdoc="x">3<span class="hspace">&nbsp;</span>Quick start</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Creating_a_source_file%29" class="toclink" data-pltdoc="x">3.1<span class="hspace">&nbsp;</span>Creating a source file</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Running_a_source_file%29" class="toclink" data-pltdoc="x">3.2<span class="hspace">&nbsp;</span>Running a source file</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Naming__saving__and_rendering_a_source_file%29" class="toclink" data-pltdoc="x">3.3<span class="hspace">&nbsp;</span>Naming, saving, and rendering a source file</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Using_the_development_server%29" class="toclink" data-pltdoc="x">3.4<span class="hspace">&nbsp;</span>Using the development server</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.The_plot_thickens%29" class="toclink" data-pltdoc="x">3.5<span class="hspace">&nbsp;</span>The plot thickens</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Making_an_.H.T.M.L_page_with_.Pollen%29" class="toclink" data-pltdoc="x">3.6<span class="hspace">&nbsp;</span>Making an HTML page with Pollen</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Making_an_.H.T.M.L_page_with_.Pollen_in_decoder_mode%29" class="toclink" data-pltdoc="x">3.6.1<span class="hspace">&nbsp;</span>Making an HTML page with Pollen in decoder mode</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Using_the_.Pollen_dashboard%29" class="toclink" data-pltdoc="x">3.6.2<span class="hspace">&nbsp;</span>Using the Pollen dashboard</a></p></td></tr><tr><td><p><span class="hspace"></span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Why_.I_made_.Pollen%29" class="toptoclink" data-pltdoc="x">4<span class="hspace">&nbsp;</span>Why I made Pollen</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.The_web-development_problem%29" class="toclink" data-pltdoc="x">4.1<span class="hspace">&nbsp;</span>The web-development problem</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Why_not_a_content_management_system__like_.Word.Press_%29" class="toclink" data-pltdoc="x">4.1.1<span class="hspace">&nbsp;</span>Why not a content management system, like WordPress?</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Why_not_a_.C.S.S_preprocessor__like_.Sass_or_.L.E.S.S_%29" class="toclink" data-pltdoc="x">4.1.2<span class="hspace">&nbsp;</span>Why not a CSS preprocessor, like Sass or LESS?</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Why_not_a_static_blog_generator__like_.Jekyll_or_.Pelican_%29" class="toclink" data-pltdoc="x">4.1.3<span class="hspace">&nbsp;</span>Why not a static blog generator, like Jekyll or Pelican?</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Why_not_a_dynamic_templating_system__like_.Bottle_%29" class="toclink" data-pltdoc="x">4.1.4<span class="hspace">&nbsp;</span>Why not a dynamic templating system, like Bottle?</a></p></td></tr><tr><td><p><span class="hspace"></span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Source_formats%29" class="toptoclink" data-pltdoc="x">5<span class="hspace">&nbsp;</span>Source formats</a></p></td></tr><tr><td><p><span class="hspace"></span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._reader%29" class="toptoclink" data-pltdoc="x">6<span class="hspace">&nbsp;</span>&#9674; command overview</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.The_golden_rule%29" class="toclink" data-pltdoc="x">6.1<span class="hspace">&nbsp;</span>The golden rule</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.The_lozenge_glyph____%29" class="toclink" data-pltdoc="x">6.2<span class="hspace">&nbsp;</span>The lozenge glyph (&#9674;)</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.The_two_command_modes__text_mode___.Racket_mode%29" class="toclink" data-pltdoc="x">6.3<span class="hspace">&nbsp;</span>The two command modes: text mode &amp; Racket mode</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.The_command_name%29" class="toclink" data-pltdoc="x">6.3.1<span class="hspace">&nbsp;</span>The command name</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Invoking_tag_functions%29" class="toclink" data-pltdoc="x">6.3.1.1<span class="hspace">&nbsp;</span>Invoking tag functions</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Invoking_other_functions%29" class="toclink" data-pltdoc="x">6.3.1.2<span class="hspace">&nbsp;</span>Invoking other functions</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Inserting_the_value_of_a_variable%29" class="toclink" data-pltdoc="x">6.3.1.3<span class="hspace">&nbsp;</span>Inserting the value of a variable</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Inserting_a_comment%29" class="toclink" data-pltdoc="x">6.3.1.4<span class="hspace">&nbsp;</span>Inserting a comment</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.The_.Racket_arguments%29" class="toclink" data-pltdoc="x">6.3.2<span class="hspace">&nbsp;</span>The Racket arguments</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.The_text_argument%29" class="toclink" data-pltdoc="x">6.3.3<span class="hspace">&nbsp;</span>The text argument</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Further_reading%29" class="toclink" data-pltdoc="x">6.4<span class="hspace">&nbsp;</span>Further reading</a></p></td></tr><tr><td><p><span class="hspace"></span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Module_reference%29" class="toptoclink" data-pltdoc="x">7<span class="hspace">&nbsp;</span>Module reference</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Cache%29" class="toclink" data-pltdoc="x">7.1<span class="hspace">&nbsp;</span>Cache</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Decode%29" class="toclink" data-pltdoc="x">7.2<span class="hspace">&nbsp;</span>Decode</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Block%29" class="toclink" data-pltdoc="x">7.2.1<span class="hspace">&nbsp;</span>Block</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Typography%29" class="toclink" data-pltdoc="x">7.2.2<span class="hspace">&nbsp;</span>Typography</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.File%29" class="toclink" data-pltdoc="x">7.3<span class="hspace">&nbsp;</span>File</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Pagetree%29" class="toclink" data-pltdoc="x">7.4<span class="hspace">&nbsp;</span>Pagetree</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Navigation%29" class="toclink" data-pltdoc="x">7.4.1<span class="hspace">&nbsp;</span>Navigation</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Utilities%29" class="toclink" data-pltdoc="x">7.4.2<span class="hspace">&nbsp;</span>Utilities</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Render%29" class="toclink" data-pltdoc="x">7.5<span class="hspace">&nbsp;</span>Render</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Template%29" class="toclink" data-pltdoc="x">7.6<span class="hspace">&nbsp;</span>Template</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Tag%29" class="toclink" data-pltdoc="x">7.7<span class="hspace">&nbsp;</span>Tag</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Top%29" class="toclink" data-pltdoc="x">7.8<span class="hspace">&nbsp;</span>Top</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.World%29" class="toclink" data-pltdoc="x">7.9<span class="hspace">&nbsp;</span>World</a></p></td></tr><tr><td><p><span class="hspace"></span></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.License___source_code%29" class="toptoclink" data-pltdoc="x">8<span class="hspace">&nbsp;</span>License &amp; source code</a></p></td></tr></table><h3>1<tt>&nbsp;</tt><a name="(part._.Installation)"></a>Installation</h3><p>Install Racket, which includes DrRacket.</p><p><div class="SIntrapara">Install Pollen from the command line:
</div><div class="SIntrapara"><table cellspacing="0"><tr><td><p><span class="stt">raco pkg install pollen</span></p></td></tr></table></div></p><p><div class="SIntrapara">After that, you can update the package from the command line:
</div><div class="SIntrapara"><table cellspacing="0"><tr><td><p><span class="stt">raco pkg update pollen</span></p></td></tr></table></div></p><h3>2<tt>&nbsp;</tt><a name="(part._.Acknowledgments)"></a>Acknowledgments</h3><p>One curious aspect of free software is that you can appropriate the benefits of other people&rsquo;s work while making it look like your own. No such legerdemain here. Whatever effort I&rsquo;ve put into Pollen is dwarfed by the epic accomplishments of the Racket development team. I thank all of them &#8212; especially <a href="https://www.cs.utah.edu/~mflatt/">Matthew Flatt</a>, <a href="http://faculty.cs.byu.edu/~jay/home/">Jay McCarthy</a>, and <a href="http://www.ccs.neu.edu/home/matthias/">Matthias Felleisen</a> &#8212; for making this tremendous tool available, for adding several features I suggested, and for patiently answering my dumb questions over the months.</p><p>But the best tools do more than get the job done. They create an incentive to undertake jobs you wouldn&rsquo;t have attempted before. Racket encouraged me to become a better programmer so I could create Pollen. Likewise, I hope that Pollen encourages you to make things you couldn&rsquo;t before.</p><p>MB</p><h3>3<tt>&nbsp;</tt><a name="(part._.Quick_start)"></a>Quick start</h3><h4>3.1<tt>&nbsp;</tt><a name="(part._.Creating_a_source_file)"></a>Creating a source file</h4><p>Assuming you&rsquo;ve installed Racket &amp; Pollen, launch DrRacket.</p><p>Open a new document. Change the top line to:</p><blockquote class="SCodeFlow"><p><font class="badlink"><span class="RktModLink"><span class="RktMod">#lang</span></span></font><span class="hspace">&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a></p></blockquote><p>The first line of every Pollen source file will start with <span class="stt">#lang pollen</span>.</p><h4>3.2<tt>&nbsp;</tt><a name="(part._.Running_a_source_file)"></a>Running a source file</h4><p>Add a second line to your source file so it reads:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><font class="badlink"><span class="RktModLink"><span class="RktMod">#lang</span></span></font><span class="hspace">&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a></td></tr><tr><td><span class="RktSym">Hello</span><span class="hspace">&nbsp;</span><span class="RktSym">world</span></td></tr></table></blockquote><p>Click the <span class="ssansserif">Run</span> button. In the interactions window, you&rsquo;ll see the result:</p><blockquote class="SCodeFlow"><p><span class="RktVal">Hello world</span></p></blockquote><p>Not bad. I think Pollen&#160;just won the <a href="http://en.wikipedia.org/wiki/List_of_Hello_world_program_examples">Hello World Competition</a>.</p><p>You can work with Pollen source files in any text editor. The key advantage of DrRacket is that you can run them too, and see if they work the way you expect.</p><p>Try editing your source file:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><font class="badlink"><span class="RktModLink"><span class="RktMod">#lang</span></span></font><span class="hspace">&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a></td></tr><tr><td><span class="RktSym">Goodbye</span><span class="hspace">&nbsp;</span><span class="RktSym">Stranger</span></td></tr><tr><td><span class="RktSym">Breakfast</span><span class="hspace">&nbsp;</span><span class="RktSym">in</span><span class="hspace">&nbsp;</span><span class="RktSym">America</span></td></tr><tr><td><span class="RktSym">Take</span><span class="hspace">&nbsp;</span><span class="RktSym">the</span><span class="hspace">&nbsp;</span><span class="RktSym">Long</span><span class="hspace">&nbsp;</span><span class="RktSym">Way</span><span class="hspace">&nbsp;</span><span class="RktSym">Home</span></td></tr></table></blockquote><p>You don&rsquo;t have to use Supertramp song titles. Any text will do. When you click <span class="ssansserif">Run</span> again, you&rsquo;ll see whatever you typed:</p><blockquote class="SCodeFlow"><p><span class="RktVal">Goodbye Stranger</span><br/><span class="RktVal">Breakfast in America</span><br/><span class="RktVal">Take the Long Way Home</span></p></blockquote><p>We won&rsquo;t do it a third time. You get the point &#8212; any plain text is valid within a Pollen source file, and gets printed as is. You never have to perform the incantations of typical programming languages:</p><p><table cellspacing="0"><tr><td><p><span class="stt">print "Hello world"</span></p></td></tr><tr><td><p><span class="stt">document.write('Hello world');</span></p></td></tr><tr><td><p><span class="stt">printf("Hello world");</span></p></td></tr></table></p><p>In Pollen, what you write is what you get.</p><h4>3.3<tt>&nbsp;</tt><a name="(part._.Naming__saving__and_rendering_a_source_file)"></a>Naming, saving, and rendering a source file</h4><p>Save this file with the name <span class="stt">hello.txt.pp</span> in any convenient directory. The desktop is fine.</p><p>Open a terminal window and issue two commands:</p><p><table cellspacing="0"><tr><td><p><span class="stt">&gt; cd [directory containing your file]</span></p></td></tr><tr><td><p><span class="stt">&gt; raco pollen render hello.txt.pp</span></p></td></tr></table></p><p>After a moment, a new file will appear called <span class="stt">hello.txt</span>. Let&rsquo;s see what&rsquo;s in it:</p><p><table cellspacing="0"><tr><td><p><span class="stt">&gt; cat hello.txt</span></p></td></tr><tr><td><p><span class="stt">Goodbye Stranger</span></p></td></tr><tr><td><p><span class="stt">Breakfast in America</span></p></td></tr><tr><td><p><span class="stt">Take the Long Way Home</span></p></td></tr></table></p><p>You&rsquo;ve just learned three things:</p><ul><li><p>Pollen commands in the terminal begin with <span class="stt">raco pollen</span>, followed by a specific command (in this case <span class="stt">render</span>) and sometimes an argument (in this case <span class="stt">hello.txt.pp</span>).</p></li><li><p>The <span class="stt">render</span> command takes the result from your source file &#8212;&#160;meaning, the result you previewed in DrRacket in the previous step &#8212;&#160;and saves it to an output file.</p></li><li><p>The name of the output file is the same as the source file, minus the Pollen source extension. So <span class="stt">hello.txt.pp</span> becomes <span class="stt">hello.txt</span>.</p></li></ul><p>Try editing the text in the <span class="stt">hello.txt.pp</span> source file and running <span class="stt">raco pollen render hello.txt.pp</span> again. The old <span class="stt">hello.txt</span> will be replaced with a new one showing your changes. And so you&rsquo;ve learned a fourth thing:</p><ul><li><p>Pollen works by rendering output files from source files. Output files can be overwritten. Therefore, you should only make edits to your source files.</p></li></ul><h4>3.4<tt>&nbsp;</tt><a name="(part._.Using_the_development_server)"></a>Using the development server</h4><p>You&rsquo;ve just learned two ways to see the output of a Pollen source file &#8212;&#160;first, you ran it in DrRacket. Then, you rendered it to an output file.</p><p>Now here&rsquo;s a third: the Pollen project server. Here&rsquo;s how you start it. Return to your terminal window and issue two commands:</p><p><table cellspacing="0"><tr><td><p><span class="stt">&gt; cd [directory containing your hello.txt.pp file]</span></p></td></tr><tr><td><p><span class="stt">&gt; raco pollen start</span></p></td></tr></table></p><p>After a second, you&rsquo;ll see something like this:</p><p><table cellspacing="0"><tr><td><p><span class="stt">Welcome to Pollen 0.001 (Racket 6.0.0.5)</span></p></td></tr><tr><td><p><span class="stt">Project root is /path/to/your/directory</span></p></td></tr><tr><td><p><span class="stt">Project server is http://localhost:8080 (Ctrl-C to exit)</span></p></td></tr><tr><td><p><span class="stt">Project dashboard is http://localhost:8080/index.ptree</span></p></td></tr><tr><td><p><span class="stt">Ready to rock</span></p></td></tr></table></p><p>Open a web browser and point it at <span class="stt">http://localhost:8080/index.ptree</span>. The top of the window will say <span class="stt">Project root</span>. Below that will be a listing of the files in the directory.</p><p>Among them will be <span class="stt">hello.txt</span>, with a greyed-out <span class="stt">.pp</span> extension. Click on it. You&rsquo;ll be taken to <span class="stt">http://localhost:8080/hello.txt</span>, and you&rsquo;ll see the contents of the file.</p><p>Well, duh, you say &#8212;&#160;I just rendered that file a moment ago. Leave the project server running. Go to your project directory and delete <span class="stt">hello.txt</span>, leaving <span class="stt">hello.txt.pp</span> intact. Now visit <span class="stt">http://localhost:8080/hello.txt</span> in your web browser again.</p><h4>3.5<tt>&nbsp;</tt><a name="(part._.The_plot_thickens)"></a>The plot thickens</h4><p>Start a new Pollen document. Remember to change the top line.</p><p>Underneath, type <span class="RktSym">Hello</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">&#9674;</span><span class="RktPn">(</span><span class="RktSym">+</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">1</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">2</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">Worlds</span><span class="RktMeta"></span>. The character before the left parenthesis is called a lozenge. Type it by [doing such and such].</p><p>Ask yourself: what are you likely to get when you run the file?</p><p>OK, now run the file.</p><p>The result will be <span class="RktSym">Hello</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">Worlds</span><span class="RktMeta"></span>. Hopefully, that&rsquo;s what you expected.</p><p>Feel free to change the numbers inside the parenthesized expression and run the file again. The printed sum will change. You can also change the <span class="RktSym">+</span><span class="RktMeta"></span> sign to a <span class="RktSym">*</span><span class="RktMeta"></span> sign and make really big numbers. If you want to see your first stupid Pollen trick, type <span class="RktSym">Hello</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">&#9674;</span><span class="RktPn">(</span><span class="RktSym">/</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">38</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">57</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">of</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">a</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">World</span><span class="RktMeta"></span> and watch what happens.</p><p>Erase everything but the top line.</p><p>Type this: <span class="RktSym">&#9674;</span><span class="RktPn">(</span><span class="RktSym">define</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">name</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"Roxy"</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">Hello</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">&#9674;name</span><span class="RktMeta"></span>.</p><p>What do you suppose you&rsquo;ll get this time?</p><p>Run the file. You&rsquo;ll see <span class="RktSym">Hello</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">Roxy</span><span class="RktMeta"></span>.</p><p>The lozenge character (&#9674;) tells Pollen to interpret what follows as code rather than plain text. This character is therefore the gateway to all the programming functions available in Pollen. In the first case, it denoted a math expression. In the second case, it denoted the definition of a variable, and then the variable itself.</p><h4>3.6<tt>&nbsp;</tt><a name="(part._.Making_an_.H.T.M.L_page_with_.Pollen)"></a>Making an HTML page with Pollen</h4><p>By default, Pollen operates in preprocessor mode. That means it evaluates all the expressions in your document, renders each as text, and then outputs the whole document as a text file.</p><p>In this tutorial, you&rsquo;re going to make an HTML file. But you can use Pollen as a preprocessor for any kind of text file.</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p>That means Pollen can act as a preprocessor for CSS, JavaScript, XML &#8212; and even source files for other programming languages.</p></blockquote></blockquote></blockquote><h5>3.6.1<tt>&nbsp;</tt><a name="(part._.Making_an_.H.T.M.L_page_with_.Pollen_in_decoder_mode)"></a>Making an HTML page with Pollen in decoder mode</h5><h5>3.6.2<tt>&nbsp;</tt><a name="(part._.Using_the_.Pollen_dashboard)"></a>Using the Pollen dashboard</h5><h3>4<tt>&nbsp;</tt><a name="(part._.Why_.I_made_.Pollen)"></a>Why I made Pollen</h3><p>The nerds have already raced ahead to the quick tutorial. That&rsquo;s okay. Because software isn&rsquo;t just data structures and functions. It&rsquo;s ideas, and choices, and policies. It&rsquo;s design.</p><p>I created Pollen to overcome certain tool limitations that surfaced repeatedly in my work. If you agree with my characterization of those problems, then you&rsquo;ll probably like the solution that Pollen offers.</p><p>If not, you probably won&rsquo;t.</p><h4>4.1<tt>&nbsp;</tt><a name="(part._.The_web-development_problem)"></a>The web-development problem</h4><p>I made my first web page in 1994, shortly after the web was invented. I opened my text editor (at the time, <a href="http://www.barebones.com/products/bbedit/">BBEdit</a>) and pecked out <span class="RktSym">&lt;html&gt;&lt;body&gt;Hello</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">world&lt;/body&gt;&lt;/html&gt;</span><span class="RktMeta"></span>, then loaded it in <a href="http://en.wikipedia.org/wiki/Mosaic_(web_browser)">Mosaic</a>. So did a million others.</p><p>If you weren&rsquo;t around then, you didn&rsquo;t miss much. Everything about the web was horrible: the web browsers, the computers running the browsers, the dial-up connections feeding the browsers, and of course HTML itself. At that point, the desktop-software experience was already slick and refined. By comparison, using the web felt like banging rocks together.</p><p>That&rsquo;s no longer true. The web is now 20 years old. During that time, most parts of the web have improved dramatically &#8212; the connections are faster, the browsers are more sophisticated, the screens have more pixels.</p><p>But one part has not: the way we make web pages. Over the years, tools promising to simplify HTML development have come and mostly gone &#8212;&#160;from PageMill to Dreamweaver. Meanwhile, true web jocks have remained loyal to the original HTML power tool: the humble text editor.</p><p>In one way, this makes sense. Web pages are mostly made of text &#8212;&#160;HTML, CSS, JavaScript, and so on &#8212;&#160;and thus the simplest way to mainpulate them is with a text editor. While HTML and CSS are not programming languages, they lend themselves to semantic and logical structure that&rsquo;s most easily expressed by editing them as text. Text-based editing also makes debugging and performance improvements easier.</p><p>But text-based editing is also limited. Though the underlying description of a web page is notionally human-readable, it&rsquo;s largely optimized to be readable by other software (namely, web browsers). HTML markup in particular is verbose and easily mistyped. And isn&rsquo;t it fatally dull to manage all the boilerplate, like surrounding every paragraph with <span class="RktSym">&lt;p&gt;...&lt;/p&gt;</span><span class="RktMeta"></span>? Yes, it is.</p><p>For these reasons, much of web development should lend itself to automation. But in practice, tools that enable this automation have been slow to arrive, and most come hobbled with unacceptable deficiencies.</p><h5>4.1.1<tt>&nbsp;</tt><a name="(part._.Why_not_a_content_management_system__like_.Word.Press_)"></a>Why not a content management system, like WordPress?</h5><p>I used WordPress to make the original version of <a href="http://typographyforlawyers.com/">Typography for Lawyers</a> (the precursor to Butterick&rsquo;s Practical Typography). Even WordPress founder Matt Mullenweg <a href="http://ma.tt/2010/04/typography-for-lawyers/">thought</a> it was &#8220;a cool use of WordPress for a mini-book.&#8221; Thanks, Matt. At the time, WordPress was the best tool for the job.</p><p>But at the risk of having my <a href="http://gravatar.com">Gravatar</a> revoked, I&rsquo;ll tell you I became disenchanted with WordPress because:</p><p>It&rsquo;s a resource hog.</p><p>Performance is questionable.</p><p>There&rsquo;s always a new security problem.</p><p>No source control.</p><p>PHP.</p><h5>4.1.2<tt>&nbsp;</tt><a name="(part._.Why_not_a_.C.S.S_preprocessor__like_.Sass_or_.L.E.S.S_)"></a>Why not a CSS preprocessor, like Sass or LESS?</h5><p>A CSS preprocessor automates the generation of CSS data. These preprocessors do save time &amp; effort, so using one is better than not using one. My objection is that they ask you to incur much of the overhead of learning a programming language but without delivering the benefits. Because unlike a general-purpose programming language, Sass and LESS can only manipulate CSS. Better to learn a programming language that can manipulate anything.</p><h5>4.1.3<tt>&nbsp;</tt><a name="(part._.Why_not_a_static_blog_generator__like_.Jekyll_or_.Pelican_)"></a>Why not a static blog generator, like Jekyll or Pelican?</h5><h5>4.1.4<tt>&nbsp;</tt><a name="(part._.Why_not_a_dynamic_templating_system__like_.Bottle_)"></a>Why not a dynamic templating system, like Bottle?</h5><h3>5<tt>&nbsp;</tt><a name="(part._.Source_formats)"></a><a name="(mod-path._pollen)"></a><a name="(mod-path._pollen/markup)"></a><a name="(mod-path._pollen/pre)"></a><a name="(mod-path._pollen/markdown)"></a>Source formats</h3><p><table cellspacing="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><font class="badlink"><span class="RktModLink"><span class="RktMod">#lang</span></span></font><span class="hspace">&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <span class="stt">pollen</span></span></td></tr></table></p><p>This puts Pollen into automatic mode, where the source file is interpreted according to the file extension.</p><p>If the file extension is &ldquo;.pm&rdquo;, the source is interpreted as <span class="RktSym">pollen/markup</span>.</p><p>If the file extension is &ldquo;.pp&rdquo;, the source is interpreted as <span class="RktSym">pollen/pre</span> (&ldquo;pre&rdquo; stands for &ldquo;preprocessor&rdquo;).</p><p>If the file extension is &ldquo;.pmd&rdquo;, the source is interpreted as <span class="RktSym">pollen/markdown</span>.</p><p><table cellspacing="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><font class="badlink"><span class="RktModLink"><span class="RktMod">#lang</span></span></font><span class="hspace">&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%2Fmarkup%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/markup</span></a></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <span class="stt">pollen</span></span></td></tr></table></p><p><table cellspacing="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><font class="badlink"><span class="RktModLink"><span class="RktMod">#lang</span></span></font><span class="hspace">&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%2Fpre%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/pre</span></a></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <span class="stt">pollen</span></span></td></tr></table></p><p><table cellspacing="0" class="defmodule"><tr><td align="left"><span class="hspace">&nbsp;</span><font class="badlink"><span class="RktModLink"><span class="RktMod">#lang</span></span></font><span class="hspace">&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%2Fmarkdown%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/markdown</span></a></td><td align="right"><span class="RpackageSpec"><span class="Smaller">&nbsp;package:</span> <span class="stt">pollen</span></span></td></tr></table></p><h3>6<tt>&nbsp;</tt><a name="(part._reader)"></a>&#9674; command overview</h3><h4>6.1<tt>&nbsp;</tt><a name="(part._.The_golden_rule)"></a>The golden rule</h4><p>Pollen uses a special character &#8212; the <span style="font-style: italic">lozenge</span>, which looks like this: &#9674; &#8212; to mark commands within a Pollen source file. So when you put a &#9674; in your source, whatever comes next will be treated as a command. If you don&rsquo;t, it will just be interpreted as plain text.</p><h4>6.2<tt>&nbsp;</tt><a name="(part._.The_lozenge_glyph____)"></a>The lozenge glyph (&#9674;)</h4><p>I chose the lozenge as the command marker because a) it appears in almost every font, b) it&rsquo;s barely used in ordinary typesetting, c) it&rsquo;s not used in any programming language that I know of, and d) its shape and color allow it to stand out easily in code without being distracting.</p><p>Here&rsquo;s how you type it:</p><p><span style="font-weight: bold">Mac</span>: option + shift + V
<br/>
<span style="font-weight: bold">Windows</span>:
<br/>
<span style="font-weight: bold">Ubuntu</span>:</p><p>Still, if you don&rsquo;t want to use the lozenge as your command marker, you can use something else. Set Pollen&rsquo;s <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acommand-marker%29%29" class="RktValLink" data-pltdoc="x">world:command-marker</a></span> value to whatever character you want.</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p>Scribble uses the @ sign as a delimiter. It&rsquo;s not a bad choice if you only work with Racket files. But as you use Pollen to work on other kinds of text-based files that commonly contain @ signs &#8212; HTML pages especially &#8212; it gets cumbersome. So I changed it.</p></blockquote></blockquote></blockquote><p>But don&rsquo;t knock the lozenge till you try it.</p><h4>6.3<tt>&nbsp;</tt><a name="(part._.The_two_command_modes__text_mode___.Racket_mode)"></a>The two command modes: text mode &amp; Racket mode</h4><p>Pollen commands can be entered in one of two modes: <span style="font-style: italic">text mode</span> or <span style="font-style: italic">Racket mode</span>. Both modes start with a lozenge (<span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;</span><span class="hspace"></span></span>):</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;</span><span class="hspace"></span></span><span class="hspace">&nbsp;</span><span class="sroman">&#8249;<span style="font-style: italic">command name</span>&#8250;</span><span class="hspace">&nbsp;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span><span class="hspace">&nbsp;</span><span class="sroman">&#8249;<span style="font-style: italic">Racket arguments ...</span>&#8250;</span><span class="hspace">&nbsp;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span><span class="hspace">&nbsp;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span><span class="hspace">&nbsp;</span><span class="sroman">&#8249;<span style="font-style: italic">text argument</span>&#8250;</span><span class="hspace">&nbsp;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span></td></tr><tr><td><span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;</span><span class="hspace"></span></span><span class="hspace">&nbsp;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">(</span><span class="hspace"></span></span><span class="hspace">&nbsp;</span><span class="sroman">&#8249;<span style="font-style: italic">Racket expression</span>&#8250;</span><span class="hspace">&nbsp;</span><span class="RktInBG"><span class="hspace"></span><span class="RktIn">)</span><span class="hspace"></span></span></td></tr></table></blockquote><p><span style="font-weight: bold">Text-mode commands</span></p><p>A text-mode command has the three possible parts after the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;</span><span class="hspace"></span></span>:</p><ul><li><p>The <span style="font-style: italic">command name</span> appears immediately after the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;</span><span class="hspace"></span></span>. Typically it&rsquo;s a short word.</p></li><li><p>The <span style="font-style: italic">Racket arguments</span> appear between square brackets. Pollen is partly an interface to the Racket programming language. These arguments are entered using Racket conventions &#8212;&#160;e.g., a <span class="stt">string of text</span> needs to be put in quotes as a <span class="RktVal">"string</span><span class="hspace">&nbsp;</span><span class="RktVal">of</span><span class="hspace">&nbsp;</span><span class="RktVal">text"</span><span class="RktMeta"></span>. If you like programming, you&rsquo;ll end up using these frequently. If you don&rsquo;t, you won&rsquo;t.</p></li><li><p>The <span style="font-style: italic">text argument</span> appears between braces (aka curly brackets). You can put any ordinary text here. Unlike with the Racket arguments, you don&rsquo;t put quotes around the text.</p></li></ul><p>Each of the three parts is optional. You can also nest commands within each other. However:</p><ul><li><p>You can never have spaces between the three parts.</p></li><li><p>Whatever parts you use must always appear in the order above.</p></li></ul><p>Here are a few examples of correct text-mode commands:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">variable-name</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktPn">{</span><span class="RktMeta">Text</span><span class="hspace">&nbsp;</span><span class="RktMeta">inside</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">tag.</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktPn">[</span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym">attr:</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"value"</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">Text</span><span class="hspace">&nbsp;</span><span class="RktMeta">inside</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">tag</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">get-customer-id</span><span class="RktPn">[</span><span class="RktVal">"Brennan</span><span class="hspace">&nbsp;</span><span class="RktVal">Huff"</span><span class="RktPn">]</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktPn">{</span><span class="RktMeta">His</span><span class="hspace">&nbsp;</span><span class="RktMeta">ID</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">get-customer-id</span><span class="RktPn">[</span><span class="RktVal">"Brennan</span><span class="hspace">&nbsp;</span><span class="RktVal">Huff"</span><span class="RktPn">]</span><span class="RktMeta">.</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p>And some incorrect examples:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">{</span><span class="RktMeta">Text</span><span class="hspace">&nbsp;</span><span class="RktMeta">inside</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">tag.</span><span class="RktPn">}</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktCmt">;</span><span class="hspace">&nbsp;</span><span class="RktCmt">space</span><span class="hspace">&nbsp;</span><span class="RktCmt">between</span><span class="hspace">&nbsp;</span><span class="RktCmt">first</span><span class="hspace">&nbsp;</span><span class="RktCmt">and</span><span class="hspace">&nbsp;</span><span class="RktCmt">second</span><span class="hspace">&nbsp;</span><span class="RktCmt">parts</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktPn">[</span><span class="RktSym">Text</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">inside</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">the</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktPn">]</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktCmt">;</span><span class="hspace">&nbsp;</span><span class="RktCmt">text</span><span class="hspace">&nbsp;</span><span class="RktCmt">argument</span><span class="hspace">&nbsp;</span><span class="RktCmt">needs</span><span class="hspace">&nbsp;</span><span class="RktCmt">to</span><span class="hspace">&nbsp;</span><span class="RktCmt">be</span><span class="hspace">&nbsp;</span><span class="RktCmt">within</span><span class="hspace">&nbsp;</span><span class="RktCmt">braces</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktPn">{</span><span class="RktMeta">Text</span><span class="hspace">&nbsp;</span><span class="RktMeta">inside</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">tag</span><span class="RktPn">}</span><span class="RktPn">[</span><span class="RktVal">'</span><span class="RktMeta">attr:</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"value"</span><span class="RktPn">]</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktCmt">;</span><span class="hspace">&nbsp;</span><span class="RktCmt">wrong</span><span class="hspace">&nbsp;</span><span class="RktCmt">order</span><span class="RktMeta"></span></td></tr></table></blockquote><p>The next section describes each of these parts in detail.</p><p><span style="font-weight: bold">Racket-mode commands</span></p><p>If you&rsquo;re familiar with Racket expressions, you can use the Racket-mode commands to embed them within Pollen source files. It&rsquo;s simple: any Racket expression can become a Pollen command by adding <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;</span><span class="hspace"></span></span> to the front. So in Racket, this code:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><font class="badlink"><span class="RktModLink"><span class="RktSym">racket</span></span></font><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">song</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"Revolution"</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"~a</span><span class="hspace">&nbsp;</span><span class="RktVal">#~a"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">song</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">*</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr></table></blockquote><p>Can be converted to Pollen like so:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">song</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"Revolution"</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"~a</span><span class="hspace">&nbsp;</span><span class="RktVal">#~a"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">song</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">*</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr></table></blockquote><p>And in DrRacket, they produce the same output:</p><blockquote><p><span class="RktOut">Revolution #9</span></p></blockquote><p>Beyond that, there&rsquo;s not much to say about Racket mode &#8212;&#160;any valid expression you can write in Racket will also be a valid Racket-mode Pollen command.</p><p><span style="font-weight: bold">The relationship of text mode and Racket mode</span></p><p>Even if you don&rsquo;t plan to write a lot of Racket-mode commands, you should be aware that under the hood, Pollen is converting all commands in text mode to Racket mode. So a text-mode command that looks like this:</p><blockquote class="SCodeFlow"><p><span class="RktSym">&#9674;headline</span><span class="RktPn">[</span><span class="RktPn">#:size</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">enormous</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktSym">Man</span><span class="hspace">&nbsp;</span><span class="RktSym">Bites</span><span class="hspace">&nbsp;</span><span class="RktSym">Dog!</span><span class="RktPn">}</span></p></blockquote><p>Is actually being turned into a Racket-mode command like this:</p><blockquote class="SCodeFlow"><p><span class="RktPn">(</span><span class="RktSym">headline</span><span class="hspace">&nbsp;</span><span class="RktPn">#:size</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">enormous</span><span class="hspace">&nbsp;</span><span class="RktVal">"Man Bites Dog!"</span><span class="RktPn">)</span></p></blockquote><p>Thus a text-mode command is just an alternate way of writing a Racket-mode command. (More broadly, all of Pollen is just an alternate way of using Racket.)</p><p>The corollary is that you can always write Pollen commands using whichever mode is more convenient or readable. For instance, the earlier example, written in the Racket mode:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">song</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"Revolution"</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"~a</span><span class="hspace">&nbsp;</span><span class="RktVal">#~a"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">song</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">*</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr></table></blockquote><p>Can be rewritten using text mode:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktPn">[</span><span class="RktSym">song</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">Revolution</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="RktPn">[</span><span class="RktVal">"~a</span><span class="hspace">&nbsp;</span><span class="RktVal">#~a"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">song</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">*</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktPn">)</span><span class="RktPn">]</span><span class="RktMeta"></span></td></tr></table></blockquote><p>And it will work the same way.</p><h5>6.3.1<tt>&nbsp;</tt><a name="(part._.The_command_name)"></a>The command name</h5><p>In Pollen, you&rsquo;ll typically use the command name for one of four purposes:</p><ul><li><p>To invoke a tag function.</p></li><li><p>To invoke another function.</p></li><li><p>To insert the value of a variable.</p></li><li><p>To insert a comment.</p></li></ul><h5>6.3.1.1<tt>&nbsp;</tt><a name="(part._.Invoking_tag_functions)"></a>Invoking tag functions</h5><p>By default, Pollen treats every command name as a <span style="font-style: italic">tag function</span>. As the name implies, a tag function creates a tagged X-expression with the command name as the tag, and the text argument as the content.</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">strong</span><span class="RktPn">{</span><span class="RktMeta">Fancy</span><span class="hspace">&nbsp;</span><span class="RktMeta">Sauce</span><span class="RktMeta">,</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">$1</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(strong "Fancy Sauce, $1")</span></p><p>To streamline markup, Pollen doesn&rsquo;t restrict you to a certain set of tags, nor does it make you define your tag functions ahead of time. Just type a tag, and you can start using it.</p><p><div class="SIntrapara"><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">utterlyridiculoustagname</span><span class="RktPn">{</span><span class="RktMeta">Oh</span><span class="hspace">&nbsp;</span><span class="RktMeta">really?</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote></div><div class="SIntrapara"><span class="RktOut">'(utterlyridiculoustagname "Oh really?")</span></div></p><p>The one restriction is that you can&rsquo;t invent names for tag functions that are already being used for other commands. For instance, <span class="stt">map</span> is a name permanently reserved by the Racket function <span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span>. It&rsquo;s also a rarely-used HTML tag. But gosh, you really want to use it. Problem is, if you invoke it directly, Pollen will think you mean the other <span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span>:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="RktPn">{</span><span class="RktMeta">Fancy</span><span class="hspace">&nbsp;</span><span class="RktMeta">Sauce</span><span class="RktMeta">,</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">$1</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktErr">map: arity mismatch;<br/>
the expected number of arguments does not match the given number<br/>
&#160;&#160;given: 1<br/>
&#160;&#160;arguments...:<br/>
&#160;&#160;&#160;&#160;"Fancy Sauce, $1"</span></p><p>What to do? Read on.</p><h5>6.3.1.2<tt>&nbsp;</tt><a name="(part._.Invoking_other_functions)"></a>Invoking other functions</h5><p>Though every command name starts out as a tag function, it doesn&rsquo;t necessarily end there. You have two options for invoking other functions: defining your own , or invoking others from Racket.</p><p><span style="font-weight: bold">Defining your own functions</span></p><p>Use the <span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span> command to create your own function for a command name. After that, when you use the command name, you&rsquo;ll get the new behavior. For instance, recall this example showing the default tag-function behavior:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">strong</span><span class="RktPn">{</span><span class="RktMeta">Fancy</span><span class="hspace">&nbsp;</span><span class="RktMeta">Sauce</span><span class="RktMeta">,</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">$1</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(strong "Fancy Sauce, $1")</span></p><p>We can define <span class="stt">strong</span> to do something else, like add to the text:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">strong</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">`</span></span></span><span class="RktPn">(</span><span class="RktSym">strong</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">,</span></span></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"Hey!</span><span class="hspace">&nbsp;</span><span class="RktVal">Listen</span><span class="hspace">&nbsp;</span><span class="RktVal">up!</span><span class="hspace">&nbsp;</span><span class="RktVal">~a"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">strong</span><span class="RktPn">{</span><span class="RktMeta">Fancy</span><span class="hspace">&nbsp;</span><span class="RktMeta">Sauce</span><span class="RktMeta">,</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">$1</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(strong "Hey! Listen up! Fancy Sauce, $1")</span></p><p>The replacement function has to accept any arguments that might get passed along, but it doesn&rsquo;t have to do anything with them. For instance, this function definition won&rsquo;t work because <span class="stt">strong</span> is going to get a text argument that it&rsquo;s not defined to handle:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">strong</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktPn">(</span><span class="RktSym">fib</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"1</span><span class="hspace">&nbsp;</span><span class="RktVal">1</span><span class="hspace">&nbsp;</span><span class="RktVal">2</span><span class="hspace">&nbsp;</span><span class="RktVal">3</span><span class="hspace">&nbsp;</span><span class="RktVal">5</span><span class="hspace">&nbsp;</span><span class="RktVal">8</span><span class="hspace">&nbsp;</span><span class="RktVal">13</span><span class="hspace">&nbsp;</span><span class="RktVal">..."</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">strong</span><span class="RktPn">{</span><span class="RktMeta">Fancy</span><span class="hspace">&nbsp;</span><span class="RktMeta">Sauce</span><span class="RktMeta">,</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">$1</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktErr">strong: arity mismatch;<br/>
the expected number of arguments does not match the given number<br/>
&#160;&#160;expected: 0<br/>
&#160;&#160;given: 1<br/>
&#160;&#160;arguments...:<br/>
&#160;&#160;&#160;&#160;"Fancy Sauce, $1"</span></p><p>Whereas in this version, <span class="stt">strong</span> accepts an argument called <span class="stt">text</span>, but then ignores it:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">strong</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktPn">(</span><span class="RktSym">fib</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"1</span><span class="hspace">&nbsp;</span><span class="RktVal">1</span><span class="hspace">&nbsp;</span><span class="RktVal">2</span><span class="hspace">&nbsp;</span><span class="RktVal">3</span><span class="hspace">&nbsp;</span><span class="RktVal">5</span><span class="hspace">&nbsp;</span><span class="RktVal">8</span><span class="hspace">&nbsp;</span><span class="RktVal">13</span><span class="hspace">&nbsp;</span><span class="RktVal">..."</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">strong</span><span class="RktPn">{</span><span class="RktMeta">Fancy</span><span class="hspace">&nbsp;</span><span class="RktMeta">Sauce</span><span class="RktMeta">,</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">$1</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(fib "1 1 2 3 5 8 13 ...")</span></p><p>You can attach any behavior to a command name. As your project evolves, you can also update the behavior of a command name. In that way, Pollen commands become a set of hooks to which you can attach more elaborate processing.</p><p><span style="font-weight: bold">Using Racket functions</span></p><p>You aren&rsquo;t limited to functions you define. Any function from Racket, or any Racket library, can be invoked directly by using it as a command name. Here&rsquo;s the function <span class="RktSym"><span class="badlink"><span class="RktValLink">range</span></span></span>, which creates a list of numbers:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">range</span></span></span><span class="RktPn">[</span><span class="RktVal">1</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">20</span><span class="RktPn">]</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(range 1 20)</span></p><p>Hold on &#8212;&#160;that&rsquo;s not what we want. Where&rsquo;s the list of numbers? The problem here is that we didn&rsquo;t explicitly import the <font class="badlink"><span class="RktModLink"><span class="RktSym">racket/list</span></span></font> library, which contains the definition for <span class="RktSym"><span class="badlink"><span class="RktValLink">range</span></span></span>. (If you need to find out what library contains a certain function, the Racket documentation will tell you.) Without <font class="badlink"><span class="RktModLink"><span class="RktSym">racket/list</span></span></font>, Pollen just thinks we&rsquo;re trying to use <span class="stt">range</span> as a tag function (and if we had been, then <span class="RktOut">'(range 1 20)</span> would&rsquo;ve been the right result).</p><p>We fix this by using the <span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span> command to bring in the <font class="badlink"><span class="RktModLink"><span class="RktSym">racket/list</span></span></font> library, which contains the <span class="RktSym"><span class="badlink"><span class="RktValLink">range</span></span></span> we want:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">racket/list</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">range</span></span></span><span class="RktPn">[</span><span class="RktVal">1</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">20</span><span class="RktPn">]</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19)</span></p><p>Of course, you can also invoke Racket functions indirectly, by attaching them to functions you define for command names:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">racket/list</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">rick</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">start</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">finish</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">range</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">start</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">finish</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">rick</span><span class="RktPn">[</span><span class="RktVal">1</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">20</span><span class="RktPn">]</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19)</span></p><p>Let&rsquo;s return to the problem that surfaced in the last section &#8212; the fact that some command names can&rsquo;t be used as tag functions because they&rsquo;re already being used for other things. You can work around this by defining your own tag function with a non-conflicting name.</p><p>For instance, suppose we want to use <span class="stt">map</span> as a tag even though Racket is using it for its own function called <span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span>. First, we invent a command name that doesn&rsquo;t conflict. Let&rsquo;s call it <span class="RktSym">my-map</span><span class="RktMeta"></span>. As you learned above, Pollen will treat a new command name as a tag function by default:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">my-map</span><span class="RktPn">{</span><span class="RktMeta">How</span><span class="hspace">&nbsp;</span><span class="RktMeta">I</span><span class="hspace">&nbsp;</span><span class="RktMeta">would</span><span class="hspace">&nbsp;</span><span class="RktMeta">love</span><span class="hspace">&nbsp;</span><span class="RktMeta">this</span><span class="hspace">&nbsp;</span><span class="RktMeta">to</span><span class="hspace">&nbsp;</span><span class="RktMeta">be</span><span class="hspace">&nbsp;</span><span class="RktMeta">a</span><span class="hspace">&nbsp;</span><span class="RktMeta">map.</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(my-map "How I would love this to be a map.")</span></p><p>But <span class="RktSym">my-map</span><span class="RktMeta"></span> is not the tag we want. We need to define <span class="RktSym">my-map</span><span class="RktMeta"></span> to be a tag function for <span class="stt">map</span>. We can do this with the Pollen helper <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-tag-function</a></span>. That function lives in <a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%2Ftag%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/tag</span></a>, so we <span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span> that too:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">pollen/tag</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">my-map</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-tag-function</a></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">my-map</span><span class="RktPn">{</span><span class="RktMeta">How</span><span class="hspace">&nbsp;</span><span class="RktMeta">I</span><span class="hspace">&nbsp;</span><span class="RktMeta">would</span><span class="hspace">&nbsp;</span><span class="RktMeta">love</span><span class="hspace">&nbsp;</span><span class="RktMeta">this</span><span class="hspace">&nbsp;</span><span class="RktMeta">to</span><span class="hspace">&nbsp;</span><span class="RktMeta">be</span><span class="hspace">&nbsp;</span><span class="RktMeta">a</span><span class="hspace">&nbsp;</span><span class="RktMeta">map.</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(map "How I would love this to be a map.")</span></p><p>Problem solved.</p><h5>6.3.1.3<tt>&nbsp;</tt><a name="(part._.Inserting_the_value_of_a_variable)"></a>Inserting the value of a variable</h5><p>A Pollen command name usually refers to a function, but it can also refer to a <span style="font-style: italic">variable</span>, which is a data value. Once you define the variable, you can insert it into your source by using the &#9674; notation without any other arguments:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">foo</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"bar"</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">value</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">foo</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">foo</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">The value of foo is bar</span></p><p>Be careful &#8212;&#160;if you include arguments, even blank ones, Pollen will treat the command name as a function. This won&rsquo;t work, because a variable is not a function:</p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p>To understand what happens here, recall the relationship between Pollen&rsquo;s command modes. The text-mode command <span class="RktSym">&#9674;foo</span><span class="RktPn">[</span><span class="RktPn">]</span><span class="RktMeta"></span> becomes the Racket-mode command <span class="RktPn">(</span><span class="RktSym">foo</span><span class="RktPn">)</span><span class="RktMeta"></span>, which after variable substitution becomes <span class="RktPn">(</span><span class="RktVal">"bar"</span><span class="RktPn">)</span><span class="RktMeta"></span>. If you try to evaluate <span class="RktPn">(</span><span class="RktVal">"bar"</span><span class="RktPn">)</span><span class="RktMeta"></span> &#8212; e.g., in DrRacket &#8212; you&rsquo;ll get the same error.</p></blockquote></blockquote></blockquote><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">foo</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"bar"</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">value</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">foo</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">foo</span><span class="RktPn">[</span><span class="RktPn">]</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktErr">application: not a procedure;<br/>
expected a procedure that can be applied to arguments<br/>
&#160;&#160;given: "bar"<br/>
&#160;&#160;arguments...: [none]</span></p><p>The reason we can simply drop <span class="RktSym">&#9674;foo</span><span class="RktMeta"></span> into the text argument of another Pollen command is that the variable <span class="RktSym">foo</span><span class="RktMeta"></span> holds a string (i.e., a text value). When appropriate, Pollen will convert a variable to a string in a sensible way. For instance, numbers are easily converted:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">zam</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">42</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">value</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">zam</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">zam</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">The value of zam is 42</span></p><p>If the variable holds a container datatype (like a <span class="RktSym"><span class="badlink"><span class="RktValLink">list</span></span></span>, <span class="RktSym"><span class="badlink"><span class="RktValLink">hash</span></span></span>, or <span class="RktSym"><span class="badlink"><span class="RktValLink">vector</span></span></span>), Pollen will produce the Racket text representation of the item. Here, <span class="stt">zam</span> is a <span class="RktSym"><span class="badlink"><span class="RktValLink">list</span></span></span> of integers:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">zam</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">list</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">1</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">2</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">value</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">zam</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">zam</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">The value of zam is '(1 2 3)</span></p><p>This feature is included for your convenience as an author. But in general, your readers won&rsquo;t want to see the Racket representation of a container. So in these cases, you should convert to a string manually in some sensible way. Here, the integers in the list are converted to strings, which are then combined using <span class="RktSym"><span class="badlink"><span class="RktValLink">string-join</span></span></span> from the <font class="badlink"><span class="RktModLink"><span class="RktSym">racket/string</span></span></font> library:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">racket/string</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">zam</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">list</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">1</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">2</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">3</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">value</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">zam</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-join</span></span></span><span class="RktPn">[</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">number-&gt;string</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">zam</span><span class="RktPn">)</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">and</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">The value of zam is 1 and 2 and 3</span></p><p>Pollen will still produce an error if you try to convert an esoteric value to a string. Here, <span class="stt">zam</span> is the addition function (<span class="RktSym"><span class="badlink"><span class="RktValLink">+</span></span></span>):</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">zam</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">+</span></span></span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">value</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">zam</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">zam</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktErr">Pollen decoder: can&rsquo;t convert #&lt;procedure:+&gt; to string</span></p><p>One special case to know about. In the examples above, there&rsquo;s a word space between the variable and the other text. But suppose you need to insert a variable into text so that there&rsquo;s no space in between. The simple &#9674;&#160;notation won&rsquo;t work, because it won&rsquo;t be clear where the variable name ends and the text begins.</p><p>For instance, suppose we want to use a variable <span class="stt">edge</span> next to the string <span class="stt">px</span>:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">edge</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">100</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">p</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">{</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">margin-left:</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">edgepx</span><span class="RktCmt">;</span><span class="hspace">&nbsp;</span><span class="RktCmt">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktErr">Pollen decoder: can&rsquo;t convert #&lt;procedure:...t/pollen/tag.rkt:6:2&gt; to string</span></p><p>The example fails because Pollen reads the whole string after the <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;</span><span class="hspace"></span></span> as the single variable name <span class="stt">edgepx</span>. Since <span class="stt">edgepx</span> isn&rsquo;t defined, it&rsquo;s treated as a tag function, and since Pollen can&rsquo;t convert a function to a string, we get an error.</p><p>In these situations, surround the variable name with vertical bars <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;|</span><span class="hspace"></span></span>like so<span class="RktInBG"><span class="hspace"></span><span class="RktIn">|</span><span class="hspace"></span></span> to explicitly indicate where the variable name ends. The bars are not treated as part of the name, nor are they included in the result. Once we do that, we get what we intended:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">edge</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">100</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">p</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">{</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">margin-left:</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;|</span><span class="RktSym">edge</span><span class="RktMeta">|px</span><span class="RktCmt">;</span><span class="hspace">&nbsp;</span><span class="RktCmt">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">p { margin-left: 100px; }</span></p><p>If you use this notation when you don&rsquo;t need to, nothing bad will happen. The vertical bars are always ignored.</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">edge</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">100</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">value</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">edge</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;|</span><span class="RktSym">edge</span><span class="RktMeta">|</span><span class="hspace">&nbsp;</span><span class="RktMeta">pixels</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">The value of edge is 100 pixels</span></p><h5>6.3.1.4<tt>&nbsp;</tt><a name="(part._.Inserting_a_comment)"></a>Inserting a comment</h5><p>Two options.</p><p>To comment out the rest of a single line, use a lozenge followed by a semicolon <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;;</span><span class="hspace"></span></span>.</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">span</span><span class="RktPn">{</span><span class="RktMeta">This</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">not</span><span class="hspace">&nbsp;</span><span class="RktMeta">a</span><span class="hspace">&nbsp;</span><span class="RktMeta">comment</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">span</span><span class="RktPn">{</span><span class="RktMeta">Nor</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">this</span><span class="RktPn">}</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktCmt">;span{But</span><span class="hspace">&nbsp;</span><span class="RktCmt">this</span><span class="hspace">&nbsp;</span><span class="RktCmt">is}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(span "This is not a comment") <br/>
'(span "Nor is this")</span></p><p>To comment out a multiline block, use the lozenge&#8211;semicolon signal <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;;</span><span class="hspace"></span></span> with curly braces, <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;;{</span><span class="hspace"></span></span>like so<span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span>.</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktCmt">;{</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;span</span><span class="RktPn">{</span><span class="RktMeta">This</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">not</span><span class="hspace">&nbsp;</span><span class="RktMeta">a</span><span class="hspace">&nbsp;</span><span class="RktMeta">comment</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;span</span><span class="RktPn">{</span><span class="RktMeta">Nor</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">this</span><span class="RktPn">}</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktCmt">;span{But</span><span class="hspace">&nbsp;</span><span class="RktCmt">this</span><span class="hspace">&nbsp;</span><span class="RktCmt">is}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">Actually</span><span class="RktMeta">,</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">it</span><span class="RktVal">'</span><span class="RktMeta">s</span><span class="hspace">&nbsp;</span><span class="RktMeta">all</span><span class="hspace">&nbsp;</span><span class="RktMeta">a</span><span class="hspace">&nbsp;</span><span class="RktMeta">comment</span><span class="hspace">&nbsp;</span><span class="RktMeta">now</span></td></tr></table></blockquote><p><span class="RktOut">Actually, it's all a comment now</span></p><h5>6.3.2<tt>&nbsp;</tt><a name="(part._.The_.Racket_arguments)"></a>The Racket arguments</h5><p>The middle part of a text-mode Pollen command contains the <span style="font-style: italic">Racket arguments</span> <span class="RktInBG"><span class="hspace"></span><span class="RktIn">[</span><span class="hspace"></span></span>between square brackets.<span class="RktInBG"><span class="hspace"></span><span class="RktIn">]</span><span class="hspace"></span></span> Most often, you&rsquo;ll see these used to pass extra information to commands that operate on text.</p><p>For instance, tag functions. Recall from before that any not-yet-defined command name in Pollen is treated as a tag function:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">title</span></span></span><span class="RktPn">{</span><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">Beginning</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">End</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(title "The Beginning of the End")</span></p><p>But what if you wanted to add attributes to this tag, so that it comes out like this?</p><p><span class="RktOut">'(title ((class "red")(id "first")) "The Beginning of the End")</span></p><p>You can do it with Racket arguments.</p><p>Here&rsquo;s the hard way. You can type out your list of attributes in Racket format and drop them into the brackets as a single argument:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">title</span></span></span><span class="RktPn">[</span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">class</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"red"</span><span class="RktPn">)</span><span class="RktPn">(</span><span class="RktSym">id</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"first"</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">Beginning</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">End</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(title ((class "red") (id "first")) "The Beginning of the End")</span></p><p>But that&rsquo;s a lot of parentheses to think about. So here&rsquo;s the easy way. Anytime you use a tag function, there&rsquo;s a shortcut for inserting attributes. You can enter them as a series of <span class="RktSym">symbol</span> / <span class="RktSym"><span class="badlink"><span class="RktValLink">string</span></span></span> pairs between the Racket-argument brackets. The only caveat is that the symbols have to begin with a quote mark <span class="RktInBG"><span class="hspace"></span><span class="RktIn">'</span><span class="hspace"></span></span> and end with a colon <span class="RktInBG"><span class="hspace"></span><span class="RktIn">:</span><span class="hspace"></span></span>. So taken together, they look like this:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">title</span></span></span><span class="RktPn">[</span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym">class:</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"red"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym">id:</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"first"</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">Beginning</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">End</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(title ((class "red") (id "first")) "The Beginning of the End")</span></p><p>Racket arguments can be any valid Racket expressions. For instance, this will also work:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">title</span></span></span><span class="RktPn">[</span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym">class:</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"~a"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">*</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">6</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">7</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym">id:</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"first"</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">Beginning</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">End</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(title ((class "42") (id "first")) "The Beginning of the End")</span></p><p>Since Pollen commands are really just Racket arguments underneath, you can use those too. Here, we&rsquo;ll define a variable called <span class="stt">name</span> and use it in the Racket arguments of <span class="stt">title</span>:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">name</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"Brennan"</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">title</span></span></span><span class="RktPn">[</span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym">class:</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"red"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym">id:</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">name</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">The</span><span class="hspace">&nbsp;</span><span class="RktMeta">Beginning</span><span class="hspace">&nbsp;</span><span class="RktMeta">of</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">End</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(title ((class "read") (id "Brennan")) "The Beginning of the End")</span></p><p>You can also use this area for <span style="font-style: italic">keyword arguments</span>. Keyword arguments can be used to provide options for a particular Pollen command, to avoid redundancy. Suppose that instead of using the <span class="stt">h1 ... h6</span> tags, you want to consolidate them into one command called <span class="stt">heading</span> and select the level separately. You can do this with a keyword, in this case <span class="RktPn">#:level</span>, which is passed as a Racket argument:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">heading</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">#:level</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">which</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">`</span></span></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">,</span></span></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-&gt;symbol</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">"h~a"</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">which</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">,</span></span></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#160;</span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">heading</span><span class="RktPn">[</span><span class="RktPn">#:level</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">1</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">Major</span><span class="hspace">&nbsp;</span><span class="RktMeta">league</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">heading</span><span class="RktPn">[</span><span class="RktPn">#:level</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">2</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">Minor</span><span class="hspace">&nbsp;</span><span class="RktMeta">league</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">heading</span><span class="RktPn">[</span><span class="RktPn">#:level</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktVal">6</span><span class="RktPn">]</span><span class="RktPn">{</span><span class="RktMeta">Trivial</span><span class="hspace">&nbsp;</span><span class="RktMeta">league</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(h1 "Major league") <br/>
'(h2 "Minor league") <br/>
'(h6 "Trivial league")</span></p><h5>6.3.3<tt>&nbsp;</tt><a name="(part._.The_text_argument)"></a>The text argument</h5><p>The third part of a text-mode Pollen command is the text argument. The text argument <span class="RktInBG"><span class="hspace"></span><span class="RktIn">{</span><span class="hspace"></span></span>appears between curly braces<span class="RktInBG"><span class="hspace"></span><span class="RktIn">}</span><span class="hspace"></span></span>. It can contain any text you want. The text argument can also contain other Pollen commands with their own text arguments. And they can contain other Pollen commands ... and so on, all the way down.</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">div</span><span class="RktPn">{</span><span class="RktMeta">Do</span><span class="hspace">&nbsp;</span><span class="RktMeta">it</span><span class="hspace">&nbsp;</span><span class="RktMeta">again.</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">div</span><span class="RktPn">{</span><span class="RktMeta">And</span><span class="hspace">&nbsp;</span><span class="RktMeta">again.</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktSym">div</span><span class="RktPn">{</span><span class="RktMeta">And</span><span class="hspace">&nbsp;</span><span class="RktMeta">yet</span><span class="hspace">&nbsp;</span><span class="RktMeta">again.</span><span class="RktPn">}</span><span class="RktPn">}</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(div "Do it again. " (div "And again. " (div "And yet again.")))</span></p><p>Three small details to know about the text argument.</p><p>First, the only character that needs special handling in a text argument is the lozenge <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;</span><span class="hspace"></span></span>. A lozenge ordinarily marks a new command. So if you want an actual lozenge to appear in the text, you have to escape it by typing <span class="RktInBG"><span class="hspace"></span><span class="RktIn">&#9674;"&#9674;"</span><span class="hspace"></span></span>.</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">definition</span><span class="RktPn">{</span><span class="RktMeta">This</span><span class="hspace">&nbsp;</span><span class="RktMeta">is</span><span class="hspace">&nbsp;</span><span class="RktMeta">the</span><span class="hspace">&nbsp;</span><span class="RktMeta">lozenge:</span><span class="hspace">&nbsp;</span><span class="RktMeta">&#9674;</span><span class="RktVal">"&#9674;"</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(definition "This is the lozenge: &#9674;")</span></p><p>Second, the whitespace-trimming policy. Here&rsquo;s the short version: if there&rsquo;s a carriage return at either end of the text argument, it is trimmed, and whitespace at the end of each line is selectively trimmed in an intelligent way. So this text argument, with carriage returns on the ends:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">div</span><span class="RktPn">{</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">Roomy!</span></td></tr><tr><td><span class="RktMeta">&#160;</span></td></tr><tr><td><span class="RktMeta">I</span><span class="hspace">&nbsp;</span><span class="RktMeta">agree.</span></td></tr><tr><td><span class="RktMeta"></span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(div "Roomy!" "\n" "\n" "I agree.")</span></p><p>Yields the same result as this one:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">div</span><span class="RktPn">{</span><span class="RktMeta">Roomy!</span></td></tr><tr><td><span class="RktMeta">&#160;</span></td></tr><tr><td><span class="RktMeta">I</span><span class="hspace">&nbsp;</span><span class="RktMeta">agree.</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(div "Roomy!" "\n" "\n" "I agree.")</span></p><p>For the long version, please see <font class="badlink">(part "Spaces, Newlines, and Indentation")</font>.</p><p>Third, within a multiline text argument, newline characters become individual strings that are not merged with adjacent text. So what you end up with is a list of strings, not a single string. That&rsquo;s why in the last example, we got this:</p><p><span class="RktOut">'(div "Roomy!" "\n" "\n" "I agree.")</span></p><p>Instead of this:</p><p><span class="RktOut">'(div "Roomy!\n\nI agree.")</span></p><p>Under most circumstances, these two tagged X-expressions will behave the same way. The biggest exception is with functions. A function that operates on multiline text arguments needs to be able to handle an indefinite number of strings. For instance, this <span class="stt">jejune</span> function only accepts a single argument. It will work with a single-line text argument, because that produces a single string:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">jejune</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">`</span></span></span><span class="RktPn">(</span><span class="RktSym">jejune</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">,</span></span></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">jejune</span><span class="RktPn">{</span><span class="RktMeta">Irrational</span><span class="hspace">&nbsp;</span><span class="RktMeta">confidence</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(jejune "Irrational confidence")</span></p><p>But watch what happens with a multiline text argument:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">jejune</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">`</span></span></span><span class="RktPn">(</span><span class="RktSym">jejune</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">,</span></span></span><span class="RktSym">text</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">jejune</span><span class="RktPn">{</span><span class="RktMeta">Deeply</span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktMeta">chastened</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktErr">jejune: arity mismatch;<br/>
the expected number of arguments does not match the given number<br/>
&#160;&#160;expected: 1<br/>
&#160;&#160;given: 3<br/>
&#160;&#160;arguments...:<br/>
&#160;&#160;&#160;"Deeply"<br/>
&#160;&#160;&#160;"\n"<br/>
&#160;&#160;&#160;"chastened"</span></p><p>The answer is to use a <span style="font-style: italic">rest argument</span> in the function, which takes the &ldquo;rest&rdquo; of the arguments &#8212;&#160;however many there may be &#8212;&#160;and combines them into a single <span class="RktSym"><span class="badlink"><span class="RktValLink">list</span></span></span>. If we rewrite <span class="stt">jejune</span> with a rest argument, we can fix the problem:</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktMeta">#lang</span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen</span></a><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">jejune</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktMeta">.</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">texts</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">`</span></span></span><span class="RktPn">(</span><span class="RktSym">jejune</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">,@</span></span></span><span class="RktSym">texts</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta">&#9674;</span><span class="RktSym">jejune</span><span class="RktPn">{</span><span class="RktMeta">Deeply</span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktMeta">chastened</span><span class="RktPn">}</span><span class="RktMeta"></span></td></tr></table></blockquote><p><span class="RktOut">'(jejune "Deeply" "\n" "chastened")</span></p><h4>6.4<tt>&nbsp;</tt><a name="(part._.Further_reading)"></a>Further reading</h4><p>The Pollen language is a variant of Racket&rsquo;s own text-processing language, called Scribble. So many things that are true about Scribble are also true about Pollen. For the sake of clarity &amp; brevity, I&rsquo;ve omitted them from this summary. But if you want the full story:</p><p>[insert]</p><h3>7<tt>&nbsp;</tt><a name="(part._.Module_reference)"></a>Module reference</h3><table cellspacing="0"><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Cache%29" class="toclink" data-pltdoc="x">7.1<span class="hspace">&nbsp;</span>Cache</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Decode%29" class="toclink" data-pltdoc="x">7.2<span class="hspace">&nbsp;</span>Decode</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Block%29" class="toclink" data-pltdoc="x">7.2.1<span class="hspace">&nbsp;</span>Block</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Typography%29" class="toclink" data-pltdoc="x">7.2.2<span class="hspace">&nbsp;</span>Typography</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.File%29" class="toclink" data-pltdoc="x">7.3<span class="hspace">&nbsp;</span>File</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Pagetree%29" class="toclink" data-pltdoc="x">7.4<span class="hspace">&nbsp;</span>Pagetree</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Navigation%29" class="toclink" data-pltdoc="x">7.4.1<span class="hspace">&nbsp;</span>Navigation</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Utilities%29" class="toclink" data-pltdoc="x">7.4.2<span class="hspace">&nbsp;</span>Utilities</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Render%29" class="toclink" data-pltdoc="x">7.5<span class="hspace">&nbsp;</span>Render</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Template%29" class="toclink" data-pltdoc="x">7.6<span class="hspace">&nbsp;</span>Template</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Tag%29" class="toclink" data-pltdoc="x">7.7<span class="hspace">&nbsp;</span>Tag</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.Top%29" class="toclink" data-pltdoc="x">7.8<span class="hspace">&nbsp;</span>Top</a></p></td></tr><tr><td><p><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28part._.World%29" class="toclink" data-pltdoc="x">7.9<span class="hspace">&nbsp;</span>World</a></p></td></tr></table><h4>7.1<tt>&nbsp;</tt><a name="(part._.Cache)"></a><a name="(mod-path._pollen/cache)"></a>Cache</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Fcache%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/cache</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>The slowest part of a <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValLink" data-pltdoc="x">render</a></span> is parsing and decoding the source file. Often, previewing a single source file necessarily means decoding others (for instance templates, or other source files that are linked into the main source file). But usually, only one source file is changing at a time. Therefore, Pollen stores copies of the exports of source files &#8212;&#160;namely, whatever is stored in <span class="RktSym">doc</span><span class="RktMeta"></span> and <span class="RktSym">metas</span><span class="RktMeta"></span> &#8212;&#160;in the cache so they can be reused.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>parameter</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/cache..rkt)._current-cache))"></a><span title="Provided from: pollen/cache | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._current-cache%29%29" class="RktValDef RktValLink" data-pltdoc="x">current-cache</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">hash?</span></span></span></p></blockquote></td></tr><tr><td><span class="RktPn">(</span><span title="Provided from: pollen/cache | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._current-cache%29%29" class="RktValDef RktValLink" data-pltdoc="x">current-cache</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">hash</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">hash</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">hash?</span></span></span></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._make-cache%29%29" class="RktValLink" data-pltdoc="x">make-cache</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">A parameter that refers to the current cache. It is initialized with <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._make-cache%29%29" class="RktValLink" data-pltdoc="x">make-cache</a></span>.</div></p><p>The cache is a hash table that uses the complete path of a source file as its keys. The value associated with each of these keys is a subcache &#8212;&#160;another hash table with keys <span class="RktVal">'</span><span class="RktVal">doc</span>, <span class="RktVal">'</span><span class="RktVal">metas</span> (for storing the exports of the source file) and <span class="RktVal">'</span><span class="RktVal">mod-time</span> (for storing the modification time, provided by <span class="RktSym"><span class="badlink"><span class="RktValLink">file-or-directory-modify-seconds</span></span></span>).</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/cache..rkt)._cached-require))"></a><span title="Provided from: pollen/cache | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._cached-require%29%29" class="RktValDef RktValLink" data-pltdoc="x">cached-require</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">source-path</span><span class="hspace">&nbsp;</span><span class="RktVar">key</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">txexpr?</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">hash?</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">integer?</span></span></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">source-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">doc</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">metas</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">mod-time</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Similar to <span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">dynamic-require</span></span></span><span class="stt"> </span><span class="RktVar">source-path</span><span class="stt"> </span><span class="RktVar">key</span><span class="RktPn">)</span>, except that it first tries to retrieve the requested value out of <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._current-cache%29%29" class="RktValLink" data-pltdoc="x">current-cache</a></span>. If it&rsquo;s not there, or out of date, <span class="RktSym"><span class="badlink"><span class="RktValLink">dynamic-require</span></span></span> is used to update the value.</div></p><p>The only keys&#160;supported are <span class="RktVal">'</span><span class="RktVal">doc</span>, <span class="RktVal">'</span><span class="RktVal">metas</span>, and <span class="RktVal">'</span><span class="RktVal">mod-time</span>.</p><p>If you want the speed benefit of the cache, you should <span style="font-weight: bold">always</span> use <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._cached-require%29%29" class="RktValLink" data-pltdoc="x">cached-require</a></span> to get data from Pollen source files. That doesn&rsquo;t mean you can&rsquo;t still use functions like <span class="RktSym"><span class="badlink"><span class="RktValLink">require</span></span></span>, <span class="RktSym"><span class="badlink"><span class="RktValLink">local-require</span></span></span>, and <span class="RktSym"><span class="badlink"><span class="RktValLink">dynamic-require</span></span></span>. They&rsquo;ll just be slower.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/cache..rkt)._make-cache))"></a><span title="Provided from: pollen/cache | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._make-cache%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-cache</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">hash?</span></span></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Initializes <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._current-cache%29%29" class="RktValLink" data-pltdoc="x">current-cache</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/cache..rkt)._reset-cache))"></a><span title="Provided from: pollen/cache | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._reset-cache%29%29" class="RktValDef RktValLink" data-pltdoc="x">reset-cache</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Clears <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._current-cache%29%29" class="RktValLink" data-pltdoc="x">current-cache</a></span>. When only the nuclear option will do.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/cache..rkt)._cache-ref))"></a><span title="Provided from: pollen/cache | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._cache-ref%29%29" class="RktValDef RktValLink" data-pltdoc="x">cache-ref</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">source-path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">hash?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">source-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Returns the subcache associated with the key <span class="RktVar">source-path</span>, which will itself be a hash table. See <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fcache..rkt%29._current-cache%29%29" class="RktValLink" data-pltdoc="x">current-cache</a></span>.</div></p><h4>7.2<tt>&nbsp;</tt><a name="(part._.Decode)"></a><a name="(mod-path._pollen/decode)"></a>Decode</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Fdecode%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/decode</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>The <span class="RktSym">doc</span> export of a Pollen markup file is a simple X-expression. <span style="font-style: italic">Decoding</span> refers to any post-processing of this X-expression. The <span class="RktSym">pollen/decode</span> module provides tools for creating decoders.</p><p>The decode step can happen separately from the compilation of the file. But you can also attach a decoder to the markup file&rsquo;s <span class="RktSym">root</span> node, so the decoding happens automatically when the markup is compiled, and thus automatically incorporated into <span class="RktSym">doc</span>. (Following this approach, you could also attach multiple decoders to different tags within <span class="RktSym">doc</span>.)</p><p>You can, of course, embed function calls within Pollen markup. But since markup is optimized for authors, decoding is useful for operations that can or should be moved out of the authoring layer.</p><p>One example is presentation and layout. For instance, <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span> is a decoder function that lets authors mark paragraphs in their source simply by using two carriage returns.</p><p>Another example is conversion of output into a particular data format. Most Pollen functions are optimized for HTML output, but one could write a decoder that targets another format.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" class="prototype RForeground"><tr><td><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._decode))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValDef RktValLink" data-pltdoc="x">decode</a></span></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktVar">tagged-xexpr</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span>[</td><td><span class="RktPn">#:txexpr-tag-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">txexpr-tag-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:txexpr-attrs-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">txexpr-attrs-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:txexpr-elements-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">txexpr-elements-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:block-txexpr-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">block-txexpr-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:inline-txexpr-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">inline-txexpr-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:string-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">string-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:symbol-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">symbol-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:valid-char-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">valid-char-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:cdata-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">cdata-proc</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:exclude-tags</span><span class="hspace">&nbsp;</span><span class="RktVar">tags-to-exclude</span>]<span class="RktPn">)</span></td><td><span class="hspace">&nbsp;</span></td><td>&rarr;</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr?</span></span></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">tagged-xexpr</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr?</span></span></span></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;&nbsp;</span></td><td><span class="RktVar">txexpr-tag-proc</span></td><td><span class="hspace">&nbsp;</span></td><td>:</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-tag?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-tag?</span></span></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td>=</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">tag</span></span></span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;&nbsp;</span></td><td><span class="RktVar">txexpr-attrs-proc</span></td><td><span class="hspace">&nbsp;</span></td><td>:</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-attrs?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-attrs?</span></span></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td>=</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">attrs</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;&nbsp;</span></td><td><span class="RktVar">txexpr-elements-proc</span></td><td><span class="hspace">&nbsp;</span></td><td>:</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td>=</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">elements</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">elements</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">block-txexpr-proc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._block-txexpr~3f%29%29" class="RktValLink" data-pltdoc="x">block-txexpr?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">inline-txexpr-proc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">string-proc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">str</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">str</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">symbol-proc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">sym</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">sym</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">valid-char-proc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">valid-char?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">vc</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">vc</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">cdata-proc</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">cdata?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">cdata</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">cdata</span></span></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">tags-to-exclude</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">null</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Recursively process a <span class="RktVar">tagged-xexpr</span>, usually the one exported from a Pollen source file as <span class="RktSym">doc</span>.</div></p><p>This function doesn&rsquo;t do much on its own. Rather, it provides the hooks upon which harder-working functions can be hung.</p><p>Recall from <font class="badlink">(part "Pollen mechanics")</font> that any tag can have a function attached to it. By default, the <span class="RktVar">tagged-xexpr</span> from a source file is tagged with <span class="RktSym">root</span>. So the typical way to use <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span> is to attach your decoding functions to it, and then define <span class="RktSym">root</span> to invoke your <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span> function. Then it will be automatically applied to every <span class="RktSym">doc</span> during compile.</p><p>For instance, here&rsquo;s how <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span> is attached to <span class="RktSym">root</span> in <span style="font-style: italic">Butterick&rsquo;s Practical Typography</span>. There&rsquo;s not much to it &#8212;</p><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">define</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym">root</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktMeta">.</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">items</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">make-txexpr</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">'</span></span></span><span class="RktSym">root</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><span class="badlink"><span class="RktValLink">null</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">items</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktPn">#:txexpr-elements-proc</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktPn">#:block-txexpr-proc</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">bx</span><span class="RktPn">)</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">wrap-hanging-quotes</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">nonbreaking-last-space</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">bx</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr><tr><td><span class="RktMeta"></span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktMeta"></span><span class="RktPn">#:string-proc</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">compose1</span></span></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._smart-quotes%29%29" class="RktValLink" data-pltdoc="x">smart-quotes</a></span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._smart-dashes%29%29" class="RktValLink" data-pltdoc="x">smart-dashes</a></span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktMeta"></span></td></tr></table></blockquote><p>This illustrates another important point: even though <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span> presents an imposing list of arguments, you&rsquo;re unlikely to use all of them at once. These represent possibilities, not requirements. For instance, let&rsquo;s see what happens when <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span> is invoked without any of its optional arguments.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">"I wonder"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">em</span><span class="hspace">&nbsp;</span><span class="RktVal">"why"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"this works."</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(root "I wonder" (em "why") "this works.")</span></p></td></tr></table></blockquote></td></tr></table></p><p>Right &#8212;&#160;nothing. That&rsquo;s because the default value for the decoding arguments is the identity function, <span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym">x</span><span class="RktPn">)</span><span class="stt"> </span><span class="RktSym">x</span><span class="RktPn">)</span>. So all the input gets passed through intact unless another action is specified.</p><p>The <span class="RktVar">*-proc</span> arguments of <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span> take procedures that are applied to specific categories of elements within <span class="RktVar">txexpr</span>.</p><p>The <span class="RktVar">txexpr-tag-proc</span> argument is a procedure that handles X-expression tags.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">p</span><span class="hspace">&nbsp;</span><span class="RktVal">"I'm from a strange"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">strong</span><span class="hspace">&nbsp;</span><span class="RktVal">"namespace"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Tags are symbols, so a tag-proc should return a symbol</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-tag-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">t</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-&gt;symbol</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">"ns:~a"</span><span class="hspace">&nbsp;</span><span class="RktSym">t</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(ns:p "I'm from a strange" (ns:strong "namespace"))</span></p></td></tr></table></blockquote></td></tr></table></p><p>The <span class="RktVar">txexpr-attrs-proc</span> argument is a procedure that handles lists of X-expression attributes. (The <font class="badlink"><span class="RktModLink"><span class="RktSym">txexpr</span></span></font> module, included at no extra charge with Pollen, includes useful helper functions for dealing with these attribute lists.)</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">p</span><span class="hspace">&nbsp;</span><span class="RktVal">[</span><span class="RktVal">[</span><span class="RktVal">id</span><span class="hspace">&nbsp;</span><span class="RktVal">"first"</span><span class="RktVal">]</span><span class="RktVal">]</span><span class="hspace">&nbsp;</span><span class="RktVal">"If I only had a brain."</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Attrs is a list, so cons is OK for simple cases</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-attrs-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</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">class</span><span class="hspace">&nbsp;</span><span class="RktVal">"PhD"</span><span class="RktVal">]</span><span class="hspace">&nbsp;</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(p ((class "PhD") (id "first")) "If I only had a brain.")</span></p></td></tr></table></blockquote></td></tr></table></p><p>Note that <span class="RktVar">txexpr-attrs-proc</span> will change the attributes of every tagged X-expression, even those that don&rsquo;t have attributes. This is useful, because sometimes you want to add attributes where none existed before. But be careful, because the behavior may make your processing function overinclusive.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">p</span><span class="hspace">&nbsp;</span><span class="RktVal">[</span><span class="RktVal">[</span><span class="RktVal">id</span><span class="hspace">&nbsp;</span><span class="RktVal">"first"</span><span class="RktVal">]</span><span class="RktVal">]</span><span class="hspace">&nbsp;</span><span class="RktVal">"If I only had a brain."</span><span class="RktVal">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">(</span><span class="RktVal">p</span><span class="hspace">&nbsp;</span><span class="RktVal">"Me too."</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">This will insert the new attribute everywhere</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-attrs-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</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">class</span><span class="hspace">&nbsp;</span><span class="RktVal">"PhD"</span><span class="RktVal">]</span><span class="hspace">&nbsp;</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td><p><span class="RktRes">'(div</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">((class "PhD"))</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">(p ((class "PhD") (id "first")) "If I only had a brain.")</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">(p ((class "PhD")) "Me too."))</span></p></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">This will add the new attribute only to non-null attribute lists</span></td></tr><tr><td><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-attrs-proc</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">if</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">null?</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">attrs</span><span class="hspace">&nbsp;</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">class</span><span class="hspace">&nbsp;</span><span class="RktVal">"PhD"</span><span class="RktVal">]</span><span class="hspace">&nbsp;</span><span class="RktSym">attrs</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">'(div (p ((class "PhD") (id "first")) "If I only had a brain.") (p "Me too."))</span></p></td></tr></table></blockquote></td></tr></table></p><p>The <span class="RktVar">txexpr-elements-proc</span> argument is a procedure that operates on the list of elements that represents the content of each tagged X-expression. Note that each element of an X-expression is subject to two passes through the decoder: once now, as a member of the list of elements, and also later, through its type-specific decoder (i.e., <span class="RktVar">string-proc</span>, <span class="RktVar">symbol-proc</span>, and so on).</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Double"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"toil"</span><span class="hspace">&nbsp;</span><span class="RktVal">amp</span><span class="hspace">&nbsp;</span><span class="RktVal">"trouble"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Every element gets doubled ...</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-elements-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">es</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">append-map</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">e</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktRdr">,</span><span class="RktSym">e</span><span class="hspace">&nbsp;</span><span class="RktRdr">,</span><span class="RktSym">e</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">es</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(div "Double" "Double" "\n" "\n" "toil" "toil" amp amp "trouble" "trouble")</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">... but only strings get capitalized</span></td></tr><tr><td><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-elements-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">es</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">append-map</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">e</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktRdr">,</span><span class="RktSym">e</span><span class="hspace">&nbsp;</span><span class="RktRdr">,</span><span class="RktSym">e</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktSym">es</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">#:string-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-upcase</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">'(div "DOUBLE" "DOUBLE" "\n" "\n" "TOIL" "TOIL" amp amp "TROUBLE" "TROUBLE")</span></p></td></tr></table></blockquote></td></tr></table></p><p>So why do you need <span class="RktVar">txexpr-elements-proc</span>? Because some types of element decoding depend on context, thus it&rsquo;s necessary to handle the elements as a group. For instance, the doubling function above, though useless, requires handling the element list as a whole, because elements are being added.</p><p>A more useful example: paragraph detection. The behavior is not merely a <span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span> across each element:</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-elements-proc</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Context matters. Trailing whitespace is ignored ...</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">body</span><span class="hspace">&nbsp;</span><span class="RktVal">"The first paragraph."</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(body "The first paragraph.")</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">... but whitespace between strings is converted to a break.</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">body</span><span class="hspace">&nbsp;</span><span class="RktVal">"The first paragraph."</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"And another."</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(body (p "The first paragraph.") (p "And another."))</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">A combination of both types</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">body</span><span class="hspace">&nbsp;</span><span class="RktVal">"The first paragraph."</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"And another."</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(body (p "The first paragraph.") (p "And another."))</span></p></td></tr></table></blockquote></td></tr></table></p><p>The <span class="RktVar">block-txexpr-proc</span> argument and the <span class="RktVar">inline-txexpr-proc</span> arguments are procedures that operate on tagged X-expressions. If the X-expression meets the <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._block-txexpr~3f%29%29" class="RktValLink" data-pltdoc="x">block-txexpr?</a></span> test, it is processed by <span class="RktVar">block-txexpr-proc</span>. Otherwise, it is processed by <span class="RktVar">inline-txexpr-proc</span>. Thus every tagged X-expression will be handled by one or the other. Of course, if you want block and inline elements to be handled the same way, you can set <span class="RktVar">block-txexpr-proc</span> and <span class="RktVar">inline-txexpr-proc</span> to be the same procedure.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Please"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">em</span><span class="hspace">&nbsp;</span><span class="RktVal">"mind the gap"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">h1</span><span class="hspace">&nbsp;</span><span class="RktVal">"Tuesdays only"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><table cellspacing="0" class="RktBlk"><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">add-ns</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">make-txexpr</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-&gt;symbol</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">"ns:~a"</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">get-tag</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">get-attrs</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">get-elements</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">div and h1 are block elements, so this will only affect them</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:block-txexpr-proc</span><span class="hspace">&nbsp;</span><span class="RktSym">add-ns</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(ns:div "Please" (em "mind the gap") (ns:h1 "Tuesdays only"))</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">em is an inline element, so this will only affect it</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:inline-txexpr-proc</span><span class="hspace">&nbsp;</span><span class="RktSym">add-ns</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(div "Please" (ns:em "mind the gap") (h1 "Tuesdays only"))</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">this will affect all elements</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:block-txexpr-proc</span><span class="hspace">&nbsp;</span><span class="RktSym">add-ns</span><span class="hspace">&nbsp;</span><span class="RktPn">#:inline-txexpr-proc</span><span class="hspace">&nbsp;</span><span class="RktSym">add-ns</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(ns:div "Please" (ns:em "mind the gap") (ns:h1 "Tuesdays only"))</span></p></td></tr></table></blockquote></td></tr></table></p><p>The <span class="RktVar">string-proc</span>, <span class="RktVar">symbol-proc</span>, <span class="RktVar">valid-char-proc</span>, and <span class="RktVar">cdata-proc</span> arguments are procedures that operate on X-expressions that are strings, symbols, valid-chars, and CDATA, respectively. Deliberately, the output contracts for these procedures accept any kind of X-expression (meaning, the procedure can change the X-expression type).</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">A div with string, entity, character, and cdata elements</span></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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Moe"</span><span class="hspace">&nbsp;</span><span class="RktVal">amp</span><span class="hspace">&nbsp;</span><span class="RktVal">62</span><span class="hspace">&nbsp;</span><span class="RktRdr">,</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">cdata</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktVal">"3 &gt; 2;"</span><span class="RktPn">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="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">rulify</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">hr</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">The rulify function is selectively applied to each</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">print</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:string-proc</span><span class="hspace">&nbsp;</span><span class="RktSym">rulify</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktOut">'(div (hr) amp 62 #(struct:cdata #f #f "3 &gt; 2;"))</span></p></td></tr><tr><td><table cellspacing="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">print</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:symbol-proc</span><span class="hspace">&nbsp;</span><span class="RktSym">rulify</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktOut">'(div "Moe" (hr) 62 #(struct:cdata #f #f "3 &gt; 2;"))</span></p></td></tr><tr><td><table cellspacing="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">print</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:valid-char-proc</span><span class="hspace">&nbsp;</span><span class="RktSym">rulify</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktOut">'(div "Moe" amp (hr) #(struct:cdata #f #f "3 &gt; 2;"))</span></p></td></tr><tr><td><table cellspacing="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">print</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:cdata-proc</span><span class="hspace">&nbsp;</span><span class="RktSym">rulify</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktOut">'(div "Moe" amp 62 (hr))</span></p></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr></table></blockquote></td></tr></table></p><p>Finally, the <span class="RktVar">tags-to-exclude</span> argument is a list of tags that will be exempted from decoding. Though you could get the same result by testing the input within the individual decoding functions, that&rsquo;s tedious and potentially slower.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">p</span><span class="hspace">&nbsp;</span><span class="RktVal">"I really think"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">em</span><span class="hspace">&nbsp;</span><span class="RktVal">"italics"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"should be lowercase."</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:string-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-upcase</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(p "I REALLY THINK" (em "ITALICS") "SHOULD BE LOWERCASE.")</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:string-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-upcase</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">#:exclude-tags</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">em</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(p "I REALLY THINK" (em "italics") "SHOULD BE LOWERCASE.")</span></p></td></tr></table></blockquote></td></tr></table></p><p>The <span class="RktVar">tags-to-exclude</span> argument is useful if you&rsquo;re decoding source that&rsquo;s destined to become HTML. According to the HTML spec, material within a <span class="RktSym">&lt;style&gt;</span> or <span class="RktSym">&lt;script&gt;</span> block needs to be preserved literally. In this example, if the CSS and JavaScript blocks are capitalized, they won&rsquo;t work. So exclude <span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">style</span><span class="stt"> </span><span class="RktVal">script</span><span class="RktVal">)</span>, and problem solved.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">body</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">h1</span><span class="hspace">&nbsp;</span><span class="RktVal">[</span><span class="RktVal">[</span><span class="RktVal">class</span><span class="hspace">&nbsp;</span><span class="RktVal">"Red"</span><span class="RktVal">]</span><span class="RktVal">]</span><span class="hspace">&nbsp;</span><span class="RktVal">"Let's visit Planet Telex."</span><span class="RktVal">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">(</span><span class="RktVal">style</span><span class="hspace">&nbsp;</span><span class="RktVal">[</span><span class="RktVal">[</span><span class="RktVal">type</span><span class="hspace">&nbsp;</span><span class="RktVal">"text/css"</span><span class="RktVal">]</span><span class="RktVal">]</span><span class="hspace">&nbsp;</span><span class="RktVal">".Red {color: green;}"</span><span class="RktVal">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">(</span><span class="RktVal">script</span><span class="hspace">&nbsp;</span><span class="RktVal">[</span><span class="RktVal">[</span><span class="RktVal">type</span><span class="hspace">&nbsp;</span><span class="RktVal">"text/javascript"</span><span class="RktVal">]</span><span class="RktVal">]</span><span class="hspace">&nbsp;</span><span class="RktVal">"var area = h * w;"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:string-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-upcase</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td><p><span class="RktRes">'(body</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">(h1 ((class "Red")) "LET'S VISIT PLANET TELEX.")</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">(style ((type "text/css")) ".RED {COLOR: GREEN;}")</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">(script ((type "text/javascript")) "VAR AREA = H * W;"))</span></p></td></tr></table></td></tr><tr><td><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:string-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-upcase</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">s</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">#:exclude-tags</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">style</span><span class="hspace">&nbsp;</span><span class="RktVal">script</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td><p><span class="RktRes">'(body</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">(h1 ((class "Red")) "LET'S VISIT PLANET TELEX.")</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">(style ((type "text/css")) ".Red {color: green;}")</span></p></td></tr><tr><td><p><span class="RktRes"></span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">(script ((type "text/javascript")) "var area = h * w;"))</span></p></td></tr></table></td></tr></table></blockquote></td></tr></table></p><h5>7.2.1<tt>&nbsp;</tt><a name="(part._.Block)"></a>Block</h5><p>Because it&rsquo;s convenient, Pollen categorizes tagged X-expressions into two categories: <span style="font-style: italic">block</span> and <span style="font-style: italic">inline</span>. Why is it convenient? When using <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span>, you often want to treat the two categories differently. Not that you have to. But this is how you can.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>parameter</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._project-block-tags))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._project-block-tags%29%29" class="RktValDef RktValLink" data-pltdoc="x">project-block-tags</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-tag?</span></span></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="RktPn">(</span><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._project-block-tags%29%29" class="RktValDef RktValLink" data-pltdoc="x">project-block-tags</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">block-tags</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">block-tags</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-tag?</span></span></span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span></td><td><span class="RktSym">html-block-tags</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">A parameter that defines the set of tags that <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span> will treat as blocks. This parameter is initialized with the HTML block tags, namely:</div></p><p><span class="RktPn">(</span><span class="RktSym">address</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">article</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">aside</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">audio</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">blockquote</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">body</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">canvas</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">dd</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">div</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">dl</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">fieldset</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">figcaption</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">figure</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">footer</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">form</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">h1</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">h2</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">h3</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">h4</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">h5</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">h6</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">header</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">hgroup</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">noscript</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">ol</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">output</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">p</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">pre</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">section</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">table</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">tfoot</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">ul</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">video</span><span class="RktPn">)</span><span class="RktMeta"></span></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._register-block-tag))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._register-block-tag%29%29" class="RktValDef RktValLink" data-pltdoc="x">register-block-tag</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">tag</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">tag</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></table></blockquote></div><div class="SIntrapara">Adds a tag to <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._project-block-tags%29%29" class="RktValLink" data-pltdoc="x">project-block-tags</a></span> so that <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._block-txexpr~3f%29%29" class="RktValLink" data-pltdoc="x">block-txexpr?</a></span> will report it as a block, and <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span> will process it with <span class="RktVar">block-txexpr-proc</span> rather than <span class="RktVar">inline-txexpr-proc</span>.</div></p><p>Pollen tries to do the right thing without being told. But this is the rare case where you have to be explicit. If you introduce a tag into your markup that you want treated as a block, you <span style="font-weight: bold">must</span> use this function to identify it, or you will get spooky behavior later on.</p><p>For instance, <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span> knows that block elements in the markup shouldn&rsquo;t be wrapped in a <span class="RktSym">p</span> tag. So if you introduce a new block element called <span class="RktSym">bloq</span> without registering it as a block, misbehavior will follow:</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-elements-proc</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">body</span><span class="hspace">&nbsp;</span><span class="RktVal">"I want to be a paragraph."</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">bloq</span><span class="hspace">&nbsp;</span><span class="RktVal">"But not me."</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(body (p "I want to be a paragraph.") (p (bloq "But not me.")))</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Wrong: bloq should not be wrapped</span></td></tr></table></blockquote></td></tr></table></p><p>But once you register <span class="RktSym">bloq</span> as a block, order is restored:</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-elements-proc</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._register-block-tag%29%29" class="RktValLink" data-pltdoc="x">register-block-tag</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">bloq</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">body</span><span class="hspace">&nbsp;</span><span class="RktVal">"I want to be a paragraph."</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">bloq</span><span class="hspace">&nbsp;</span><span class="RktVal">"But not me."</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(body (p "I want to be a paragraph.") (bloq "But not me."))</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Right: bloq is treated as a block</span></td></tr></table></blockquote></td></tr></table></p><p>If you find the idea of registering block tags unbearable, good news. The <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._project-block-tags%29%29" class="RktValLink" data-pltdoc="x">project-block-tags</a></span> include the standard HTML block tags by default. So if you just want to use things like <span class="RktSym">div</span> and <span class="RktSym">p</span> and <span class="RktSym">h1&#8211;h6</span>, you&rsquo;ll get the right behavior for free.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="hspace">&nbsp;</span><span class="RktPn">#:txexpr-elements-proc</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">paras</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">body</span><span class="hspace">&nbsp;</span><span class="RktVal">"I want to be a paragraph."</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"But not me."</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(body (p "I want to be a paragraph.") (div "But not me."))</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._block-txexpr~3f))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._block-txexpr~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">block-txexpr?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Predicate that tests whether <span class="RktVar">v</span> is a tagged X-expression, and if so, whether the tag is among the <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._project-block-tags%29%29" class="RktValLink" data-pltdoc="x">project-block-tags</a></span>. If not, it is treated as inline. To adjust how this test works, use <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._register-block-tag%29%29" class="RktValLink" data-pltdoc="x">register-block-tag</a></span>.</div></p><h5>7.2.2<tt>&nbsp;</tt><a name="(part._.Typography)"></a>Typography</h5><p>An assortment of typography &amp; layout functions, designed to be used with <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._decode%29%29" class="RktValLink" data-pltdoc="x">decode</a></span>. These aren&rsquo;t hard to write. So if you like these, use them. If not, make your own.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._whitespace~3f))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">whitespace?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">A predicate that returns <span class="RktVal">#t</span> for any stringlike <span class="RktVar">v</span> that&rsquo;s entirely whitespace, but also the empty string, as well as lists and vectors that are made only of <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace?</a></span> members. Following the <span class="RktSym"><span class="badlink"><span class="RktValLink">regexp-match</span></span></span> convention, <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace?</a></span> does not return <span class="RktVal">#t</span> for a nonbreaking space. If you prefer that behavior, use <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace/nbsp?</a></span>.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n</span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktVal">"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-&gt;symbol</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n</span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktVal">"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">""</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">""</span><span class="hspace">&nbsp;</span><span class="RktVal">"</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">" \n"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></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">nonbreaking-space</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">"~a"</span><span class="hspace">&nbsp;</span><span class="RktVal">#\u00A0</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace?</a></span><span class="hspace">&nbsp;</span><span class="RktSym">nonbreaking-space</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._whitespace/nbsp~3f))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">whitespace/nbsp?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace?</a></span>, but also returns <span class="RktVal">#t</span> for nonbreaking spaces.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace/nbsp?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n</span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktVal">"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace/nbsp?</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-&gt;symbol</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n</span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktVal">"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace/nbsp?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">""</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace/nbsp?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">""</span><span class="hspace">&nbsp;</span><span class="RktVal">"</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">" \n"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></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">nonbreaking-space</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">format</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">"~a"</span><span class="hspace">&nbsp;</span><span class="RktVal">#\u00A0</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace/nbsp?</a></span><span class="hspace">&nbsp;</span><span class="RktSym">nonbreaking-space</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._smart-quotes))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._smart-quotes%29%29" class="RktValDef RktValLink" data-pltdoc="x">smart-quotes</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">str</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">str</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">Convert straight quotes in <span class="RktVar">str</span> to curly according to American English conventions.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><table cellspacing="0" class="RktBlk"><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">tricky-string</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">"\"Why,\" she could've asked, \"are we in O&#8216;ahu watching 'Mame'?\""</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="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">display</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">tricky-string</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktOut">"Why," she could've asked, "are we in O&#8216;ahu watching 'Mame'?"</span></p></td></tr><tr><td><table cellspacing="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">display</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._smart-quotes%29%29" class="RktValLink" data-pltdoc="x">smart-quotes</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tricky-string</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktOut">&#8220;Why,&#8221; she could&#8217;ve asked, &#8220;are we in O&#8216;ahu watching &#8216;Mame&#8217;?&#8221;</span></p></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._smart-dashes))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._smart-dashes%29%29" class="RktValDef RktValLink" data-pltdoc="x">smart-dashes</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">str</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">str</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">In <span class="RktVar">str</span>, convert three hyphens to an em dash, and two hyphens to an en dash, and remove surrounding spaces.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tricky-string</span><span class="hspace">&nbsp;</span><span class="RktVal">"I had a few --- OK, like 6--8 --- thin mints."</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="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">display</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">tricky-string</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktOut">I had a few --- OK, like 6--8 --- thin mints.</span></p></td></tr><tr><td><table cellspacing="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">display</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._smart-dashes%29%29" class="RktValLink" data-pltdoc="x">smart-dashes</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tricky-string</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktOut">I had a few&#8212;OK, like 6&#8211;8&#8212;thin mints.</span></p></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Monospaced font not great for showing dashes, but you get the idea</span></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" class="prototype RForeground"><tr><td><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._detect-linebreaks))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-linebreaks%29%29" class="RktValDef RktValLink" data-pltdoc="x">detect-linebreaks</a></span></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktVar">tagged-xexpr-elements</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span>[</td><td><span class="RktPn">#:separator</span><span class="hspace">&nbsp;</span><span class="RktVar">linebreak-sep</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:insert</span><span class="hspace">&nbsp;</span><span class="RktVar">linebreak</span>]<span class="RktPn">)</span></td><td><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">tagged-xexpr-elements</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">linebreak-sep</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3alinebreak-separator%29%29" class="RktValLink" data-pltdoc="x">world:linebreak-separator</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">linebreak</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">br</span><span class="RktVal">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Within <span class="RktVar">tagged-xexpr-elements</span>, convert occurrences of <span class="RktVar">linebreak-sep</span> (<span class="RktVal">"\n"</span> by default) to <span class="RktVar">linebreak</span>, but only if <span class="RktVar">linebreak-sep</span> does not occur between blocks (see <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._block-txexpr~3f%29%29" class="RktValLink" data-pltdoc="x">block-txexpr?</a></span>). Why? Because block-level elements automatically display on a new line, so adding <span class="RktVar">linebreak</span> would be superfluous. In that case, <span class="RktVar">linebreak-sep</span> just disappears.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-linebreaks%29%29" class="RktValLink" data-pltdoc="x">detect-linebreaks</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Two items:"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">em</span><span class="hspace">&nbsp;</span><span class="RktVal">"Eggs"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">em</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bacon"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(div "Two items:" (br) (em "Eggs") (br) (em "Bacon"))</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-linebreaks%29%29" class="RktValLink" data-pltdoc="x">detect-linebreaks</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Two items:"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Eggs"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bacon"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(div "Two items:" (div "Eggs") (div "Bacon"))</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" class="prototype RForeground"><tr><td><span class="RktPn">(</span><a name="(def._((lib._pollen/decode..rkt)._detect-paragraphs))"></a><span title="Provided from: pollen/decode | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValDef RktValLink" data-pltdoc="x">detect-paragraphs</a></span></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktVar">elements</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span>[</td><td><span class="RktPn">#:separator</span><span class="hspace">&nbsp;</span><span class="RktVar">paragraph-sep</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:tag</span><span class="hspace">&nbsp;</span><span class="RktVar">paragraph-tag</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:linebreak-proc</span><span class="hspace">&nbsp;</span><span class="RktVar">linebreak-proc</span>]<span class="RktPn">)</span></td><td><span class="hspace">&nbsp;</span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">elements</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">paragraph-sep</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3aparagraph-separator%29%29" class="RktValLink" data-pltdoc="x">world:paragraph-separator</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">paragraph-tag</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">p</span></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;&nbsp;</span></td><td><span class="RktVar">linebreak-proc</span></td><td><span class="hspace">&nbsp;</span></td><td>:</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><span class="badlink"><span class="RktValLink">-&gt;</span></span></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr-elements?</span></span></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td>=</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-linebreaks%29%29" class="RktValLink" data-pltdoc="x">detect-linebreaks</a></span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Find paragraphs within <span class="RktVar">elements</span>, as denoted by <span class="RktVar">paragraph-sep</span>, and wrap them with <span class="RktVar">paragraph-tag</span>, unless the <span class="RktVar">element</span> is already a <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._block-txexpr~3f%29%29" class="RktValLink" data-pltdoc="x">block-txexpr?</a></span> (because in that case, the wrapping is superfluous). Thus, as a consequence, if <span class="RktVar">paragraph-sep</span> occurs between two blocks, it&rsquo;s ignored.</div></p><p>The <span class="RktVar">paragraph-tag</span> argument sets the tag used to wrap paragraphs.</p><p>The <span class="RktVar">linebreak-proc</span> argument allows you to use a different linebreaking procedure other than the usual <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-linebreaks%29%29" class="RktValLink" data-pltdoc="x">detect-linebreaks</a></span>.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">"First para"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Second para"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'((p "First para") (p "Second para"))</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">"First para"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Second para"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Second line"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'((p "First para") (p "Second para" (br) "Second line"))</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">"First para"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Second block"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'((p "First para") (div "Second block"))</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"First block"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">"Second block"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'((div "First block") (div "Second block"))</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">"First para"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Second para"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktPn">#:tag</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">ns:p</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'((ns:p "First para") (ns:p "Second para"))</span></p></td></tr><tr><td><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-paragraphs%29%29" class="RktValLink" data-pltdoc="x">detect-paragraphs</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">"First para"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Second para"</span><span class="hspace">&nbsp;</span><span class="RktVal">"\n"</span><span class="hspace">&nbsp;</span><span class="RktVal">"Second line"</span><span class="RktVal">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktPn">#:linebreak-proc</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">&#955;</span></span></span><span class="RktPn">(</span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._detect-linebreaks%29%29" class="RktValLink" data-pltdoc="x">detect-linebreaks</a></span><span class="hspace">&nbsp;</span><span class="RktSym">x</span><span class="hspace">&nbsp;</span><span class="RktPn">#:insert</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">newline</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><p><span class="RktRes">'((p "First para") (p "Second para" (newline) "Second line"))</span></p></td></tr></table></blockquote></td></tr></table></p><h4>7.3<tt>&nbsp;</tt><a name="(part._.File)"></a><a name="(mod-path._pollen/file)"></a>File</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Ffile%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/file</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>A utility module that provides functions for working with Pollen source and output files. The tests rely on file extensions specified in <span class="RktSym">pollen/world</span>.</p><p>Pollen handles six kinds of source files:</p><p><span style="font-weight: bold">Preprocessor</span>, with file extension <span class="RktSym">.pp</span><span class="RktMeta"></span>.</p><p><span style="font-weight: bold">Markup</span>, with file extension <span class="RktSym">.pm</span><span class="RktMeta"></span>.</p><p><span style="font-weight: bold">Template</span>, with file extension <span class="RktSym">.pt</span><span class="RktMeta"></span>.</p><p><span style="font-weight: bold">Null</span>, with file extension <span class="RktSym">.p</span><span class="RktMeta"></span>.</p><p><span style="font-weight: bold">Scribble</span>, with file extension <span class="RktSym">.scrbl</span><span class="RktMeta"></span>.</p><p>For each kind of Pollen source file, the corresponding output file is generated by removing the extension from the name of the source file. So the preprocessor source file <span class="RktSym">default.css.pp</span><span class="RktMeta"></span> would become <span class="RktSym">default.css</span><span class="RktMeta"></span>. Scribble files work differently &#8212; the corresponding output file is the source file but with an <span class="RktSym">html</span> extension rather than <span class="RktSym">scrbl</span>. So <span class="RktSym">pollen.scrbl</span><span class="RktMeta"></span> would become <span class="RktSym">pollen.html</span><span class="RktMeta"></span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._preproc-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._preproc-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">preproc-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._markup-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._markup-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">markup-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._template-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._template-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">template-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._null-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._null-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">null-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._scribble-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._scribble-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">scribble-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._pagetree-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._pagetree-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">pagetree-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Test whether <span class="RktVar">v</span> is a path representing a source file of the specified type, based on file extension.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._preproc-source~3f%29%29" class="RktValLink" data-pltdoc="x">preproc-source?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"main.css.pp"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._markup-source~3f%29%29" class="RktValLink" data-pltdoc="x">markup-source?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"default.html.pm"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._template-source~3f%29%29" class="RktValLink" data-pltdoc="x">template-source?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"main.html.pt"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._null-source~3f%29%29" class="RktValLink" data-pltdoc="x">null-source?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"index.html.p"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._scribble-source~3f%29%29" class="RktValLink" data-pltdoc="x">scribble-source?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"file.scrbl"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._pagetree-source~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree-source?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"index.ptree"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has-preproc-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-preproc-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has-preproc-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has-markup-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-markup-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has-markup-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has-template-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-template-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has-template-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has-null-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-null-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has-null-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has-scribble-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-scribble-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has-scribble-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Test whether <span class="RktVar">v</span> is the output path for an existing source file of the specified type.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has/is-preproc-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-preproc-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has/is-preproc-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has/is-markup-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-markup-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has/is-markup-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has/is-template-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-template-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has/is-template-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has/is-null-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-null-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has/is-null-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._has/is-scribble-source~3f))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-scribble-source~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">has/is-scribble-source?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Test whether <span class="RktVar">v</span> is a path representing a source file of the specified type, or is the output path for an existing source file of the specified type. In other words, <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has%2Fis-preproc-source~3f%29%29" class="RktValLink" data-pltdoc="x">has/is-preproc-source?</a></span> is equivalent to <span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or</span></span></span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._preproc-source~3f%29%29" class="RktValLink" data-pltdoc="x">preproc-source?</a></span><span class="stt"> </span><span class="RktSym">v</span><span class="RktPn">)</span><span class="stt"> </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._has-preproc-source~3f%29%29" class="RktValLink" data-pltdoc="x">has-preproc-source?</a></span><span class="stt"> </span><span class="RktSym">v</span><span class="RktPn">)</span><span class="RktPn">)</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._-~3epreproc-source-path))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3epreproc-source-path%29%29" class="RktValDef RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>preproc-source-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._-~3emarkup-source-path))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3emarkup-source-path%29%29" class="RktValDef RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>markup-source-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._-~3etemplate-source-path))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3etemplate-source-path%29%29" class="RktValDef RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>template-source-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._-~3enull-source-path))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3enull-source-path%29%29" class="RktValDef RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>null-source-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._-~3escribble-source-path))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3escribble-source-path%29%29" class="RktValDef RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>scribble-source-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Convert an output path <span class="RktVar">p</span> into the source path of the specified type that would produce this output path. This function simply generates a path for a file &#8212; it does not ask whether the file exists.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">name</span><span class="hspace">&nbsp;</span><span class="RktVal">"default.html"</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3epreproc-source-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>preproc-source-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">name</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:default.html.pp&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3emarkup-source-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>markup-source-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">name</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:default.html.pm&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3etemplate-source-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>template-source-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">name</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:default.html.pt&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3escribble-source-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>scribble-source-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">name</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:default.scrbl&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3enull-source-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>null-source-path</a></span><span class="hspace">&nbsp;</span><span class="RktSym">name</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:default.html.p&gt;</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/file..rkt)._-~3eoutput-path))"></a><span title="Provided from: pollen/file | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3eoutput-path%29%29" class="RktValDef RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>output-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Convert a source path <span class="RktVar">p</span> into its corresponding output path. This function simply generates a path for a file &#8212; it does not ask whether the file exists.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3eoutput-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>output-path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"main.css.pp"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:main.css&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3eoutput-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>output-path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"default.html.pm"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:default.html&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3eoutput-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>output-path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"index.html.p"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:index.html&gt;</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3eoutput-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>output-path</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"file.scrbl"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#&lt;path:file.html&gt;</span></p></td></tr></table></blockquote></td></tr></table></p><h4>7.4<tt>&nbsp;</tt><a name="(part._.Pagetree)"></a><a name="(mod-path._pollen/pagetree)"></a>Pagetree</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Fpagetree%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/pagetree</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>A <span style="font-style: italic">pagetree</span> is a hierarchical list of Pollen output files. A pagetree source file has the extension <span class="RktSym">.ptree</span><span class="RktMeta"></span>. A pagetree provides a convenient way of separating the structure of the pages from the page sources, and navigating around this structure.</p><p>Pagetrees are made of <span style="font-style: italic">pagenodes</span>. Usually these pagenodes will be names of output files in your project. (If you think it would&rsquo;ve been more logical to just call them &ldquo;pages,&rdquo; perhaps. When I think of a web page, I think of a file on a disk. Whereas pagenodes may &#8212;&#160;and often do &#8212;&#160;refer to files that don&rsquo;t yet exist.)</p><p>Books and other long documents are usually organized in a structured way &#8212;&#160;at minimum they have a sequence of pages, but more often they have sections with subsequences within. Individual Pollen source files don&rsquo;t know anything about how they&rsquo;re connected to other files. In theory, you could maintain this information within each source file. This would be a poor use of human energy. Let the pagetree figure it out.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._pagetree~3f))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">pagetree?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">possible-pagetree</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">possible-pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Test whether <span class="RktVar">possible-pagetree</span> is a valid pagetree. It must be a <span class="RktSym"><span class="badlink"><span class="RktValLink">txexpr?</span></span></span> where all elements are <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span>, and each is unique within <span class="RktVar">possible-pagetree</span> (not counting the root node).</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">index.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">duplicate.html</span><span class="hspace">&nbsp;</span><span class="RktVal">duplicate.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">index.html</span><span class="hspace">&nbsp;</span><span class="RktVal">"string.html"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></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">nested-ptree</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">1.html</span><span class="hspace">&nbsp;</span><span class="RktVal">2.html</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">3.html</span><span class="hspace">&nbsp;</span><span class="RktVal">3a.html</span><span class="hspace">&nbsp;</span><span class="RktVal">3b.html</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span><span class="RktSym">nested-ptree</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">index.html</span><span class="hspace">&nbsp;</span><span class="RktRdr">,</span><span class="RktSym">nested-ptree</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">subsection.html</span><span class="hspace">&nbsp;</span><span class="RktVal">more.html</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#t</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Nesting a subtree twice creates duplication</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">index.html</span><span class="hspace">&nbsp;</span><span class="RktRdr">,</span><span class="RktSym">nested-ptree</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">subsection.html</span><span class="hspace">&nbsp;</span><span class="RktRdr">,</span><span class="RktSym">nested-ptree</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._validate-pagetree))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._validate-pagetree%29%29" class="RktValDef RktValLink" data-pltdoc="x">validate-pagetree</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">possible-pagetree</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">possible-pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span>, but raises a descriptive error if <span class="RktVar">possible-pagetree</span> is invalid, and otherwise returns <span class="RktVar">possible-pagetree</span> itself.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._validate-pagetree%29%29" class="RktValLink" data-pltdoc="x">validate-pagetree</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">mama.html</span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="hspace">&nbsp;</span><span class="RktVal">daughter.html</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">uncle.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(root (mama.html son.html daughter.html) uncle.html)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._validate-pagetree%29%29" class="RktValLink" data-pltdoc="x">validate-pagetree</a></span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktRdr">,</span><span class="RktSym"><span class="badlink"><span class="RktValLink">+</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="hspace">&nbsp;</span><span class="RktVal">daughter.html</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">uncle.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._validate-pagetree%29%29" class="RktValLink" data-pltdoc="x">validate-pagetree</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">mama.html</span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">mama.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktErr">validate-pagetree: items aren&#8217;t unique: (son.html mama.html)</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._pagenode~3f))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">pagenode?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">possible-pagenode</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">possible-pagenode</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Test whether <span class="RktVar">possible-pagenode</span> is a valid pagenode. A pagenode can be any <span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span> that is not <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fdecode..rkt%29._whitespace%2Fnbsp~3f%29%29" class="RktValLink" data-pltdoc="x">whitespace/nbsp?</a></span> Every leaf of a pagetree is a pagenode. In practice, your pagenodes will likely be names of output files.</div></p><blockquote class="refpara"><blockquote class="refcolumn"><blockquote class="refcontent"><p>Pagenodes are symbols (rather than strings) so that pagetrees will be valid tagged X-expressions, which is a more convenient format for validation &amp; processing.</p></blockquote></blockquote></blockquote><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Three symbols, the third one annoying but valid</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">symbol</span><span class="hspace">&nbsp;</span><span class="RktVal">index.html</span><span class="hspace">&nbsp;</span><span class="RktVal">|</span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktVal">silly</span><span class="hspace">&nbsp;&nbsp;&nbsp;</span><span class="RktVal">|</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(#t #t #t)</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">A number, a string, a txexpr, and a whitespace symbol</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">9.999</span><span class="hspace">&nbsp;</span><span class="RktVal">"index.html"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">p</span><span class="hspace">&nbsp;</span><span class="RktVal">"Hello"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">|</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktVal">|</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(#f #f #f #f)</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._pagenodeish~3f))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">pagenodeish?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">any/c</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Return <span class="RktVal">#t</span> if <span class="RktVar">v</span> can be converted with <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._-~3epagenode%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>pagenode</a></span>.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Example:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">9.999</span><span class="hspace">&nbsp;</span><span class="RktVal">"index.html"</span><span class="hspace">&nbsp;</span><span class="RktVal">|</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="RktVal">|</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(#t #t #f)</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._-~3epagenode))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._-~3epagenode%29%29" class="RktValDef RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>pagenode</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">v</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">v</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Convert <span class="RktVar">v</span> to a pagenode.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">symbol</span><span class="hspace">&nbsp;</span><span class="RktVal">9.999</span><span class="hspace">&nbsp;</span><span class="RktVal">"index.html"</span><span class="hspace">&nbsp;</span><span class="RktVal">|</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">silly</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">|</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(#t #t #t #t)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._-~3epagenode%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>pagenode</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">symbol</span><span class="hspace">&nbsp;</span><span class="RktVal">9.999</span><span class="hspace">&nbsp;</span><span class="RktVal">"index.html"</span><span class="hspace">&nbsp;</span><span class="RktVal">|</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">silly</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">|</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(symbol |9.999| index.html |</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">silly</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktRes">|)</span></p></td></tr></table></blockquote></td></tr></table></p><h5>7.4.1<tt>&nbsp;</tt><a name="(part._.Navigation)"></a>Navigation</h5><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>parameter</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._current-pagetree))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValDef RktValLink" data-pltdoc="x">current-pagetree</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span></p></blockquote></td></tr><tr><td><span class="RktPn">(</span><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValDef RktValLink" data-pltdoc="x">current-pagetree</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">pagetree</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span></td><td><span class="RktVal">#f</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">A parameter that defines the default pagetree used by pagetree navigation functions (e.g., <span class="RktSym">parent-pagenode</span>, <span class="RktSym">chidren</span>, et al.) if another is not explicitly specified. Initialized to <span class="RktVal">#f</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._parent))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="RktValDef RktValLink" data-pltdoc="x">parent</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>[<span class="RktVar">pagetree</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Find the parent pagenode of <span class="RktVar">p</span> within <span class="RktVar">pagetree</span>. Return <span class="RktVal">#f</span> if there isn&rsquo;t one.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">mama.html</span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="hspace">&nbsp;</span><span class="RktVal">daughter.html</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">uncle.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="RktValLink" data-pltdoc="x">parent</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">son.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'mama.html</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="RktValLink" data-pltdoc="x">parent</a></span><span class="hspace">&nbsp;</span><span class="RktVal">"mama.html"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'root</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="RktValLink" data-pltdoc="x">parent</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="RktValLink" data-pltdoc="x">parent</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">son.html</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'root</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="RktValLink" data-pltdoc="x">parent</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="RktValLink" data-pltdoc="x">parent</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._parent%29%29" class="RktValLink" data-pltdoc="x">parent</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">son.html</span><span class="RktPn">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._children))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._children%29%29" class="RktValDef RktValLink" data-pltdoc="x">children</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>[<span class="RktVar">pagetree</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Find the child pagenodes of <span class="RktVar">p</span> within <span class="RktVar">pagetree</span>. Return <span class="RktVal">#f</span> if there aren&rsquo;t any.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">mama.html</span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="hspace">&nbsp;</span><span class="RktVal">daughter.html</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">uncle.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._children%29%29" class="RktValLink" data-pltdoc="x">children</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">mama.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(son.html daughter.html)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._children%29%29" class="RktValLink" data-pltdoc="x">children</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">uncle.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._children%29%29" class="RktValLink" data-pltdoc="x">children</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">root</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(mama.html uncle.html)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._children%29%29" class="RktValLink" data-pltdoc="x">children</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._children%29%29" class="RktValLink" data-pltdoc="x">children</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">root</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'((son.html daughter.html) #f)</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._siblings))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._siblings%29%29" class="RktValDef RktValLink" data-pltdoc="x">siblings</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>[<span class="RktVar">pagetree</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Find the sibling pagenodes of <span class="RktVar">p</span> within <span class="RktVar">pagetree</span>. The list will include <span class="RktVar">p</span> itself. But the function will still return <span class="RktVal">#f</span> if <span class="RktVar">pagetree</span> is <span class="RktVal">#f</span>.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">mama.html</span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="hspace">&nbsp;</span><span class="RktVal">daughter.html</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">uncle.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._siblings%29%29" class="RktValLink" data-pltdoc="x">siblings</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">son.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(son.html daughter.html)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._siblings%29%29" class="RktValLink" data-pltdoc="x">siblings</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">daughter.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(son.html daughter.html)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._siblings%29%29" class="RktValLink" data-pltdoc="x">siblings</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">mama.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(mama.html uncle.html)</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._previous))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%29%29" class="RktValDef RktValLink" data-pltdoc="x">previous</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>[<span class="RktVar">pagetree</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._previous*))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%2A%29%29" class="RktValDef RktValLink" data-pltdoc="x">previous*</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>[<span class="RktVar">pagetree</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Return the pagenode immediately before <span class="RktVar">p</span>. For <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%2A%29%29" class="RktValLink" data-pltdoc="x">previous*</a></span>, return all the pagenodes before <span class="RktVar">p</span>, in sequence. In both cases, return <span class="RktVal">#f</span> if there aren&rsquo;t any pagenodes. The root pagenode is ignored.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">mama.html</span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="hspace">&nbsp;</span><span class="RktVal">daughter.html</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">uncle.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%29%29" class="RktValLink" data-pltdoc="x">previous</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">daughter.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'son.html</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%29%29" class="RktValLink" data-pltdoc="x">previous</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">son.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'mama.html</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%29%29" class="RktValLink" data-pltdoc="x">previous</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%29%29" class="RktValLink" data-pltdoc="x">previous</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">daughter.html</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'mama.html</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%29%29" class="RktValLink" data-pltdoc="x">previous</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">mama.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%2A%29%29" class="RktValLink" data-pltdoc="x">previous*</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">daughter.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(mama.html son.html)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._previous%2A%29%29" class="RktValLink" data-pltdoc="x">previous*</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">uncle.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(mama.html son.html daughter.html)</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._next))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%29%29" class="RktValDef RktValLink" data-pltdoc="x">next</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>[<span class="RktVar">pagetree</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._next*))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%2A%29%29" class="RktValDef RktValLink" data-pltdoc="x">next*</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>[<span class="RktVar">pagetree</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="RktPn">)</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="RktPn">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Return the pagenode immediately after <span class="RktVar">p</span>. For <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%2A%29%29" class="RktValLink" data-pltdoc="x">next*</a></span>, return all the pagenodes after <span class="RktVar">p</span>, in sequence. In both cases, return <span class="RktVal">#f</span> if there aren&rsquo;t any pagenodes. The root pagenode is ignored.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">mama.html</span><span class="hspace">&nbsp;</span><span class="RktVal">son.html</span><span class="hspace">&nbsp;</span><span class="RktVal">daughter.html</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">uncle.html</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%29%29" class="RktValLink" data-pltdoc="x">next</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">son.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'daughter.html</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%29%29" class="RktValLink" data-pltdoc="x">next</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">daughter.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'uncle.html</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%29%29" class="RktValLink" data-pltdoc="x">next</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%29%29" class="RktValLink" data-pltdoc="x">next</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">son.html</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'uncle.html</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%29%29" class="RktValLink" data-pltdoc="x">next</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">uncle.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%2A%29%29" class="RktValLink" data-pltdoc="x">next*</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">mama.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(son.html daughter.html uncle.html)</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._next%2A%29%29" class="RktValLink" data-pltdoc="x">next*</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">daughter.html</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(uncle.html)</span></p></td></tr></table></blockquote></td></tr></table></p><h5>7.4.2<tt>&nbsp;</tt><a name="(part._.Utilities)"></a>Utilities</h5><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._pagetree-~3elist))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree-~3elist%29%29" class="RktValDef RktValLink" data-pltdoc="x">pagetree-&gt;list</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">pagetree</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">list?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span></td></tr></table></blockquote></div><div class="SIntrapara">Convert <span class="RktVar">pagetree</span> to a simple list. Equivalent to a pre-order depth-first traversal of <span class="RktVar">pagetree</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._in-pagetree~3f))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._in-pagetree~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">in-pagetree?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">pagenode</span><span class="hspace">&nbsp;</span>[<span class="RktVar">pagetree</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagenode</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">pagetree?</a></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._current-pagetree%29%29" class="RktValLink" data-pltdoc="x">current-pagetree</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Report whether <span class="RktVar">pagenode</span> is in <span class="RktVar">pagetree</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/pagetree..rkt)._path-~3epagenode))"></a><span title="Provided from: pollen/pagetree | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._path-~3epagenode%29%29" class="RktValDef RktValLink" data-pltdoc="x">path-&gt;pagenode</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">p</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">p</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym">pathish?</span></td></tr></table></blockquote></div><div class="SIntrapara">Convert path <span class="RktVar">p</span> to a pagenode &#8212;&#160;meaning, make it relative to <span class="RktSym"><span class="badlink"><span class="RktValLink">world:current-project-root</span></span></span>, run it through <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3eoutput-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>output-path</a></span>, and convert it to a symbol. Does not tell you whether the resultant pagenode actually exists in the current pagetree (for that, use <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._in-pagetree~3f%29%29" class="RktValLink" data-pltdoc="x">in-pagetree?</a></span>).</div></p><h4>7.5<tt>&nbsp;</tt><a name="(part._.Render)"></a><a name="(mod-path._pollen/render)"></a>Render</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Frender%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/render</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><span style="font-style: italic">Rendering</span> is how Pollen source files get converted into output.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/render..rkt)._render))"></a><span title="Provided from: pollen/render | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValDef RktValLink" data-pltdoc="x">render</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">source-path</span><span class="hspace">&nbsp;</span>[<span class="RktVar">template-path</span>]<span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">bytes?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">source-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">template-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Renders <span class="RktVar">source-path</span>. The rendering behavior depends on the type of source file:</div></p><p>A <a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%2Fpre%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/pre</span></a> file is rendered without a template.</p><p>A <a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%2Fmarkup%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/markup</span></a> or <a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%2Fmarkdown%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/markdown</span></a> file is rendered with a template. If no template is provided with <span class="RktVar">template-path</span>, Pollen finds one using <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._get-template-for%29%29" class="RktValLink" data-pltdoc="x">get-template-for</a></span>.</p><p>Be aware that rendering with a template uses <span class="RktSym"><span class="badlink"><span class="RktValLink">include-template</span></span></span> within <span class="RktSym"><span class="badlink"><span class="RktValLink">eval</span></span></span>. For complex pages, it can be slow the first time. Caching is used to make subsequent requests faster.</p><p>For those panicked at the use of <span class="RktSym"><span class="badlink"><span class="RktValLink">eval</span></span></span>, please don&rsquo;t be. As the author of <span class="RktSym"><span class="badlink"><span class="RktValLink">include-template</span></span></span> has already advised, &ldquo;If you insist on dynamicism&rdquo; &#8212; and yes, I do insist &#8212; &ldquo;<a href="http://docs.racket-lang.org/web-server/faq.html#%28part._.How_do_.I_use_templates__dynamically__%29">there is always <span class="RktSym"><span class="badlink"><span class="RktValLink">eval</span></span></span>.</a>&rdquo;</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" class="prototype RForeground"><tr><td><span class="RktPn">(</span><a name="(def._((lib._pollen/render..rkt)._render-to-file))"></a><span title="Provided from: pollen/render | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-to-file%29%29" class="RktValDef RktValLink" data-pltdoc="x">render-to-file</a></span></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktVar">source-path</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span>[</td><td><span class="RktVar">template-path</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktVar">output-path</span>]<span class="RktPn">)</span></td><td><span class="hspace">&nbsp;</span></td><td>&rarr;</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">source-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">template-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">output-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValLink" data-pltdoc="x">render</a></span>, but saves the file to <span class="RktVar">output-path</span>, overwriting whatever was already there. If no <span class="RktVar">output-path</span> is provided, it&rsquo;s derived from <span class="RktVar">source-path</span> using <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ffile..rkt%29._-~3eoutput-path%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>output-path</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><table cellspacing="0" class="prototype RForeground"><tr><td><span class="RktPn">(</span><a name="(def._((lib._pollen/render..rkt)._render-to-file-if-needed))"></a><span title="Provided from: pollen/render | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-to-file-if-needed%29%29" class="RktValDef RktValLink" data-pltdoc="x">render-to-file-if-needed</a></span></span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktVar">source-path</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span>[</td><td><span class="RktVar">template-path</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktVar">output-path</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td></tr><tr><td><span class="hspace">&nbsp;</span></td><td><span class="hspace">&nbsp;</span></td><td><span class="RktPn">#:force</span><span class="hspace">&nbsp;</span><span class="RktVar">force-render?</span>]<span class="RktPn">)</span></td><td><span class="hspace">&nbsp;</span></td><td>&rarr;</td><td><span class="hspace">&nbsp;</span></td><td><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></td></tr></table></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">source-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">template-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">output-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">force-render?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#f</span></td></tr></table></blockquote></div><div class="SIntrapara">Like <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-to-file%29%29" class="RktValLink" data-pltdoc="x">render-to-file</a></span>, but the render only happens if one of these conditions exist:
</div><div class="SIntrapara"><ol><li><p>The <span class="RktVar">force-render?</span> flag &#8212;&#160;set with the <span class="RktPn">#:force</span> keyword &#8212; is <span class="RktVal">#t</span>.</p></li><li><p>No file exists at <span class="RktVar">output-path</span>. (Thus, an easy way to force a render of a particular <span class="RktVar">output-path</span> is to delete it.)</p></li><li><p>Either <span class="RktVar">source-path</span> or <span class="RktVar">template-path</span> have changed since the last trip through <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValLink" data-pltdoc="x">render</a></span>.</p></li><li><p>One or more of the project requires have changed.</p></li></ol></div></p><p>If none of these conditions exist, <span class="RktVar">output-path</span> is deemed to be up to date, and the render is skipped.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/render..rkt)._render-batch))"></a><span title="Provided from: pollen/render | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-batch%29%29" class="RktValDef RktValLink" data-pltdoc="x">render-batch</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">source-paths</span><span class="hspace">&nbsp;</span><span class="RktMeta">...</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">source-paths</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">pathish?</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Render multiple <span class="RktVar">source-paths</span> in one go. This can be faster than <span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">for-each</span></span></span><span class="stt"> </span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValLink" data-pltdoc="x">render</a></span><span class="stt"> </span><span class="RktVar">source-paths</span><span class="RktPn">)</span> if your <span class="RktVar">source-paths</span> rely on a common set of templates. Templates may have their own source files that need to be compiled. If you use <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValLink" data-pltdoc="x">render</a></span>, the templates will be repeatedly (and needlessly) re-compiled. Whereas if you use <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-batch%29%29" class="RktValLink" data-pltdoc="x">render-batch</a></span>, each template will only be compiled once.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/render..rkt)._render-pagetree))"></a><span title="Provided from: pollen/render | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-pagetree%29%29" class="RktValDef RktValLink" data-pltdoc="x">render-pagetree</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">pagetree</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym">pagetree?</span></td></tr><tr><td><span class="RktPn">(</span><span title="Provided from: pollen/render | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-pagetree%29%29" class="RktValDef RktValLink" data-pltdoc="x">render-pagetree</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">pagetree-source</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">pagetree-source</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym">pathish?</span></td></tr></table></blockquote></div><div class="SIntrapara">Using <span class="RktVar">pagetree</span>, or a pagetree loaded from <span class="RktVar">pagetree-source</span>, render the pages in that pagetree using <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-batch%29%29" class="RktValLink" data-pltdoc="x">render-batch</a></span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/render..rkt)._get-template-for))"></a><span title="Provided from: pollen/render | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._get-template-for%29%29" class="RktValDef RktValLink" data-pltdoc="x">get-template-for</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">source-path</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">source-path</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">complete-path?</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Find a template file for <span class="RktVar">source-path</span>, with the following priority:
</div><div class="SIntrapara"><ol><li><p>If the metas for <span class="RktVar">source-path</span> have a key for <span class="RktSym">template</span><span class="RktMeta"></span>, then use the value of this key.</p></li><li><p>If this key doesn&rsquo;t exist, or if it points to a nonexistent file, look for a default template in the project directory with the name <span class="RktSym">main.</span><span class="RktPn">[</span><span class="RktSym">output</span><span class="RktMeta"></span><span class="hspace">&nbsp;</span><span class="RktMeta"></span><span class="RktSym">extension</span><span class="RktPn">]</span><span class="RktSym">.pt</span><span class="RktMeta"></span>. Meaning, if <span class="RktVar">source-path</span> is <span class="RktSym">intro.html.pm</span><span class="RktMeta"></span>, the output path would be <span class="RktSym">intro.html</span><span class="RktMeta"></span>, so the default template would be <span class="RktSym">main.html.pt</span><span class="RktMeta"></span>.</p></li><li><p>If this file doesn&rsquo;t exist, use the fallback template as a last resort.</p></li></ol></div></p><p>This function is called when a template is needed, but a <span class="RktVar">template-path</span> argument is missing (for instance, in <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValLink" data-pltdoc="x">render</a></span> or <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render-to-file%29%29" class="RktValLink" data-pltdoc="x">render-to-file</a></span>).</p><h4>7.6<tt>&nbsp;</tt><a name="(part._.Template)"></a><a name="(mod-path._pollen/template)"></a>Template</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Ftemplate%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/template</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 templates. These are automatically imported into the <span class="RktSym"><span class="badlink"><span class="RktValLink">eval</span></span></span> environment when rendering with a template (see <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValLink" data-pltdoc="x">render</a></span>).</p><p>This module also provides everything from <span class="RktSym">sugar/coerce/value</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/template..rkt)._-~3ehtml))"></a><span title="Provided from: pollen/template | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._-~3ehtml%29%29" class="RktValDef RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>html</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">xexpr</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">xexpr</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr?</span></span></span></td></tr></table></blockquote></div><div class="SIntrapara">Convert <span class="RktVar">xexpr</span> to an HTML string. Similar to <span class="RktSym"><span class="badlink"><span class="RktValLink">xexpr-&gt;string</span></span></span>, but consistent with the HTML spec, text that appears within <span class="RktSym">script</span><span class="RktMeta"></span> or <span class="RktSym">style</span><span class="RktMeta"></span> blocks will not be escaped.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">root</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">script</span><span class="hspace">&nbsp;</span><span class="RktVal">"3 &gt; 2"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"Why is 3 &gt; 2?"</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="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">xexpr-&gt;string</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"&lt;root&gt;&lt;script&gt;3 &amp;gt; 2&lt;/script&gt;Why is 3 &amp;gt; 2?&lt;/root&gt;"</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._-~3ehtml%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>html</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"&lt;root&gt;&lt;script&gt;3 &gt; 2&lt;/script&gt;Why is 3 &amp;gt; 2?&lt;/root&gt;"</span></p></td></tr></table></blockquote></td></tr></table></p><p>Be careful not to pass existing HTML strings into this function, because the angle brackets will be escaped. Fine if that&rsquo;s what you want, but you probably don&rsquo;t.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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">tx</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">p</span><span class="hspace">&nbsp;</span><span class="RktVal">"You did"</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">em</span><span class="hspace">&nbsp;</span><span class="RktVal">"what?"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._-~3ehtml%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>html</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"&lt;p&gt;You did&lt;em&gt;what?&lt;/em&gt;&lt;/p&gt;"</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._-~3ehtml%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>html</a></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._-~3ehtml%29%29" class="RktValLink" data-pltdoc="x"><span class="nobreak">-&gt;</span>html</a></span><span class="hspace">&nbsp;</span><span class="RktSym">tx</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"&amp;lt;p&amp;gt;You did&amp;lt;em&amp;gt;what?&amp;lt;/em&amp;gt;&amp;lt;/p&amp;gt;"</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/template..rkt)._select))"></a><span title="Provided from: pollen/template | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select%29%29" class="RktValDef RktValLink" data-pltdoc="x">select</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span><span class="RktVar">value-source</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym">txexpr-element?</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbolish?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">value-source</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">hash?</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">txexpr?</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/template..rkt)._select*))"></a><span title="Provided from: pollen/template | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select%2A%29%29" class="RktValDef RktValLink" data-pltdoc="x">select*</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span><span class="RktVar">value-source</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">txexpr-element?</span><span class="RktPn">)</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbolish?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">value-source</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">hash?</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">txexpr?</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span><span class="RktPn">)</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Find matches for <span class="RktVar">key</span> in <span class="RktVar">value-source</span>, first by looking in its <span class="RktSym">metas</span><span class="RktMeta"></span> (using <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-metas%29%29" class="RktValLink" data-pltdoc="x">select-from-metas</a></span>) and then by looking in its <span class="RktSym">doc</span><span class="RktMeta"></span> (using <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-doc%29%29" class="RktValLink" data-pltdoc="x">select-from-doc</a></span>). With <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select%29%29" class="RktValLink" data-pltdoc="x">select</a></span>, you get the first result; with <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select%2A%29%29" class="RktValLink" data-pltdoc="x">select*</a></span>, you get them all. In both cases, you get <span class="RktVal">#f</span> if there are no matches.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/template..rkt)._select-from-metas))"></a><span title="Provided from: pollen/template | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-metas%29%29" class="RktValDef RktValLink" data-pltdoc="x">select-from-metas</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span><span class="RktVar">meta-source</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym">txexpr-element?</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbolish?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">meta-source</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">hash?</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Look up the value of <span class="RktVar">key</span> in <span class="RktVar">meta-source</span>. The <span class="RktVar">meta-source</span> argument can be either a set of metas (i.e., a <span class="RktSym"><span class="badlink"><span class="RktValLink">hash</span></span></span>) or a <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span>, from which metas are pulled. If no value exists for <span class="RktVar">key</span>, you get <span class="RktVal">#f</span>.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><table cellspacing="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">module</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">ice-cream</span><span class="hspace">&nbsp;</span><span class="RktSym">pollen/markup</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">question</span><span class="hspace">&nbsp;</span><span class="RktVal">"Flavor?"</span><span class="RktVal">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">(</span><span class="RktVal">answer</span><span class="hspace">&nbsp;</span><span class="RktVal">"Chocolate chip"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">answer</span><span class="hspace">&nbsp;</span><span class="RktVal">"Maple walnut"</span><span class="RktVal">)</span><span class="RktVal">)</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">meta</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">template</span><span class="hspace">&nbsp;</span><span class="RktVal">"sub.xml.pt"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktVal">)</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">meta</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">target</span><span class="hspace">&nbsp;</span><span class="RktVal">"print"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Import doc &amp; metas from </span><span class="RktCmt">'</span><span class="RktCmt">ice-cream submodule</span></td></tr><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="RktVal">'</span><span class="RktVal">ice-cream</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-metas%29%29" class="RktValLink" data-pltdoc="x">select-from-metas</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">template</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">metas</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"sub.xml.pt"</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktVal">'</span><span class="RktVal">target</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-metas%29%29" class="RktValLink" data-pltdoc="x">select-from-metas</a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym">metas</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">"print"</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-metas%29%29" class="RktValLink" data-pltdoc="x">select-from-metas</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">nonexistent-key</span><span class="hspace">&nbsp;</span><span class="RktSym">metas</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr></table></blockquote></td></tr></table></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/template..rkt)._select-from-doc))"></a><span title="Provided from: pollen/template | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-doc%29%29" class="RktValDef RktValLink" data-pltdoc="x">select-from-doc</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span><span class="RktVar">doc-source</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">#f</span><span class="hspace">&nbsp;</span><span class="RktSym">txexpr-element?</span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">key</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbolish?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">doc-source</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">or/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">txexpr?</span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenodeish~3f%29%29" class="RktValLink" data-pltdoc="x">pagenodeish?</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">pathish?</span></span></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Look up the value of <span class="RktVar">key</span> in <span class="RktVar">doc-source</span>. The <span class="RktVar">doc-source</span> argument can be either be a <span class="RktSym">doc</span><span class="RktMeta"></span> (i.e., a <span class="RktSym">txexpr</span>) or a <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fpagetree..rkt%29._pagenode~3f%29%29" class="RktValLink" data-pltdoc="x">pagenode?</a></span>, from which doc is pulled. If no value exists for <span class="RktVar">key</span>, you get <span class="RktVal">#f</span>.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><table cellspacing="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">module</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">gelato</span><span class="hspace">&nbsp;</span><span class="RktSym">pollen/markup</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">'</span><span class="RktVal">(</span><span class="RktVal">div</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">question</span><span class="hspace">&nbsp;</span><span class="RktVal">"Flavor?"</span><span class="RktVal">)</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktVal">(</span><span class="RktVal">answer</span><span class="hspace">&nbsp;</span><span class="RktVal">"Nocciola"</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">answer</span><span class="hspace">&nbsp;</span><span class="RktVal">"Pistachio"</span><span class="RktVal">)</span><span class="RktVal">)</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">meta</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">template</span><span class="hspace">&nbsp;</span><span class="RktVal">"sub.xml.pt"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktVal">)</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">meta</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">target</span><span class="hspace">&nbsp;</span><span class="RktVal">"print"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Import doc &amp; metas from </span><span class="RktCmt">'</span><span class="RktCmt">gelato submodule</span></td></tr><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="RktVal">'</span><span class="RktVal">gelato</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-doc%29%29" class="RktValLink" data-pltdoc="x">select-from-doc</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">question</span><span class="hspace">&nbsp;&nbsp;</span><span class="RktSym">doc</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktVal">'</span><span class="RktVal">answer</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-doc%29%29" class="RktValLink" data-pltdoc="x">select-from-doc</a></span><span class="RktPn"> .</span><span class="hspace">&nbsp;</span><span class="RktSym">doc</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftemplate..rkt%29._select-from-doc%29%29" class="RktValLink" data-pltdoc="x">select-from-doc</a></span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">nonexistent-key</span><span class="hspace">&nbsp;</span><span class="RktSym">doc</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">#f</span></p></td></tr></table></blockquote></td></tr></table></p><h4>7.7<tt>&nbsp;</tt><a name="(part._.Tag)"></a><a name="(mod-path._pollen/tag)"></a>Tag</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Ftag%29" 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" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>procedure</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/tag..rkt)._make-tag-function))"></a><span title="Provided from: pollen/tag | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-tag-function%29%29" class="RktValDef RktValLink" data-pltdoc="x">make-tag-function</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">id</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><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></p></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></table></blockquote></div><div class="SIntrapara">Make a tag function for <span class="RktVar">id</span>. As arguments, a 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><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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"><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/pollen.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-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"><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></td></tr></table></p><p>Entering attributes this way can be cumbersome. So for convenience, a tag function provides an alternative: any symbol + string pairs at the front of your expression will be interpreted as attributes, if the symbols are followed by a colon. If you leave out the colon, the symbols will be interpreted as part of the content of the tag.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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"><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/pollen.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-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"><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">'</span><span class="RktVal">id:</span><span class="hspace">&nbsp;</span><span class="RktVal">"greeting"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">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 ((id "greeting") (class "large")) "Bonjour")</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Don</span><span class="RktCmt">'</span><span class="RktCmt">t forget the colons</span></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">id</span><span class="hspace">&nbsp;</span><span class="RktVal">"greeting"</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">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 id "greeting" class "large" "Bonjour")</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Don</span><span class="RktCmt">'</span><span class="RktCmt">t forget to provide a value for each attribute</span></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">id:</span><span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">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 id: class: "large" "Bonjour")</span></p></td></tr></table></blockquote></td></tr></table></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><h4>7.8<tt>&nbsp;</tt><a name="(part._.Top)"></a><a name="(mod-path._pollen/top)"></a>Top</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Ftop%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/top</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>You&rsquo;ll probably never invoke this module directly. But it&rsquo;s implicitly imported into every Pollen markup file. And if you don&rsquo;t know what it does, you might end up surprised by some of the behavior you get.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._pollen/top..rkt)._~23~25top))"></a><span title="Provided from: pollen/top | Package: pollen"><span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktVar">id</span><span class="RktPn">)</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">In standard Racket, <span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span> is the function of last resort, called when <span class="RktVar">id</span> is not bound to any value. As such, it typically reports a syntax error.</div></p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Let</span><span class="RktCmt">'</span><span class="RktCmt">s call em without defining it</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">em</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktErr">em: undefined;</span></p></td></tr><tr><td><p><span class="RktErr"></span><span class="hspace">&nbsp;</span><span class="RktErr">cannot reference undefined identifier</span></p></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">(em "Bonjour") is being converted to ((#%top . em) "Bonjour")</span></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">So calling ((#%top . em) "Bonjour") will give the same result</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym">em</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktErr">em: undefined;</span></p></td></tr><tr><td><p><span class="RktErr"></span><span class="hspace">&nbsp;</span><span class="RktErr">cannot reference undefined identifier</span></p></td></tr></table></blockquote></td></tr></table></p><p>In the Pollen markup environment, however, this behavior is annoying. Because when you&rsquo;re writing X-expressions, you don&rsquo;t necessarily want to define all your tags ahead of time.</p><p>So Pollen redefines <span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span>. For convenience, Pollen&rsquo;s version of <span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span> assumes that an undefined tag should just refer to an X-expression beginning with that tag (and uses <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Ftag..rkt%29._make-tag-function%29%29" class="RktValLink" data-pltdoc="x">make-tag-function</a></span> to provide this behavior):</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Again, let</span><span class="RktCmt">'</span><span class="RktCmt">s call em without defining it, but using pollen/top</span></td></tr><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/top</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">em</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="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">(em "Bonjour") is still being converted to ((#%top . em) "Bonjour")</span></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">But now, ((#%top . em) "Bonjour") gives a different result</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym">em</span><span class="RktPn">)</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></table></blockquote></td></tr></table></p><p>The good news is that this behavior means you use any tag you want in your markup without defining it in advance. You can still attach a function to the tag later, which will automatically supersede <span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span>.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><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="RktPn">(</span><span class="RktSym">em</span><span class="hspace">&nbsp;</span><span class="RktSym">x</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">span</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">style</span><span class="hspace">&nbsp;</span><span class="RktVal">"font-size:100px"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktRdr">,</span><span class="RktSym">x</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">em</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(span ((style "font-size:100px")) "Bonjour")</span></p></td></tr></table></blockquote></td></tr></table></p><p>The bad news is that you&rsquo;ll never get an &ldquo;undefined identifier&rdquo; error. These undefined identifiers will happily sail through and be converted to tags.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/top</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="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="RktPn">(</span><span class="RktSym">em</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym">xs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">span</span><span class="hspace">&nbsp;</span><span class="RktVal">(</span><span class="RktVal">(</span><span class="RktVal">style</span><span class="hspace">&nbsp;</span><span class="RktVal">"font-size:100px"</span><span class="RktVal">)</span><span class="RktVal">)</span><span class="hspace">&nbsp;</span><span class="RktRdr">,@</span><span class="RktSym">xs</span><span class="RktVal">)</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">There</span><span class="RktCmt">'</span><span class="RktCmt">s a typo in my tag</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">erm</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(erm "Bonjour")</span></p></td></tr></table></blockquote></td></tr></table></p><p>This isn&rsquo;t a bug. It&rsquo;s just a natural consequence of how Pollen&rsquo;s <span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span> works. It can, however, make debugging difficult sometimes. Let&rsquo;s suppose my markup depends on <span class="RktSym">very-important-function</span>, which I don&rsquo;t import correctly.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/top</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><table cellspacing="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">module</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">vif</span><span class="hspace">&nbsp;</span><span class="RktSym">racket/base</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</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="RktPn">(</span><span class="RktSym">very-important-function</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym">xs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">secrets-of-universe</span><span class="hspace">&nbsp;</span><span class="RktRdr">,@</span><span class="RktSym">xs</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Forgot to (require </span><span class="RktCmt">'</span><span class="RktCmt">vif)</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">very-important-function</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(very-important-function "Bonjour")</span></p></td></tr></table></blockquote></td></tr></table></p><p>So the undefined-function bug goes unreported. Again, that&rsquo;s not a bug in Pollen &#8212;&#160;there&rsquo;s just no way for it to tell the difference between an identifier that&rsquo;s deliberately undefined and one that&rsquo;s inadvertently undefined. If you want to guarantee that you&rsquo;re invoking a defined identifier, use <span class="RktSym">def/c</span>.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>syntax</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(form._((lib._pollen/top..rkt)._def/c))"></a><span title="Provided from: pollen/top | Package: pollen"><span class="RktSym"><span class="RktSymDef RktSym">def/c</span></span></span><span class="hspace">&nbsp;</span><span class="RktVar">id</span><span class="RktPn">)</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Invoke <span class="RktVar">id</span> if it&rsquo;s a defined identifier, otherwise raise an error. This form reverses the behavior of <span class="RktSym"><span class="badlink"><span class="RktValLink">#%top</span></span></span> (in other words, it restores default Racket behavior).</div></p><p>Recall this example from before. In standard Racket, you get an undefined-identifier error.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="0" class="RktBlk"><tr><td><table cellspacing="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">module</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">vif</span><span class="hspace">&nbsp;</span><span class="RktSym">racket/base</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</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="RktPn">(</span><span class="RktSym">very-important-function</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym">xs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">secrets-of-universe</span><span class="hspace">&nbsp;</span><span class="RktRdr">,@</span><span class="RktSym">xs</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Forgot to (require </span><span class="RktCmt">'</span><span class="RktCmt">vif)</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">very-important-function</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktErr">very-important-function: undefined;</span></p></td></tr><tr><td><p><span class="RktErr"></span><span class="hspace">&nbsp;</span><span class="RktErr">cannot reference undefined identifier</span></p></td></tr></table></blockquote></td></tr></table></p><p>But with <a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28mod-path._pollen%2Ftop%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/top</span></a>, the issue is not treated as an error.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/top</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><table cellspacing="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">module</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">vif</span><span class="hspace">&nbsp;</span><span class="RktSym">racket/base</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</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="RktPn">(</span><span class="RktSym">very-important-function</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym">xs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">secrets-of-universe</span><span class="hspace">&nbsp;</span><span class="RktRdr">,@</span><span class="RktSym">xs</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Forgot to (require </span><span class="RktCmt">'</span><span class="RktCmt">vif)</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym">very-important-function</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktRes">'(very-important-function "Bonjour")</span></p></td></tr></table></blockquote></td></tr></table></p><p>By adding <span class="RktSym">def/c</span>, we restore the usual behavior, guaranteeing that we get the defined version of <span class="RktSym">very-important-function</span> or nothing.</p><p><table cellspacing="0" class="RktBlk"><tr><td><p>Examples:</p></td></tr><tr><td><blockquote class="SCodeFlow"><table cellspacing="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/top</span><span class="RktPn">)</span></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><table cellspacing="0" class="RktBlk"><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">module</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym">vif</span><span class="hspace">&nbsp;</span><span class="RktSym">racket/base</span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="hspace">&nbsp;&nbsp;&nbsp;&nbsp;</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="RktPn">(</span><span class="RktSym">very-important-function</span><span class="hspace">&nbsp;</span><span class="RktPn">. </span><span class="RktSym">xs</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">`</span><span class="RktVal">(</span><span class="RktVal">secrets-of-universe</span><span class="hspace">&nbsp;</span><span class="RktRdr">,@</span><span class="RktSym">xs</span><span class="RktVal">)</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></td></tr><tr><td><table cellspacing="0"><tr><td></td></tr></table></td></tr><tr><td><span class="RktCmt">;</span><span class="RktCmt">&nbsp;</span><span class="RktCmt">Forgot to (require </span><span class="RktCmt">'</span><span class="RktCmt">vif)</span></td></tr><tr><td><span class="stt">&gt; </span><span class="RktPn">(</span><span class="RktPn">(</span><span class="RktSym">def/c</span><span class="hspace">&nbsp;</span><span class="RktSym">very-important-function</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span><span class="RktVal">"Bonjour"</span><span class="RktPn">)</span></td></tr><tr><td><p><span class="RktErr">very-important-function: undefined;</span></p></td></tr><tr><td><p><span class="RktErr"></span><span class="hspace">&nbsp;</span><span class="RktErr">cannot reference undefined identifier</span></p></td></tr></table></blockquote></td></tr></table></p><h4>7.9<tt>&nbsp;</tt><a name="(part._.World)"></a><a name="(mod-path._pollen/world)"></a>World</h4><p><table cellspacing="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/pollen.html#%28mod-path._pollen%2Fworld%29" class="RktModLink" data-pltdoc="x"><span class="RktSym">pollen/world</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>A set of global values and parameters that are used throughout the Pollen system. If you don&rsquo;t like the defaults I&rsquo;ve picked, change them.</p><p>All identifiers are exported with the prefix <span class="RktSym">world:</span>, and are so documented below.</p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3amain-pollen-export))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amain-pollen-export%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:main-pollen-export</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">doc</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3ameta-pollen-export))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3ameta-pollen-export%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:meta-pollen-export</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">metas</span></p></blockquote></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">The two exports from a compiled Pollen source file.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3aproject-require))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3aproject-require%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:project-require</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">"project-require.rkt"</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">File implicitly required into every Pollen source file from its directory.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>parameter</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/world..rkt)._world~3acheck-project-requires-in-render~3f))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acheck-project-requires-in-render~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:check-project-requires-in-render?</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></p></blockquote></td></tr><tr><td><span class="RktPn">(</span><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acheck-project-requires-in-render~3f%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:check-project-requires-in-render?</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">check?</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">check?</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">boolean?</span></span></span></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span></td><td><span class="RktVal">#t</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">A parameter that determines whether the <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3aproject-require%29%29" class="RktValLink" data-pltdoc="x">world:project-require</a></span> file is checked for changes on every pass through <span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Frender..rkt%29._render%29%29" class="RktValLink" data-pltdoc="x">render</a></span>. (Can be faster to turn this off if you don&rsquo;t need it.) Initialized to <span class="RktVal">#t</span>.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3aserver-extras-dir))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3aserver-extras-dir%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:server-extras-dir</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">"server-extras"</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Name of directory where server support files live.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>parameter</p></div></div><p class="RForeground"><span class="RktPn">(</span><a name="(def._((lib._pollen/world..rkt)._world~3acurrent-server-extras-path))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acurrent-server-extras-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:current-server-extras-path</a></span></span><span class="RktPn"></span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span></p></blockquote></td></tr><tr><td><span class="RktPn">(</span><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acurrent-server-extras-path%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:current-server-extras-path</a></span></span><span class="hspace">&nbsp;</span><span class="RktVar">dir</span><span class="RktPn">)</span><span class="hspace">&nbsp;</span>&rarr;<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">void?</span></span></span></td></tr><tr><td><span class="hspace">&nbsp;&nbsp;</span><span class="RktVar">dir</span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span></td></tr><tr><td><table cellspacing="0" class="argcontract"><tr><td><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span></td><td><span class="RktVal">#f</span></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">A parameter that reports the path to the directory of support files for the development server. Initialized to <span class="RktVal">#f</span>, but set to a proper value when <font class="badlink"><span class="RktModLink"><span class="RktSym">pollen/server</span></span></font> runs.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3apreproc-source-ext))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apreproc-source-ext%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:preproc-source-ext</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">pp</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3amarkup-source-ext))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amarkup-source-ext%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:markup-source-ext</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">pm</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3amarkdown-source-ext))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amarkdown-source-ext%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:markdown-source-ext</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">pmd</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3anull-source-ext))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3anull-source-ext%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:null-source-ext</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">p</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3apagetree-source-ext))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apagetree-source-ext%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:pagetree-source-ext</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">ptree</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3atemplate-source-ext))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3atemplate-source-ext%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:template-source-ext</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">pt</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3ascribble-source-ext))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3ascribble-source-ext%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:scribble-source-ext</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">scrbl</span></p></blockquote></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">File extensions for Pollen source files.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3adecodable-extensions))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3adecodable-extensions%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:decodable-extensions</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">list</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amarkup-source-ext%29%29" class="RktValLink" data-pltdoc="x">world:markup-source-ext</a></span><span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apagetree-source-ext%29%29" class="RktValLink" data-pltdoc="x">world:pagetree-source-ext</a></span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">File extensions that are eligible for decoding.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3amode-auto))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-auto%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:mode-auto</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">auto</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3amode-preproc))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-preproc%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:mode-preproc</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">pre</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3amode-markup))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-markup%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:mode-markup</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">markup</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3amode-markdown))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-markdown%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:mode-markdown</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">markdown</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3amode-pagetree))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3amode-pagetree%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:mode-pagetree</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">ptree</span></p></blockquote></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Mode indicators for the Pollen reader and parser.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3adefault-pagetree))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3adefault-pagetree%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:default-pagetree</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">"index.ptree"</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Pagetree that Pollen dashboard loads by default in each directory.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3apagetree-root-node))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apagetree-root-node%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:pagetree-root-node</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">pagetree-root</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Name of the root node in a decoded pagetree. It&rsquo;s ignored by the code, so its only role is to clue you in that you&rsquo;re looking at something that came out of the pagetree decoder.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3acommand-marker))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3acommand-marker%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:command-marker</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">char?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">#\&#9674;</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">The magic character that indicates a Pollen command, function, or variable.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3adefault-template-prefix))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3adefault-template-prefix%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:default-template-prefix</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">"main"</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Prefix of the default template.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3afallback-template))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3afallback-template%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:fallback-template</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">"fallback.html.pt"</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Name of the fallback template (i.e., the template used to render a Pollen markup file when no other template can be found).</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3atemplate-meta-key))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3atemplate-meta-key%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:template-meta-key</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">symbol?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">'</span><span class="RktVal">template</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">Meta key used to store a template name for that particular source file.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3anewline))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3anewline%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:newline</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">"\n"</span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3alinebreak-separator))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3alinebreak-separator%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:linebreak-separator</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3anewline%29%29" class="RktValLink" data-pltdoc="x">world:newline</a></span></p></blockquote></td></tr></table></td></tr><tr><td><table cellspacing="0" class="together"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3aparagraph-separator))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3aparagraph-separator%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:paragraph-separator</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">"\n\n"</span></p></blockquote></td></tr></table></td></tr></table></blockquote></div><div class="SIntrapara">Default separators used in decoding.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3adashboard-css))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3adashboard-css%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:dashboard-css</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string?</span></span></span><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktVal">"poldash.css"</span></p></blockquote></td></tr></table></blockquote></div><div class="SIntrapara">CSS file used for the dashboard.</div></p><p><div class="SIntrapara"><blockquote class="SVInsetFlow"><table cellspacing="0" class="boxed RBoxed"><tr><td><blockquote class="SubFlow"><div class="RBackgroundLabel SIEHidden"><div class="RBackgroundLabelInner"><p>value</p></div></div><p class="RForeground"><a name="(def._((lib._pollen/world..rkt)._world~3apaths-excluded-from-dashboard))"></a><span title="Provided from: pollen/world | Package: pollen"><span class="RktSym"><a href="file:///Users/MB/git/pollen/scribblings/pollen.html#%28def._%28%28lib._pollen%2Fworld..rkt%29._world~3apaths-excluded-from-dashboard%29%29" class="RktValDef RktValLink" data-pltdoc="x">world:paths-excluded-from-dashboard</a></span></span><span class="hspace">&nbsp;</span>:<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">listof</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">path?</span></span></span><span class="RktPn">)</span></p></blockquote></td></tr><tr><td><span class="hspace">&nbsp;</span>=<span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">map</span></span></span><span class="hspace">&nbsp;</span><span class="RktSym"><span class="badlink"><span class="RktValLink">string-&gt;path</span></span></span><span class="hspace">&nbsp;</span><span class="RktPn">(</span><span class="RktSym"><span class="badlink"><span class="RktValLink">list</span></span></span><span class="hspace">&nbsp;</span><span class="RktVal">"poldash.css"</span><span class="hspace">&nbsp;</span><span class="RktVal">"compiled"</span><span class="RktPn">)</span><span class="RktPn">)</span></td></tr></table></blockquote></div><div class="SIntrapara">Paths not shown in the Pollen dashboard.</div></p><h3>8<tt>&nbsp;</tt><a name="(part._.License___source_code)"></a>License &amp; source code</h3><p>This module is licensed under the LGPL.</p><p>Source repository at <a href="http://github.com/mbutterick/pollen">http://github.com/mbutterick/pollen</a>. Suggestions &amp; corrections welcome.</p></div></div><div id="contextindicator">&nbsp;</div></body></html>