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
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
use eco_format;
use Spanned;
use crate;
use crateEngine;
use crate;
use crate;
/// Reads structured data from a YAML file.
///
/// The file must contain a valid YAML object or array. The YAML values will be
/// converted into corresponding Typst values as listed in the
/// @yaml:conversion[table below].
///
/// The function returns a dictionary, an array or, depending on the YAML file,
/// another YAML data type.
///
/// The YAML files in the example contain objects with authors as keys, each
/// with a sequence of their own submapping with the keys "title" and
/// "published".
///
/// = Example <example>
/// ```example
/// #let bookshelf(contents) = {
/// for (author, works) in contents {
/// author
/// for work in works [
/// - #work.title (#work.published)
/// ]
/// }
/// }
///
/// #bookshelf(
/// yaml("scifi-authors.yaml")
/// )
/// ```
///
/// = #short-or-long[Conversion][Conversion details] <conversion>
/// #docs-table(
/// table.header[YAML value][Converted into Typst],
///
/// [null-values (`null`, `~` or empty ` `)],
/// [`{none}`],
///
/// [boolean],
/// [@bool],
///
/// [number],
/// [@float or @int],
///
/// [string],
/// [@str],
///
/// [sequence],
/// [@array],
///
/// [mapping],
/// [@dictionary],
/// )
///
/// #docs-table(
/// table.header[Typst value][Converted into YAML],
///
/// [types that can be converted from YAML],
/// [corresponding YAML value],
///
/// [@bytes],
/// [string via @repr],
///
/// [@symbol],
/// [string],
///
/// [@content],
/// [a mapping describing the content],
///
/// [other types (@length, etc.)],
/// [string via @repr],
/// )
///
/// == Notes <notes>
/// - In most cases, YAML numbers will be converted to floats or integers
/// depending on whether they are whole numbers. However, be aware that
/// integers larger than 2#super[63]-1 or smaller than -2#super[63] will be
/// converted to floating-point numbers, which may result in an approximative
/// value.
///
/// - Custom YAML tags are ignored, though the loaded value will still be
/// present.
///
/// - Bytes are not encoded as YAML sequences for performance and readability
/// reasons. Consider using @cbor.encode for binary data.
///
/// - The `repr` function is @repr:debugging-only[for debugging purposes only],
/// and its output is not guaranteed to be stable across Typst versions.
/// Format the user-facing YAML error message.