This page is written as a tour of the Markdown features supported by xhtmlmd. Each section starts with the Markdown source, then shows the same source rendered.
### Project notes {#project-notes .section-title}
This paragraph uses *emphasis*, **strong emphasis**, `inline code`,
~~deleted text~~, ==highlighted text==, E=mc^2^, and H~2~O.
This paragraph uses emphasis, strong emphasis, inline code,
deleted text, highlighted text, E=mc2, and H2O.
All six heading levels are available; deeper levels suit finely nested material:
#### Milestones
##### Third quarter
###### Week one
[fast.ai](https://www.fast.ai/){.external rel="nofollow"} is a normal link
with attributes.
Bare links such as https://example.org/docs are linked automatically.
Angle links work too: <https://example.com/spec>.
{.thumbnail width="96" height="48"}
fast.ai is a normal link with attributes.
Bare links such as https://example.org/docs are linked automatically. Angle links work too: https://example.com/spec.
- Write the outline
- Check the examples
- Keep them short
- Keep them readable
1. Parse the Markdown
2. Render XHTML
3. Add a stylesheet
- [x] Tables
- [x] Footnotes
- [ ] Final polish
> A block quote can contain normal inline Markdown.
>
> - It can also contain lists.
> - This is useful for callouts and quoted notes.
A block quote can contain normal inline Markdown.
- It can also contain lists.
- This is useful for callouts and quoted notes.
| Feature | Status | Notes |
|:--------|:------:|------:|
| Tables | ready | aligned columns |
| Math | ready | brackets mode |
| HTML | ready | raw or markdown-enabled |
| Feature | Status | Notes |
|---|---|---|
| Tables | ready | aligned columns |
| Math | ready | brackets mode |
| HTML | ready | raw or markdown-enabled |
Grid tables allow block content, row and column spans, and a colwidths attribute with fixed and fractional tracks:
+---------------------+----------+
| Property | Earth |
+=============+=======+==========+
| | min | -89.2 °C |
| Temperature +-------+----------+
| 1961-1990 | mean | 14 °C |
+-------------+-------+----------+
{: colwidths="1.2in 1fr 2fr"}
| Property | Earth | |
|---|---|---|
| Temperature 1961-1990 | min | -89.2 °C |
| mean | 14 °C | |
Inline code uses backticks, as in `Options::default()`.
``` rust {#example-code .numberLines startFrom="10"}
fn main() {
println!("hello from xhtmlmd");
}
```
let indented_code = true;
Inline code uses backticks, as in Options::default().
fn main() {
println!("hello from xhtmlmd");
}
let indented_code = true;
Inline math uses TeX parentheses: \(a^2 + b^2 = c^2\).
Display math can use TeX brackets or double dollars:
\[
\int_0^1 x^2\,dx = \frac{1}{3}
\]
$$
E = mc^2
$$
Inline math uses TeX parentheses: a^2 + b^2 = c^2.
Display math can use TeX brackets or double dollars:
This paragraph gets attributes from the following block IAL.
{: #important-note .lead data-kind="sample"}
{:reusable: .note data-role="demo"}
This paragraph uses a named attribute list.
{: reusable #named-attribute-example}
Bracketed spans work too: [small but important]{.small .important}.
Code spans can have attributes: `render()`{.api-call}.
This paragraph gets attributes from the following block IAL.
This paragraph uses a named attribute list.
Bracketed spans work too: small but important.
Code spans can have attributes: render().
xhtmlmd
: A Markdown parser that renders XHTML fragments.
brackets math
: Math mode that recognizes `\(...\)`, `\[...\]`, and `$$...$$`.
on math
: Math mode that preserves TeX delimiters for client-side renderers.
fenced div
: A Pandoc-style block container opened with colons.
\(...\), \[...\], and $$...$$.A short note can point to a footnote.[^sample-note]
[^sample-note]: Footnotes can contain *inline Markdown* and links such as
<https://example.org/>.
A short note can point to a footnote.1
The HTML5 standard changed the web.
*[HTML5]: HyperText Markup Language, version 5
The HTML5 standard changed the web.
::: {#tip-box .callout .tip kind="tip"}
### A fenced div
Fenced divs are useful for notes, cards, columns, and other styled sections.
They can contain normal **Markdown**.
:::
Fenced divs are useful for notes, cards, columns, and other styled sections. They can contain normal Markdown.
<section class="raw-panel">
<h3>Raw HTML section</h3>
<p>Raw HTML can stay open across blank lines until its matching close tag.</p>
</section>
Raw HTML can stay open across blank lines until its matching close tag.
<div markdown="1" class="markdown-panel">
### Markdown parsed inside HTML
- **Bold list item**
- `Code span`
- Inline math: \(x + y\)
</div>
Code spanA paragraph that is exactly one image becomes a figure, with the alt text as its
caption. A : caption line glued directly under a table captions the table, and
its trailing attribute list applies to the table:
{#fig-diagram}
| Stage | Days |
|:------|-----:|
| Ship | 3 |
| Clear | 5 |
: Delivery stages {#tbl-stages}
| Stage | Days |
|---|---|
| Ship | 3 |
| Clear | 5 |
Bracketed @ references point at ids and render per backend (the docx exporter
makes live REF fields). Sections here get ids automatically from their text:
### Payment terms {#sec-payment}
#### Late fees {#sec-late}
Interest accrues per [@sec-late], within [-@sec-payment], as set out in
[Clause @sec-late]. The terms in [@sec-payment; @sec-late] survive termination.
See also [@fig-diagram] and [-@tbl-stages], or the mixed pair
[@fig-diagram; @tbl-stages]. Variants: the [-@sec-late]{ref=text} clause, on
page [-@sec-late]{ref=page}, paragraph [-@sec-late]{ref=leaf} of
[-@sec-late]{ref=rel}.
Interest accrues per , within , as set out in Clause. The terms in survive termination. See also and , or the mixed pair . Variants: the clause, on page , paragraph of .
An inline footnote needs no separate definition, and with smart=True the
punctuation below renders as en and em dashes, an ellipsis, and curled quotes:
A quick aside.^[Inline footnotes hold arbitrary *inline* Markdown.]
"Well" --- pages 12--14, or "maybe" more...
A quick aside.2
"Well" --- pages 12--14, or "maybe" more...
A fenced block whose info string is {=name}, or inline code followed by
{=name}, passes through for the converter that understands that format;
everyone else drops it:
```{=docx}
<w:p><w:r><w:br w:type="page"/></w:r></w:p>
```
Footnotes can contain inline Markdown and links such as https://example.org/.
↩Inline footnotes hold arbitrary inline Markdown.
↩