summaryrefslogtreecommitdiff
path: root/tools/quickbook/doc/structure.qbk
blob: c9a4be9c334d6fe83db88c5e1f6404f498c0a8c5 (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
182
183
184
185
186
187
188
189
190
191
192
193
194
195
[/
    Copyright 2002,2004,2006 Joel de Guzman, Eric Niebler
    Copyright 2010-2011 Daniel James

    Distributed under the Boost Software License, Version 1.0.
    (See accompanying file LICENSE_1_0.txt or copy at
    [@http://www.boost.org/LICENSE_1_0.txt])
]

[chapter Document Structure
    [quickbook 1.6]
    [id quickbook.syntax.structure]
    [source-mode teletype]
]

[/TODO: I started to write this in the syntax chapter, but it was too
much information, will incorporate into this file.]
[/
To avoid breaking old documentation we support using different versions
of the language, compatibility is not 100% but we try to avoid
problematic changes. This documentation applies to the current version,
`[quickbook 1.5]`.

There is also some mention of the next version `[quickbook 1.6]`. While
quickbook allows you to use it now, it isn't recommended as it is
currently a work in progress and subject to change.
]

[#quickbook.ref.docinfo]
[section:docinfo Document Info]

Every document must begin with a Document Info section, which looks something
like this:

```
[article The Document Title
    [quickbook 1.5]
    [version 1.0]
    [id the_document_name]
    [copyright 2000 2002 2003 Joe Blow, Jane Doe]
    [authors [Blow, Joe] [Doe, Jane]]
    [license The document's license]
    [source-mode c++]
]
```

`article` is the document type. There are several possible document types,
most of these are based on docbook document elements. These are fully
described in
[@http://www.docbook.org/tdg/ DocBook: The Definitive Guide]:

* [@http://www.docbook.org/tdg/en/html/book.html book]
* [@http://www.docbook.org/tdg/en/html/article.html article]
* [@http://www.docbook.org/tdg/en/html/chapter.html chapter]
* [@http://www.docbook.org/tdg/en/html/part.html part]
* [@http://www.docbook.org/tdg/en/html/appendix.html appendix]
* [@http://www.docbook.org/tdg/en/html/preface.html preface]
* [@http://www.docbook.org/tdg/en/html/qandadiv.html qandadiv]
* [@http://www.docbook.org/tdg/en/html/qandaset.html qandaset]
* [@http://www.docbook.org/tdg/en/html/reference.html reference]
* [@http://www.docbook.org/tdg/en/html/set.html set]

Boostbook also adds another document type [^[link boostbook.defining library]]
for documenting software libraries.

So the documentation for the 'foo' library might start:

```
[library Foo
    [quickbook 1.5]
    [id foo]
    [version 1.0]
]
```

[#quickbook.ref.attributes]
[section:attributes Document Info Attributes]

The document info block has a few different types of attributes.
They are all optional.

[heading Quickbook specific meta data]

```
    [quickbook 1.5]
```

The `quickbook` attribute declares the version of quickbook
the document is written for.
In its absence, version 1.1 is assumed. It's recommended that
you use `[quickbook 1.5]` which is the version described here.

```
    [source-mode teletype]
```

The `source-mode` attribute sets the initial __source_mode__. If
it is omitted, the default value of =c++= will be used.

[heading Boostbook/Docbook root element attributes]

```
[id foo]
```

`id` specifies the id of the document element. If it isn't specified
the id is automatically generated from the title. This id is also
used to generate the nested ids.

```
[lang en]
```

`lang` specifies the document language. This is used by docbook to
localize the documentation. Note that Boostbook doesn't have any
localization support so if you use it to generate the reference
documentation it will be in English regardless.

It should be a language code
drawn from ISO 639 (perhaps extended with a country code drawn from
ISO 3166, as en-US).

```
[dirname foo]
```

`dirname` is used to specify the directory name of the library in the
repository. This is a boostbook extension so it's only valid for
`library` documentation blocks.  It's used for some boostbook
functionality, but for pure quickbook documentation has no practical
effect.

[heading Docbook Metadata]

=version=, =copyright=, =authors=,
=license=, =last-revision= and =bibliod= are optional information.

[heading Boostbook Metadata]

=purpose= and =category= are boostbook attributes which are only
valid for =library= documents. If you use them for other document types,
quickbook will warn about them, but still use them, generating invalid markup,
that's just ignored by the style sheets.

[endsect] [/attributes]

[endsect] [/docinfo]

[#quickbook.ref.section]
[section:section Sections]

Quickbook documents are structured using 'sections'. These are used
to generate the table of contents, and, when generating html, to
split the document into pages. This is optional but a good idea for
all but the simplest of documents.

A sectioned document might look like:

```
    [book Title
        [quickbook 1.5]
    ]
    
    [section First Section]
    
    [/...]
    
    [endsect]

    [section Second Section]
    
    [/...]
    
    [endsect]
```

Sections start with the `section` tag, and end with the `[endsect]` tag.
(`[/...]` is a comment, [link quickbook.ref.comments described later]).

Sections can be given an optional id:

```
[#quickbook.ref.id]
[section:id The Section Title]
```

`id` will be the filename of the generated section.
If it is not present, "The Section Title" will be normalized and become the id.
Valid characters are =a-Z=, =A-Z=, =0-9= and =_=. All non-valid characters are
converted to underscore and all upper-case are converted to lower case.
Thus: "The Section Title" will be normalized to "the_section_title".

Sections can nest, and that results in a hierarchy in the table of contents.

[endsect] [/Section]