From 76be2de44511330d217cc70c962e46d7ce05c1be Mon Sep 17 00:00:00 2001 From: Samuel Mimram Date: Mon, 13 Nov 2023 18:02:11 +0100 Subject: [PATCH] Base directory. --- CHANGES.md | 1 + examples/Makefile | 1 + examples/include.ml | 14 +++++++++++--- 3 files changed, 13 insertions(+), 3 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index f1012ad..60dbb83 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -3,6 +3,7 @@ - pandoc-include now fails if the file to include does not exist. - pandoc-include now supports string boundaries. +- Add a pandoc-include to specify base directory. 0.2.0 (2023-11-10) ===== diff --git a/examples/Makefile b/examples/Makefile index afa8e18..feb6e05 100644 --- a/examples/Makefile +++ b/examples/Makefile @@ -1,6 +1,7 @@ all: build test: build + pandoc test.md -t json | dune exec ./include.exe -- --directory ../examples | pandoc -f json -t markdown pandoc -M xxx=YYY \ --filter=../_build/default/examples/inspect.exe \ --filter=../_build/default/examples/replace.exe \ diff --git a/examples/include.ml b/examples/include.ml index 51119ec..fe568f5 100644 --- a/examples/include.ml +++ b/examples/include.ml @@ -22,17 +22,25 @@ let error fname n = exit n) let () = + let directory = ref "" in + Arg.parse + [ + "--directory", Arg.Set_string directory, "Use this as base directory for included files." + ] + ignore + "pandoc-include [options]"; let p = Pandoc.of_json (Yojson.Basic.from_channel stdin) in let rec f = function (* !include "file" *) - | Pandoc.Para [Str "!include"; _; Quoted (DoubleQuote, [Str s])] -> - let p = Pandoc.of_md_file s in + | Pandoc.Para [Str "!include"; _; Quoted (DoubleQuote, [Str fname])] -> + let fname = Filename.concat !directory fname in + let p = Pandoc.of_md_file fname in let p = Pandoc.map_blocks f p in Some (Pandoc.blocks p) (* ```{.blabla include="file"} ``` *) | CodeBlock ((ident, classes, keyvals), _) when List.mem_assoc "include" keyvals -> - let fname = List.assoc "include" keyvals in + let fname = List.assoc "include" keyvals |> Filename.concat !directory in let error n = error fname n in let from = match List.assoc_opt "from" keyvals with