Incluir arquivos no documento Markdown com Pandoc (exceto Haskell)

2

Eu uso o Pandoc para criar apresentações do Reveal.js a partir de documentos do Markdown, depois de ter mudado para ele do Google Slides. Desde o início, decidi que as apresentações para diferentes eventos e palestras devem ser combinadas automaticamente a partir de vários arquivos - assim, é mais fácil manter slides separados sem a necessidade de atualizar o conteúdo constantemente em vários lugares.

A solução por enquanto combina o Codekit (usando a linguagem do Kit) e o pandoc. Assim, partes individuais de apresentações são preparadas em um editor e, em seguida, são referidas em um único arquivo .kit com instruções @import e, em seguida, o arquivo Markdown resultante é processado pelo pandoc que cria uma apresentação HTML (a última parte é feita pelo Sublime Text build sistema).

Eu gostaria de simplificar esse processo de alguma forma com algum tipo de script que pré-processaria um arquivo Markdown combinado automaticamente toda vez que ele o come. Há posts no StackExchange que se referem a filtros Haskell, mas a instalação do Haskell é muito grande para o meu sistema minúsculo (no mínimo 800Mb).

Existe uma maneira de incluir arquivos com algum outro tipo de linguagem de programação ou truque? Eu sei, por exemplo, que é possível juntar vários arquivos concatenando seus nomes no comando pandoc, mas isso não torna o fluxo de trabalho mais suave ou mais rápido.

    
por certainlyakey 08.02.2014 / 16:13

2 respostas

1

Eu finalmente descobri algumas maneiras de fazer a tarefa.

O primeiro é usar um filtro pandoc escrito em Python que inclui (funciona da mesma maneira que o filtro Haskell descrito em pandoc docs). No entanto, agora ele é adaptado para uso somente com blocos de código incluídos, não com partes de conteúdo geral.

A segunda maneira é usar o script Perl embutido, que pode ser adicionado ao comando build (visto pela primeira vez aqui ). Esse caminho provou ser útil e eu vou manter isso por algum tempo, porque

  1. Eu não sou muito bom em Python e
  2. permite que algumas tarefas úteis de pesquisa e substituição sejam executadas, como em substituição de partes de caminhos das imagens e arquivos incluídos.

Abaixo, o comando que uso para produzir uma apresentação de slides no formato Reveal.js (embora essa tenha sido enviada para alguma hospedagem na Web, há outras variantes de compilação para criar um arquivo de apresentação de slides autossuficiente usando a opção --self-contained de pandoc ou, por exemplo, "coletar" todos os arquivos relacionados à apresentação de slides em uma pasta no Desktop):

perl -ne 's/^#\((.+)\).*/'cat \"${project_path/\//\\\//g}\$1\"'/e;s/\((\/_common\/img)/(\/presentations\$1/g;print' ${file_base_name}.md > result.md && pandoc -s -t revealjs --variable revealjs-url=http://www.site.com/presentations/_common/resources/revealjs --css=http://www.site.com/presentations/_common/resources/customcss_sky.css -H ${project_path}/_common/resources/customhtml.html --highlight-style haddock result.md -o index.html && trash result.md

Este comando:

  1. Substitui todas as expressões # (caminho / para / incluir) (os caminhos devem ser relativos à pasta do projeto) com includes 'contents;
  2. Substitui os caminhos nas imagens (relativas à pasta do projeto) pelo caminho do servidor para o diretório de imagens;
  3. Gera o Markdown resultante em um arquivo temporário;
  4. Cria slideshow HTML com pandoc;
  5. Lixeira de arquivo temporário com o utilitário trash de Ali Rantakari.
por 11.02.2014 / 15:08
1

Em princípio, você pode escrever filtros pandoc em qualquer idioma, embora Haskell seja particularmente adequado. A biblioteca pandocfilters facilita escrevê-los em python.

Aqui está um tutorial sobre os filtros pandoc . Ele contém um filtro Haskell de amostra para arquivos de inclusão, que deve ser muito fácil de traduzir para um filtro python usando pandocfilters.

Veja também o diretório de exemplos no repositório do pandocfilters.

    
por 10.02.2014 / 00:22