From 5688bd53d29236af53137ab63dc1e1b2d59166de Mon Sep 17 00:00:00 2001 From: korintje Date: Fri, 28 May 2021 18:34:25 +0900 Subject: [PATCH 1/8] Add first commit for "doi2cite" --- doi2cite/Makefile | 16 +++ doi2cite/README.md | 72 +++++++++++ doi2cite/__from_DOI.bib | 36 ++++++ doi2cite/doi2cite.lua | 230 +++++++++++++++++++++++++++++++++ doi2cite/expected1.md | 4 + doi2cite/expected1.pdf | Bin 0 -> 113020 bytes doi2cite/expected2.md | 3 + doi2cite/my_refs.bib | 13 ++ doi2cite/sample1.csl | 279 ++++++++++++++++++++++++++++++++++++++++ doi2cite/sample1.md | 9 ++ doi2cite/sample2.md | 8 ++ 11 files changed, 670 insertions(+) create mode 100644 doi2cite/Makefile create mode 100644 doi2cite/README.md create mode 100644 doi2cite/__from_DOI.bib create mode 100644 doi2cite/doi2cite.lua create mode 100644 doi2cite/expected1.md create mode 100644 doi2cite/expected1.pdf create mode 100644 doi2cite/expected2.md create mode 100644 doi2cite/my_refs.bib create mode 100644 doi2cite/sample1.csl create mode 100644 doi2cite/sample1.md create mode 100644 doi2cite/sample2.md diff --git a/doi2cite/Makefile b/doi2cite/Makefile new file mode 100644 index 00000000..059aa084 --- /dev/null +++ b/doi2cite/Makefile @@ -0,0 +1,16 @@ +DIFF ?= diff --strip-trailing-cr -u + +test: sample1.md sample1.csl doi2cite.lua + @pandoc --lua-filter=doi2cite.lua --to=markdown $< | $(DIFF) expected1.md - + @pandoc --lua-filter=doi2cite.lua --to=pdf $< | $(DIFF) expected1.pdf - + +expected1.md: sample1.md doi2cite.lua + pandoc --lua-filter=doi2cite.lua --wrap=preserve --output $@ $< + +expected1.pdf: sample1.md sample1.csl doi2cite.lua + pandoc --lua-filter=doi2cite.lua --filter=pandoc-crossref --citeproc --csl=sample1.csl --output $@ $< + +expected2.md: sample2.md doi2cite.lua + pandoc --lua-filter=doi2cite.lua --wrap=preserve --output $@ $< + +.PHONY: test diff --git a/doi2cite/README.md b/doi2cite/README.md new file mode 100644 index 00000000..2bcc4c2a --- /dev/null +++ b/doi2cite/README.md @@ -0,0 +1,72 @@ +# pandoc-doi2cite +This pandoc lua filiter helps users to insert references in a document +with using DOI(Digital Object Identifier) tags. With this filter, users +do not need to make bibtex file by themselves. Instead, the filter +automatically generate .bib file from the DOI tags, and convert the DOI +tags into citation keys available by `--citeproc`. + + + +What the filter do are as follows: +1. Search citations with DOI tags in the document +2. Search corresponding bibtex data from `__from_DOI.bib` file +3. If not found, get bibtex data of the DOI from + http://api.crossref.org +4. Add reference data to `__from_DOI.bib` file +5. Check duplications of reference keys +6. Replace DOI tags to the correspoinding citation keys + +# Prerequisites +- Pandoc version 2.0 or newer +- This filter does not need any external dependencies +- This filter must be executed before `pandoc-crossref` or + `--citeproc` + +# DOI tags +Following DOI tags can be used: +- @https://doi.org/ +- @doi.org/ +- @DOI: +- @doi: + +The first one (@https://doi.org/) may be the most useful because it is +same as the accessible URL. + +# YAML header +The file **name** of the auto-generated bibliography file **MUST** be +`__from_DOI.bib`, but the **place** of the file can be changed (e.g. +`./refs/__from_DOI.bib`). You can designate the filepath in the +document yaml header. The yaml key is `bibliography`, which is also +used by Pandoc `--citeproc`. + + +# Example + +example1.md: + + --- + bibliography: + - "my_refs.bib" + - "__from_DOI.bib" + --- + + # Introduction + The Laemmli system is one of the most widely used gel systems for the separation of proteins.[@LAEMMLI_1970] + By the way, Einstein is genius.[@https://doi.org/10.1002/andp.19053220607; @doi.org/10.1002/andp.19053220806; @doi:10.1002/andp.19053221004] + +Example command 1 (.md -\> .md) + +``` {.sh} +pandoc --lua-filter=doi2cite.lua --wrap=preserve -s example1.md -o expected1.md +``` + +Example command 2 (.md -\> .pdf with +[ACS](https://pubs.acs.org/journal/jacsat) style): + +``` {.sh} +pandoc --lua-filter=doi2cite.lua --filter=pandoc-crossref --citeproc --csl=sample1.csl -s example1.md -o expected1.pdf +``` + +Example result + +![expected1](https://user-images.githubusercontent.com/30950088/119964566-4d952200-bfe4-11eb-90d9-ed2366c639e8.png) diff --git a/doi2cite/__from_DOI.bib b/doi2cite/__from_DOI.bib new file mode 100644 index 00000000..10ba5c25 --- /dev/null +++ b/doi2cite/__from_DOI.bib @@ -0,0 +1,36 @@ +@article{Einstein_1905, + doi = {10.1002/andp.19053220607}, + url = {https://doi.org/10.1002%2Fandp.19053220607}, + year = 1905, + publisher = {Wiley}, + volume = {322}, + number = {6}, + pages = {132--148}, + author = {A. Einstein}, + title = {Über einen die Erzeugung und Verwandlung des Lichtes betreffenden heuristischen Gesichtspunkt}, + journal = {Annalen der Physik} +} +@article{Einstein_1905_10.1002/andp.19053220806, + doi = {10.1002/andp.19053220806}, + url = {https://doi.org/10.1002%2Fandp.19053220806}, + year = 1905, + publisher = {Wiley}, + volume = {322}, + number = {8}, + pages = {549--560}, + author = {A. Einstein}, + title = {Über die von der molekularkinetischen Theorie der Wärme geforderte Bewegung von in ruhenden Flüssigkeiten suspendierten Teilchen}, + journal = {Annalen der Physik} +} +@article{Einstein_1905_10.1002/andp.19053221004, + doi = {10.1002/andp.19053221004}, + url = {https://doi.org/10.1002%2Fandp.19053221004}, + year = 1905, + publisher = {Wiley}, + volume = {322}, + number = {10}, + pages = {891--921}, + author = {A. Einstein}, + title = {Zur Elektrodynamik bewegter Körper}, + journal = {Annalen der Physik} +} diff --git a/doi2cite/doi2cite.lua b/doi2cite/doi2cite.lua new file mode 100644 index 00000000..40a3df52 --- /dev/null +++ b/doi2cite/doi2cite.lua @@ -0,0 +1,230 @@ +-------------------------------------------------------------------------------- +-- Copyright © 2021 Takuro Hosomi +-- This library is free software; you can redistribute it and/or modify it +-- under the terms of the MIT license. See LICENSE for details. +-------------------------------------------------------------------------------- + + +-------------------------------------------------------------------------------- +-- Global variables -- +-------------------------------------------------------------------------------- +base_url = "http://api.crossref.org" +mailto = "pandoc.doi2cite@gmail.com" +bibname = "__from_DOI.bib" +bibpath = "__from_DOI.bib" +key_list = {}; +doi_key_map = {}; +doi_entry_map = {}; +error_strs = {}; +error_strs["Resource not found."] = 404 +error_strs["No acceptable resource available."] = 406 +error_strs["

503 Service Unavailable

\n".. + "No server is available to handle this request.\n".. + ""] = 503 + + +-------------------------------------------------------------------------------- +-- Pandoc Functions -- +-------------------------------------------------------------------------------- +-- Get bibliography filepath from yaml metadata +function Meta(m) + local bib_data = m.bibliography + local bibpaths = get_paths_from(bib_data) + bibpath = get_filepath(bibname, bibpaths) + if bibpath == nil then + bibpath = "__from_DOI.bib" + print("[doi2cite WARNING]: " + .."Include '"..bibpath.."' into bibliography list" + .." to be processed by citeproc." + ) + end + local f = io.open(bibpath, "r") + if f then + entries_str = f:read('*all') + if entries_str then + doi_entry_map = get_doi_entry_map(entries_str) + doi_key_map = get_doi_key_map(entries_str) + for doi,key in pairs(doi_key_map) do + key_list[key] = true + end + end + f:close() + else + if io.open(bibpath, "w") == nil then + error("Unable to make bibtex file: "..bibpath..".\n" + .."This error may come from the missing directory. \n" + .."doi2cite filter will not make directory by iteself. \n" + .."Make sure that the directory for bibtex file exists." + ) + end + end +end + +-- Get bibtex data of doi-based citation.id and make bibliography. +-- Then, replace "citation.id" +function Cite(c) + for _, citation in pairs(c.citations) do + local id = citation.id:gsub('%s+', ''):gsub('%%2F', '/') + if id:sub(1,16) == "https://doi.org/" then + doi = id:sub(17):lower() + elseif id:sub(1,8) == "doi.org/" then + doi = id:sub(9):lower() + elseif id:sub(1,4) == "DOI:" or id:sub(1,4) == "doi:" then + doi = id:sub(5):lower() + else + doi = nil + end + if doi then + if doi_key_map[doi] ~= nil then + local entry_key = doi_key_map[doi] + citation.id = entry_key + else + local entry_str = get_bibentry(doi) + if entry_str == nil or error_strs[entry_str] ~= nil then + print("Failed to get ref from DOI: " .. doi) + else + entry_str = tex2raw(entry_str) + local entry_key = get_entrykey(entry_str) + if key_list[entry_key] ~= nil then + entry_key = entry_key.."_"..doi + entry_str = replace_entrykey(entry_str, entry_key) + end + key_list[entry_key] = true + doi_key_map[doi] = entry_key + citation.id = entry_key + local f = io.open(bibpath, "a+") + if f then + f:write(entry_str .. "\n") + f:close() + else + error("Unable to open file: "..bibpath) + end + end + end + end + end + return c +end + + +-------------------------------------------------------------------------------- +-- Common Functions -- +-------------------------------------------------------------------------------- +-- Get bib of DOI from http://api.crossref.org +function get_bibentry(doi) + local entry_str = doi_entry_map[doi] + if entry_str == nil then + print("Request DOI: " .. doi) + local url = base_url.."/works/" + ..doi.."/transform/application/x-bibtex" + .."?mailto="..mailto + mt, entry_str = pandoc.mediabag.fetch(url) + end + return entry_str +end + +-- Extract designated filepaths from 1 or 2 dimensional metadata +function get_paths_from(metadata) + local filepaths = {}; + if metadata then + if metadata[1].text then + filepaths[metadata[1].text] = true + elseif type(metadata) == "table" then + for _, datum in pairs(metadata) do + if datum[1].text then + filepaths[datum[1].text] = true + end + end + end + end + return filepaths +end + +-- Extract filename from a given a path +function get_filename(path) + local len = path:len() + local reversed = path:reverse() + if reversed:find("/") then + local pos = reversed:find("/") + local fname_rev = reversed:sub(1, pos-1) + return fname_rev:reverse() + elseif reversed:find([[\]]) then + local pos = reversed:find([[\]]) + local fname_rev = reversed:sub(1, pos-1) + return fname_rev:reverse() + else + return path + end +end + +-- Find bibname in a given filepath list and return the filepath if found +function get_filepath(filename, filepaths) + for path, _ in pairs(filepaths) do + local filename = get_filename(path) + if filename == bibname then + return path + end + end + return nil +end + +-- Make some TeX descriptions processable by citeproc +function tex2raw(string) + local symbols = {}; + symbols["{\textendash}"] = "–" + symbols["{\textemdash}"] = "—" + symbols["{\textquoteright}"] = "’" + symbols["{\textquoteleft}"] = "‘" + for tex, raw in pairs(symbols) do + local string = string:gsub(tex, raw) + end + return string +end + +-- get bibtex entry key from bibtex entry string +function get_entrykey(entry_string) + local key = entry_string:match('@%w+{(.-),') or '' + return key +end + +-- get bibtex entry doi from bibtex entry string +function get_entrydoi(entry_string) + local doi = entry_string:match('doi%s*=%s*["{]*(.-)["}],?') or '' + return doi +end + +-- Replace entry key of "entry_string" to newkey +function replace_entrykey(entry_string, newkey) + entry_string = entry_string:gsub('(@%w+{).-(,)', '%1'..newkey..'%2') + return entry_string +end + +-- Make hashmap which key = DOI, value = bibtex entry string +function get_doi_entry_map(bibtex_string) + local entries = {}; + for entry_str in bibtex_string:gmatch('@.-\n}\n') do + local doi = get_entrydoi(entry_str) + entries[doi] = entry_str + end + return entries +end + +-- Make hashmap which key = DOI, value = bibtex key string +function get_doi_key_map(bibtex_string) + local keys = {}; + for entry_str in bibtex_string:gmatch('@.-\n}\n') do + local doi = get_entrydoi(entry_str) + local key = get_entrykey(entry_str) + keys[doi] = key + end + return keys +end + + +-------------------------------------------------------------------------------- +-- The main function -- +-------------------------------------------------------------------------------- +return { + { Meta = Meta }, + { Cite = Cite } +} diff --git a/doi2cite/expected1.md b/doi2cite/expected1.md new file mode 100644 index 00000000..7843ea03 --- /dev/null +++ b/doi2cite/expected1.md @@ -0,0 +1,4 @@ +# Introduction + +The Laemmli system is one of the most widely used gel systems for the separation of proteins.[@LAEMMLI_1970] +By the way, Einstein is genius.[@Einstein_1905; @Einstein_1905_10.1002/andp.19053220806; @Einstein_1905_10.1002/andp.19053221004] diff --git a/doi2cite/expected1.pdf b/doi2cite/expected1.pdf new file mode 100644 index 0000000000000000000000000000000000000000..66893d77396e810629d06247bb122b5535f752e4 GIT binary patch literal 113020 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≫B-WBmxVW4UrQt>g!P|=&-;@nTS#tLR~ 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 X(bfJZ#S9FLtc>iCBqSnoqLBX!>q3Id literal 0 HcmV?d00001 diff --git a/doi2cite/expected2.md b/doi2cite/expected2.md new file mode 100644 index 00000000..24e67793 --- /dev/null +++ b/doi2cite/expected2.md @@ -0,0 +1,3 @@ +# Introduction + +People sometimes make mistakes.[@DOI:10.1002/THIS.IS.NOT.VALID.DOI.SAMPLE] diff --git a/doi2cite/my_refs.bib b/doi2cite/my_refs.bib new file mode 100644 index 00000000..4022178e --- /dev/null +++ b/doi2cite/my_refs.bib @@ -0,0 +1,13 @@ +@article{LAEMMLI_1970, + doi = {10.1038/227680a0}, + url = {https://doi.org/10.1038%2F227680a0}, + year = 1970, + month = {aug}, + publisher = {Springer Science and Business Media {LLC}}, + volume = {227}, + number = {5259}, + pages = {680--685}, + author = {U. K. LAEMMLI}, + title = {Cleavage of Structural Proteins during the Assembly of the Head of Bacteriophage T4}, + journal = {Nature} +} diff --git a/doi2cite/sample1.csl b/doi2cite/sample1.csl new file mode 100644 index 00000000..e4283279 --- /dev/null +++ b/doi2cite/sample1.csl @@ -0,0 +1,279 @@ + + diff --git a/doi2cite/sample1.md b/doi2cite/sample1.md new file mode 100644 index 00000000..2e6f0332 --- /dev/null +++ b/doi2cite/sample1.md @@ -0,0 +1,9 @@ +--- +bibliography: + - "my_refs.bib" + - "__from_DOI.bib" +--- + +# Introduction +The Laemmli system is one of the most widely used gel systems for the separation of proteins.[@LAEMMLI_1970] +By the way, Einstein is genius.[@https://doi.org/10.1002/andp.19053220607; @doi.org/10.1002/andp.19053220806; @doi:10.1002/andp.19053221004] \ No newline at end of file diff --git a/doi2cite/sample2.md b/doi2cite/sample2.md new file mode 100644 index 00000000..79c0ab02 --- /dev/null +++ b/doi2cite/sample2.md @@ -0,0 +1,8 @@ +--- +bibliography: + - "my_refs.bib" + - "__from_DOI.bib" +--- + +# Introduction +People sometimes make mistakes.[@DOI:10.1002/THIS.IS.NOT.VALID.DOI.SAMPLE] \ No newline at end of file From f2abb4072b9dc16d438a6412722156d4db7f0e41 Mon Sep 17 00:00:00 2001 From: korintje Date: Sat, 29 May 2021 22:17:33 +0900 Subject: [PATCH 2/8] Fix Windows filepath problems --- doi2cite/README.md | 144 +++++++++++++++++++++--------------------- doi2cite/doi2cite.lua | 105 ++++++++++++++++++------------ doi2cite/sample1.md | 16 ++--- 3 files changed, 144 insertions(+), 121 deletions(-) diff --git a/doi2cite/README.md b/doi2cite/README.md index 2bcc4c2a..62e80817 100644 --- a/doi2cite/README.md +++ b/doi2cite/README.md @@ -1,72 +1,72 @@ -# pandoc-doi2cite -This pandoc lua filiter helps users to insert references in a document -with using DOI(Digital Object Identifier) tags. With this filter, users -do not need to make bibtex file by themselves. Instead, the filter -automatically generate .bib file from the DOI tags, and convert the DOI -tags into citation keys available by `--citeproc`. - - - -What the filter do are as follows: -1. Search citations with DOI tags in the document -2. Search corresponding bibtex data from `__from_DOI.bib` file -3. If not found, get bibtex data of the DOI from - http://api.crossref.org -4. Add reference data to `__from_DOI.bib` file -5. Check duplications of reference keys -6. Replace DOI tags to the correspoinding citation keys - -# Prerequisites -- Pandoc version 2.0 or newer -- This filter does not need any external dependencies -- This filter must be executed before `pandoc-crossref` or - `--citeproc` - -# DOI tags -Following DOI tags can be used: -- @https://doi.org/ -- @doi.org/ -- @DOI: -- @doi: - -The first one (@https://doi.org/) may be the most useful because it is -same as the accessible URL. - -# YAML header -The file **name** of the auto-generated bibliography file **MUST** be -`__from_DOI.bib`, but the **place** of the file can be changed (e.g. -`./refs/__from_DOI.bib`). You can designate the filepath in the -document yaml header. The yaml key is `bibliography`, which is also -used by Pandoc `--citeproc`. - - -# Example - -example1.md: - - --- - bibliography: - - "my_refs.bib" - - "__from_DOI.bib" - --- - - # Introduction - The Laemmli system is one of the most widely used gel systems for the separation of proteins.[@LAEMMLI_1970] - By the way, Einstein is genius.[@https://doi.org/10.1002/andp.19053220607; @doi.org/10.1002/andp.19053220806; @doi:10.1002/andp.19053221004] - -Example command 1 (.md -\> .md) - -``` {.sh} -pandoc --lua-filter=doi2cite.lua --wrap=preserve -s example1.md -o expected1.md -``` - -Example command 2 (.md -\> .pdf with -[ACS](https://pubs.acs.org/journal/jacsat) style): - -``` {.sh} -pandoc --lua-filter=doi2cite.lua --filter=pandoc-crossref --citeproc --csl=sample1.csl -s example1.md -o expected1.pdf -``` - -Example result - -![expected1](https://user-images.githubusercontent.com/30950088/119964566-4d952200-bfe4-11eb-90d9-ed2366c639e8.png) +# pandoc-doi2cite +This pandoc lua filiter helps users to insert references in a document +with using DOI(Digital Object Identifier) tags. With this filter, users +do not need to make bibtex file by themselves. Instead, the filter +automatically generate .bib file from the DOI tags, and convert the DOI +tags into citation keys available by Pandoc-citeproc. + + + +What the filter do are as follows: +1. Search citations with DOI tags in the document +2. Search corresponding bibtex data from `__from_DOI.bib` file +3. If not found, get bibtex data of the DOI from + http://api.crossref.org +4. Add reference data to `__from_DOI.bib` file +5. Check duplications of reference keys +6. Replace DOI tags to the correspoinding citation keys + +# Prerequisites +- Pandoc version 2.0 or newer +- This filter does not need any external dependencies +- This filter should be executed before `pandoc-crossref` or + `--citeproc` + +# DOI tags +Following DOI tags can be used: +- @https://doi.org/ +- @doi.org/ +- @DOI: +- @doi: + +The first one (@https://doi.org/) may be the most useful because it is +same as the accessible URL. + +# YAML header +The file **name** of the auto-generated bibliography file **MUST** be +`__from_DOI.bib`, but the **place** of the file can be changed (e.g. +`'./refs/__from_DOI.bib'` or `'refs\\__from_DOI.bib'` for Windows). Yo +u can designate the filepath in the document yaml header. The yaml key + is `bibliography`, which is also used by Pandoc-citeproc. + + +# Example + +example1.md: + + --- + bibliography: + - 'my_refs.bib' + - '__from_DOI.bib' + --- + + # Introduction + The Laemmli system is one of the most widely used gel systems for the separation of proteins.[@LAEMMLI_1970] + By the way, Einstein is genius.[@https://doi.org/10.1002/andp.19053220607; @doi.org/10.1002/andp.19053220806; @doi:10.1002/andp.19053221004] + +Example command 1 (.md -\> .md) + +``` {.sh} +pandoc --lua-filter=doi2cite.lua --wrap=preserve -s example1.md -o expected1.md +``` + +Example command 2 (.md -\> .pdf with +[ACS](https://pubs.acs.org/journal/jacsat) style): + +``` {.sh} +pandoc --lua-filter=doi2cite.lua --filter=pandoc-crossref --citeproc --csl=sample1.csl -s example1.md -o expected1.pdf +``` + +Example result + +![expected1](https://user-images.githubusercontent.com/30950088/119964566-4d952200-bfe4-11eb-90d9-ed2366c639e8.png) diff --git a/doi2cite/doi2cite.lua b/doi2cite/doi2cite.lua index 40a3df52..6fb61990 100644 --- a/doi2cite/doi2cite.lua +++ b/doi2cite/doi2cite.lua @@ -11,16 +11,15 @@ base_url = "http://api.crossref.org" mailto = "pandoc.doi2cite@gmail.com" bibname = "__from_DOI.bib" -bibpath = "__from_DOI.bib" key_list = {}; doi_key_map = {}; doi_entry_map = {}; error_strs = {}; error_strs["Resource not found."] = 404 error_strs["No acceptable resource available."] = 406 -error_strs["

503 Service Unavailable

\n".. - "No server is available to handle this request.\n".. - ""] = 503 +error_strs["

503 Service Unavailable

\n" + .."No server is available to handle this request.\n" + ..""] = 503 -------------------------------------------------------------------------------- @@ -30,14 +29,8 @@ error_strs["

503 Service Unavailable

\n".. function Meta(m) local bib_data = m.bibliography local bibpaths = get_paths_from(bib_data) - bibpath = get_filepath(bibname, bibpaths) - if bibpath == nil then - bibpath = "__from_DOI.bib" - print("[doi2cite WARNING]: " - .."Include '"..bibpath.."' into bibliography list" - .." to be processed by citeproc." - ) - end + bibpath = find_filepath(bibname, bibpaths) + bibpath = verify_path(bibpath) local f = io.open(bibpath, "r") if f then entries_str = f:read('*all') @@ -50,13 +43,7 @@ function Meta(m) end f:close() else - if io.open(bibpath, "w") == nil then - error("Unable to make bibtex file: "..bibpath..".\n" - .."This error may come from the missing directory. \n" - .."doi2cite filter will not make directory by iteself. \n" - .."Make sure that the directory for bibtex file exists." - ) - end + make_new_file(bibpath) end end @@ -75,17 +62,16 @@ function Cite(c) doi = nil end if doi then - if doi_key_map[doi] ~= nil then - local entry_key = doi_key_map[doi] - citation.id = entry_key + if doi_key_map[doi] then + citation.id = doi_key_map[doi] else local entry_str = get_bibentry(doi) - if entry_str == nil or error_strs[entry_str] ~= nil then + if entry_str == nil or error_strs[entry_str] then print("Failed to get ref from DOI: " .. doi) else entry_str = tex2raw(entry_str) local entry_key = get_entrykey(entry_str) - if key_list[entry_key] ~= nil then + if key_list[entry_key] then entry_key = entry_key.."_"..doi entry_str = replace_entrykey(entry_str, entry_key) end @@ -131,8 +117,10 @@ function get_paths_from(metadata) filepaths[metadata[1].text] = true elseif type(metadata) == "table" then for _, datum in pairs(metadata) do - if datum[1].text then - filepaths[datum[1].text] = true + if datum[1] then + if datum[1].text then + filepaths[datum[1].text] = true + end end end end @@ -140,27 +128,28 @@ function get_paths_from(metadata) return filepaths end --- Extract filename from a given a path -function get_filename(path) - local len = path:len() - local reversed = path:reverse() - if reversed:find("/") then - local pos = reversed:find("/") - local fname_rev = reversed:sub(1, pos-1) - return fname_rev:reverse() - elseif reversed:find([[\]]) then - local pos = reversed:find([[\]]) - local fname_rev = reversed:sub(1, pos-1) - return fname_rev:reverse() +-- Extract filename and dirname from a given a path +function split_path(filepath) + local delim = nil + local len = filepath:len() + local reversed = filepath:reverse() + if filepath:find("/") then + delim = "/" + elseif filepath:find([[\]]) then + delim = [[\]] else - return path + return {filename = filepath, dirname = nil} end + local pos = reversed:find(delim) + local dirname = filepath:sub(1, len - pos) + local filename = reversed:sub(1, pos - 1):reverse() + return {filename = filename, dirname = dirname} end -- Find bibname in a given filepath list and return the filepath if found -function get_filepath(filename, filepaths) +function find_filepath(filename, filepaths) for path, _ in pairs(filepaths) do - local filename = get_filename(path) + local filename = split_path(path)["filename"] if filename == bibname then return path end @@ -220,6 +209,40 @@ function get_doi_key_map(bibtex_string) return keys end +-- function to make directories and files +function make_new_file(filepath) + if filepath then + print(filepath) + local filename = split_path(filepath)["filename"] + local dirname = split_path(filepath)["dirname"] + if filename then + os.execute("mkdir "..dirname) + end + f = io.open(filepath, "w") + if f then + f:close() + else + error("Unable to make bibtex file: "..bibpath..".\n" + .."This error may come from the missing directory. \n" + ) + end + end +end + +-- Verify that the given filepath is correct. +-- Catch common Pandoc user mistakes about Windows-formatted filepath. +function verify_path(bibpath) + if bibpath == nil then + print("[WARNING] doi2cite: " + .."The given file path is incorrect or empty. " + .."In Windows-formatted filepath, Pandoc recognizes " + .."double backslash ("..[[\\]]..") as the delimiters." + ) + return "__from_DOI.bib" + else + return bibpath + end +end -------------------------------------------------------------------------------- -- The main function -- diff --git a/doi2cite/sample1.md b/doi2cite/sample1.md index 2e6f0332..1d29c2b3 100644 --- a/doi2cite/sample1.md +++ b/doi2cite/sample1.md @@ -1,9 +1,9 @@ ---- -bibliography: - - "my_refs.bib" - - "__from_DOI.bib" ---- - -# Introduction -The Laemmli system is one of the most widely used gel systems for the separation of proteins.[@LAEMMLI_1970] +--- +bibliography: + - 'my_refs.bib' + - '__from_DOI.bib' +--- + +# Introduction +The Laemmli system is one of the most widely used gel systems for the separation of proteins.[@LAEMMLI_1970] By the way, Einstein is genius.[@https://doi.org/10.1002/andp.19053220607; @doi.org/10.1002/andp.19053220806; @doi:10.1002/andp.19053221004] \ No newline at end of file From 3f86cec241713fd372db634601f3fec292c230f8 Mon Sep 17 00:00:00 2001 From: korintje Date: Sun, 30 May 2021 02:31:10 +0900 Subject: [PATCH 3/8] Found and fix a critical typo --- doi2cite/README.md | 4 ++-- doi2cite/doi2cite.lua | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/doi2cite/README.md b/doi2cite/README.md index 62e80817..4ff7c02f 100644 --- a/doi2cite/README.md +++ b/doi2cite/README.md @@ -3,7 +3,7 @@ This pandoc lua filiter helps users to insert references in a document with using DOI(Digital Object Identifier) tags. With this filter, users do not need to make bibtex file by themselves. Instead, the filter automatically generate .bib file from the DOI tags, and convert the DOI -tags into citation keys available by Pandoc-citeproc. +tags into citation keys available by --citeproc. @@ -37,7 +37,7 @@ The file **name** of the auto-generated bibliography file **MUST** be `__from_DOI.bib`, but the **place** of the file can be changed (e.g. `'./refs/__from_DOI.bib'` or `'refs\\__from_DOI.bib'` for Windows). Yo u can designate the filepath in the document yaml header. The yaml key - is `bibliography`, which is also used by Pandoc-citeproc. + is `bibliography`, which is also used by --citeproc. # Example diff --git a/doi2cite/doi2cite.lua b/doi2cite/doi2cite.lua index 6fb61990..ea9e2f49 100644 --- a/doi2cite/doi2cite.lua +++ b/doi2cite/doi2cite.lua @@ -215,7 +215,7 @@ function make_new_file(filepath) print(filepath) local filename = split_path(filepath)["filename"] local dirname = split_path(filepath)["dirname"] - if filename then + if dirname then os.execute("mkdir "..dirname) end f = io.open(filepath, "w") From cbd3c920987e9ca9bc5a3043bc2c81a4ec825541 Mon Sep 17 00:00:00 2001 From: korintje Date: Sun, 30 May 2021 02:40:24 +0900 Subject: [PATCH 4/8] Found and remove an unnecessary variable --- doi2cite/doi2cite.lua | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/doi2cite/doi2cite.lua b/doi2cite/doi2cite.lua index ea9e2f49..bb278d5b 100644 --- a/doi2cite/doi2cite.lua +++ b/doi2cite/doi2cite.lua @@ -212,8 +212,7 @@ end -- function to make directories and files function make_new_file(filepath) if filepath then - print(filepath) - local filename = split_path(filepath)["filename"] + print("doi2cite: creating "..filepath) local dirname = split_path(filepath)["dirname"] if dirname then os.execute("mkdir "..dirname) From dc3c2c4d70e207581abfb923c9cb97d617d84f31 Mon Sep 17 00:00:00 2001 From: Takuro Hosomi <30950088+korintje@users.noreply.github.com> Date: Thu, 10 Jun 2021 01:21:02 +0900 Subject: [PATCH 5/8] Fix overlong lines in README Leave long URL lines as are. --- doi2cite/README.md | 70 ++++++++++++++++++++++++---------------------- 1 file changed, 36 insertions(+), 34 deletions(-) diff --git a/doi2cite/README.md b/doi2cite/README.md index 4ff7c02f..4e3c0068 100644 --- a/doi2cite/README.md +++ b/doi2cite/README.md @@ -1,33 +1,33 @@ # pandoc-doi2cite This pandoc lua filiter helps users to insert references in a document -with using DOI(Digital Object Identifier) tags. With this filter, users -do not need to make bibtex file by themselves. Instead, the filter -automatically generate .bib file from the DOI tags, and convert the DOI +with using DOI(Digital Object Identifier) tags. With this filter, user +s do not need to make bibtex file by themselves. Instead, the filter +automatically generate bib file from the DOI tags, and convert the DOI tags into citation keys available by --citeproc. - + What the filter do are as follows: -1. Search citations with DOI tags in the document -2. Search corresponding bibtex data from `__from_DOI.bib` file -3. If not found, get bibtex data of the DOI from - http://api.crossref.org -4. Add reference data to `__from_DOI.bib` file -5. Check duplications of reference keys -6. Replace DOI tags to the correspoinding citation keys +1. Search citations with DOI tags in the document +2. Search corresponding bibtex data from `__from_DOI.bib` file +3. If not found, get bibtex data of the DOI from + http://api.crossref.org +4. Add reference data to `__from_DOI.bib` file +5. Check duplications of reference keys +6. Replace DOI tags to the correspoinding citation keys # Prerequisites -- Pandoc version 2.0 or newer -- This filter does not need any external dependencies -- This filter should be executed before `pandoc-crossref` or - `--citeproc` +- Pandoc version 2.0 or newer +- This filter does not need any external dependencies +- This filter should be executed before `pandoc-crossref` or + `--citeproc` # DOI tags Following DOI tags can be used: -- @https://doi.org/ -- @doi.org/ -- @DOI: -- @doi: +- @https://doi.org/ +- @doi.org/ +- @DOI: +- @doi: The first one (@https://doi.org/) may be the most useful because it is same as the accessible URL. @@ -39,34 +39,36 @@ The file **name** of the auto-generated bibliography file **MUST** be u can designate the filepath in the document yaml header. The yaml key is `bibliography`, which is also used by --citeproc. - # Example - example1.md: - - --- - bibliography: - - 'my_refs.bib' - - '__from_DOI.bib' - --- - - # Introduction - The Laemmli system is one of the most widely used gel systems for the separation of proteins.[@LAEMMLI_1970] - By the way, Einstein is genius.[@https://doi.org/10.1002/andp.19053220607; @doi.org/10.1002/andp.19053220806; @doi:10.1002/andp.19053221004] +```{.md} +--- +bibliography: + - 'my_refs.bib' + - '__from_DOI.bib' +--- + +# Introduction +The Laemmli system is one of the most widely used gel systems for the +separation of proteins.[@LAEMMLI_1970] By the way, Einstein is genius. +[@https://doi.org/10.1002/andp.19053220607; @doi.org/10.1002/andp.1905 +3220806; @doi:10.1002/andp.19053221004] +``` Example command 1 (.md -\> .md) ``` {.sh} -pandoc --lua-filter=doi2cite.lua --wrap=preserve -s example1.md -o expected1.md +pandoc --lua-filter=doi2cite.lua --wrap=preserve \ +-s example1.md -o expected1.md ``` Example command 2 (.md -\> .pdf with [ACS](https://pubs.acs.org/journal/jacsat) style): ``` {.sh} -pandoc --lua-filter=doi2cite.lua --filter=pandoc-crossref --citeproc --csl=sample1.csl -s example1.md -o expected1.pdf +pandoc --lua-filter=doi2cite.lua --filter=pandoc-crossref --citeproc \ +--csl=sample1.csl -s example1.md -o expected1.pdf ``` Example result - ![expected1](https://user-images.githubusercontent.com/30950088/119964566-4d952200-bfe4-11eb-90d9-ed2366c639e8.png) From eeea4cb828d720737a8b444da7551e9122a24759 Mon Sep 17 00:00:00 2001 From: korintje Date: Thu, 10 Jun 2021 01:40:32 +0900 Subject: [PATCH 6/8] change indent from 4 to 2 --- doi2cite/doi2cite.lua | 306 ++++++++++++++++++++--------------------- doi2cite/expected1.pdf | Bin 113020 -> 113007 bytes 2 files changed, 153 insertions(+), 153 deletions(-) diff --git a/doi2cite/doi2cite.lua b/doi2cite/doi2cite.lua index bb278d5b..48a2d041 100644 --- a/doi2cite/doi2cite.lua +++ b/doi2cite/doi2cite.lua @@ -18,8 +18,8 @@ error_strs = {}; error_strs["Resource not found."] = 404 error_strs["No acceptable resource available."] = 406 error_strs["

503 Service Unavailable

\n" - .."No server is available to handle this request.\n" - ..""] = 503 + .."No server is available to handle this request.\n" + ..""] = 503 -------------------------------------------------------------------------------- @@ -27,69 +27,69 @@ error_strs["

503 Service Unavailable

\n" -------------------------------------------------------------------------------- -- Get bibliography filepath from yaml metadata function Meta(m) - local bib_data = m.bibliography - local bibpaths = get_paths_from(bib_data) - bibpath = find_filepath(bibname, bibpaths) - bibpath = verify_path(bibpath) - local f = io.open(bibpath, "r") - if f then - entries_str = f:read('*all') - if entries_str then - doi_entry_map = get_doi_entry_map(entries_str) - doi_key_map = get_doi_key_map(entries_str) - for doi,key in pairs(doi_key_map) do - key_list[key] = true - end - end - f:close() - else - make_new_file(bibpath) + local bib_data = m.bibliography + local bibpaths = get_paths_from(bib_data) + bibpath = find_filepath(bibname, bibpaths) + bibpath = verify_path(bibpath) + local f = io.open(bibpath, "r") + if f then + entries_str = f:read('*all') + if entries_str then + doi_entry_map = get_doi_entry_map(entries_str) + doi_key_map = get_doi_key_map(entries_str) + for doi,key in pairs(doi_key_map) do + key_list[key] = true + end end + f:close() + else + make_new_file(bibpath) + end end -- Get bibtex data of doi-based citation.id and make bibliography. -- Then, replace "citation.id" function Cite(c) - for _, citation in pairs(c.citations) do - local id = citation.id:gsub('%s+', ''):gsub('%%2F', '/') - if id:sub(1,16) == "https://doi.org/" then - doi = id:sub(17):lower() - elseif id:sub(1,8) == "doi.org/" then - doi = id:sub(9):lower() - elseif id:sub(1,4) == "DOI:" or id:sub(1,4) == "doi:" then - doi = id:sub(5):lower() + for _, citation in pairs(c.citations) do + local id = citation.id:gsub('%s+', ''):gsub('%%2F', '/') + if id:sub(1,16) == "https://doi.org/" then + doi = id:sub(17):lower() + elseif id:sub(1,8) == "doi.org/" then + doi = id:sub(9):lower() + elseif id:sub(1,4) == "DOI:" or id:sub(1,4) == "doi:" then + doi = id:sub(5):lower() + else + doi = nil + end + if doi then + if doi_key_map[doi] then + citation.id = doi_key_map[doi] + else + local entry_str = get_bibentry(doi) + if entry_str == nil or error_strs[entry_str] then + print("Failed to get ref from DOI: " .. doi) else - doi = nil - end - if doi then - if doi_key_map[doi] then - citation.id = doi_key_map[doi] - else - local entry_str = get_bibentry(doi) - if entry_str == nil or error_strs[entry_str] then - print("Failed to get ref from DOI: " .. doi) - else - entry_str = tex2raw(entry_str) - local entry_key = get_entrykey(entry_str) - if key_list[entry_key] then - entry_key = entry_key.."_"..doi - entry_str = replace_entrykey(entry_str, entry_key) - end - key_list[entry_key] = true - doi_key_map[doi] = entry_key - citation.id = entry_key - local f = io.open(bibpath, "a+") - if f then - f:write(entry_str .. "\n") - f:close() - else - error("Unable to open file: "..bibpath) - end - end - end - end + entry_str = tex2raw(entry_str) + local entry_key = get_entrykey(entry_str) + if key_list[entry_key] then + entry_key = entry_key.."_"..doi + entry_str = replace_entrykey(entry_str, entry_key) + end + key_list[entry_key] = true + doi_key_map[doi] = entry_key + citation.id = entry_key + local f = io.open(bibpath, "a+") + if f then + f:write(entry_str .. "\n") + f:close() + else + error("Unable to open file: "..bibpath) + end + end + end end - return c + end + return c end @@ -98,155 +98,155 @@ end -------------------------------------------------------------------------------- -- Get bib of DOI from http://api.crossref.org function get_bibentry(doi) - local entry_str = doi_entry_map[doi] - if entry_str == nil then - print("Request DOI: " .. doi) - local url = base_url.."/works/" - ..doi.."/transform/application/x-bibtex" - .."?mailto="..mailto - mt, entry_str = pandoc.mediabag.fetch(url) - end - return entry_str + local entry_str = doi_entry_map[doi] + if entry_str == nil then + print("Request DOI: " .. doi) + local url = base_url.."/works/" + ..doi.."/transform/application/x-bibtex" + .."?mailto="..mailto + mt, entry_str = pandoc.mediabag.fetch(url) + end + return entry_str end -- Extract designated filepaths from 1 or 2 dimensional metadata function get_paths_from(metadata) - local filepaths = {}; - if metadata then - if metadata[1].text then - filepaths[metadata[1].text] = true - elseif type(metadata) == "table" then - for _, datum in pairs(metadata) do - if datum[1] then - if datum[1].text then - filepaths[datum[1].text] = true - end - end - end + local filepaths = {}; + if metadata then + if metadata[1].text then + filepaths[metadata[1].text] = true + elseif type(metadata) == "table" then + for _, datum in pairs(metadata) do + if datum[1] then + if datum[1].text then + filepaths[datum[1].text] = true + end end + end end - return filepaths + end + return filepaths end -- Extract filename and dirname from a given a path function split_path(filepath) - local delim = nil - local len = filepath:len() - local reversed = filepath:reverse() - if filepath:find("/") then - delim = "/" - elseif filepath:find([[\]]) then - delim = [[\]] - else - return {filename = filepath, dirname = nil} - end - local pos = reversed:find(delim) - local dirname = filepath:sub(1, len - pos) - local filename = reversed:sub(1, pos - 1):reverse() - return {filename = filename, dirname = dirname} + local delim = nil + local len = filepath:len() + local reversed = filepath:reverse() + if filepath:find("/") then + delim = "/" + elseif filepath:find([[\]]) then + delim = [[\]] + else + return {filename = filepath, dirname = nil} + end + local pos = reversed:find(delim) + local dirname = filepath:sub(1, len - pos) + local filename = reversed:sub(1, pos - 1):reverse() + return {filename = filename, dirname = dirname} end -- Find bibname in a given filepath list and return the filepath if found function find_filepath(filename, filepaths) - for path, _ in pairs(filepaths) do - local filename = split_path(path)["filename"] - if filename == bibname then - return path - end + for path, _ in pairs(filepaths) do + local filename = split_path(path)["filename"] + if filename == bibname then + return path end - return nil + end + return nil end -- Make some TeX descriptions processable by citeproc function tex2raw(string) - local symbols = {}; - symbols["{\textendash}"] = "–" - symbols["{\textemdash}"] = "—" - symbols["{\textquoteright}"] = "’" - symbols["{\textquoteleft}"] = "‘" - for tex, raw in pairs(symbols) do - local string = string:gsub(tex, raw) - end - return string + local symbols = {}; + symbols["{\textendash}"] = "–" + symbols["{\textemdash}"] = "—" + symbols["{\textquoteright}"] = "’" + symbols["{\textquoteleft}"] = "‘" + for tex, raw in pairs(symbols) do + local string = string:gsub(tex, raw) + end + return string end -- get bibtex entry key from bibtex entry string function get_entrykey(entry_string) - local key = entry_string:match('@%w+{(.-),') or '' - return key + local key = entry_string:match('@%w+{(.-),') or '' + return key end -- get bibtex entry doi from bibtex entry string function get_entrydoi(entry_string) - local doi = entry_string:match('doi%s*=%s*["{]*(.-)["}],?') or '' - return doi + local doi = entry_string:match('doi%s*=%s*["{]*(.-)["}],?') or '' + return doi end -- Replace entry key of "entry_string" to newkey function replace_entrykey(entry_string, newkey) - entry_string = entry_string:gsub('(@%w+{).-(,)', '%1'..newkey..'%2') - return entry_string + entry_string = entry_string:gsub('(@%w+{).-(,)', '%1'..newkey..'%2') + return entry_string end -- Make hashmap which key = DOI, value = bibtex entry string function get_doi_entry_map(bibtex_string) - local entries = {}; - for entry_str in bibtex_string:gmatch('@.-\n}\n') do - local doi = get_entrydoi(entry_str) - entries[doi] = entry_str - end - return entries + local entries = {}; + for entry_str in bibtex_string:gmatch('@.-\n}\n') do + local doi = get_entrydoi(entry_str) + entries[doi] = entry_str + end + return entries end -- Make hashmap which key = DOI, value = bibtex key string function get_doi_key_map(bibtex_string) - local keys = {}; - for entry_str in bibtex_string:gmatch('@.-\n}\n') do - local doi = get_entrydoi(entry_str) - local key = get_entrykey(entry_str) - keys[doi] = key - end - return keys + local keys = {}; + for entry_str in bibtex_string:gmatch('@.-\n}\n') do + local doi = get_entrydoi(entry_str) + local key = get_entrykey(entry_str) + keys[doi] = key + end + return keys end -- function to make directories and files function make_new_file(filepath) - if filepath then - print("doi2cite: creating "..filepath) - local dirname = split_path(filepath)["dirname"] - if dirname then - os.execute("mkdir "..dirname) - end - f = io.open(filepath, "w") - if f then - f:close() - else - error("Unable to make bibtex file: "..bibpath..".\n" - .."This error may come from the missing directory. \n" - ) - end + if filepath then + print("doi2cite: creating "..filepath) + local dirname = split_path(filepath)["dirname"] + if dirname then + os.execute("mkdir "..dirname) + end + f = io.open(filepath, "w") + if f then + f:close() + else + error("Unable to make bibtex file: "..bibpath..".\n" + .."This error may come from the missing directory. \n" + ) end + end end -- Verify that the given filepath is correct. -- Catch common Pandoc user mistakes about Windows-formatted filepath. function verify_path(bibpath) - if bibpath == nil then - print("[WARNING] doi2cite: " - .."The given file path is incorrect or empty. " - .."In Windows-formatted filepath, Pandoc recognizes " - .."double backslash ("..[[\\]]..") as the delimiters." - ) - return "__from_DOI.bib" - else - return bibpath - end + if bibpath == nil then + print("[WARNING] doi2cite: " + .."The given file path is incorrect or empty. " + .."In Windows-formatted filepath, Pandoc recognizes " + .."double backslash ("..[[\\]]..") as the delimiters." + ) + return "__from_DOI.bib" + else + return bibpath + end end -------------------------------------------------------------------------------- -- The main function -- -------------------------------------------------------------------------------- return { - { Meta = Meta }, - { Cite = Cite } + { Meta = Meta }, + { Cite = Cite } } diff --git a/doi2cite/expected1.pdf b/doi2cite/expected1.pdf index 66893d77396e810629d06247bb122b5535f752e4..e58eae6c90fb4c1ac6a806b7d24006f37201884f 100644 GIT binary patch delta 3794 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 IB}Gq03g}lyi2wiq delta 3805 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 TSeHh*0U!x7I0_{tMNdWwa7Z!y From 8de030246a91f14d4a58e77528dc776e0e1ef41e Mon Sep 17 00:00:00 2001 From: korintje Date: Tue, 15 Jun 2021 20:41:50 +0900 Subject: [PATCH 7/8] Fix Makefile test errors --- doi2cite/Makefile | 11 ++++++----- doi2cite/expected1.pdf | Bin 113007 -> 113007 bytes 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/doi2cite/Makefile b/doi2cite/Makefile index 059aa084..ed5ba868 100644 --- a/doi2cite/Makefile +++ b/doi2cite/Makefile @@ -1,8 +1,4 @@ -DIFF ?= diff --strip-trailing-cr -u - -test: sample1.md sample1.csl doi2cite.lua - @pandoc --lua-filter=doi2cite.lua --to=markdown $< | $(DIFF) expected1.md - - @pandoc --lua-filter=doi2cite.lua --to=pdf $< | $(DIFF) expected1.pdf - +test: clean expected1.md expected1.pdf expected1.md: sample1.md doi2cite.lua pandoc --lua-filter=doi2cite.lua --wrap=preserve --output $@ $< @@ -13,4 +9,9 @@ expected1.pdf: sample1.md sample1.csl doi2cite.lua expected2.md: sample2.md doi2cite.lua pandoc --lua-filter=doi2cite.lua --wrap=preserve --output $@ $< +clean: + @rm -f expected1.md + @rm -f expected2.md + @rm -f expected1.pdf + .PHONY: test diff --git a/doi2cite/expected1.pdf b/doi2cite/expected1.pdf index e58eae6c90fb4c1ac6a806b7d24006f37201884f..b1ad6a46b5781ff043eb19416c725c22feb45d60 100644 GIT binary patch delta 111 zcmaF=iS7L-wuUW?oom@mjSP&<3{9s`Sj#8_<80r&ma&h^+0e+u)Xmw#z}VQ(!pY6t e)ycxq$kfcj&BYR=$JEkJ!G@5M=`A}LUjqPix*v%E delta 111 zcmaF=iS7L-wuUW?oom?*3=EAe4K1fnSj#8_<80r&ma&h^+05L<+0od<&A`CY!qV8x g)zQ(&!ohzW@LL From 1cf64a0b9d6a4010f32f35c85c83318dabd8f1b8 Mon Sep 17 00:00:00 2001 From: korintje Date: Tue, 15 Jun 2021 21:01:02 +0900 Subject: [PATCH 8/8] Fix makefile test errors --- doi2cite/Makefile | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/doi2cite/Makefile b/doi2cite/Makefile index ed5ba868..8ce09052 100644 --- a/doi2cite/Makefile +++ b/doi2cite/Makefile @@ -1,4 +1,9 @@ -test: clean expected1.md expected1.pdf +DIFF ?= diff --strip-trailing-cr -u + +test: + @pandoc --lua-filter=doi2cite.lua --wrap=preserve --output=output.md sample1.md + @$(DIFF) expected1.md output.md + @rm -f output.md expected1.md: sample1.md doi2cite.lua pandoc --lua-filter=doi2cite.lua --wrap=preserve --output $@ $<