// Some comment here. = AsciiDoc reader test John MacFarlane ; John Doe v1.0, 2025-11-24 :custom: Foo bar \ baz :flag: :stem: latexmath [#firsty] == Inline markup === Characters and escapes Dog's has a curved apostrophe, but dog\'s does not. An escaped symbol: \*star\*. Character references: ä ⋠ === Line breaks This is a hard + break. Or set it for a whole paragraph [%hardbreaks] These are all hard breaks. === Autolinks http://example.com/foobar?a=333&b=no%20body, me@example.com , === Cross-reference See <> See <> Go to <> === Anchors An [[anch]]inline anchor. [[[bibanchor]]Doe, John. A Book. === Inline macros kbd:[F11] kbd:[Ctrl+Shift+F] menu:File[Save] menu:Reader[Markdown > Pandoc] btn:[Cancel] icon:heart[2x,role=red] anchor:tiger pass:[*bold*] link:downloads/report.pdf[Get Report] link:tools.html#editors[] link:file:///home/username[Your files] Tricky cases: link:pass:[My Documents/report.pdf][Get Report] link:My Documents/report.pdf[Get Report] link:My%20Documents/report.pdf[Get Report] link:++https://example.org/now_this__link_works.html++[] mailto:join@discuss.example.org[Subscribe] mailto:join@discuss.example.org["Click, subscribe, and participate!",role=mail] xref:link-macro-attributes[use attributes within the link macro] image::sunset.jpg[Sunset] image::name.png[] image::sunset.jpg[Sunset,300,400] image::sunset.jpg[alt=Sunset,width=300,height=400] [latexmath] ++++ e=mc^2 ++++ [asciimath] ++++ sin n / 3 ++++ [stem] ++++ e^i ++++ === Attribute substitutions {custom} {nonexistent} Built in: x{blank}y{empty}z{sp}a{nbsp}b{zwsp}c{apos}d{lsquo} === Bold and italic Constrained: *this is bold _and italic_*. Unconstrained: wild**content__with italic__stuff**. === Monospace `simple` `complex *with bold* text and a link:foo.html[]` unconstrained``wwow``okay === Span and inline attributes [.red]#Bonjour *monsieur*# Un[.red]##constrained##content With #no attribute# it's highlighted. === Sub and superscript H~2~O H~a{sp}b~O Not subscript: H~a b~O. H^2&O H^a{sp}b^O Not subscript: H^a b^O. === Passthrough Here the special characters just come through as literal: +*test*+ xx++*test*++xx But here they are passed through: xx+++*test*+++xx === Quoted "`double quoted`" '`single quoted`' === Footnotes Doublefootnote:[The double hail-and-rainbow level makes my toes tingle.] A bold statement!footnote:disclaimer[Opinions are my own.] Another outrageous statement.footnote:disclaimer[] == Block markup === Sections ==== Another level ===== Level 5 #### Markdown style ##### Level 5 === Discrete heading [discrete] ==== A discrete heading, not a section === Paragraph This is a paragraph whose source fits on two lines. {.This is my title} A paragraph with a title. === Example block .Optional title [example] This is an example of an example block. .Optional title ==== Paragraph *one*. Paragraph *two*. ==== === Admonition Simple form: WARNING: This is very dangerous. Don't do it unless you understand the risks. [IMPORTANT] .Title of the admonition ==== Remember: . Don't do this. . And don't do that. ==== === Sidebar [sidebar] A simple sidebar. .Optional Title *with strong emphasis* **** Here is a sidebar. TIP: It can contain any type of content. **** === Literal block Short indented code: $ ls -a $ cat /foo/bar/baz \ /bi/bim/bop [literal] This is a literal block too. .... Fenced $+ *a* literal **** not a sidebar **** .... === Listing [source,ruby] ---- require 'sinatra' get '/hi' do "Hello World!" end ---- Implied: [source,ruby] ---- require 'sinatra' get '/hi' do "Hello World!" end ---- [,ruby] ---- include::asciidoc-reader-include.rb[] ---- [#hello.haskell] ---- putStrLn $ unwords ["Hello", "world"] ---- Line numbering: [%linenums,ruby] ---- puts 1 puts 2 puts 3 ---- ---- This doesn't have a language. +="hi" ---- And with a callout list: [source,ruby] ---- require 'sinatra' <1> get '/hi' do <2> <3> "Hello World!" end ---- <1> Library import <2> URL mapping <3> Response block Markdown-style fenced: ```ruby def foo return 5 end ``` === Verse [verse,Carl Sandburg, two lines from the poem Fog] The fog comes on little cat feet. [verse,Carl Sandburg,Fog] ____ The fog comes on little cat feet. It sits looking over harbor and city on silent haunches and then moves on. ____ === Collapsible Click here for more. [%collapsible%open] ==== This is collapsible. It can be hidden. ==== .Click me! [%collapsible] This paragraph is also collapsible. === Quote [quote,Captain James T. Kirk,Star Trek IV: The Voyage Home] Everybody remember where we parked. [quote,Monty Python and the Holy Grail] ____ Dennis: Come and see the violence inherent in the system. Help! Help! I'm being repressed. King Arthur: Bloody peasant! Dennis: Oh, what a giveaway! Did you hear that? Did you hear that, eh? That's what I'm on about! Did you see him repressing me? You saw him, Didn't you? ____ [quote.movie#roads,Dr. Emmett Brown] ____ Roads? Where we're going, we don't need roads. ____ === Pass ++++

pass through

++++ === Open block .A title. [key="a value"] -- Any content can go here: . one . two -- === Anchor [[goals]] * one * two === Breaks Asciidoc thematic break: ''' Markdown style: --- - - - *** * * * Page breaks: <<< [%always] <<< === List * Edgar Allan Poe * Sheri S. Tepper * Bill Bryson // titled .Kizmet's Favorite Authors * Edgar Allan Poe * Sheri S. Tepper * Bill Bryson // hyphen - Edgar Allan Poe - Sheri S. Tepper - Bill Bryson . Nested list * West wood maze ** Maze heart *** Reflection pool ** Secret exit * Level 1 list item ** Level 2 list item *** Level 3 list item **** Level 4 list item ***** Level 5 list item ****** etc. * Level 1 list item // attributes [square] * one * two * three // ordered with actual numbers 1. Protons 2. Electrons 3. Neutrons // ordered with . . Protons . Electrons . Neutrons Start with 4: 4. Step four 5. Step five 6. Step six or [start=4] . Step four . Step five . Step six Reversed: [%reversed] .Parts of an atom . Protons . Electrons . Neutrons Nested . Step 1 . Step 2 .. Step 2a .. Step 2b . Step 3 Mixed nested . Linux * Fedora * Ubuntu * Slackware . BSD * FreeBSD * NetBSD With spacing . Linux * Fedora * Ubuntu * Slackware . BSD * FreeBSD * NetBSD With number styles [lowerroman,start=5] . Five . Six [loweralpha] .. a .. b .. c . Seven Checklist * [*] checked * [x] also checked * [ ] not checked * normal list item Separate lists with block attribute * Apples * Oranges [] . Wash . Slice Multiline items * Blah blah. Blah blah. * The document header in AsciiDoc is optional. If present, it must start with a document title. * Optional author and revision information lines immediately follow the document title. * The document header must be separated from the remainder of the document by one or more empty lines and it cannot contain empty lines. Complex item * The header in AsciiDoc must start with a document title. + ---- = Document Title ---- + Keep in mind that the header is optional. * Optional author and revision information lines immediately follow the document title. + ---- = Document Title Doc Writer v1.0, 2022-01-01 ---- * Second item Empty principle element: . {empty} + ---- test ---- === Table ==== Simple with column specs [cols="3,2,3"] |=== |This content is placed in the first cell of column 1 |This line starts with a vertical bar so this content is placed in a new cell in column 2 |When the processor encounters a whitespace followed by a vertical bar it ends the previous cell and starts a new cell |=== ==== Repeated column in specs [cols="2*"] |=== >s|This cell's specifier indicates that this cell's content is right-aligned and bold. |The cell specifier on this cell hasn't been set explicitly, so the default properties are applied. |=== ==== Simple without column specs |=== |Column 1, header row |Column 2, header row |Cell in column 1, row 2 |Cell in column 2, row 2 |Cell in column 1, row 3 |Cell in column 2, row 3 |=== ==== With caption .My cool table. |=== |Column 1, header row |Column 2, header row |Cell in column 1, row 2 |Cell in column 2, row 2 |Cell in column 1, row 3 |Cell in column 2, row 3 |=== ==== No header By default the first line should turn into the header, but this can be disabled: [%noheader] |=== |Cell in column 1, row 1 |Cell in column 2, row 1 |Cell in column 1, row 2 |Cell in column 2, row 2 |=== And also explicitly enabled: [%header%footer%autowidth,cols=2*~] |=== |Cell A1 |Cell B1 |Cell A2 |Cell B2 |Cell A3 |Cell B3 |=== ==== Footer [%header%footer,cols="2,2,1"] |=== |Column 1, header row |Column 2, header row |Column 3, header row |Cell in column 1, row 2 |Cell in column 2, row 2 |Cell in column 3, row 2 |Column 1, footer row |Column 2, footer row |Column 3, footer row |=== or [options="footer"] |=== |Column 1, header row |Column 2, header row |Cell in column 1, row 2 |Cell in column 2, row 2 |Cell in column 1, row 3 |Cell in column 2, row 3 |Column 1, footer row |Column 2, footer row |=== ==== Alignment |=== |Column Name |Column Name 2+^|This cell spans two columns, and its content is horizontally centered because the cell specifier includes the `+^+` operator. 2*^|This content is duplicated in two adjacent columns. Its content is horizontally centered because the cell specifier includes the `+^+` operator. |=== ==== Multiple paragraphs in cells |=== |Single paragraph on row 1 |First paragraph on row 2 Second paragraph on row 2 |=== ==== Complex table |=== 2*>m|This content is duplicated across two columns. It is aligned right horizontally. And it is monospaced. .3+^.>s|This cell spans 3 rows. The content is centered horizontally, aligned to the bottom of the cell, and strong. e|This content is emphasized. .^l|This content is aligned to the top of the cell and literal. a| [source] puts "This is a source block!" |=== ==== Column styles [cols="m,m"] |=== |monospace | mono d|default | mono |=== ==== Block elements in cells |=== |Normal Style |AsciiDoc Style |This cell isn't prefixed with an `a`, so the processor doesn't interpret the following lines as an AsciiDoc list. * List item 1 * List item 2 * List item 3 a|This cell is prefixed with an `a`, so the processor interprets the following lines as an AsciiDoc list. * List item 1 * List item 2 * List item 3 |This cell isn't prefixed with an `a`, so the processor doesn't interpret the listing block delimiters or the `source` style. [source,python] ---- import os print ("%s" %(os.uname())) ---- a|This cell is prefixed with an `a`, so the listing block is processed and rendered according to the `source` style rules. [source,python] ---- import os print "%s" %(os.uname()) ---- |=== ==== Col and rowspan |=== |Column 1, header row |Column 2, header row | Column 3, header row 2.2+|This cell spans 2 cols and 2 rows |Cell in column 3, row 2 |Cell in column 3, row 3 3+|Cell in column 1-3, row 4 |=== ==== CSV table [%header,format=csv] |=== Artist,Track,Genre Baauer,Harlem Shake,Hip Hop The Lumineers,Ho Hey,Folk Rock |=== or ,=== Artist,Track,Genre Baauer,Harlem Shake,Hip Hop ,=== ==== DSV table [format=dsv,separator=;] |=== a;b;c d;e;f |=== or :=== Artist:Track:Genre Robyn:Indestructible:Dance :=== === Definition list CPU:: The brain of the computer. Hard drive:: Permanent storage for operating system and/or user files. Mixed Dairy:: * Milk * Eggs Bakery:: * Bread Produce:: * Bananas With spaces Dairy:: * Milk * Eggs Bakery:: * Bread Produce:: * Bananas Nested Operating Systems:: Linux::: . Fedora * Desktop . Ubuntu * Desktop * Server BSD::: . FreeBSD . NetBSD Cloud Providers:: PaaS::: . OpenShift . CloudBees IaaS::: . Amazon EC2 This just affects the output: [horizontal,labelwidth=25,itemwidth=75] CPU:: The brain of the computer. RAM:: Temporarily stores information the CPU uses during operation. Q&A list [qanda] What is the answer?:: This is the answer. Are cameras allowed?:: Are backpacks allowed?:: No. Ordered description list (with numbers) [ordered] &:: ampersand >:: greater than === Block macros image::sunset.jpg[Sunset,300,200] video::mymovie.mp4[] audio::mysong.mp3[] toc::[] include::asciidoc-reader-include.adoc[]