pandoc-include icon indicating copy to clipboard operation
pandoc-include copied to clipboard

Support for `sourcepos` extension recursively, to provide sync-preview.

Open belonesox opened this issue 1 year ago • 3 comments

I am working on vscode extension that provide WYSIWYM/Latex-convinienient way to work on complex markdown documentation with inclusions using pandoc-include (with my patch to support it). And with back/forward syncing like that (small demo):

https://github.com/gpoore/codebraid-preview-vscode/assets/1609739/71dd448b-6705-42db-9311-2584c2efd927

The key feature from pandoc core is core sourcepos extension that can add JSON-tags "datapos" to output. The problem is that pandoc-include does "not inherit" filters from main document.

So to support it, I wrote couple of fast LUA filters:

  • desourcepos.lua — special LUA-filter to remove sourcepos tags to read "pure" inclusion command in pandoc-include.
  • filename-sourcepos.lua — special LUA-filter to add filename to sourcepos tags when we including files in pandoc-include

And add supporting PANDOC_SOURCE_FORMAT environment variable, if it exists, that would mean that we use this format for included files, and add special processing to add included filename to sourcepos tags.

First, before we get into PR, I want to discuss whether this approach looks good.

belonesox avatar May 03 '24 14:05 belonesox

I'm not very familiar with the sourcepos extension, but what you are trying to do seems to be passing a few more options to the pandoc command when parsing other files. Is that correct?

DCsunset avatar May 05 '24 13:05 DCsunset

Yes, in short, if you dont want to dive into supporting sourcepos extension:

  • pass some options to parse included files (including setting variable to included filename)
  • pass some options to "reverse parse" when we looking for "!include"

belonesox avatar May 05 '24 18:05 belonesox

As for passing options, I believe we can make it more general, like supporting template variables {filename} in pandoc-options. We can also add an option to support setting arbitrary env variables.

DCsunset avatar May 05 '24 23:05 DCsunset