summaryrefslogtreecommitdiff
path: root/website/manual/Readers.html
blob: b0e2f18da96905f34a99acbb5b3ce8d3b11b19c9 (plain)
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
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<!-- Copyright (C) 2015 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.0, http://www.gnu.org/software/texinfo/ -->
<head>
<title>Haunt Reference Manual: Readers</title>

<meta name="description" content="Haunt Reference Manual: Readers">
<meta name="keywords" content="Haunt Reference Manual: Readers">
<meta name="resource-type" content="document">
<meta name="distribution" content="global">
<meta name="Generator" content="makeinfo">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="index.html#Top" rel="start" title="Top">
<link href="Concept-Index.html#Concept-Index" rel="index" title="Concept Index">
<link href="index.html#SEC_Contents" rel="contents" title="Table of Contents">
<link href="Programming-Interface.html#Programming-Interface" rel="up" title="Programming Interface">
<link href="Pages.html#Pages" rel="next" title="Pages">
<link href="Posts.html#Posts" rel="prev" title="Posts">
<style type="text/css">
<!--
a.summary-letter {text-decoration: none}
blockquote.indentedblock {margin-right: 0em}
blockquote.smallindentedblock {margin-right: 0em; font-size: smaller}
blockquote.smallquotation {font-size: smaller}
div.display {margin-left: 3.2em}
div.example {margin-left: 3.2em}
div.lisp {margin-left: 3.2em}
div.smalldisplay {margin-left: 3.2em}
div.smallexample {margin-left: 3.2em}
div.smalllisp {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}
pre.smalldisplay {font-family: inherit; font-size: smaller}
pre.smallexample {font-size: smaller}
pre.smallformat {font-family: inherit; font-size: smaller}
pre.smalllisp {font-size: smaller}
span.nocodebreak {white-space: nowrap}
span.nolinebreak {white-space: nowrap}
span.roman {font-family: serif; font-weight: normal}
span.sansserif {font-family: sans-serif; font-weight: normal}
ul.no-bullet {list-style: none}
-->
</style>


</head>

<body lang="en">
<a name="Readers"></a>
<div class="header">
<p>
Next: <a href="Pages.html#Pages" accesskey="n" rel="next">Pages</a>, Previous: <a href="Posts.html#Posts" accesskey="p" rel="prev">Posts</a>, Up: <a href="Programming-Interface.html#Programming-Interface" accesskey="u" rel="up">Programming Interface</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>
<hr>
<a name="Readers-1"></a>
<h3 class="section">5.3 Readers</h3>

<div class="example">
<pre class="example">(use-modules (haunt reader))
</pre></div>

<p>The purpose of a reader is to translate the markup within a post file
into an SXML tree representing the HTML structure and associate some
metadata with it.
</p>
<dl>
<dt><a name="index-make_002dreader"></a>Scheme Procedure: <strong>make-reader</strong> <em><var>matcher</var> <var>proc</var></em></dt>
<dd><p>Create a new reader.  The reader is to be activated when
<var>matcher</var>, a procedure that accepts a file name as its only
argument, returns <code>#t</code>.  When a post file matches, the procedure
<var>proc</var>, which also accepts a file name as its only argument, reads
the contents and returns a post object (see <a href="Posts.html#Posts">Posts</a>).
</p></dd></dl>

<dl>
<dt><a name="index-reader_003f"></a>Scheme Procedure: <strong>reader?</strong> <em><var>object</var></em></dt>
<dd><p>Return <code>#t</code> if <var>object</var> is a reader.
</p></dd></dl>

<dl>
<dt><a name="index-reader_002dmatcher"></a>Scheme Procedure: <strong>reader-matcher</strong> <em><var>reader</var></em></dt>
<dd><p>Return the match procedure for <var>reader</var>.
</p></dd></dl>

<dl>
<dt><a name="index-reader_002dmatcher-1"></a>Scheme Procedure: <strong>reader-matcher</strong> <em><var>reader</var></em></dt>
<dd><p>Return the read procedure for <var>reader</var>.
</p></dd></dl>

<dl>
<dt><a name="index-reader_002dmatch_003f"></a>Scheme Procedure: <strong>reader-match?</strong> <em><var>reader</var> <var>file-name</var></em></dt>
<dd><p>Return <code>#t</code> if <var>file-name</var> is a file supported by
<var>reader</var>.
</p></dd></dl>

<dl>
<dt><a name="index-read_002dpost"></a>Scheme Procedure: <strong>read-post</strong> <em><var>reader</var> <var>file-name</var> [<var>default-metadata</var>]</em></dt>
<dd><p>Read a post object from <var>file-name</var> using <var>reader</var>, merging
its metadata with <var>default-metadata</var>, or the empty list if not
specified.
</p></dd></dl>

<dl>
<dt><a name="index-read_002dposts"></a>Scheme Procedure: <strong>read-posts</strong> <em><var>directory</var> <var>keep?</var> <var>readers</var> [<var>default-metadata</var>]</em></dt>
<dd><p>Read all of the files in <var>directory</var> that match <var>keep?</var> as
post objects.  The <var>readers</var> list must contain a matching reader
for every post.
</p></dd></dl>

<dl>
<dt><a name="index-make_002dfile_002dextension_002dmatcher"></a>Scheme Procedure: <strong>make-file-extension-matcher</strong> <em><var>ext</var></em></dt>
<dd><p>Create a procedure that returns <code>#t</code> when a file name ends with
&ldquo;.ext&rdquo;.
</p></dd></dl>

<dl>
<dt><a name="index-sxml_002dreader"></a>Scheme Procedure: <strong>sxml-reader</strong></dt>
<dd><p>A basic reader for posts written as Scheme code that evaluates to an
an association list.  The special key <code>content</code> contains the post
body as an SXML tree.
</p>
<p>Example:
</p>
<div class="example">
<pre class="example">(use-modules (haunt utils))

`((title . &quot;Hello, world!&quot;)
  (date . ,(string-&gt;date* &quot;2015-04-10 23:00&quot;))
  (tags &quot;foo&quot; &quot;bar&quot;)
  (summary . &quot;Just a test&quot;)
  (content
   ((h2 &quot;Hello!&quot;)
    (p &quot;This is Haunt.  A static site generator for GNU Guile.&quot;))))
</pre></div>

</dd></dl>

<dl>
<dt><a name="index-html_002dreader"></a>Scheme Procedure: <strong>html-reader</strong></dt>
<dd><p>A basic reader for posts written in plain ol&rsquo; HTML.  Metadata is
encoded as the <code>key: value</code> pairs, one per line, at the beginning
of the file.  A line with the <code>---</code> sentinel marks the end of the
metadata section and the rest of the file is encoded as HTML.
</p>
<p>Example:
</p>
<div class="example">
<pre class="example">title: A Foo Walks Into a Bar
date: 2015-04-11 20:00
tags: bar
---
&lt;p&gt;
  This is an example using raw HTML, because Guile doesn't have a
  Markdown parser.
&lt;/p&gt;
</pre></div>

</dd></dl>

<hr>
<div class="header">
<p>
Next: <a href="Pages.html#Pages" accesskey="n" rel="next">Pages</a>, Previous: <a href="Posts.html#Posts" accesskey="p" rel="prev">Posts</a>, Up: <a href="Programming-Interface.html#Programming-Interface" accesskey="u" rel="up">Programming Interface</a> &nbsp; [<a href="index.html#SEC_Contents" title="Table of contents" rel="contents">Contents</a>][<a href="Concept-Index.html#Concept-Index" title="Index" rel="index">Index</a>]</p>
</div>



</body>
</html>