From f220ffabbf353219d4a270dbe07912e5601970c8 Mon Sep 17 00:00:00 2001 From: "John D. Fisher" Date: Sun, 10 Dec 2023 16:35:08 -0800 Subject: [PATCH] refactor(reference_citation): move stdio to main(). fix(filter_reference): prepend ref- to citation reference link to align with pandoc citation links. Include pandoc processed file up to refs section in stdio. test: update expected reference links. --- setup.cfg | 2 +- src/panvimwiki/filter/reference_citation.py | 29 ++++++------- src/panvimwiki/wiki2pandoc.py | 41 ++++++++----------- .../unit/prefilter/reference_citation.out.md | 12 +++--- tests/vim/ExpandCiteproc.vader | 4 +- 5 files changed, 42 insertions(+), 46 deletions(-) diff --git a/setup.cfg b/setup.cfg index 1255819..2acf717 100644 --- a/setup.cfg +++ b/setup.cfg @@ -98,7 +98,7 @@ console_scripts = delete_bullet_star = panvimwiki.filter.delete_bullet_star:main delete_task_pending = panvimwiki.filter.delete_task_pending:main do_nothing = panvimwiki.filter.do_nothing:main - reference_citation = panvimwiki.filter.reference_citation:filter_reference + reference_citation = panvimwiki.filter.reference_citation:main # script_name = panvimwiki.module:function # For example: # console_scripts = diff --git a/src/panvimwiki/filter/reference_citation.py b/src/panvimwiki/filter/reference_citation.py index c5f15b4..a7c9390 100755 --- a/src/panvimwiki/filter/reference_citation.py +++ b/src/panvimwiki/filter/reference_citation.py @@ -85,30 +85,31 @@ import sys -def filter_reference(source: str | None = None) -> str | None: +def filter_reference(source: str) -> str | None: """Convert pandoc citeproc CSL references to explicit reference links. `Reference links `_. """ - if source is None: - source = sys.stdin.read() - isstdio = True - else: - isstdio = False - lines = [] for result in re.findall("::: {#ref-(.*?):::", source, re.S): entry = result.split("\n") - reference = f"[#{entry[0].split()[0]}]:" + reference = f"[#ref-{entry[0].split()[0]}]:" citation = "\n".join(entry[1:]) lines.append(f"{reference} {citation}") - lines = "\n".join(lines) + return "\n".join(lines) + - if isstdio: - print(lines) - return None - return lines +def main(): + """Echo stdin and append filtered references.""" + source = sys.stdin.read() + m = re.search( + r"::: {#refs \.references \.csl-bib-body \.hanging-indent}", string=source + ) + if m is not None: + print(source[: m.start()]) + print(filter_reference(source)) + return None if __name__ == "__main__": - filter_reference() + main() diff --git a/src/panvimwiki/wiki2pandoc.py b/src/panvimwiki/wiki2pandoc.py index 126315b..d550b5c 100644 --- a/src/panvimwiki/wiki2pandoc.py +++ b/src/panvimwiki/wiki2pandoc.py @@ -14,35 +14,30 @@ @bridged -def expand_citeproc(path: str) -> str | None: - """Pandoc returns expanded citeproc references. +def expand_citeproc(path: str | Path) -> None: + """Append pandoc expanded citeproc references at EOF. Parameters ---------- - path : TODO - - Returns - ------- - TODO + path : + Path to markdown input file. """ - reference = filter_reference( - convert( - inputfile=str(path), - outputfile=None, - format="markdown+wikilinks_title_after_pipe", - to="markdown-citations", - prefilters=None, - filters=None, - extra_args=( - "--citeproc", - "--standalone", - "--wrap", - "none", - ), - ) + reference = convert( + inputfile=str(path), + outputfile=None, + format="markdown+wikilinks_title_after_pipe", + to="markdown-citations", + prefilters=None, + filters=None, + extra_args=( + "--citeproc", + "--standalone", + "--wrap", + "none", + ), ) - vim.command(f"let @x = '{reference}'") + vim.command(f"let @x = '{filter_reference(reference)}'") vim.command("$put x") diff --git a/tests/unit/prefilter/reference_citation.out.md b/tests/unit/prefilter/reference_citation.out.md index 3833f87..25fb255 100644 --- a/tests/unit/prefilter/reference_citation.out.md +++ b/tests/unit/prefilter/reference_citation.out.md @@ -1,8 +1,8 @@ -\[#bloggs-jones\]: Bloggs, A. J., and X. Y. Jones. 1959. \"Title Title -Title Title Title Title Title Title Title Title.\" +\[#ref-bloggs-jones\]: Bloggs, A. J., and X. Y. Jones. 1959. \"Title +Title Title Title Title Title Title Title Title Title.\" []{#Journal Journal Journal}**Journal Journal Journal**. -\[#chomsky-73\]: Chomsky, N. 1973. \"Conditions on Transformations.\" In -[]{#A Festschrift for Morris Halle}**A Festschrift for Morris Halle**, -edited by S. R. Anderson and P. Kiparsky. New York: Holt, Rinehart & -Winston. +\[#ref-chomsky-73\]: Chomsky, N. 1973. \"Conditions on +Transformations.\" In []{#A Festschrift for Morris Halle}**A Festschrift +for Morris Halle**, edited by S. R. Anderson and P. Kiparsky. New York: +Holt, Rinehart & Winston. diff --git a/tests/vim/ExpandCiteproc.vader b/tests/vim/ExpandCiteproc.vader index 086582b..e0e9785 100644 --- a/tests/vim/ExpandCiteproc.vader +++ b/tests/vim/ExpandCiteproc.vader @@ -62,6 +62,6 @@ Expect (Append references): ---- House of Dude - [#bloggs-jones]: Bloggs, A. J., and X. Y. Jones. 1959. "Title Title Title Title Title Title Title Title Title Title." *Journal Journal Journal*. + [#ref-bloggs-jones]: Bloggs, A. J., and X. Y. Jones. 1959. "Title Title Title Title Title Title Title Title Title Title." *Journal Journal Journal*. - [#chomsky-73]: Chomsky, N. 1973. "Conditions on Transformations." In *A Festschrift for Morris Halle*, edited by S. R. Anderson and P. Kiparsky. New York: Holt, Rinehart & Winston. + [#ref-chomsky-73]: Chomsky, N. 1973. "Conditions on Transformations." In *A Festschrift for Morris Halle*, edited by S. R. Anderson and P. Kiparsky. New York: Holt, Rinehart & Winston.