local i = {} local convert = require('মডিউল:সংখ্যা রূপান্তরকারী').convert function i.LinkOnePhone(txt, demo, fax, tollfree) local link = txt; local othertxt = ""; local catprefix = ''; local catMissingCountryCode = ''; local catFormatIssue = ''; local output; if demo == 'true' then catprefix = ':'; end -- any other text in brackets at the end is stored separately and ignored for the dialing number if mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%2") ~= txt then othertxt = mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%2"); txt = mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%1"); end -- Don't include "ext NNNN" in the link link = mw.ustring.gsub(txt, " +[Ee][Xx][Tt] +%d+$", ""); -- Don't include " xNNNN" in the link link = mw.ustring.gsub(link, " +x%d+$", ""); link = mw.ustring.gsub(link, " ", ""); link = mw.ustring.gsub(link, "'", ""); if link == "" then return ""; end if mw.ustring.sub(link, 1, 1) ~= '+' and mw.ustring.len(link) > 4 then catMissingCountryCode = '[[' .. catprefix .. 'বিষয়শ্রেণী:অনুপস্থিত দেশের কোডসহ ফোন তালিকাভুক্তকরণ]]<span class="phoneinfo" style="display:none;" title="ফোন নম্বরে দেশের কোড দেওয়া হয়নি">NOCC</span>'; if tollfree == 'yes' and mw.ustring.sub(link, 1, 3) == '800' then catMissingCountryCode = ''; end if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '0508' then catMissingCountryCode = ''; end if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '0800' then catMissingCountryCode = ''; end if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '1300' then catMissingCountryCode = ''; end if tollfree == 'yes' and mw.ustring.sub(link, 1, 4) == '1800' then catMissingCountryCode = ''; end if tollfree == 'yes' and mw.ustring.sub(link, 1, 5) == '01800' then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"উচ্চ খরচ") ~= nil then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"অতিরিক্ত চার্জ") ~= nil then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"প্রিমিয়াম") ~= nil then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"স্থানীয় হার") ~= nil then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"দেশের মধ্যে শুধু") ~= nil then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"দেশীয়") ~= nil then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"জরুরী") ~= nil then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"অ%-জরুরী") ~= nil then catMissingCountryCode = ''; end if mw.ustring.match(mw.ustring.lower(othertxt),"অ%-ভৌগলিক নম্বর") ~= nil then catMissingCountryCode = ''; end end if mw.ustring.match(link,"^%+[%d-() ]+$") ~= nil then output = '<span class="plainlinks nourlexpansion">'; if fax == 'true' then output = output .. convert('bn', tostring(txt)) .. '</span>' .. othertxt; else output = output .. '[tel:' .. convert('en', tostring(link)) .. ' ' .. convert('bn', tostring(txt)) .. ']</span>' .. othertxt; end elseif mw.ustring.match(link,"^%+[%d%u- ]+$") ~= nil then local extra = mw.ustring.match(link, "%u[%d%u- ]+") link = mw.ustring.gsub(link, "[A-C]", "2"); link = mw.ustring.gsub(link, "[D-F]", "3"); link = mw.ustring.gsub(link, "[G-I]", "4"); link = mw.ustring.gsub(link, "[J-L]", "5"); link = mw.ustring.gsub(link, "[M-O]", "6"); link = mw.ustring.gsub(link, "[P-S]", "7"); link = mw.ustring.gsub(link, "[T-V]", "8"); link = mw.ustring.gsub(link, "[W-Z]", "9"); extra = mw.ustring.gsub(extra, "[A-C]", "2"); extra = mw.ustring.gsub(extra, "[D-F]", "3"); extra = mw.ustring.gsub(extra, "[G-I]", "4"); extra = mw.ustring.gsub(extra, "[J-L]", "5"); extra = mw.ustring.gsub(extra, "[M-O]", "6"); extra = mw.ustring.gsub(extra, "[P-S]", "7"); extra = mw.ustring.gsub(extra, "[T-V]", "8"); extra = mw.ustring.gsub(extra, "[W-Z]", "9"); output = '<span class="plainlinks nourlexpansion">'; if fax == 'true' then output = output .. convert('bn', tostring(txt)) .. ' (' .. extra .. ')' .. '</span>' .. othertxt; else output = output .. '[tel:' .. convert('en', tostring(link)) .. ' ' .. convert('bn', tostring(txt)) .. ' (' .. extra .. ')' .. ']</span>' .. othertxt; end else output = convert('bn', tostring(txt)) .. othertxt; if mw.ustring.match('+' .. link,"^%+[%d-() ]+$") == nil then catFormatIssue = '[[' .. catprefix .. 'বিষয়শ্রেণী:ফোন বিন্যাস সমস্যাসহ তালিকাভুক্তকরণ]]<span class="phoneinfo" style="display:none;" title="ফোন নম্বরে বিন্যাসন সমস্যা রয়েছে">FORMAT</span>'; end end if mw.ustring.match(link,"%(0%)") ~= nil then catFormatIssue = '[[' .. catprefix .. 'বিষয়শ্রেণী:ফোন বিন্যাস সমস্যাসহ তালিকাভুক্তকরণ]]<span class="phoneinfo" style="display:none;" title="ফোন নম্বরে বিন্যাসন সমস্যা রয়েছে">FORMAT</span>'; end if mw.title.getCurrentTitle().namespace == 0 or demo == 'true' then output = output .. catFormatIssue .. catMissingCountryCode; end return output; end function i.LinkPhone(frame) local demo = frame.args["demo"] or ''; local fax = frame.args["fax"] or ''; local txtall = frame.args[1] or '' .. ','; local tollfree = frame.args["tollfree"] or ''; local txt = ""; local result = ""; -- replace or / and with comma txtall = mw.ustring.gsub(txtall, " or %+", ", +"); txtall = mw.ustring.gsub(txtall, " and %+", ", +"); for txt in mw.ustring.gmatch(txtall, "([^,]+)") do result = result .. ", " .. i.LinkOnePhone(txt, demo, fax, tollfree) end result = mw.ustring.sub(result, 3, mw.ustring.len(result) ); return result; end function i.LinkOneEmail(txt, demo) local othertxt = ""; local catprefix = ''; local catFormatIssue = ''; local output; if demo == 'true' then catprefix = ':'; end -- any other text in brackets at the end is stored separately and ignored for the dialing number if mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%2") ~= txt then othertxt = mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%2"); txt = mw.ustring.gsub(txt, "(.*)( %(.*%))$", "%1"); end txt = mw.ustring.gsub(txt, " ", ""); output = '[mailto:' .. txt .. ' ' .. txt .. ']' .. othertxt; if mw.ustring.match(txt,"@.+@") ~= nil then catFormatIssue = '[[' .. catprefix .. 'বিষয়শ্রেণী:ইমেইল বিন্যাস সমস্যাসহ তালিকাভুক্তকরণ]]<span class="phoneinfo" style="display:none;" title="ইমেইলে বিন্যাসন সমস্যা রয়েছে">FORMAT</span>'; end if mw.ustring.match(txt,"@[^.]+%.%.") ~= nil then catFormatIssue = '[[' .. catprefix .. 'বিষয়শ্রেণী:ইমেইল বিন্যাস সমস্যাসহ তালিকাভুক্তকরণ]]<span class="phoneinfo" style="display:none;" title="ইমেইলে বিন্যাসন সমস্যা রয়েছে">FORMAT</span>'; end if mw.ustring.match(txt,"@") == nil then catFormatIssue = '[[' .. catprefix .. 'বিষয়শ্রেণী:ইমেইল বিন্যাস সমস্যাসহ তালিকাভুক্তকরণ]]<span class="phoneinfo" style="display:none;" title="ইমেইলে বিন্যাসন সমস্যা রয়েছে">FORMAT</span>'; end if mw.ustring.match(txt,"@[^.]+%.[^.]+") == nil then catFormatIssue = '[[' .. catprefix .. 'বিষয়শ্রেণী:ইমেইল বিন্যাস সমস্যাসহ তালিকাভুক্তকরণ]]<span class="phoneinfo" style="display:none;" title="ইমেইলে বিন্যাসন সমস্যা রয়েছে">FORMAT</span>'; end if mw.title.getCurrentTitle().namespace == 0 or demo == 'true' then output = output .. catFormatIssue; end return output; end function i.LinkEmail(frame) local demo = frame.args["demo"] or ''; local txtall = frame.args[1] or '' .. ','; local txt = ""; local result = ""; -- replace semicolon with comma txtall = mw.ustring.gsub(txtall, "; ", ", "); for txt in mw.ustring.gmatch(txtall, "([^,]+)") do result = result .. ", " .. i.LinkOneEmail(txt, demo) end result = mw.ustring.sub(result, 3, mw.ustring.len(result) ); return result; end return i;