# `Expresso.Copies`
[🔗](https://github.com/rellen/expresso/blob/main/lib/expresso/copies.ex#L1)

Gives each copy of an element in a document its own number

The document holds one copy of each slide for the present view and one for
each page of the handout view. A browser resolves a reference such as
`url(#fill)` to the first element of the document with that `id`. Thus a
diagram and the head of an arrow need different ids in each copy, and
`next/0` returns the number for the next copy.

`Expresso.Renderer.render/1` makes a document in `number/1`, which counts
from 1. Thus the same deck gives the same document in each VM, and the
binary of Burrito and `Expresso.main/2` write the same HTML.

# `next`

```elixir
@spec next() :: pos_integer()
```

Return the number of the next copy

Outside `number/1`, the count is for the process. Each number is then
unique in the process, but the first number depends on the renders before.

# `number`

```elixir
@spec number((-&gt; result)) :: result when result: var
```

Run a function, and number the copies in it from 1

After the function, the process gets its count from before again, also
when the function raises an exception.

    iex> Expresso.Copies.number(fn -> {Expresso.Copies.next(), Expresso.Copies.next()} end)
    {1, 2}

---

*Consult [api-reference.md](api-reference.md) for complete listing*
