@@ -92,7 +92,7 @@ struct PublicSettingsVisitor {
92
92
{
93
93
// If the path is not absolute, we need to expand it
94
94
if (!files::isAbsolute (value)) {
95
- auto exp = getBaseDir (value, dirs, useDefault, opts);
95
+ auto exp = getBaseDir (value, dirs, self, useDefault, opts);
96
96
if (!exp )
97
97
{
98
98
MRDOCS_TRY (value, files::makeAbsolute (value));
@@ -124,7 +124,7 @@ struct PublicSettingsVisitor {
124
124
for (auto & v : value) {
125
125
if (!files::isAbsolute (v))
126
126
{
127
- auto exp = getBaseDir (v, dirs, useDefault, opts);
127
+ auto exp = getBaseDir (v, dirs, self, useDefault, opts);
128
128
if (!exp )
129
129
{
130
130
MRDOCS_TRY (v, files::makeAbsolute (v));
@@ -187,7 +187,8 @@ struct PublicSettingsVisitor {
187
187
Expected<std::string_view>
188
188
getBaseDir (
189
189
std::string_view referenceDirKey,
190
- ReferenceDirectories const & dirs)
190
+ ReferenceDirectories const & dirs,
191
+ PublicSettings const & settings)
191
192
{
192
193
if (referenceDirKey == " config-dir" ) {
193
194
return dirs.configDir ;
@@ -198,6 +199,10 @@ struct PublicSettingsVisitor {
198
199
else if (referenceDirKey == " mrdocs-root" ) {
199
200
return dirs.mrdocsRoot ;
200
201
}
202
+ else if (referenceDirKey == " output" ) {
203
+ MRDOCS_ASSERT (!settings.output .empty ());
204
+ return settings.output ;
205
+ }
201
206
return Unexpected (formatError (" unknown relative-to value: \" {}\" " , referenceDirKey));
202
207
}
203
208
@@ -218,6 +223,7 @@ struct PublicSettingsVisitor {
218
223
getBaseDir (
219
224
std::string& value,
220
225
ReferenceDirectories const & dirs,
226
+ PublicSettings const & settings,
221
227
bool useDefault,
222
228
PublicSettings::OptionProperties const & opts)
223
229
{
@@ -226,7 +232,7 @@ struct PublicSettingsVisitor {
226
232
// as the base path
227
233
std::string_view relativeTo = opts.relativeto ;
228
234
relativeTo = trimBaseDirReference (relativeTo);
229
- return getBaseDir (relativeTo, dirs);
235
+ return getBaseDir (relativeTo, dirs, settings );
230
236
}
231
237
232
238
// If we used the default value, the base dir comes from
@@ -237,7 +243,7 @@ struct PublicSettingsVisitor {
237
243
referenceDirKey = referenceDirKey.substr (0 , pos);
238
244
}
239
245
referenceDirKey = trimBaseDirReference (referenceDirKey);
240
- MRDOCS_TRY (std::string_view baseDir, getBaseDir (referenceDirKey, dirs));
246
+ MRDOCS_TRY (std::string_view baseDir, getBaseDir (referenceDirKey, dirs, settings ));
241
247
if (pos != std::string::npos) {
242
248
value = value.substr (pos + 1 );
243
249
}
0 commit comments