Schreiben Sie Pandec-Filter in Python

Schreiben Sie Pandec-Filter in Python

Ich verwende das universelle Tool zur Konvertierung des Dokumentformats pandoc. Weitere Informationen zu Pandoc finden Sie im Japanischen Benutzerhandbuch.

In einigen Fällen möchten Sie das Dokument jedoch möglicherweise während der Konvertierung geringfügig ändern. Beispielsweise möchten Sie möglicherweise die Link-URLs auf einmal ersetzen, wenn Sie ein in Markdown geschriebenes Dokument in HTML konvertieren. Es ist einfach, mit einem regulären Ausdruck zu konvertieren, aber pandoc bietet tatsächlich eine Filterfunktion. Mit Filtern können Sie den Syntaxbaum der analysierten Dokumente nutzen. Filter können sowohl in Haskell als auch in Pandoc selbst geschrieben werden, aber mechanisch können sie in jeder Sprache geschrieben werden und Python wird offiziell unterstützt.

Wie unten gezeigt, wird der Syntaxbaum des von pandoc analysierten Dokuments in das JSON-Format konvertiert und über die Standardeingabe / -ausgabe an den Filter übergeben (die Abbildung stammt aus dem Handbuch).

                         source format
                              ↓
                           (pandoc)
                              ↓
                      JSON-formatted AST
                              ↓
                           (filter)
                              ↓
                      JSON-formatted AST
                              ↓
                           (pandoc)
                              ↓
                        target format

Sie können damit intelligente Filter schreiben. Lassen Sie uns zunächst die offiziell bereitgestellten Pandoc-Filter installieren.

pip install pandocfilters

Verwenden Sie dies, um einen Filter zu schreiben, der die Link-URL im Dokument sofort ändert.

convertlink.py


from pandocfilters import toJSONFilter, Link


def myfilter(key, value, format_, meta):
    if key == 'Link':
        value[1][0] = "prefix/" + value[1][0]
        return Link(*value)


if __name__ == "__main__":
    toJSONFilter(myfilter)

Geben Sie zum Ausführen die Filteroption an, wenn Sie pandoc ausführen. Beachten Sie, dass Sie "./convertlink.py" schreiben müssen, um das Skript für das aktuelle Verzeichnis anzugeben.

sample.txt


## sample document
text text text

[link](path/to/otherpage)
$ pandoc --filter=./convertlink.py -t markdown sample.txt
sample document
---------------

text text text

[link](prefix/path/to/otherpage)

Andere Tipps

Ein von pandoc verwendeter Beispielsyntaxbaum (pandoc AST) kann mit pandoc ausgegeben werden. Wenn Sie json angeben, können Sie es im JSON-Format überprüfen. Wenn Sie native angeben, können Sie es im Haskell-Format überprüfen.


$ pandoc -t json sample.txt 
[{"unMeta":{}},[{"t":"Header","c":[2,["sample-document",[],[]],[{"t":"Str","c":"sample"},{"t":"Space","c":[]},{"t":"Str","c":"document"}]]},{"t":"Para","c":[{"t":"Str","c":"text"},{"t":"Space","c":[]},{"t":"Str","c":"text"},{"t":"Space","c":[]},{"t":"Str","c":"text"}]},{"t":"Para","c":[{"t":"Link","c":[[{"t":"Str","c":"link"}],["path/to/otherpage",""]]}]}]]
$ pandoc -t native sample.txt
[Header 2 ("sample-document",[],[]) [Str "sample",Space,Str "document"]
,Para [Str "text",Space,Str "text",Space,Str "text"]
,Para [Link [Str "link"]("path/to/otherpage","")]]

Details zum Format finden Sie in Text.Pandoc.Definition Documentation.

Die Filteroptionsspezifikation entspricht auch der folgenden Befehlspipeline, die beim Debuggen verwendet werden kann.


$ pandoc -t json sample.txt | python ./convertlink.py | pandoc -f json -t markdown

Recommended Posts

Schreiben Sie Pandec-Filter in Python
Schreiben Sie Python in MySQL
Schreiben Sie die Beta-Distribution in Python
Schreiben Sie Python in Rstudio (reticulate)
Schreiben Sie eine Dichotomie in Python
Schreiben Sie ein JSON-Schema mit Python DSL
Schreiben Sie einen HTTP / 2-Server in Python
Schreiben Sie die AWS Lambda-Funktion in Python
Schreiben Sie A * (A-Stern) -Algorithmen in Python
Schreiben Sie Selentestcode in Python
Schreiben Sie ein Kreisdiagramm in Python
Schreiben Sie das Vim-Plugin in Python
Schreiben Sie eine Suche mit Tiefenpriorität in Python
Schreiben Sie einen C-Sprach-Unit-Test in Python
Quadtree in Python --2
Python in der Optimierung
Metaprogrammierung mit Python
Python 3.3 mit Anaconda
Geokodierung in Python
SendKeys in Python
Metaanalyse in Python
Unittest in Python
Schreiben Sie den Test in die Python-Dokumentzeichenfolge
Implementieren Sie den FIR-Filter in Python und C.
Epoche in Python
Zwietracht in Python
Schreiben Sie eine kurze Eigenschaftsdefinition in Python
Deutsch in Python
DCI in Python
Quicksort in Python
nCr in Python
Schreiben Sie die O_SYNC-Datei in C und Python
N-Gramm in Python
Programmieren mit Python
Schreiben Sie ein Caesar-Verschlüsselungsprogramm in Python
Plink in Python
Konstante in Python
Lesen und schreiben Sie JSON-Dateien mit Python
Schreiben Sie eine einfache Giermethode in Python
FizzBuzz in Python
SQLite in Python
Schritt AIC in Python
Schreiben Sie mit f2py ein Python-Modul in fortran
Schreiben Sie ein einfaches Vim-Plugin in Python 3
LINE-Bot [0] in Python
CSV in Python
Reverse Assembler mit Python
Reflexion in Python
Konstante in Python
nCr in Python.
Format in Python
Scons in Python 3
Puyopuyo in Python
Python in Virtualenv
PPAP in Python
Quad-Tree in Python
Reflexion in Python
Chemie mit Python