1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 2015-2021 David Thompson
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.3 or
any later version published by the Free Software Foundation; with no
Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A
copy of the license is included in the section entitled "GNU Free
Documentation License". -->
<!-- Created by GNU Texinfo 6.7, http://www.gnu.org/software/texinfo/ -->
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Blog (Haunt Reference Manual)</title>
<meta name="description" content="Blog (Haunt Reference Manual)">
<meta name="keywords" content="Blog (Haunt Reference Manual)">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<link href="index.html" rel="start" title="Top">
<link href="Concept-Index.html" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Builders.html" rel="up" title="Builders">
<link href="Atom.html" rel="next" title="Atom">
<link href="Static-Assets.html" rel="prev" title="Static Assets">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
kbd {font-style: oblique}
pre.display {font-family: inherit}
pre.format {font-family: inherit}
pre.menu-comment {font-family: serif}
pre.menu-preformatted {font-family: serif}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: initial; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
@media (min-width: 1140px) {
body {
margin-left: 14rem;
margin-right: 4rem;
max-width: 52rem;
}
}
@media (min-width: 800px) and (max-width: 1140px) {
body {
margin-left: 6rem;
margin-right: 4rem;
max-width: 52rem;
}
}
@media (max-width: 800px) {
body {
margin: 1rem;
}
}
-->
</style>
<link rel="stylesheet" type="text/css" href="https://dthompson.us/css/dthompson.css">
</head>
<body lang="en">
<span id="Blog"></span><div class="header">
<p>
Next: <a href="Atom.html" accesskey="n" rel="next">Atom</a>, Previous: <a href="Static-Assets.html" accesskey="p" rel="prev">Static Assets</a>, Up: <a href="Builders.html" accesskey="u" rel="up">Builders</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<span id="Blog-1"></span><h4 class="subsection">5.6.2 Blog</h4>
<div class="example">
<pre class="example">(use-modules (haunt builder blog))
</pre></div>
<dl>
<dt id="index-theme">Scheme Procedure: <strong>theme</strong> <em>[#:name #:layout #:post-template #:collection-template]</em></dt>
<dd><p>Create a new theme named <var>name</var>.
</p>
<p>The procedure <var>layout</var> accepts three arguments: a site, a page
title string, and an SXML tree. Its purpose is to wrap the contents
of a post with the theme’s header/footer and return the complete SXML
tree for a web page.
</p>
<p>The procedure <var>post-template</var> accepts a single argument: a post.
Its purpose is to return an SXML tree containing the contents of the
post, applying any desired post-processing operations. The values
returned from this procedure will be wrapped in the theme’s layout.
</p>
<p>The procedure <var>collection-template</var> accepts four arguments: a
site, a title string, a list of posts, and a URL prefix string. Its
purpose is to return an SXML tree containing the body of the
collection page. The values returned from this procedure will be
wrapped in the theme’s layout.
</p></dd></dl>
<dl>
<dt id="index-theme_003f">Scheme Procedure: <strong>theme?</strong> <em><var>object</var></em></dt>
<dd><p>Return <code>#t</code> if <var>object</var> is a theme object.
</p></dd></dl>
<dl>
<dt id="index-blog">Scheme Procedure: <strong>blog</strong> <em>[#:theme #:prefix #:collections]</em></dt>
<dd><p>Create a builder procedure that transforms a list of posts into pages
decorated by <var>theme</var>, a theme object, whose URLs start with
<var>prefix</var>.
</p>
<p>Additionally, this builder creates pages that aggregate previews of
many posts corresponding to what is specified in the list
<var>collections</var>. Each collection is a three element list in the
form <code>(title file-name filter)</code>.
</p>
<dl compact="compact">
<dt><var>title</var></dt>
<dd><p>The human readable name of the collection.
</p>
</dd>
<dt><var>file-name</var></dt>
<dd><p>The HTML file that will contain the rendered collection.
</p>
</dd>
<dt><var>filter</var></dt>
<dd><p>A procedure that accepts a list of posts as its only argument and
returns a new list of posts. The filter procedure is used to remove
and/or sort the posts into the desired form for the collection. For
example, a filter could sort posts in reverse chronological order or
select all posts that are written by a particular author.
</p>
</dd>
</dl>
<p>By default, a single collection is created that lists posts in reverse
chronological order and writes to <samp>index.html</samp>.
</p>
<p>The default theme is intended only for testing purposes.
</p>
</dd></dl>
<hr>
<div class="header">
<p>
Next: <a href="Atom.html" accesskey="n" rel="next">Atom</a>, Previous: <a href="Static-Assets.html" accesskey="p" rel="prev">Static Assets</a>, Up: <a href="Builders.html" accesskey="u" rel="up">Builders</a> [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html" title="Index" rel="index">Index</a>]</p>
</div>
</body>
</html>
|