diff --git a/.github/workflows/ci.yaml b/.github/workflows/ci.yaml index b39c4c9..d05b813 100644 --- a/.github/workflows/ci.yaml +++ b/.github/workflows/ci.yaml @@ -29,8 +29,6 @@ jobs: pandoc: - edge - latest - # This should be the oldest version that's supported - # - 2.19.2 container: image: pandoc/core:${{ matrix.pandoc }} @@ -40,7 +38,12 @@ jobs: uses: actions/checkout@v2 - name: Install dependencies - run: apk add make + run: apk add luarocks5.4 make + + - name: Install perevir + run: | + eval $(luarocks-5.4 path) + luarocks-5.4 install perevir - name: Test run: make test diff --git a/Makefile b/Makefile index a4ecc30..d3bb337 100644 --- a/Makefile +++ b/Makefile @@ -3,8 +3,5 @@ DIFF ?= diff PANDOC ?= pandoc .PHONY: test -test: test-hrule test-in-div test-two-sections - -test-%: $(FILTER_FILE) test/input-%.md test/test-%.yaml - @$(PANDOC) --defaults test/test-$*.yaml | \ - $(DIFF) test/expected-$*.md - +test: + pandoc lua test/runtests.lua test/perevirky diff --git a/test/expected-hrule.md b/test/expected-hrule.md deleted file mode 100644 index d975e87..0000000 --- a/test/expected-hrule.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -abstract: | - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad - minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur. - - - one - - two - - three - - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui - officia deserunt mollit anim id est laborum. ---- - -::: frontmatter -Mauris vel erat tincidunt, venenatis elit ac, luctus augue. Aliquam sed -hendrerit augue. Donec finibus mi et dolor semper, non malesuada nulla -ullamcorper. Fusce auctor ullamcorper nunc, sit amet molestie nunc -ornare ac. Nunc vulputate non ante vitae hendrerit. Pellentesque -habitant morbi tristique senectus et netus et malesuada fames ac turpis -egestas. Ut maximus enim molestie ex egestas, a tincidunt quam rhoncus. -Quisque tincidunt est arcu, quis aliquet justo varius a. Fusce nec massa -neque. -::: - -# Lorem Ipsum - -Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum -expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel -labore facilis et cum est. Est nemo est vel ad. Assumenda consequatur -rerum officiis atque officia. Est nihil iste cumque ad qui. diff --git a/test/expected-in-div.md b/test/expected-in-div.md deleted file mode 100644 index 5bd4cc3..0000000 --- a/test/expected-in-div.md +++ /dev/null @@ -1,33 +0,0 @@ ---- -abstract: | - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad - minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur. - - - one - - two - - three - - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui - officia deserunt mollit anim id est laborum. ---- - -::: frontmatter -# Preface - -- Phasellus purus. -- Praesent fermentum tempor tellus. -- Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. -- Lorem ipsum dolor sit amet, consectetuer adipiscing elit. -- Curabitur lacinia pulvinar nibh. -::: - -# Lorem Ipsum - -Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum -expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel -labore facilis et cum est. Est nemo est vel ad. Assumenda consequatur -rerum officiis atque officia. Est nihil iste cumque ad qui. diff --git a/test/expected-shifted-headings.md b/test/expected-shifted-headings.md deleted file mode 100644 index 52c5218..0000000 --- a/test/expected-shifted-headings.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -abstract: | - Nullam eu ante vel est convallis dignissim. Fusce suscipit, wisi nec - facilisis facilisis, est dui fermentum leo, quis tempor ligula erat - quis odio. Nunc porta vulputate tellus. ---- - -## Lorem Ipsum - -Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum -expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel -labore facilis et cum est. Est nemo est vel ad. Assumenda consequatur -rerum officiis atque officia. Est nihil iste cumque ad qui. diff --git a/test/expected-two-sections.md b/test/expected-two-sections.md deleted file mode 100644 index e89cb9f..0000000 --- a/test/expected-two-sections.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -abstract: | - Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do - eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad - minim veniam, quis nostrud exercitation ullamco laboris nisi ut - aliquip ex ea commodo consequat. Duis aute irure dolor in - reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla - pariatur. - - - one - - two - - three - - Excepteur sint occaecat cupidatat non proident, sunt in culpa qui - officia deserunt mollit anim id est laborum. -sammanfattning: | - - Phasellus purus. - - Praesent fermentum tempor tellus. - - Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. - - Lorem ipsum dolor sit amet, consectetuer adipiscing elit. - - Curabitur lacinia pulvinar nibh. ---- - -# Lorem Ipsum - -Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum -expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel -labore facilis et cum est. Est nemo est vel ad. Assumenda consequatur -rerum officiis atque officia. Est nihil iste cumque ad qui. diff --git a/test/input-hrule.md b/test/input-hrule.md deleted file mode 100644 index 1b5d287..0000000 --- a/test/input-hrule.md +++ /dev/null @@ -1,36 +0,0 @@ -::: {.frontmatter} -# Abstract - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do -eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut -enim ad minim veniam, quis nostrud exercitation ullamco laboris -nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in -reprehenderit in voluptate velit esse cillum dolore eu fugiat -nulla pariatur. - -- one -- two -- three - -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui -officia deserunt mollit anim id est laborum. - ---- - -Mauris vel erat tincidunt, venenatis elit ac, luctus augue. -Aliquam sed hendrerit augue. Donec finibus mi et dolor semper, non -malesuada nulla ullamcorper. Fusce auctor ullamcorper nunc, sit -amet molestie nunc ornare ac. Nunc vulputate non ante vitae -hendrerit. Pellentesque habitant morbi tristique senectus et netus -et malesuada fames ac turpis egestas. Ut maximus enim molestie ex -egestas, a tincidunt quam rhoncus. Quisque tincidunt est arcu, -quis aliquet justo varius a. Fusce nec massa neque. -::: - -# Lorem Ipsum - -Quo dolore molestiae et laboriosam occaecati explicabo corrupti. -Earum expedita ducimus quaerat est quam ut molestiae. Illum -deleniti vel labore facilis et cum est. Est nemo est vel ad. -Assumenda consequatur rerum officiis atque officia. Est nihil iste -cumque ad qui. diff --git a/test/input-in-div.md b/test/input-in-div.md deleted file mode 100644 index 11cf690..0000000 --- a/test/input-in-div.md +++ /dev/null @@ -1,32 +0,0 @@ -::: {.frontmatter} -# Abstract - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor -incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis -nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu -fugiat nulla pariatur. - -- one -- two -- three - -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia -deserunt mollit anim id est laborum. - -# Preface - -* Phasellus purus. -* Praesent fermentum tempor tellus. -* Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. -* Lorem ipsum dolor sit amet, consectetuer adipiscing elit. -* Curabitur lacinia pulvinar nibh. -::: - -# Lorem Ipsum - -Quo dolore molestiae et laboriosam occaecati explicabo corrupti. -Earum expedita ducimus quaerat est quam ut molestiae. Illum -deleniti vel labore facilis et cum est. Est nemo est vel ad. -Assumenda consequatur rerum officiis atque officia. Est nihil iste -cumque ad qui. diff --git a/test/input-shifted-headings.md b/test/input-shifted-headings.md deleted file mode 100644 index 73cf0ed..0000000 --- a/test/input-shifted-headings.md +++ /dev/null @@ -1,13 +0,0 @@ -## Abstract - -Nullam eu ante vel est convallis dignissim. Fusce suscipit, wisi -nec facilisis facilisis, est dui fermentum leo, quis tempor ligula -erat quis odio. Nunc porta vulputate tellus. - -## Lorem Ipsum - -Quo dolore molestiae et laboriosam occaecati explicabo corrupti. -Earum expedita ducimus quaerat est quam ut molestiae. Illum -deleniti vel labore facilis et cum est. Est nemo est vel ad. -Assumenda consequatur rerum officiis atque officia. Est nihil iste -cumque ad qui. diff --git a/test/input-two-sections.md b/test/input-two-sections.md deleted file mode 100644 index 6b5548d..0000000 --- a/test/input-two-sections.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -abstract-section: - section-identifiers: - - abstract - - sammanfattning ---- - -# Abstract - -Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor -incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis -nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. -Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu -fugiat nulla pariatur. - -- one -- two -- three - -Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia -deserunt mollit anim id est laborum. - -# Sammanfattning {#sammanfattning} - -* Phasellus purus. -* Praesent fermentum tempor tellus. -* Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. -* Lorem ipsum dolor sit amet, consectetuer adipiscing elit. -* Curabitur lacinia pulvinar nibh. - -# Lorem Ipsum - -Quo dolore molestiae et laboriosam occaecati explicabo corrupti. -Earum expedita ducimus quaerat est quam ut molestiae. Illum -deleniti vel labore facilis et cum est. Est nemo est vel ad. -Assumenda consequatur rerum officiis atque officia. Est nihil iste -cumque ad qui. diff --git a/test/perevirky/hrule.md b/test/perevirky/hrule.md new file mode 100644 index 0000000..616dc0d --- /dev/null +++ b/test/perevirky/hrule.md @@ -0,0 +1,50 @@ +Normally, the abstract ends when a new section begins. However, no +all documents start with a section. An horizontal rule can be used +mark the end of the abstract in such a case. + +``` markdown {#input} +::: {.frontmatter} +# Abstract + +Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do +eiusmod tempor incididunt ut labore et dolore magna aliqua. + +Excepteur sint occaecat cupidatat non proident, sunt in culpa qui +officia deserunt mollit anim id est laborum. + +--- + +Mauris vel erat tincidunt, venenatis elit ac, luctus augue. +Aliquam sed hendrerit augue. Donec finibus mi et dolor semper, non +malesuada nulla ullamcorper. +::: + +# Lorem Ipsum + +Quo dolore molestiae et laboriosam occaecati explicabo corrupti. +Earum expedita ducimus quaerat est quam ut molestiae. Illum +deleniti vel labore facilis et cum est. Est nemo est vel ad. +``` + +``` markdown {#output} +--- +abstract: | + Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do + eiusmod tempor incididunt ut labore et dolore magna aliqua. + + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +--- + +::: frontmatter +Mauris vel erat tincidunt, venenatis elit ac, luctus augue. Aliquam sed +hendrerit augue. Donec finibus mi et dolor semper, non malesuada nulla +ullamcorper. +::: + +# Lorem Ipsum + +Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum +expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel +labore facilis et cum est. Est nemo est vel ad. +``` diff --git a/test/perevirky/in-div.md b/test/perevirky/in-div.md new file mode 100644 index 0000000..203d1d8 --- /dev/null +++ b/test/perevirky/in-div.md @@ -0,0 +1,49 @@ +# Abstract nested in a div + +The abstract section can be nested below a div. + +``` markdown {#input} +::: {.frontmatter} +# Abstract + +Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia +deserunt mollit anim id est laborum. + +# Preface + +* Phasellus purus. +* Praesent fermentum tempor tellus. +* Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. +::: + +# Lorem Ipsum + +Quo dolore molestiae et laboriosam occaecati explicabo corrupti. +Earum expedita ducimus quaerat est quam ut molestiae. Illum +deleniti vel labore facilis et cum est. +``` + +As with other placements of the abstract, it is removed from the +main document and placed in the metadata. + +``` markdown {#output} +--- +abstract: | + Excepteur sint occaecat cupidatat non proident, sunt in culpa qui + officia deserunt mollit anim id est laborum. +--- + +::: frontmatter +# Preface + +- Phasellus purus. +- Praesent fermentum tempor tellus. +- Proin quam nisl, tincidunt et, mattis eget, convallis nec, purus. +::: + +# Lorem Ipsum + +Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum +expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel +labore facilis et cum est. +``` diff --git a/test/perevirky/perevir.yaml b/test/perevirky/perevir.yaml new file mode 100644 index 0000000..6fe7e0c --- /dev/null +++ b/test/perevirky/perevir.yaml @@ -0,0 +1,5 @@ +--- +filters: + - abstract-section.lua +ignore-softbreaks: true +--- diff --git a/test/perevirky/shifted-headings.md b/test/perevirky/shifted-headings.md new file mode 100644 index 0000000..9ffbe96 --- /dev/null +++ b/test/perevirky/shifted-headings.md @@ -0,0 +1,36 @@ +The abstract section must occur at the highest level *upto that +point*. So a lower level can be used, as long as the abstract +heading is not nested below another section. + +``` markdown {#input} +## Abstract + +Nullam eu ante vel est convallis dignissim. Fusce suscipit, wisi nec +facilisis facilisis, est dui fermentum leo, quis tempor ligula erat +quis odio. Nunc porta vulputate tellus. + +## Lorem Ipsum + +Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum +expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel +labore facilis et cum est. Est nemo est vel ad. Assumenda consequatur +rerum officiis atque officia. Est nihil iste cumque ad qui. +``` + +The abstract is still moved as expected: + +``` markdown {#output} +--- +abstract: | + Nullam eu ante vel est convallis dignissim. Fusce suscipit, wisi nec + facilisis facilisis, est dui fermentum leo, quis tempor ligula erat + quis odio. Nunc porta vulputate tellus. +--- + +## Lorem Ipsum + +Quo dolore molestiae et laboriosam occaecati explicabo corrupti. Earum +expedita ducimus quaerat est quam ut molestiae. Illum deleniti vel +labore facilis et cum est. Est nemo est vel ad. Assumenda consequatur +rerum officiis atque officia. Est nihil iste cumque ad qui. +``` diff --git a/test/perevirky/two-sections.md b/test/perevirky/two-sections.md new file mode 100644 index 0000000..aace18a --- /dev/null +++ b/test/perevirky/two-sections.md @@ -0,0 +1,54 @@ +It is common for certain works to include two abstracts, one in +English and one in the local language of an academic institution. +E.g., theses published at many German universities must have a +German "Zusammenfassung" in addition to the English "Abstract". + +The filter can be configured to support those additional +abstract-like sections as well. The identifiers of the sections +must be listed in the `section-identifiers` field below the +`abstract-section` metadata entry. E.g.: + +``` markdown {#input} +--- +abstract-section: + section-identifiers: + - abstract + - sammanfattning +--- + +# Abstract + +Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi +ut aliquip ex ea commodo consequat. Duis aute irure dolor in +reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla +pariatur. + +# Sammanfattning {#sammanfattning} + +Nullam tristique diam non turpis. Praesent fermentum tempor tellus. +Donec vitae dolor. + +* * * * * + +Quo dolore molestiae et laboriosam occaecati explicabo corrupti. +``` + +This will place the *Abstract* in the `abstract` variable as +before, but will also collect the contents of a *Sammanfattning* +section and place it in the `sammanfattning` field, where it can +be used for further processing, e.g., with a custom template. + +``` markdown {#output} +--- +abstract: | + Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris + nisi ut aliquip ex ea commodo consequat. Duis aute irure dolor in + reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla + pariatur. +sammanfattning: | + Nullam tristique diam non turpis. Praesent fermentum tempor tellus. + Donec vitae dolor. +--- + +Quo dolore molestiae et laboriosam occaecati explicabo corrupti. +``` diff --git a/test/runtests.lua b/test/runtests.lua new file mode 100644 index 0000000..2b9359a --- /dev/null +++ b/test/runtests.lua @@ -0,0 +1,9 @@ +#!/usr/bin/env pandoc-lua +--- Run tests with perevir. +-- +-- Copyright: © 2024 Albert Krewinkel +-- License: MIT + +local perevir = require 'perevir' +local opts = perevir.parse_args(arg) +perevir.do_checks(opts) diff --git a/test/test-hrule.yaml b/test/test-hrule.yaml deleted file mode 100644 index 916489d..0000000 --- a/test/test-hrule.yaml +++ /dev/null @@ -1,4 +0,0 @@ -input-files: [test/input-hrule.md] -standalone: true -filters: [{type: lua, path: abstract-section.lua}] -to: markdown diff --git a/test/test-in-div.yaml b/test/test-in-div.yaml deleted file mode 100644 index 29c8294..0000000 --- a/test/test-in-div.yaml +++ /dev/null @@ -1,4 +0,0 @@ -input-files: [test/input-in-div.md] -standalone: true -filters: [{type: lua, path: abstract-section.lua}] -to: markdown diff --git a/test/test-shifted-headings.yaml b/test/test-shifted-headings.yaml deleted file mode 100644 index b66157e..0000000 --- a/test/test-shifted-headings.yaml +++ /dev/null @@ -1,4 +0,0 @@ -input-files: [test/input-shifted-headings.md] -standalone: true -filters: [{type: lua, path: abstract-section.lua}] -to: markdown diff --git a/test/test-two-sections.yaml b/test/test-two-sections.yaml deleted file mode 100644 index 3f22230..0000000 --- a/test/test-two-sections.yaml +++ /dev/null @@ -1,4 +0,0 @@ -input-files: [test/input-two-sections.md] -standalone: true -filters: [{type: lua, path: abstract-section.lua}] -to: markdown