diagram

5 cases. Source: tests/diagram.json.

#1 canonical

Source

:::figure[How a request reaches a handler]{#fig-flow}
```ascii
  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+
```
:::

Rendered

How a request reaches a handler
How a request reaches a handler

Downgrade

```ascii
  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+
```

*How a request reaches a handler*

#2 a bare fence is an ordinary code block

Source

```ascii
  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+
```

Rendered

  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+

Downgrade

```ascii
  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+
```

#3 an unrecognized diagram language is not a diagnostic

Source

:::figure[The routing graph]
```dot
digraph { a -> b }
```
:::

Rendered

digraph { a -> b }
The routing graph

Downgrade

```dot
digraph { a -> b }
```

*The routing graph*

#4 an uncaptioned figure has nothing to draw with

Source

:::figure
```ascii
  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+
```
:::

Rendered

  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+

Downgrade

```ascii
  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+
```

#5 the language is the first word of the info string

Source

:::figure[Tagged fence]
```ascii linenos=false
  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+
```
:::

Rendered

Tagged fence
Tagged fence

Downgrade

```ascii linenos=false
  +-------+     +--------+
  | Start |---->| Finish |
  +-------+     +--------+
```

*Tagged fence*