模組:R:Bailly

維基詞典,自由的多語言詞典


local export = {}

local accent_m = require("Module:grc-accent")
local script_m = require("Module:scripts")
local lang = require("Module:languages").getByCode("grc")

function b_search_wrapper(ys,x,L,H)
	local i = b_search(ys,x,L,H)
	return ys[i][2] - (ys[i][1] == x and 0 or 1)
end

function b_search(ys, x, L, H)
    if L < 0 then error('L < 0') end
    while L < H do
        M = math.floor((L+H) / 2)
        if ys[M][1] < x then L = M+1 else H = M end
    end
    return L
 end

function sundesmos(logos, selis)
	local url = "https://archive.org/stream/BaillyDictionnaireGrecFrancais/Bailly_DictionnaireGrecFrancais#page/n"..(selis-1).."/mode/1up"
	local logos_span = '<span class="polytonic" lang="grc">'..logos..'</span>'
	return '['..url..' '..logos_span..'] in '
end

function remove_diacritics(logos) --not used; keeping this function around just in case
	local diacritics = { ["769"]={}, ["787"]={}, ["788"]={}, ["770"]={}}           --acute, smooth, rough, circumflex
	local nfd, rv = mw.ustring.toNFD(logos), {}
	local len = mw.ustring.len(nfd)
	for i = 1,len do 
      	c = mw.ustring.sub(nfd,i,i)
	 	if diacritics[tostring(mw.ustring.codepoint(c))] == nil then 
	 		rv[#rv+1] = c end end
	return table.concat(rv)
end


function export.create(frame)
	local args = frame:getParent().args
	local logos = args['w'] or mw.title.getCurrentTitle().text
	if lang:findBestScript(logos):getCode() ~= "polytonic" then
		return ''
	end
	local selis = b_search_wrapper(
		mw.loadData("Module:R:Bailly/headwords"),
		mw.ustring.lower(accent_m.strip_accent(logos)),
		1,
		2163
		)
	return sundesmos(logos, selis)
end

return export