diff options
Diffstat (limited to 'biblio/citation-style-language/csl.lua')
-rw-r--r-- | biblio/citation-style-language/csl.lua | 143 |
1 files changed, 0 insertions, 143 deletions
diff --git a/biblio/citation-style-language/csl.lua b/biblio/citation-style-language/csl.lua deleted file mode 100644 index 90f5bea588..0000000000 --- a/biblio/citation-style-language/csl.lua +++ /dev/null @@ -1,143 +0,0 @@ --- --- Copyright (c) 2021-2022 Zeping Lee --- Released under the MIT license. --- Repository: https://github.com/zepinglee/citeproc-lua --- - -local csl = {} - -local citeproc = require("citeproc") -local util = citeproc.util -require("lualibs") -local core = require("csl-core") - - -csl.initialized = "false" -csl.citations = {} -csl.citations_pre = {} - - -function csl.error(str) - luatexbase.module_error("csl", str) -end -function csl.warning(str) - luatexbase.module_warning("csl", str) -end -function csl.info(str) - luatexbase.module_info("csl", str) -end - - -function csl.init(style_name, bib_files, lang) - bib_files = util.split(util.strip(bib_files), "%s*,%s*") - - csl.engine = core.init(style_name, bib_files, lang) - - if csl.engine then - csl.initialized = "true" - else - return - end - - -- csl.init is called via \AtBeginDocument and it's executed after - -- loading .aux file. The csl.ids are already registered. - csl.citation_strings = core.process_citations(csl.engine, csl.citations) - csl.style_class = csl.engine:get_style_class() - - for _, citation in ipairs(csl.citations) do - local citation_id = citation.citationID - local citation_str = csl.citation_strings[citation_id] - local bibcite_command = string.format("\\bibcite{%s}{{%s}{%s}}", citation.citationID, csl.style_class, citation_str) - tex.sprint(bibcite_command) - end - -end - - -function csl.register_citation_info(citation_info) - local citation = core.make_citation(citation_info) - table.insert(csl.citations, citation) -end - - -function csl.enable_linking() - csl.engine:enable_linking() -end - - -function csl.cite(citation_info) - if not csl.engine then - csl.error("CSL engine is not initialized.") - end - - local citation = core.make_citation(citation_info) - - local res = csl.engine:processCitationCluster(citation, csl.citations_pre, {}) - - local citation_str - for _, citation_res in ipairs(res[2]) do - local citation_id = citation_res[3] - -- csl.citation_strings[citation_id] = citation_res[2] - if citation_id == citation.citationID then - citation_str = citation_res[2] - end - end - tex.sprint(citation_str) - - table.insert(csl.citations_pre, {citation.citationID, citation.properties.noteIndex}) -end - - -function csl.nocite(ids_string) - local cite_ids = util.split(ids_string, "%s*,%s*") - if csl.engine then - local ids = {} - for _, cite_id in ipairs(cite_ids) do - if cite_id == "*" then - for item_id, _ in pairs(core.bib) do - table.insert(ids, item_id) - end - else - table.insert(ids, cite_id) - end - end - csl.engine:updateUncitedItems(ids) - else - -- `\nocite` in preamble, where csl.engine is not initialized yet - for _, cite_id in ipairs(cite_ids) do - if cite_id == "*" then - core.uncite_all_items = true - else - if not core.loaded_ids[cite_id] then - table.insert(core.ids, cite_id) - core.loaded_ids[cite_id] = true - end - end - end - end -end - - -function csl.bibliography() - if not csl.engine then - csl.error("CSL engine is not initialized.") - return - end - - -- if csl.include_all_items then - -- for id, _ in pairs(csl.bib) do - -- if not csl.loaded_ids[id] then - -- table.insert(csl.ids, id) - -- csl.loaded_ids[id] = true - -- end - -- end - -- end - -- csl.engine:updateItems(csl.ids) - - local result = core.make_bibliography(csl.engine) - - tex.print(util.split(result, "\n")) -end - - -return csl |