git.iko.soy/typeable/pandoc
on master help sign in
Default files: combine with prior values when appropriate.

Certain command-line arguments can be repeated: `--metadata-file`, `--css`, `--include-in-header`, `--include-before-body`, `--include-after-body`, `--variable`, `--metadata`, `--syntax-definition`. In these cases, values specified in default files should be added to the list rather than replacing values specified earlier on the command line (perhaps in other default files). So, for example, if one does pandoc --variable foo=3 --defaults d1 --defaults d2 and `d1` sets the variable `bar` and `d2` sets `baz`, all three variables will be set. Closes #5894.

commitec043e0d97fdc864044f7c9e7efaa1b4c733bafb authorJohn MacFarlane <jgm@berkeley.edu> dateWed 13 Nov 2019, 16:51 (7 years ago) parent28a1f50
2 files changed+54−21
MANUAL.txt+9 src/Text/Pandoc/App/Opt.hs+45−21
MANUAL.txt+9
@@ -1591,6 +1591,15 @@ of the user data directory, and then invoke these defaults
15911591from any directory using `pandoc --defaults letter`
15921592or `pandoc -dletter`.
15931593
1594+When multiple defaults are used, their contents will be combined.
1595+
1596+Note that, where command-line arguments may be repeated
1597+(`--metadata-file`, `--css`, `--include-in-header`,
1598+`--include-before-body`, `--include-after-body`, `--variable`,
1599+`--metadata`, `--syntax-definition`), the values specified on
1600+the command line will combine with values specified in the
1601+defaults file, rather than replacing them.
1602+
15941603# Templates
15951604
15961605When the `-s/--standalone` option is used, pandoc uses a template to
src/Text/Pandoc/App/Opt.hs+45−21
@@ -179,25 +179,37 @@ doOpt (k',v) = do
179179 "template" ->
180180 parseYAML v >>= \x -> return (\o -> o{ optTemplate = unpack <$> x })
181181 "variables" ->
182− parseYAML v >>= \x -> return (\o -> o{ optVariables = x })
182+ parseYAML v >>= \x -> return (\o -> o{ optVariables =
183+ optVariables o <> x })
183184 "metadata" ->
184− parseYAML v >>= \x -> return (\o -> o{ optMetadata = contextToMeta x })
185+ parseYAML v >>= \x -> return (\o -> o{ optMetadata = optMetadata o <>
186+ contextToMeta x })
185187 "metadata-files" ->
186188 (parseYAML v >>= \x ->
187− return (\o -> o{ optMetadataFiles = map unpack x }))
189+ return (\o -> o{ optMetadataFiles =
190+ optMetadataFiles o <>
191+ map unpack x }))
188192 "metadata-file" -> -- allow either a list or a single value
189− (parseYAML v >>= \x -> return (\o -> o{ optMetadataFiles = map unpack x }))
193+ (parseYAML v >>= \x -> return (\o -> o{ optMetadataFiles =
194+ optMetadataFiles o <>
195+ map unpack x }))
190196 <|>
191197 (parseYAML v >>= \x ->
192− return (\o -> o{ optMetadataFiles = [unpack x] }))
198+ return (\o -> o{ optMetadataFiles =
199+ optMetadataFiles o <>[unpack x] }))
193200 "output-file" ->
194201 parseYAML v >>= \x -> return (\o -> o{ optOutputFile = unpack <$> x })
195202 "input-files" ->
196− parseYAML v >>= \x -> return (\o -> o{ optInputFiles = map unpack x })
203+ parseYAML v >>= \x -> return (\o -> o{ optInputFiles = optInputFiles o <>
204+ map unpack x })
197205 "input-file" -> -- allow either a list or a single value
198− (parseYAML v >>= \x -> return (\o -> o{ optInputFiles = map unpack x }))
206+ (parseYAML v >>= \x -> return (\o -> o{ optInputFiles =
207+ optInputFiles o <>
208+ map unpack x }))
199209 <|>
200− (parseYAML v >>= \x -> return (\o -> o{ optInputFiles = [unpack x] }))
210+ (parseYAML v >>= \x -> return (\o -> o{ optInputFiles =
211+ optInputFiles o <>
212+ [unpack x] }))
201213 "number-sections" ->
202214 parseYAML v >>= \x -> return (\o -> o{ optNumberSections = x })
203215 "number-offset" ->
@@ -214,13 +226,16 @@ doOpt (k',v) = do
214226 parseYAML v >>= \x -> return (\o -> o{ optHighlightStyle = x })
215227 "syntax-definition" ->
216228 (parseYAML v >>= \x ->
217− return (\o -> o{ optSyntaxDefinitions = map unpack x }))
229+ return (\o -> o{ optSyntaxDefinitions =
230+ optSyntaxDefinitions o <> map unpack x }))
218231 <|>
219232 (parseYAML v >>= \x ->
220− return (\o -> o{ optSyntaxDefinitions = [unpack x] }))
233+ return (\o -> o{ optSyntaxDefinitions =
234+ optSyntaxDefinitions o <> [unpack x] }))
221235 "syntax-definitions" ->
222236 parseYAML v >>= \x ->
223− return (\o -> o{ optSyntaxDefinitions = map unpack x })
237+ return (\o -> o{ optSyntaxDefinitions =
238+ optSyntaxDefinitions o <> map unpack x })
224239 "top-level-division" ->
225240 parseYAML v >>= \x -> return (\o -> o{ optTopLevelDivision = x })
226241 "html-math-method" ->
@@ -238,7 +253,8 @@ doOpt (k',v) = do
238253 parseYAML v >>= \x ->
239254 return (\o -> o{ optEpubMetadata = unpack <$> x })
240255 "epub-fonts" ->
241− parseYAML v >>= \x -> return (\o -> o{ optEpubFonts = map unpack x })
256+ parseYAML v >>= \x -> return (\o -> o{ optEpubFonts = optEpubFonts o <>
257+ map unpack x })
242258 "epub-chapter-level" ->
243259 parseYAML v >>= \x -> return (\o -> o{ optEpubChapterLevel = x })
244260 "epub-cover-image" ->
@@ -269,7 +285,7 @@ doOpt (k',v) = do
269285 "columns" ->
270286 parseYAML v >>= \x -> return (\o -> o{ optColumns = x })
271287 "filters" ->
272− parseYAML v >>= \x -> return (\o -> o{ optFilters = x })
288+ parseYAML v >>= \x -> return (\o -> o{ optFilters = optFilters o <> x })
273289 "email-obfuscation" ->
274290 parseYAML v >>= \x -> return (\o -> o{ optEmailObfuscation = x })
275291 "identifier-prefix" ->
@@ -316,29 +332,37 @@ doOpt (k',v) = do
316332 "title-prefix" ->
317333 parseYAML v >>= \x -> return (\o -> o{ optTitlePrefix = x })
318334 "css" ->
319− (parseYAML v >>= \x -> return (\o -> o{ optCss = map unpack x }))
335+ (parseYAML v >>= \x -> return (\o -> o{ optCss = optCss o <>
336+ map unpack x }))
320337 <|>
321− (parseYAML v >>= \x -> return (\o -> o{ optCss = [unpack x] }))
338+ (parseYAML v >>= \x -> return (\o -> o{ optCss = optCss o <>
339+ [unpack x] }))
322340 "ipynb-output" ->
323341 parseYAML v >>= \x -> return (\o -> o{ optIpynbOutput = x })
324342 "include-before-body" ->
325343 (parseYAML v >>= \x ->
326− return (\o -> o{ optIncludeBeforeBody = map unpack x }))
344+ return (\o -> o{ optIncludeBeforeBody =
345+ optIncludeBeforeBody o <> map unpack x }))
327346 <|>
328347 (parseYAML v >>= \x ->
329− return (\o -> o{ optIncludeBeforeBody = [unpack x] }))
348+ return (\o -> o{ optIncludeBeforeBody =
349+ optIncludeBeforeBody o <> [unpack x] }))
330350 "include-after-body" ->
331351 (parseYAML v >>= \x ->
332− return (\o -> o{ optIncludeAfterBody = map unpack x }))
352+ return (\o -> o{ optIncludeAfterBody =
353+ optIncludeAfterBody o <> map unpack x }))
333354 <|>
334355 (parseYAML v >>= \x ->
335− return (\o -> o{ optIncludeAfterBody = [unpack x] }))
356+ return (\o -> o{ optIncludeAfterBody =
357+ optIncludeAfterBody o <> [unpack x] }))
336358 "include-in-header" ->
337359 (parseYAML v >>= \x ->
338− return (\o -> o{ optIncludeInHeader = map unpack x }))
360+ return (\o -> o{ optIncludeInHeader =
361+ optIncludeInHeader o <> map unpack x }))
339362 <|>
340363 (parseYAML v >>= \x ->
341− return (\o -> o{ optIncludeInHeader = [unpack x] }))
364+ return (\o -> o{ optIncludeInHeader =
365+ optIncludeInHeader o <> [unpack x] }))
342366 "resource-path" ->
343367 parseYAML v >>= \x ->
344368 return (\o -> o{ optResourcePath = map unpack x })