blob: 32d46a356444312807cdddc0dd71483be8067834 (
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
|
# Easy index and Atom generator
This is a simple tool to generate an Atom and an HTML index from a very simple
scheme file.
It doesn't control errors for the moment so be careful with what you do.
## Usage
`(src atom)` and `(src html)` are libraries you can use independently as in
`tests/`, but the magic comes when you read the basic Format (see below) as a
generic generator.
The following script shows one way to do it:
``` scm
(define-module (scripts create)
#:use-module ((src atom) #:prefix atom:)
#:use-module ((src html) #:prefix html:)
#:use-module (src as))
(define root (canonicalize-path (cadr (command-line))))
(define atom-feed (lambda () (atom:render (as 'atom root))))
(atom-feed) ;; writes your feed to current-output-port
(define html-index (lambda () (html:render (as 'html root))))
(html-index) ;; writes your html to current-output-port
(define media-list (as 'media-list root)) ;; list of media files in your site
```
`(as 'atom root)` and `(as 'html root)` the scheme file in `root` and interpret
it as atom and html respectively. From that, the result can be generated
calling the `render` function of the modules as suggested in the example.
`(as 'media-list root)` returns an association list with the car set to the
path in the filesystem and the cdr to the uri of each media file.
## Format
You have the following constructs to generate your site:
- `main`: represents the core of your website and atom feed. It has these
fields represented as guile keyword args:
- `#:title`: `string`.
- `#:subtitle`: `string`.
- `#:uri`: URI of main document to insert in Atom. It's a `string`.
- `#:atom-feed-uri`: URI of Atom feed to link from HTML. It's a `string`.
- `#:posts`: posts of your website. Used form Atom to create entries of your
feed. It's a `list` of `post`s.
- `#:updated`: date of the latest update of your site. If nothing is added
it's automatically filled from the posts. Only used by Atom.
- `#:short-description`: `string`
- `#:long-description`: SXML
- `#:author`: the author of the website and feed. Each post can have its own.
`person`
- `#:styles`: CSS to apply to your HTML. List of `media` or `string`
elements.
- `#:scripts`: JavaScript to apply to your HTML. List of `media` or `string`
elements.
- `post`: represents each content units of your site. It has these fields
represented as guile keyword args:
- `#:title`: `string`.
- `#:id`: `string`, if ignored it's generated from the title.
- `#:published`: Publishing date. `date`
- `#:updated`: Update date. `date`
- `#:authors`: list of `person`
- `#:summary-html`: SXML
- `#:content-html`: SXML
- `#:categories`: list of `string`
- `#:contributors`: list of `person`
- `#:media`: list of `media`
- `person`: requires a positional argument: `name`. It has some extra fields
represented as guile keyword args:
- `#:email`: `string`.
- `#:uri`: `string`.
- `media`: stores information about independent files of the site. CSS, JS, and
multimedia files can be represented as media. It requires a positional
argument: `path`. It has these extra fields:
- `#:uri`: URI this file will have once deployed. `string`
- `#:type`: internally used mime-type. `string`
- `string/ISO->date` is a helper function that creates a date from a string in
YYYY-MM-DD format.
|