asciidoctor-pdf 1.5.0.alpha.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (54) hide show
  1. checksums.yaml +7 -0
  2. data/LICENSE.adoc +22 -0
  3. data/NOTICE.adoc +76 -0
  4. data/README.adoc +263 -0
  5. data/Rakefile +78 -0
  6. data/bin/asciidoctor-pdf +15 -0
  7. data/bin/optimize-pdf +63 -0
  8. data/data/fonts/LICENSE-liberation-fonts-2.00.1 +102 -0
  9. data/data/fonts/LICENSE-mplus-testflight-58 +16 -0
  10. data/data/fonts/LICENSE-noto-fonts-2014-01-30 +201 -0
  11. data/data/fonts/liberationmono-bold-latin.ttf +0 -0
  12. data/data/fonts/liberationmono-bolditalic-latin.ttf +0 -0
  13. data/data/fonts/liberationmono-italic-latin.ttf +0 -0
  14. data/data/fonts/liberationmono-regular-latin.ttf +0 -0
  15. data/data/fonts/mplus1mn-bold-ascii.ttf +0 -0
  16. data/data/fonts/mplus1mn-bolditalic-ascii.ttf +0 -0
  17. data/data/fonts/mplus1mn-italic-ascii.ttf +0 -0
  18. data/data/fonts/mplus1mn-regular-ascii-conums.ttf +0 -0
  19. data/data/fonts/mplus1p-bold-latin.ttf +0 -0
  20. data/data/fonts/mplus1p-light-latin.ttf +0 -0
  21. data/data/fonts/mplus1p-regular-latin.ttf +0 -0
  22. data/data/fonts/mplus1p-regular-multilingual.ttf +0 -0
  23. data/data/fonts/notoserif-bold-latin.ttf +0 -0
  24. data/data/fonts/notoserif-bolditalic-latin.ttf +0 -0
  25. data/data/fonts/notoserif-italic-latin.ttf +0 -0
  26. data/data/fonts/notoserif-regular-latin.ttf +0 -0
  27. data/data/themes/asciidoctor-theme.yml +174 -0
  28. data/data/themes/default-theme.yml +182 -0
  29. data/examples/chronicles.adoc +429 -0
  30. data/examples/chronicles.pdf +0 -0
  31. data/examples/example-pdf-screenshot.png +0 -0
  32. data/examples/example.adoc +27 -0
  33. data/examples/example.pdf +0 -0
  34. data/examples/sample-title-logo.jpg +0 -0
  35. data/examples/wolpertinger.jpg +0 -0
  36. data/lib/asciidoctor-pdf.rb +3 -0
  37. data/lib/asciidoctor-pdf/asciidoctor_ext.rb +1 -0
  38. data/lib/asciidoctor-pdf/asciidoctor_ext/section.rb +26 -0
  39. data/lib/asciidoctor-pdf/converter.rb +1365 -0
  40. data/lib/asciidoctor-pdf/core_ext/array.rb +5 -0
  41. data/lib/asciidoctor-pdf/core_ext/ostruct.rb +9 -0
  42. data/lib/asciidoctor-pdf/implicit_header_processor.rb +59 -0
  43. data/lib/asciidoctor-pdf/pdfmarks.rb +30 -0
  44. data/lib/asciidoctor-pdf/prawn_ext.rb +3 -0
  45. data/lib/asciidoctor-pdf/prawn_ext/coderay_encoder.rb +94 -0
  46. data/lib/asciidoctor-pdf/prawn_ext/extensions.rb +529 -0
  47. data/lib/asciidoctor-pdf/prawn_ext/formatted_text/formatter.rb +29 -0
  48. data/lib/asciidoctor-pdf/prawn_ext/formatted_text/parser.rb +1012 -0
  49. data/lib/asciidoctor-pdf/prawn_ext/formatted_text/parser.treetop +115 -0
  50. data/lib/asciidoctor-pdf/prawn_ext/formatted_text/transform.rb +178 -0
  51. data/lib/asciidoctor-pdf/roman_numeral.rb +107 -0
  52. data/lib/asciidoctor-pdf/theme_loader.rb +103 -0
  53. data/lib/asciidoctor-pdf/version.rb +5 -0
  54. metadata +248 -0
@@ -0,0 +1,182 @@
1
+ font:
2
+ catalog:
3
+ NotoSerif:
4
+ normal: notoserif-regular-latin.ttf
5
+ bold: notoserif-bold-latin.ttf
6
+ italic: notoserif-italic-latin.ttf
7
+ bold_italic: notoserif-bolditalic-latin.ttf
8
+ # NOTE currently, callout numbers don't work with LiberationMono
9
+ #LiberationMono:
10
+ # normal: liberationmono-regular-latin.ttf
11
+ # bold: liberationmono-bold-latin.ttf
12
+ # italic: liberationmono-italic-latin.ttf
13
+ # bold_italic: liberationmono-bolditalic-latin.ttf
14
+ Mplus1mn:
15
+ normal: mplus1mn-regular-ascii-conums.ttf
16
+ bold: mplus1mn-bold-ascii.ttf
17
+ italic: mplus1mn-italic-ascii.ttf
18
+ bold_italic: mplus1mn-bolditalic-ascii.ttf
19
+ #Mplus1pMultilingual:
20
+ # normal: mplus1p-regular-multilingual.ttf
21
+ #FontAwesome:
22
+ # normal: fontawesome-regular.ttf
23
+ # FIXME using fallbacks breaks use of custom font styles (fixed in Prawn 1.2.1!)
24
+ #fallbacks:
25
+ # - Mplus1pMultilingual
26
+ brand:
27
+ primary_color: 428bca
28
+ page:
29
+ background_color: ffffff
30
+ layout: portrait
31
+ # multiply inches by 72 to get pt values
32
+ margin: [0.5 * 72, 0.67 * 72, 0.67 * 72, 0.67 * 72]
33
+ size: Letter
34
+ base:
35
+ font_color: 333333
36
+ font_family: NotoSerif
37
+ # choose one of these font_size/line_height_length combinations
38
+ #font_size: 14
39
+ #line_height_length: 20
40
+ #font_size: 11.25
41
+ #line_height_length: 18
42
+ #font_size: 11.2
43
+ #line_height_length: 16
44
+ font_size: 10.5
45
+ #line_height_length: 15
46
+ # correct line height for NotoSerif metrics
47
+ line_height_length: 12
48
+ #font_size: 11.25
49
+ #line_height_length: 18
50
+ line_height: $base_line_height_length / $base_font_size
51
+ font_size_large: round($base_font_size * 1.25)
52
+ font_size_small: round($base_font_size * 0.85)
53
+ font_style: normal
54
+ align: justify
55
+ border_radius: 4
56
+ border_width: 0.5
57
+ border_color: eeeeee
58
+ # FIXME vertical_rhythm is weird; we should think in terms of ems
59
+ #vertical_rhythm: $base_line_height_length * 2 / 3
60
+ # correct line height for NotoSerif metrics
61
+ vertical_rhythm: $base_line_height_length
62
+ horizontal_rhythm: $base_line_height_length
63
+ link_font_color: $brand_primary_color
64
+ heading:
65
+ font_color: $base_font_color
66
+ font_family: $base_font_family
67
+ # h1 is used for document title
68
+ font_size_h1: floor($base_font_size * 2.6)
69
+ # h2 is used for chapter title
70
+ font_size_h2: floor($base_font_size * 2.15)
71
+ font_size_h3: round($base_font_size * 1.7)
72
+ font_size_h4: $base_font_size_large
73
+ font_size_h5: $base_font_size
74
+ font_size_h6: $base_font_size_small
75
+ font_style: bold
76
+ #line_height: 1.4
77
+ # correct line height for NotoSerif metrics
78
+ line_height: 1.2
79
+ margin_top: $vertical_rhythm * 0.2
80
+ margin_bottom: $vertical_rhythm * 0.8
81
+ #prose:
82
+ # margin_top: 0
83
+ # margin_bottom: $vertical_rhythm
84
+ block:
85
+ #margin_top: 0
86
+ #margin_bottom: $vertical_rhythm
87
+ padding: [$vertical_rhythm, $vertical_rhythm * 1.25, $vertical_rhythm, $vertical_rhythm * 1.25]
88
+ # code is used for source blocks (perhaps change to source or listing?)
89
+ code:
90
+ font_color: $base_font_color
91
+ #font_family: LiberationMono
92
+ #font_size: floor($base_font_size * 0.9)
93
+ #font_size: 10
94
+ #padding: [9.5, 9.5, 9.5, 9.5]
95
+ # LiberationMono carries extra gap below line
96
+ #padding: [10, 10, 7.5, 10]
97
+ #line_height: 1.45
98
+ font_family: Mplus1mn
99
+ font_size: ceil($base_font_size)
100
+ #padding: [$base_font_size, $code_font_size, $base_font_size, $code_font_size]
101
+ padding: $code_font_size
102
+ line_height: 1.25
103
+ background_color: f5f5f5
104
+ border_color: cccccc
105
+ border_radius: $base_border_radius
106
+ border_width: 0.75
107
+ # literal is currently used for inline monospaced in prose and table cells
108
+ literal:
109
+ #font_color: c7254e
110
+ font_color: b12146
111
+ font_family: $code_font_family
112
+ blockquote:
113
+ font_color: $base_font_color
114
+ font_size: $base_font_size_large
115
+ border_width: 5
116
+ border_color: $base_border_color
117
+ cite_font_size: $base_font_size_small
118
+ cite_font_color: 999999
119
+ sidebar:
120
+ border_color: ffffff
121
+ border_radius: $base_border_radius
122
+ border_width: $base_border_width
123
+ background_color: eeeeee
124
+ title_font_color: $heading_font_color
125
+ title_font_family: $heading_font_family
126
+ title_font_size: $heading_font_size_h4
127
+ title_font_style: $heading_font_style
128
+ title_align: center
129
+ example:
130
+ border_color: $base_border_color
131
+ border_radius: $base_border_radius
132
+ border_width: 0.75
133
+ background_color: transparent
134
+ admonition:
135
+ border_color: $base_border_color
136
+ border_width: $base_border_width
137
+ caption:
138
+ font_style: italic
139
+ align: left
140
+ # FIXME perhaps set line_height instead of / in addition to margins?
141
+ margin_inside: $vertical_rhythm * 0.25
142
+ margin_outside: 0
143
+ conum:
144
+ font_family: Mplus1mn
145
+ font_color: $literal_font_color
146
+ font_size: $code_font_size
147
+ image:
148
+ align_default: left
149
+ scaled_width_default: 0.5
150
+ lead:
151
+ # QUESTION what about $base_font_size_large?
152
+ #font_size: floor($base_line_height_length * 0.8)
153
+ #font_size: floor($base_font_size * 1.15)
154
+ #line_height: 1.3
155
+ font_size: $base_font_size_large
156
+ line_height: 1.4
157
+ abstract:
158
+ #font_color: 404040
159
+ font_color: 5c6266
160
+ font_size: $lead_font_size
161
+ line_height: $lead_line_height
162
+ font_style: italic
163
+ thematic_break:
164
+ border_color: $base_border_color
165
+ margin_top: $vertical_rhythm * 0.5
166
+ margin_bottom: $vertical_rhythm * 1.5
167
+ description_list:
168
+ term_font_style: italic
169
+ description_indent: $horizontal_rhythm * 1.25
170
+ outline_list:
171
+ indent: $horizontal_rhythm * 1.25
172
+ table:
173
+ background_color: transparent
174
+ background_color_alt: f9f9f9
175
+ border_color: dddddd
176
+ border_width: $base_border_width
177
+ # HACK accounting for line-height
178
+ cell_padding: [3, 3, 6, 3]
179
+ footer:
180
+ font_size: $base_font_size_small
181
+ font_color: $base_font_color
182
+ border_color: dddddd
@@ -0,0 +1,429 @@
1
+ = The Dangerous and Thrilling Documentation Chronicles
2
+ Kismet Chameleon; Lazarus het_Draeke
3
+ v1.0, 2014-01-01: The first incarnation of {doctitle}
4
+ :description: This story chronicles the inexplicable hazards and vicious beasts a +
5
+ team must surmount and vanquish on the journey to finding their open source +
6
+ project's true power.
7
+ :doctype: book
8
+ :title-logo: sample-title-logo.jpg
9
+ // Settings:
10
+ :compat-mode:
11
+ :experimental:
12
+ :icons: font
13
+ :listing-caption: Listing
14
+ :sectnums:
15
+ :toc:
16
+ :toclevels: 3
17
+ ifdef::backend-pdf[]
18
+ :pagenums:
19
+ :pygments-style: bw
20
+ :source-highlighter: pygments
21
+ endif::[]
22
+ // URIs:
23
+ :wolper-uri: http://en.wikipedia.org/wiki/Wolpertinger
24
+
25
+ [abstract]
26
+ {description}
27
+
28
+ == It's a City Under Siege
29
+
30
+ This journey begins one late Monday afternoon at http://www.devoxx.be/#/[Devoxx].
31
+ Our team needs coffee, _desperately_, but none of us dare open the theater doors...
32
+
33
+ During the first workshop, a script-happy warlock inadvertently released a legion of Wolpertingers!
34
+ To leave now would mean *code dismemberment and certain death*.
35
+
36
+ Behold, the horror!
37
+
38
+ .Wolpertinger, stuffed
39
+ [.left.thumb]
40
+ image::wolpertinger.jpg[Wolpertinger,width=100%,scaledwidth=55%]
41
+
42
+ You may not be familiar with these {wolper-uri}[ravenous beasts].
43
+ Trust us, they'll eat your shorts and suck loops from your code.
44
+ In light of this danger, we've searched high and wide for the security crew's defensive operations manual.
45
+ We can't find it and the DefOps{empty}footnote:[a portmanteau of “defensive” and “operations”] werewolves haven't returned from their rendezvous at Bier Central.
46
+ They've either eaten each other or fallen victim to the Wolpertingers roaming the streets of Antwerp.
47
+ Quick, hit kbd:[Ctrl,Alt,Backspace] or select menu:File[Quit] and let's bail out of here!
48
+
49
+ WARNING: Working with werewolves leads to howling and trying to train aggressive regular expressions with Pavlovian reinforcement.
50
+
51
+ _Weak light from the hallway trickled across the theater, chased by a distant scream._
52
+
53
+ === Rendezvous Point
54
+
55
+ Come on, _Bier Central_.
56
+ Did you have to ask?
57
+ If you beat me there, I'll take a http://www.sintbernardus.be/stbernardusabt12.php?l=en[St. Bernardus Abt 12].
58
+
59
+ [[ravages]]
60
+ == The Ravages of Writing
61
+
62
+ Crystalline XML tags relentlessly bombarded the theater.
63
+
64
+ .XML tags
65
+ [source,xml]
66
+ ----
67
+ <author id="1">
68
+ <personname>
69
+ <firstname>Lazarus</firstname>
70
+ <surname>het Draeke</surname>
71
+ </personname>
72
+ </author>
73
+ ----
74
+
75
+ Despite the assault, we were still attempting to draft an example of a defensive operation.
76
+
77
+ .DefOps Plan
78
+ ====
79
+ Click btn:[Download Zip] to download the defensive operation plan bundle.
80
+
81
+ OMG!
82
+ Somebody please save us now!
83
+ I want my mum...and an extra-large double macchiato, please.
84
+ ====
85
+
86
+ Unfortunaly, Lazarus and I had both come to the conclusion that we weren't going to get out of this without corrupted hardrives if we didn't locate caffeine within the next few hours.
87
+
88
+ === A Recipe for Potion
89
+
90
+ This potion for a sample document contains the following ingredients, which are listed in a very random, chaotically nested order.
91
+
92
+ * all the headings
93
+ ** syntax highlighted source code
94
+ *** non-syntax highlighted source code or just a listing block
95
+ * quote block
96
+ ** verse block
97
+ *** table with some cell formatting
98
+ **** sequential paragraphs
99
+ ***** admonition (at least one)
100
+ *** bullet list with nesting
101
+ ** numbered list with nesting
102
+ ** definition list
103
+ *** sidebar
104
+ * example block
105
+ ** block image (no inline images)
106
+ *** inline formatting in a paragraph
107
+ **** two fresh Burdockian leaves
108
+ ***** They must be harvested by the light of the teal moons.
109
+
110
+ Got square?
111
+
112
+ [square]
113
+ * one
114
+ * two
115
+ * three
116
+
117
+ ==== Searching for Burdockian
118
+
119
+ .Steps for finding and preparing Burdockian leaves
120
+ . Locate dusty botany
121
+ .. Sneeze
122
+ ... Sneeze some more
123
+ . Find section on Burdockian
124
+ .. Review its characteristics
125
+ ... Take a picture of the diagram of its leaves
126
+ .... Don't rip out the picture like a troglodyte
127
+ ..... Don't do it, I'm watching you
128
+ . Put on your hiking boots
129
+ . Freeze your butt off on the side of a mountain at midnight
130
+ .. By the way, you can't see toes by the light of the teal moons.
131
+
132
+ Let's start counting from 10.
133
+
134
+ [start=10]
135
+ . arabic (2)
136
+ .. loweralpha (a)
137
+ ... lowerroman (i)
138
+ ... lowerroman (ii)
139
+ ... lowerroman (iii)
140
+ ... lowerroman (iv)
141
+ .... upperalpha (A)
142
+ . arabic (2)
143
+
144
+ ===== Are You Still Here?
145
+
146
+ .Move, move, move!
147
+ [CAUTION]
148
+ ====
149
+ The Wolpertingers can smell your procrastination.
150
+ It's not their fault you can't find your boots.
151
+ ====
152
+
153
+ ====== Sigh...
154
+
155
+ TIP: Your boots are in your closet.
156
+
157
+ == Dawn on the Plateau
158
+
159
+ Lazarus was hanging from the bottom limb of a Burdockian tree, licking the bark.
160
+
161
+ [quote, Mark Tobey]
162
+ On pavements and the bark of trees I have found whole worlds.
163
+
164
+ ``If there are whole worlds on that bark, he just swallowed them.'' Kizmet replied.
165
+
166
+ [verse,The documentation attorneys]
167
+ ____
168
+ No bark was harmed in the making of this potion.
169
+ We're not so sure about a couple ants though.
170
+
171
+ Nor those worlds...
172
+
173
+ Crap, I smell an injunction.
174
+ ____
175
+
176
+ We'd retrieved the leaves, but we'd obviously lost our minds in the process.
177
+
178
+ [verse]
179
+ Roses are +++<span style="color: #FF0000">red</span>+++.
180
+ Violets are +++<span style="color: #0000FF">blue</span>+++__-ish__.
181
+
182
+ == Words Seasoned with Power
183
+
184
+ _To tame_ the wild wolpertingers we needed to build a *charm*.
185
+ But **u**ltimate victory could only be won if we divined the *_true name_* of the __war__lock.
186
+
187
+ ``What kind of charm?'' Lazarus asked. ``An odoriferous one or a mineral one?''
188
+ Kizmet shrugged. ``The note from Olaf's desk says `wormwood and licorice,' but these could be normal groceries for werewolves.''
189
+
190
+ ``Well the H~2~O written on the security whiteboard could be part of a shopping list, but I don't think the local bodega also sells e = mc^2^.'' Lazarus replied.
191
+
192
+ ``Wait!'' Indigo plucked a small vial from her desk's top drawer and held it toward us.
193
+ The vial's label read `+e = mc^2^+ +*_the scent of science_*+ +_smells like a genius_+'.
194
+
195
+ === Can I Get Some +Code+?
196
+
197
+ [%hardbreaks]
198
+ Sure.
199
+ Have a listing block.
200
+
201
+ ----
202
+ This is an example of a listing block.
203
+ The content inside is rendered as <pre> text.
204
+ ----
205
+
206
+ But I'm not giving you any highlighting shazam just yet.
207
+
208
+ .What is a listing block?
209
+ ****
210
+ Like literal blocks, the content in listing blocks is displayed exactly as you entered it.
211
+ Listing block content is rendered as +<pre>+ text.
212
+
213
+ The +listing+ style is applied to an element, such as a paragraph, by setting the +listing+ attribute on that element.
214
+ ****
215
+
216
+ Let's get our highlighting on!
217
+
218
+ <<<
219
+
220
+ Install Prawn:
221
+
222
+ $ gem install prawn
223
+
224
+ Then create your first PDF document in Ruby!
225
+
226
+ .Generates a basic PDF document using Prawn
227
+ ```ruby
228
+ require 'prawn' # <1>
229
+
230
+ Prawn::Document.generate 'output.pdf' do # <3>
231
+ text 'Hello, World!' # <2>
232
+ end
233
+ ```
234
+ <1> Imports Prawn library
235
+ <2> Adds text “Hello, World!” to first page
236
+ <3> Writes PDF to [file]_output.pdf_ after executing all statements
237
+
238
+ How about some source code that styles code? So meta!
239
+
240
+ ```css
241
+ code {
242
+ padding: 2px 4px;
243
+ font-size: 90%;
244
+ color: #c7254e;
245
+ white-space: nowrap !important;
246
+ background-color: #f9f2f4;
247
+ border-radius: 4px;
248
+ }
249
+ ```
250
+
251
+ Where could we go without some Java?
252
+
253
+ ```java
254
+ package org.javaee7.cdi.events;
255
+
256
+ import javax.enterprise.context.SessionScoped;
257
+ import javax.enterprise.event.Observes;
258
+ import java.io.Serializable;
259
+
260
+ /**
261
+ * @author The Duke
262
+ */
263
+ @SessionScoped
264
+ public class GreetingReceiver implements EventReceiver, Serializable {
265
+ private String greet = "Willkommen";
266
+
267
+ void receive(@Observes String greet) {
268
+ this.greet = greet;
269
+ }
270
+
271
+ @Override
272
+ public String getGreet() {
273
+ return greet;
274
+ }
275
+ }
276
+ ```
277
+
278
+ We already showed you an XML example in <<ravages>>.
279
+
280
+ I'll trade you a little table for some of that bark.
281
+
282
+ [cols=3,frame=topbot,grid=rows]
283
+ |===
284
+ |Name of Column 1 |Name of Column 2 |Name of Column 3
285
+
286
+ ^m|Prefix the +{vbar}+ with +{caret}+ to center content horizontally
287
+ .<|Prefix the +{vbar}+ with a +.+ and +<+ to align the content to the top of the cell
288
+ >|Prefix the +{vbar}+ with +>+ to align the content to the right horizontally
289
+
290
+ 3+^.^e|This content spans three columns (+3{plus}+) and is centered horizontally (+{caret}+) and vertically (+.{caret}+) within the cell.
291
+ |===
292
+
293
+ Wait.
294
+ What?
295
+ Where is this story going?
296
+
297
+ +<span>+:: an html tag that makes me crazy
298
+
299
+ align:: something I never get going in the right direction.
300
+ Also has to do with my poor verbal communication skills
301
+
302
+ float::
303
+ style::
304
+ don't make me laugh
305
+
306
+ Does anyone have the time?
307
+
308
+ Tg lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua.
309
+ Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat.
310
+ Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur.
311
+ Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborumj.
312
+
313
+ == Keeping It Together
314
+
315
+ On this page we have nested ``keep together'' logic.
316
+ The combined block will be shifted to the next page if there isn't room available on this one.
317
+
318
+ [verse]
319
+ First,
320
+ we
321
+ need
322
+ to
323
+ waste
324
+ several
325
+ lines
326
+ using
327
+ a
328
+ verse
329
+ to
330
+ push
331
+ it
332
+ to
333
+ the
334
+ breaking
335
+ point.
336
+
337
+ [NOTE]
338
+ .What happens if there is both a field and a method with the same name?
339
+ ====
340
+ Back to the previous example, suppose that we have both a field and a method with the same name, as in:
341
+
342
+ .Java class with a field and method that share the same name
343
+ [source,java]
344
+ ----
345
+ public class Foo {
346
+ public String bar;
347
+
348
+ public String bar() {
349
+ return bar;
350
+ }
351
+ }
352
+ ----
353
+
354
+ *Golo resolves methods first, fields last.*
355
+ Hence, the following Golo code will resolve the +bar()+ method, not the +bar+ field:
356
+
357
+ .Golo picks the method over the field with the same name
358
+ ----
359
+ let foo = Foo()
360
+
361
+ # Write the field
362
+ foo: bar("baz")
363
+
364
+ # Calls the bar() method
365
+ println(foo: bar())
366
+ ----
367
+ ====
368
+
369
+ <<<
370
+
371
+ Here's a preview of how each heading level is rendered.
372
+
373
+ [discrete]
374
+ = Heading 1 (Level 0)
375
+
376
+ filler content
377
+
378
+ [discrete]
379
+ == Heading 2 (Level 1)
380
+
381
+ filler content
382
+
383
+ [discrete]
384
+ === Heading 3 (Level 2)
385
+
386
+ filler content
387
+
388
+ [discrete]
389
+ ==== Heading 4 (Level 3)
390
+
391
+ filler content
392
+
393
+ [discrete]
394
+ ===== Heading 5 (Level 4)
395
+
396
+ filler content
397
+
398
+ [discrete]
399
+ ====== Heading 6 (Level 5)
400
+
401
+ filler content
402
+
403
+ ---
404
+
405
+ --
406
+ Here's some content inside an open block.
407
+ --
408
+
409
+ <<<
410
+
411
+ == Credits
412
+
413
+ .Brought to you by OpenDevise
414
+ [%header,cols="1,1s,1",grid=rows,frame=topbot]
415
+ |===
416
+ |Name
417
+ |Title
418
+ |Alias
419
+
420
+ |Sarah White
421
+ |President
422
+ |http://twitter.com/carbonfray[@carbonfray]
423
+
424
+ |Dan Allen
425
+ |Vice President
426
+ |http://twitter.com/mojavelinux[@mojavelinux]
427
+
428
+ 3+^.e|Powered by Open Source
429
+ |===