string2

Для документации этого модуля может быть создана страница Модуль:String2/doc

--[[     Кое-какие дополнительные функции для строк ]] 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  -- если строка s содержит число, увеличивает первое такое число на n, иначе возращает пустую строку. -- если число начинается на 0, то увеличенное число будет содержать по крайне мере столько цифр сколько исходное. function M.increase(s, n)      local a,b,c = string.match(s, "([^0-9]*)([0-9]+)(.*)")     if b==nil then return s end     local num = tonumber(b) + n     if b:sub(1,1)=='0'      then b = string.format("%0"..b:len().."d", num) else b=num end     return a .. b .. c end   function M.ucfirst(frame ) local s =  mw.text.trim( frame.args[1] or "" ) local s1 = "" -- if it's a list chop off and (store as s1) everything up to the first 
  • local lipos = string.find(s, "
  • " ) if lipos then s1 = string.sub(s, 1, lipos + 3) s = string.sub(s, lipos + 4) end -- s1 is either "" or the first part of the list markup, so we can continue -- and prepend s1 to the returned string local letterpos if string.find(s, "^%[%[[^|]+|[^%]]+%]%]") then -- this is a piped wikilink, so we capitalise the text, not the pipe local _ _, letterpos = string.find(s, "|%A*%a") -- find the first letter after the pipe else letterpos = string.find(s, '%a') end if letterpos then local first = string.sub(s, 1, letterpos - 1) local letter = string.sub(s, letterpos, letterpos) local rest = string.sub(s, letterpos + 1) return s1 .. first .. string.upper(letter) .. rest else return s1 .. s end end return M
  • Tags:

    🔥 Trending searches on Wiki Лакку:

    Имам ШамилРумыниаОьрус мазРяхцӀаллий мяйваЕвропаЛондонАдабиятСумбатльИнсанХӀавиЖаннакъаттаМуса идавсВихссакаМизитАрулцӀаллий арулваЩарДмитрий МедведевАпрельКитайИталияЗувиллий цаваКициАлхӀатЧчиккуКъюкӀВиратыМяйцӀаллий цаваЧӀитӀЛачIун уккавуОь (хӀарп)ТтуршваБалхъарСаоьдуллал АьрабусттанПӀЧахирЗувиллий мукьваТIабиаьтМокша мазрал ВикипедияПапайяХъусращиЮнус идавсИтниТӀантӀаЧчарлу🡆 More