1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
use eco_format;
use Spanned;
use crate;
use crateEngine;
use crate;
use crate;
/// Reads structured data from a TOML file.
///
/// The file must contain a valid TOML table. The TOML values will be converted
/// into corresponding Typst values as listed in the [table below](#conversion).
///
/// The function returns a dictionary representing the TOML table.
///
/// The TOML file in the example consists of a table with the keys `title`,
/// `version`, and `authors`.
///
/// # Example
/// ```example
/// #let details = toml("details.toml")
///
/// Title: #details.title \
/// Version: #details.version \
/// Authors: #(details.authors
/// .join(", ", last: " and "))
/// ```
///
/// # Conversion details { #conversion }
///
/// First of all, TOML documents are tables. Other values must be put in a table
/// to be encoded or decoded.
///
/// | TOML value | Converted into Typst |
/// | ---------- | -------------------- |
/// | string | [`str`] |
/// | integer | [`int`] |
/// | float | [`float`] |
/// | boolean | [`bool`] |
/// | datetime | [`datetime`] |
/// | array | [`array`] |
/// | table | [`dictionary`] |
///
/// | Typst value | Converted into TOML |
/// | ------------------------------------- | ------------------------------ |
/// | types that can be converted from TOML | corresponding TOML value |
/// | `{none}` | ignored |
/// | [`bytes`] | string via [`repr`] |
/// | [`symbol`] | string |
/// | [`content`] | a table describing the content |
/// | other types ([`length`], etc.) | string via [`repr`] |
///
/// ## Notes
/// - Be aware that TOML integers larger than 2<sup>63</sup>-1 or smaller
/// than -2<sup>63</sup> cannot be represented losslessly in Typst, and an
/// error will be thrown according to the
/// [specification](https://toml.io/en/v1.0.0#integer).
///
/// - Bytes are not encoded as TOML arrays for performance and readability
/// reasons. Consider using [`cbor.encode`] for binary data.
///
/// - The `repr` function is [for debugging purposes only]($repr/#debugging-only),
/// and its output is not guaranteed to be stable across Typst versions.
/// Format the user-facing TOML error message.