বিষয়বস্তুতে চলুন

মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ

উইকিঅভিধান, মুক্ত অভিধান থেকে

এই মডিউলের জন্য মডিউল:উইকিউপাত্ত তথ্যসূত্র বিন্যাসকরণ/নথি-এ নথিপত্র তৈরি করা হয়ে থাকতে পারে

local p = {}
local converter = require('মডিউল:ConvertDigit')

base_lang_code_labels = 'bn'
target_wikisource = 'bnwikisource'
label_of_Q31464082 = 'উৎস'

archive_dated = '$1-এর আর্কাইভ'
archive_undated = 'আর্কাইভ'

indicator_format_strings = {
    ['P50'] = '$1',  -- লেখক
    ['P98'] = '$1 সম্পাদিত',
    ['P655'] = '$1 অনূদিত',
}

specifier_format_strings = {
    ['P7421'] = "$1 নং পংক্তি",
    ['P958'] = "$1 নামক অনুচ্ছেদ",
    ['P792'] = "$1 নং পরিচ্ছেদ",
    ['P304'] = "$1 নং পাতায়",
}

published_in_format_string = "$1 নামক রচনায় প্রকাশিত"

function p.format ( reference )
    local stated_ins = reference.snaks['P248'] -- এই উৎসে বিবৃত
    local urls = reference.snaks['P854'] -- তথ্যসূত্রের ইউআরএল
    if urls == nil then
        urls = reference.snaks['P4656'] -- উইকিমিডিয়া আমদানির ইউআরএল
    end
    local commons_scanned_files = reference.snaks['P996'] -- উইকিমিডিয়া কমন্সে স্ক্যানকৃত ফাইল
    local internet_archive_ids = reference.snaks['P724'] -- ইন্টারনেট আর্কাইভ আইডি

    local example_from_text = ''
    local inside_text_parts = {}

    local example_from_id = nil
    local example_from_text = ''
    if stated_ins ~= nil then
        example_from_id = stated_ins[1].datavalue.value.id
        example_from_text = mw.wikibase.getLabel( example_from_id )
    elseif commons_scanned_files ~= nil then
        table.insert(inside_text_parts, '[[:File:' .. commons_scanned_files[1].datavalue.value .. '|' .. commons_scanned_files[1].datavalue.value .. ']]')
    elseif urls ~= nil or internet_archive_ids ~= nil then
        local link_title = label_of_Q31464082
        local titles = reference.snaks['P1476'] -- [পাতার] শিরোনাম
        if titles ~= nil then
            link_title = '"' .. titles[1].datavalue.value.text .. '"'
        end

        local main_url = ''
        if urls ~= nil then
            main_url = urls[1].datavalue.value
        else
            main_url = 'https://archive.org/details/' .. internet_archive_ids[1].datavalue.value
        end
        table.insert(inside_text_parts, '[' .. main_url .. ' ' .. link_title .. ']')

        local broader_title = ''
        local broader_titles = reference.snaks['P6333'] -- বৃহদতর পরিধিতে কাজের শিরোনাম
        if broader_titles ~= nil then
            broader_title = " ''" .. broader_titles[1].datavalue.value.text .. "''"
            table.insert(inside_text_parts, broader_title)
        end

        local archive_url = nil
        local archive_urls = reference.snaks['P1065'] -- আর্কাইভের ইউআরএল
        if archive_urls ~= nil then
            archive_url = archive_urls[1].datavalue.value
        end

        local publication_date = ''
        local publication_dates = reference.snaks['P577'] -- প্রকাশনার তারিখ
        if publication_dates ~= nil then
            publication_date = converter._main(mw.wikibase.formatValue(publication_dates[1]))
            table.insert(inside_text_parts, publication_date)
        end

        local retrieval_date = nil
        local retrieval_dates = reference.snaks['P813'] -- সংগ্রহের তারিখ
        if retrieval_dates ~= nil then
            local retrieval_date = converter._main(mw.wikibase.formatValue(retrieval_dates[1]))
        end

        local archival_date = nil
        local archival_dates = reference.snaks['P2960'] -- সংগ্রহের তারিখ
        if archival_dates ~= nil then
            archival_date = converter._main(mw.wikibase.formatValue(archival_dates[1]))
        end

        local archive_url_string = ''
        if archive_url ~= nil then
            if archival_date ~= nil then
                archive_url_string = ' ([' .. archive_url .. ' ' .. mw.ustring.gsub(archive_dated, '$1', archival_date) .. '])'
            else
                archive_url_string = ' ([' .. archive_url .. ' ' .. archive_undated .. '])'
            end
            table.insert(inside_text_parts, archive_url_string)
        end
    end

    local example_from_publishedin_out = ''
    local example_from_link = nil

    if example_from_id ~= nil then
        for property, format_string in pairs(indicator_format_strings) do
            for i, statement in pairs(mw.wikibase.getEntity(example_from_id):getBestStatements(property)) do
                local example_from_author = statement.mainsnak.datavalue.value.id
                local example_from_author_text = mw.wikibase.getLabel( example_from_author )
                local example_from_author_link = mw.wikibase.getSitelink( example_from_author, target_wikisource )
                if example_from_author_link ~= nil then
                    from_author_line = "—[[:s:" .. example_from_author_link .. '|' .. example_from_author_text .. "]]"
                else
                    from_author_line = "—" .. example_from_author_text
                end
                from_author_line = mw.ustring.gsub(format_string, '$1', from_author_line)
                table.insert(inside_text_parts, from_author_line)
            end
        end
        example_from_link = mw.wikibase.getSitelink( example_from_id, target_wikisource )
    end

    if example_from_link ~= nil then
        table.insert(inside_text_parts, '[[File:Wikisource-logo.svg|16px|link=s:]] [[:s:' .. example_from_link .. '|' .. example_from_text .. ']]')
    elseif example_from_text ~= '' then
        table.insert(inside_text_parts, example_from_text)
    end

    if example_from_id ~= nil and #(mw.wikibase.getEntity(example_from_id):getBestStatements('P1433')) ~= 0 then -- এতে প্রকাশিত
        local example_from_publishedin = mw.wikibase.getEntity(example_from_id):getBestStatements('P1433')[1].mainsnak.datavalue.value.id
        local example_from_publishedin_text = mw.wikibase.getLabelByLang( example_from_publishedin, base_lang_code_labels )
        if example_from_publishedin_text == nil then
            for i, fallback_lang in ipairs(mw.language.getFallbacksFor( base_lang_code_labels )) do
                if mw.wikibase.getLabelByLang( example_from_publishedin, fallback_lang ) ~= nil then
                    example_from_publishedin_text = mw.wikibase.getLabelByLang( example_from_publishedin, fallback_lang )
                end
            end
        end
        local example_from_publishedin_link = mw.wikibase.getSitelink( example_from_publishedin, target_wikisource ) or ''
        if example_from_publishedin_link == '' then
            example_from_publishedin_out = " (" .. mw.ustring.gsub(published_in_format_string, "$1", "''" .. example_from_publishedin_text .. "''") .. ")"
        else
            example_from_publishedin_out = " (" .. mw.ustring.gsub(published_in_format_string, "$1", "[[:s:" .. example_from_publishedin_link .. '|' .. example_from_publishedin_text .. ']]') .. ')'
        end
    elseif reference.snaks['P1433'] ~= nil then
        local example_from_publishedin = reference.snaks['P1433'][1].datavalue.value.id
        local example_from_publishedin_text = mw.wikibase.getLabelByLang( example_from_publishedin, base_lang_code_labels )
        if example_from_publishedin_text == nil then
            for i, fallback_lang in ipairs(mw.language.getFallbacksFor( base_lang_code_labels )) do
                if mw.wikibase.getLabelByLang( example_from_publishedin, fallback_lang ) ~= nil then
                    example_from_publishedin_text = mw.wikibase.getLabelByLang( example_from_publishedin, fallback_lang )
                end
            end
        end
        local example_from_publishedin_link = mw.wikibase.getSitelink( example_from_publishedin, target_wikisource ) or ''
        if example_from_publishedin_link == '' then
            example_from_publishedin_out = " (" .. mw.ustring.gsub(published_in_format_string, "$1", "''" .. example_from_publishedin_text .. "''") .. ")"
        else
            example_from_publishedin_out = " (" .. mw.ustring.gsub(published_in_format_string, "$1", "[[:s:" .. example_from_publishedin_link .. '|' .. example_from_publishedin_text .. ']]') .. ')'
        end
    end

    if example_from_publishedin_out ~= '' then
        table.insert(inside_text_parts, example_from_publishedin_out)
    end

    local example_from_lines = ''
    for property, format_string in pairs(specifier_format_strings) do
        if reference.snaks[property] ~= nil then
            example_from_lines = reference.snaks[property][1].datavalue.value -- পংক্তি(গুলো)
            example_from_lines = mw.ustring.gsub(format_string, '$1', converter._main(example_from_lines))
            table.insert(inside_text_parts, example_from_lines)
        end
    end

    return table.concat(inside_text_parts, ', ')
end

return p