Convertendo o formato das notas de rodapé em arquivos markdown
#Automação #Markdown #Pandoc #Python
Eventualmente, pode ser útil ou necessário mudar o estilo das notas de rodapé em markdown. O método comumente adotado envolve utilizar uma marcação para indicar a origem da nota (e.g. [^1]
) e deixar o seu conteúdo propriamente no final do texto (mais ou menos como seria em processadores de texto como o Word).
# Título
Parágrafo A[^1]
Parágrafo B[^2]
Parágrafo C[^3]
[^1]: Primeira nota de rodapé.
[^2]: Segunda nota de rodapé.
[^3]: Terceira nota de rodapé.
Problema
Via de regra, isso funciona muito bem. O problema surge quando queremos dividir esse arquivo de algum modo. Se eu o dividisse em parágrafos, por exemplo, possivelmente usando algum script para agilizar o processo1, isso separaria a marcação da nota do seu conteúdo. (O script não sabe que o conteúdo da nota está no fim do texto.)
Esse seria o resultado:
# Título
Parágrafo A[^1]
Parágrafo B[^2]
Parágrafo C[^3]
[^1]: Primeira nota de rodapé.
[^2]: Segunda nota de rodapé.
[^3]: Terceira nota de rodapé.
Solução
A solução mais simples para essa dificuldade seria converter todas as notas para o formato inline.
# Título
Parágrafo A[^Primeira nota de rodapé.]
Parágrafo B[^Segunda nota de rodapé.]
Parágrafo C[^Terceira nota de rodapé.]
Isso pode ser feito utilizando o script abaixo. Para utiliza-lo, você precisará ter instalado o Python 3.
Salve o código como um arquivo de texto com a extensão py
(e.g. inliner.py
)2. Abra o shell/terminal e navegue até a pasta do script. Dê o seguinte comando:
python inliner.py [input.markdown] [output.markdown]
Faça isso substituindo [input.markdown] pelo caminho até o arquivo que deve ser modificado e [output.markdown] pelo caminho e pelo nome do novo arquivo que deve ser gerado.
E.g.:
python inliner.py "~/Dropbox/Markdown/Arquivo1.md" "~/Dropbox/Markdown/Arquivo1Modificado.md"
Script
#!/usr/bin/env python
# inliner - converts reference-style Markdown endnotes to
# Pandoc Markdown's inline footnotes
# by Louis Goddard <louisgoddard@gmail.com>
# Slightly adapted by Bernardo Vasconcelos to MMD footnotes
# Usage: python inliner.py [input.markdown] [output.markdown]
import sys
with open(sys.argv[1], "r") as input:
text = input.read()
counter = 0
while True:
try:
counter = counter + 1
ref = "[^" + str(counter) + "]:"
nextRef = "[^" + str(counter + 1) + "]:"
cite = "[^" + str(counter) + "]"
refStart = text.index(ref)
refEnd = text.index(nextRef) - 2
offset = len(str(counter)) + 5
note = "[^" + text[refStart+offset:refEnd] + "]"
text = text.replace(cite, note)
except ValueError:
break
if counter > 1:
note = "[^" + text[refStart+offset:len(text)-1] + "]"
text = text.replace(cite, note)
text = text.replace("\n ", " ")
cutPoint = text.index("\n[")
text = text[0:cutPoint]
print(str(counter) + " notes replaced.")
else:
print("0 notes replaced.")
with open(sys.argv[2], "w") as output:
output.write(text)