Модуль:String2
Цей модуль потребує відлагодження. Не застосовуйте його широко, поки не протестуєте. |
Документація вище включена з Модуль:String2/документація. (ред. | історія) Дописувачі можуть експериментувати на підсторінках пісочниці (ред. | різн.) та тести (створити) цього шаблону. Будь ласка, додавайте категорії до підсторінки /документація. Підсторінки цієї сторінки. |
--[[ Деякі додаткові функції для рядків]]local M = { bs=function(f)-- Перший параметр до початку другого параметра (або до кінця, якщо він не зустрівся). -- Необов’язковий 3-й параметр — з якого за номером (з 1) символу починати пошук. return mw.ustring.sub(f.args[1], 1, (mw.ustring.find(f.args[1],f.args[2],tonumber(f.args[3] or 1),true) or 0)-1) end; as=function(f)-- Перший параметр після початку другого параметра. return mw.ustring.sub(f.args[1], (mw.ustring.find(f.args[1],f.args[2],1,true) or 0)+1) end; Tr=function(s,f,t,cf,df,sf)-- Транслітерація першого параметра шляхом заміни символів з другого параметра символами з третього. -- Окремими параметрами можна передавати прапори c, d і s, як у Perl; діапазони в заміні не працюють, тільки в лівій частині -- (тобто дефіс треба передавати першим або останнім). Другий результат — число замінених символів. local r, l, l2 = {}, mw.ustring.len(f), mw.ustring.len(t); for i = 1, l do r[mw.ustring.sub(f,i,i)] = i<=l2 and mw.ustring.sub(t,i,i) or df and '' or mw.ustring.sub(t,l2,l2) end local n2=0; local res, n = mw.ustring.gsub( s, ('[%s%s]%s'):format( cf and '^' or '', f:gsub('%','%%'):gsub(']','%]'):gsub('^%^','%^'), sf and '+' or '' ), sf and function(cc) n2 = n2+mw.ustring.len(cc)-1; return mw.ustring.gsub(cc,'.',r) end or r ) return res, n+n2 end; -- tr = function(f) return (M.Tr(f.args[1],f.args[2],f.args[3],f.args['c'],f.args['d'],f.args['s'])) end;-- транслітерувати -- trс = function(f) return ({M.Tr(f.args[1],f.args[2],f.args[3],f.args['c'],f.args['d'],f.args['s'])})[2] end;-- порахувати символи Trg = function(s,t,f,fi)-- Виконує заміну рядків довільної довжини (якщо з fi, не враховує регістр). -- Пріоритет — порядок у таблицях. for n,p in ipairs(t) do t[n] = {fi and mw.ustring.upper(p) or p,mw.ustring.len(p)} end local r,i,l,N = {},1,mw.ustring.len(s),0 while i<=l do (function() for n,p in ipairs(t) do if ( fi and mw.ustring.upper(mw.ustring.sub(s,i,i+p[2]-1)) or mw.ustring.sub(s,i,i+p[2]-1) ) == p[1] then table.insert(r,f[n]); i = i+p[2]; N=N+1; return end end table.insert(r,mw.ustring.sub(s,i,i)); i=i+1; return end)() end return table.concat(r),N end; trg = function(frame) -- Працює з номерними аргументами шаблону, якщо заданий параметр u, інакше зі своїми. -- Замінює в першому аргументі аргументи 2, 4, 6… на аргументи 3, 5, 7… local tf, t, f, i= frame.args['u'] and frame.getParent() or f, {}, {}, 1; while tf.args[2*i] do t[tf.args[2*i]]=tf.args[2*i+1] or '' end return ( M.Trg(tf.args[1],t,f,(frame.args['i'] or '')~='') ) end; join = function (f) -- Об’єднує нумеровані аргументи вихідного шаблону -- від from або 1 до to або першого відсутнього через перший параметр invoke. -- Останній елемент можна приєднувати інакше, задавши другий параметр: -- за замовчанням ',' & 'и'. -- Якщо 3-й параметр invoke — "s", рядки з пробілів ігноруються. Якщо "_", ігноруються пусті рядки. local t, tf, i = {}, f:getParent(), tonumber(f.args.from) or 1 local k,j,m = tonumber(f.args.to),i,f.args[3] while k and i<=k or tf.args[i] do if ( ({ ['_']=function(s)return s~=''end; ['s']=function(s)return not tostring(s):match("^%s*$")end })[m] or function() return true end )(tf.args[i]) then t[j]=tf.args[i]; j=j+1 end; i=i+1 end return mw.text.listToText(t,f.args[1],f.args[2] or f.args[1])end}function M.formatRound(frame) -- Форматує число, щоби воно мало order знаків після коми. return string.format("%0."..frame.args[2].."f",tonumber(frame.args[1])); end-- split splits text at boundaries specified by separator-- and returns the chunk for the index idx (starting at 1)-- #invoke:String2 |split |text |separator |index |true/false-- #invoke:String2 |split |txt=text |sep=separator |idx=index |plain=true/false-- if plain is false/no/0 then separator is treated as a Lua pattern - defaults to plain=trueM.split = function(frame)local args = frame.argsif not(args[1] or args.txt) then args = frame:getParent().args endlocal txt = args[1] or args.txt or ""if txt == "" then return nil endlocal sep = (args[2] or args.sep or ""):gsub('"', '')local idx = tonumber(args[3] or args.idx) or 1local plain = (args[4] or args.plain or "true"):sub(1,1)plain = (plain ~= "f" and plain ~= "n" and plain ~= "0")local splittbl = mw.text.split( txt, sep, plain )if idx < 0 then idx = #splittbl + idx + 1 endreturn splittbl[idx]endreturn M
🔥 Top keywords: Файл:Pornhub-logo.svgГоловна сторінкаPorno for PyrosБрати КапрановиСпеціальна:ПошукUkr.netНові знанняЛіга чемпіонів УЄФАХ-69Файл:XVideos logo.svgСлобоженко Олександр ОлександровичPornhubЧернігівYouTubeУкраїнаЛунін Андрій ОлексійовичІскандер (ракетний комплекс)Шевченко Тарас ГригоровичATACMSДень працівників пожежної охорониВірастюк Василь ЯрославовичВікторія СпартцАлеппоFacebookГолос УкраїниКиївПетриченко Павло ВікторовичДуров Павло ВалерійовичСексФолаутТериторіальний центр комплектування та соціальної підтримкиTelegramНаселення УкраїниГай Юлій ЦезарЛеся УкраїнкаОхлобистін Іван ІвановичOLXДруга світова війнаЗагоризонтний радіолокатор