-- বাংলায় ফলাফল দিতে এই মডিউলে কিছু পরিবর্তন করা হয়েছে। হালনাগাদের সময় সতর্কতা অবলম্বন করুন। local bangla = require("Module:Numeral converter").convert require('Module:No globals')  local function getCatForId( id )     local title = mw.title.getCurrentTitle()     local namespace = title.namespace     if namespace == 0 then         return 'Category:উইকিপিডিয়া নিবন্ধ ' .. id .. ' পরিচয়ে'     elseif namespace == 2 and not title.isSubpage then         return 'Category:ব্যবহারকারী পাতা ' .. id .. ' পরিচয়ে'     else         return 'Category:বিবিধ পাতা ' .. id .. ' পরিচয়ে'     end end  local function viafLink( id )     if not string.match( id, '^%d+$' ) then         return false     end     return '.. id .. ' ' .. bangla("bn", id) .. '' .. getCatForId( 'ভিআইএএফ' ) end  local function kulturnavLink( id )     return '.. id .. ' id'  end  local function sikartLink( id )     return '.. id .. '&lng=en ' .. bangla("bn", id) .. ''  end  local function tlsLink( id ) 	local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'WIKI') end)     return '.. id2 .. ' ' .. id .. ''  end  local function ciniiLink( id )     return '.. id .. '?l=en ' .. id .. ''  end  local function bneLink( id )     return '.. id .. ' ' .. id .. ''  end  local function uscongressLink( id )     return '.. id .. ' ' .. id .. ''  end  local function narapersonLink( id )     return '.. id .. ' ' .. id .. ''  end  local function naraorganizationLink( id )     return '.. id .. ' ' .. id .. ''  end  local function botanistLink( id ) 	local id2 = mw.ustring.gsub(id, '%s', function(s) return mw.uri.encode(s, 'PATH') end)     return '.. id2 .. ' ' .. id .. ''  end  local function mgpLink( id )     -- TODO Implement some sanity checking regex     return '.. id .. ' ' .. id .. ''  end  local function rslLink( id )     -- TODO Implement some sanity checking regex     return '.. id .. '&CON_LNG=ENG ' .. id .. '' end  local function leonoreLink( id ) -- Identifiants allant de LH/1/1 à LH/2794/54 (légionnaires) -- Identifiants allant de C/0/1 à C/0/84 (84 légionnaires célèbres) -- Identifiants allant de 19800035/1/1 à 19800035/385/51670 (légionnaires décédés entre 1954 et 1977, et quelques dossiers de légionnaires décédés avant 1954)     if not string.match( id, '^LH/%d%d?%d?%d?/%d%d?%d?$' ) and        not string.match( id, '^C/0/%d%d?$' ) and 	   not string.match( id, '^19800035/%d%d?%d?%d?/%d%d?%d?%d?%d?$' ) then         return false     end     return '.. id .. ' ' .. id .. ''  end  local function sbnLink( id )     if not string.match( id, '^IT\\ICCU\\%d%d%d%d%d%d%d%d%d%d$' ) and not string.match( id, '^IT\\ICCU\\%u%u[%d%u]%u\\%d%d%d%d%d%d$' ) then         return false     end     return '.. id .. ' ' .. id .. '' end  local function nkcLink( id ) 	return '.. id .. '&CON_LNG=ENG ' .. id .. ''  end  local function nclLink( id )     if not string.match( id, '^%d+$' ) then         return false     end     return '.. id .. '&CON_LNG=ENG ' .. id .. ''  end  local function ndlLink( id ) 	return '.. id .. ' ' .. bangla("bn", id) .. ''  end  local function sudocLink( id )     if not string.match( id, '^%d%d%d%d%d%d%d%d[%dxX]$' ) then         return false     end     return '.. id .. ' ' .. bangla("bn", id) .. ''  end  local function hlsLink( id )     if not string.match( id, '^%d+$' ) then         return false     end     return '.. id .. '.php ' .. id .. '' end  local function lirLink( id )     if not string.match( id, '^%d+$' ) then         return false     end     return '.. id .. '.450.0.html ' .. id .. '' end  local function splitLccn( id )     if id:match( '^%l%l?%l?%d%d%d%d%d%d%d%d%d?%d?$' ) then         id = id:gsub( '^(%l+)(%d+)(%d%d%d%d%d%d)$', '%1/%2/%3' )     end     if id:match( '^%l%l?%l?/%d%d%d?%d?/%d+$' ) then          return mw.text.split( id, '/' )     end     return false end  local function append(str, c, length)     while str:len() < length do         str = c .. str     end     return str end  local function lccnLink( id )     local parts = splitLccn( id )     if not parts then         return false     end     local lccnType = parts[1] ~= 'sh' and 'names' or 'subjects'     id = parts[1] .. parts[2] .. append( parts[3], '0', 6 )     return '.. lccnType .. '/' .. id .. ' ' .. bangla("bn", id) .. '' .. getCatForId( 'এলসিসিএন' ) end  local function mbLink( id )     -- TODO Implement some sanity checking regex     return '.. id .. ' ' .. id .. '' .. getCatForId( 'মিউজিকব্রেনজ' ) end  --Returns the ISNI check digit isni must be a string where the 15 first elements are digits local function getIsniCheckDigit( isni )     local total = 0     for i = 1, 15 do         local digit = isni:byte( i ) - 48 --Get integer value         total = (total + digit) * 2     end     local remainder = total % 11     local result = (12 - remainder) % 11     if result == 10 then         return "X"     end     return tostring( result ) end  --Validate ISNI (and ORCID) and retuns it as a 16 characters string or returns false if it's invalid --See http://support.orcid.org/knowledgebase/articles/116780-structure-of-the-orcid-identifier local function validateIsni( id )     id = id:gsub( '[ %-]',  ):upper()     if not id:match( '^%d%d%d%d%d%d%d%d%d%d%d%d%d%d%d[%dX]$' ) then         return false     end     if getIsniCheckDigit( id ) ~= string.char( id:byte( 16 ) ) then         return false     end     return id end  local function isniLink( id )     id = validateIsni( id )     if not id then         return false     end     return '.. id .. ' ' .. bangla("bn", id:sub( 1, 4 )) .. ' ' .. bangla("bn", id:sub( 5, 8 )) .. ' '  .. bangla("bn", id:sub( 9, 12 )) .. ' '  .. bangla("bn", id:sub( 13, 16 )) .. '' .. getCatForId( 'আইএসএনআই' ) end  local function orcidLink( id )     id = validateIsni( id )     if not id then         return false     end     id = id:sub( 1, 4 ) .. '-' .. id:sub( 5, 8 ) .. '-'  .. id:sub( 9, 12 ) .. '-'  .. id:sub( 13, 16 )     return '.. id .. ' ' .. id .. '' .. getCatForId( 'ওআরসিআইডি' ) end  local function gndLink( id )     return '.. id .. ' ' .. bangla("bn", id) .. '' .. getCatForId( 'জিএনডি' ) end  local function selibrLink( id ) 	if not string.match( id, '^%d+$' ) then         return false     end     return '.. id .. ' ' .. id .. '' .. getCatForId( 'এসইএলআইবিআর' ) end  local function bnfLink( id )     --Add cb prefix if it has been removed     if not string.match( id, '^cb.+$' ) then         id = 'cb' .. id     end      return '.. id .. ' ' .. bangla("bn", id) .. ' .. id .. ' (উপাত্ত)' .. getCatForId( 'বিএনএফ' ) end  local function bpnLink( id )     if not string.match( id, '^%d+$' ) then         return false     end     return '.. id .. ' ' .. id .. '' .. getCatForId( 'বিএনপি' ) end  local function ridLink( id )     return '.. id .. ' ' .. id .. '' .. getCatForId( 'আরআইডি' ) end  local function bibsysLink( id )     return '.. id .. '&feltselect=bs.autid ' .. id .. '' .. getCatForId( 'বিআইবিএসওয়াইএস' ) end  local function ulanLink( id )     return '.. id .. ' ' .. id .. '' .. getCatForId( 'ইউএলএএন' ) end  local function nlaLink( id ) 	return '.. id .. ' ' .. id .. '' .. getCatForId( 'এনএলএ' ) end  local function rkdartistsLink( id ) 	return '.. id .. ' ' .. id .. '' .. getCatForId( 'RKDartists' ) end  local function getIdsFromWikidata( item, property )     local ids = {}     if not item.claims[property] then         return ids     end     for _, statement in pairs( item.claims[property] ) do 		if statement.mainsnak.datavalue then 			table.insert( ids, statement.mainsnak.datavalue.value ) 		end     end     return ids end  local function matchesWikidataRequirements( item, reqs )     for _, group in pairs( reqs ) do         local property = 'p' .. group[1]         local qid = group[2]         if item.claims[property] ~= nil then             for _, statement in pairs ( item.claims[property] ) do             	if statement.mainsnak.datavalue ~= nil then 	                if statement.mainsnak.datavalue.value['numeric-id'] == qid then     	                return true         	        end         	    end             end         end     end     return false end  local function createRow( id, label, rawValue, link, withUid )     if link then         if withUid then             return '* ' .. label .. ' ' .. link .. '\n'         else             return '* ' .. label .. ' ' .. link .. '\n'         end     else         return '* আইডি ' .. id .. ' ' .. rawValue .. ' বৈধ নয়।Category:ত্রুটিপূর্ণ কর্তৃপক্ষ নিয়ন্ত্রণ শনাক্তকারী (' .. id .. ')সহ উইকিপিডিয়া নিবন্ধ\n'     end end  --In this order: name of the parameter, label, propertyId in Wikidata, formatting function local conf = {     { 'VIAF', 'ভিআইএএফ', 214, viafLink },     { 'LCCN', 'এলসিসিএন', 244, lccnLink },     { 'ISNI', 'আইএসএনআই', 213, isniLink },     { 'ORCID', 'ওআরসিআইডি', 496, orcidLink },     { 'GND', 'জিএনডি', 227, gndLink },     { 'SELIBR', 'এলআইবিআরআইএস', 906, selibrLink },     { 'SUDOC', 'এসইউডিওসি', 269, sudocLink },         { 'BNF', 'বিএনএফ', 268, bnfLink },     { 'BPN', 'বিএনপি', 651, bpnLink },     { 'RID', 'রিসার্চার আইডি', 1053, ridLink },     { 'BIBSYS', 'বিআইবিএসওয়াইএস', 1015, bibsysLink },     { 'ULAN', 'ইউএলএএন', 245, ulanLink },     { 'HDS', 'এইচডিএস', 902, hlsLink },     { 'LIR', 'এলআইআর', 886, lirLink },     { 'MBA', 'এমবি', 434, mbLink },     { 'MGP', 'এমজিপি', 549, mgpLink },         { 'NLA', 'এনএলএ', 409, nlaLink },     { 'NDL', 'এনডিএল', 349, ndlLink },     { 'NCL', 'এনসিএল', 1048, nclLink },     { 'NKC', 'এনকেসি', 691, nkcLink },     { 'Léonore', 'লেওনর', 640, leonoreLink },      { 'SBN', 'আইসিসিইউ', 396, sbnLink },          { 'RLS', 'আরএলএস', 947, rslLink },     { 'Botanist', 'Botanist', 428, botanistLink },     { 'NARA-person', 'NARA', 1222, narapersonLink },     { 'NARA-organization', 'NARA', 1223, naraorganizationLink },     { 'USCongress', 'US Congress', 1157, uscongressLink },     { 'BNE', 'BNE', 950, bneLink },     { 'CINII', 'CiNii', 271, ciniiLink },     { 'TLS', 'TLS', 1362, tlsLink },     { 'SIKART', 'SIKART', 781, sikartLink },     { 'KULTURNAV', 'KulturNav', 1248, kulturnavLink },     { 'RKDartists', 'RKD', 650, rkdartistsLink }, }  -- Check that the Wikidata item has this property-->value before adding it local reqs = {}  local p = {}  function p.authorityControl( frame )     local parentArgs = frame:getParent().args     --Create rows     local elements = {}      --redirect PND to GND     if (parentArgs.GND == nil or parentArgs.GND == ) and parentArgs.PND ~= nil and parentArgs.PND ~=  then         parentArgs.GND = parentArgs.PND     end      --Wikidata fallback if requested     local item = mw.wikibase.getEntityObject()     if item ~= nil and item.claims ~= nil then         for _, params in pairs( conf ) do             if params[3] ~= 0 then                 local val = parentArgs[params[1]]                 if not val or val ==  then                 	local canUseWikidata = nil                     if reqs[params[1]] ~= nil then                         canUseWikidata = matchesWikidataRequirements( item, reqs[params[1]] )                     else                         canUseWikidata = true                     end                     if canUseWikidata then                         local wikidataIds = getIdsFromWikidata( item, 'P' .. params[3] )                         if wikidataIds[1] then                             parentArgs[params[1]] = wikidataIds[1]                         end                     end                 end             end         end     end      --Worldcat     if parentArgs['WORLDCATID'] and parentArgs['WORLDCATID'] ~=  then         table.insert( elements, createRow( 'WORLDCATID', , parentArgs['WORLDCATID'], '.. parentArgs['WORLDCATID' .. ' ওয়ার্ল্ডক্যাট]', false ) ) --Validation?     elseif parentArgs['LCCN'] and parentArgs['LCCN'] ~=  then         local lccnParts = splitLccn( parentArgs['LCCN'] )         if lccnParts and lccnParts[1] ~= 'sh' then             table.insert( elements, createRow( 'LCCN', , parentArgs['LCCN'], '.. lccnParts[1 .. lccnParts[2] .. '-' .. lccnParts[3] .. ' ওয়ার্ল্ডক্যাট]', false ) )         end     end      --Configured rows     local rct = 0     for k, params in pairs( conf ) do         local val = parentArgs[params[1]]         if val and val ~=  then             table.insert( elements, createRow( params[1], params[2] .. ':', val, params[4]( val ), true ) )             rct = rct + 1         end     end     local Navbox = require('Module:Navbox')     local elementscats =      if rct > 13 then     	elementscats  = 'Category:' .. rct .. ' উপাদানসহ কর্তৃপক্ষ নিয়ন্ত্রণ' 	end 	 	if #elements ~= 0 then 		return Navbox._navbox( { 			name  = 'কর্তৃপক্ষ নিয়ন্ত্রণ', 			bodyclass = 'hlist', 			group1 = 'কর্তৃপক্ষ নিয়ন্ত্রণ' .. elementscats, 			list1 = table.concat( elements ) 			} ) 	else 		return "" 	end end  return p