Module

Publications

From ACES

Revision as of 20:33, 2 September 2021 by Yid010 (talk | contribs)

Documentation for this module may be created at Module:Publications/doc

local getArgs = require([[Module:Arguments]]).getArgs
local date = require([[Module:Date]])
local cargo = mw.ext.cargo
local fstr = mw.ustring.format
local p = {}

local fields = {
    entry = {},
    address = {BibTeX = true},
    annote = {BibTeX = true},
    author = {BibTeX = true},
    booktitle = {BibTeX = true},
    chapter = {BibTeX = true},
    edition = {BibTeX = true},
    editor = {BibTeX = true},
    howpublished = {BibTeX = true},
    institution = {BibTeX = true},
    journal = {BibTeX = true},
    note = {BibTeX = true},
    number = {BibTeX = true},
    organization = {BibTeX = true},
    pages = {BibTeX = true},
    publisher = {BibTeX = true},
    school = {BibTeX = true},
    series = {BibTeX = true},
    title = {BibTeX = true},
    type = {BibTeX = true},
    volume = {BibTeX = true},
    date = {},
    doi = {BibTeX = true},
    issn = {BibTeX = true},
    isbn = {BibTeX = true},
    url = {BibTeX = true},
    _pageName = {},
    pdf = {}
}

function p.getBibTeX(entry)
    local out = {}
    table.insert(out, fstr("@%s{%s,", entry.entry, entry._pageName))
    for k, v in pairs(fields) do
        if v.BibTeX and entry[k] and entry[k] ~= "" then
            table.insert(out, fstr("%s = {%s},", k, entry[k]))
        end
    end
    if entry.date and entry.date ~= "" then
        local entryDate = date(entry.date)
        table.insert(out, fstr("year = {%s},", entryDate:getyear()))
        table.insert(out, fstr("month = {%s},", entryDate:getmonth()))
    end
    return table.concat(out, "\n")
end

function p._main(args)
    local tables = 'publication'
    local cargoFields = {}
    for k, _ in pairs(fields) do table.insert(cargoFields, k) end

    cargoFields = table.concat(cargoFields, ",")
    local args = {
        where = nil,
        join = nil,
        groupBy = nil,
        having = nil,
        orderBy = 'date',
        limit = nil,
        offset = nil
    }
    local results = cargo.query(tables, cargoFields, args)

    mw.logObject(results)
    mw.logObject(p.getBibTeX(results[1]))
end

-- test: =p._main{}
function p.main(frame) return p._main(getArgs(frame)) end

return p