Zum Inhalt springen

Modul:Text: Unterschied zwischen den Versionen

3.467 Bytes hinzugefügt ,  vor 8 Jahren
2017-03-25
w>NordNordWest
K (Änderte den Schutz von „Modul:Text“: per Anfrage: https://de.wikipedia.org/w/index.php?title=Wikipedia%3AAdministratoren%2FAnfragen&type=revision&diff=156076713&oldid=156073630 ([Bearbeiten=Nur Sichter] (unbeschränkt) [Verschieben=Nur Adminis…)
w>PerfektesChaos
(2017-03-25)
Zeile 1: Zeile 1:
local Text = { suite  = "Text",
local Text = { suite  = "Text",
               serial = "2015-06-21" };
               serial = "2017-03-25" }
--[=[
--[=[
Text utilities
Text utilities
Zeile 128: Zeile 128:
     return r
     return r
end -- fiatQuote()
end -- fiatQuote()
Text.char = function ( apply, again, accept )
    -- Create string from codepoints
    -- Parameter:
    --    apply  -- table (sequence) with numerical codepoints, or nil
    --    again  -- number of repetitions, or nil
    --    accept  -- true, if no error messages to be appended
    -- Returns: string
    local r
    if type( apply ) == "table" then
        local bad  = { }
        local codes = { }
        local s
        for k, v in pairs( apply ) do
            s = type( v )
            if s == "number" then
                if v < 32  and  v ~= 9  and  v ~= 10 then
                    v = tostring( v )
                else
                    v = math.floor( v )
                    s = false
                end
            elseif s ~= "string" then
                v = tostring( v )
            end
            if s then
                table.insert( bad, v )
            else
                table.insert( codes, v )
            end
        end -- for k, v
        if #bad == 0 then
            if #codes > 0 then
                r = mw.ustring.char( unpack( codes ) )
                if again then
                    if type( again ) == "number" then
                        local n = math.floor( again )
                        if n > 1 then
                            r = r:rep( n )
                        elseif n < 1 then
                            r = ""
                        end
                    else
                        s = "bad repetitions: " .. tostring( again )
                    end
                end
            end
        else
            s = "bad codepoints: " .. table.concat( bad, " " )
        end
        if s  and  not accept then
            r = tostring(  mw.html.create( "span" )
                                  :addClass( "error" )
                                  :wikitext( s ) )
        end
    end
    return r or ""
end -- Text.char()




Zeile 149: Zeile 209:
             end
             end
         end
         end
     end
     end -- for k, v
     return table.concat( collect,  apply or "|" )
     return table.concat( collect,  apply or "|" )
end -- Text.concatParams()
end -- Text.concatParams()
Zeile 290: Zeile 350:
             end
             end
         end
         end
     end
     end -- for k, v
     return mw.text.listToText( collect )
     return mw.text.listToText( collect )
end -- Text.listToText()
end -- Text.listToText()
Zeile 310: Zeile 370:
           local mode, slang
           local mode, slang
           if type( alien ) == "string" then
           if type( alien ) == "string" then
               slang = alien:lower()
               slang = mw.text.trim( alien ):lower()
           else
           else
               slang = mw.language.getContentLanguage():getCode()
               slang = mw.language.getContentLanguage():getCode()
Zeile 452: Zeile 512:
                   end    -- for i
                   end    -- for i
               end -- flat()
               end -- flat()
        local focus = function ( a )
                  -- char is not ambivalent
                  local r = ( a > 64 )
                  if r then
                      r = ( a < 8192  or  a > 8212 )
                  else
                      r = ( a == 38  or  a == 60 )    -- '&' '<'
                  end
                  return r
              end -- focus()
         local form = function ( a )
         local form = function ( a )
                 return string.format( span,
                 return string.format( span,
Zeile 461: Zeile 531:
         for i = 1, n do
         for i = 1, n do
             c = mw.ustring.codepoint( adjust, i, i )
             c = mw.ustring.codepoint( adjust, i, i )
             if c > 64  or  c == 38  or  c == 60 then   -- '&' '<'
             if focus( c ) then
                 if flat( c ) then
                 if flat( c ) then
                     if j then
                     if j then
Zeile 527: Zeile 597:
-- Export
-- Export
local p = { }
local p = { }
function p.char( frame )
    local params = frame:getParent().args
    local story = params[ 1 ]
    local codes, lenient, multiple
    if story then
        local items = mw.text.split( story, "%s+" )
        if #items > 0 then
            local j
            lenient  = ( params.errors == "0" )
            codes    = { }
            multiple = tonumber( params[ "*" ] )
            for k, v in pairs( items ) do
                if v:sub( 1, 1 ) == "x" then
                    j = tonumber( "0" .. v )
                elseif v == "" then
                    v = false
                else
                    j = tonumber( v )
                end
                if v then
                    table.insert( codes,  j or v )
                end
            end -- for k, v
        end
    end
    return Text.char( codes, multiple, lenient )
end


function p.concatParams( frame )
function p.concatParams( frame )
Zeile 560: Zeile 658:
     return Text.isQuote( frame.args[ 1 ] or "" ) and "1" or ""
     return Text.isQuote( frame.args[ 1 ] or "" ) and "1" or ""
end
end
function p.listToFormat(frame)
    local lists = {}
    local pformat = frame.args["format"]
    local sep = frame.args["sep"] or ";"
    -- Parameter parsen: Listen
    for k, v in pairs(frame.args) do
        local knum = tonumber(k)
        if knum then lists[knum] = v end
    end
    -- Listen splitten
    local maxListLen = 0
    for i = 1, #lists do
        lists[i] = mw.text.split(lists[i], sep)
        if #lists[i] > maxListLen then maxListLen = #lists[i] end
    end
    -- Ergebnisstring generieren
    local result = ""
    local result_line = ""
    for i = 1, maxListLen do
        result_line = pformat
        for j = 1, #lists do
            result_line = mw.ustring.gsub(result_line, "%%s", lists[j][i], 1)
        end
        result = result .. result_line
    end
    return result
end


function p.listToText( frame )
function p.listToText( frame )
Zeile 575: Zeile 709:
     return Text.listToText( args, frame.args.format )
     return Text.listToText( args, frame.args.format )
end
end


function p.quoteUnquoted( frame )
function p.quoteUnquoted( frame )
Zeile 601: Zeile 737:
     return Text.uprightNonlatin( frame.args[ 1 ] or "" )
     return Text.uprightNonlatin( frame.args[ 1 ] or "" )
end
end


function p.zip(frame)
function p.zip(frame)
local lists = {}
    local lists = {}
local seps = {}
    local seps = {}
local defaultsep = frame.args["sep"] or ""
    local defaultsep = frame.args["sep"] or ""
local innersep = frame.args["isep"] or ""
    local innersep = frame.args["isep"] or ""
local outersep = frame.args["osep"] or ""
    local outersep = frame.args["osep"] or ""


-- Parameter parsen
    -- Parameter parsen
for k, v in pairs(frame.args) do
    for k, v in pairs(frame.args) do
local knum = tonumber(k)
        local knum = tonumber(k)
if knum then lists[knum] = v else
        if knum then lists[knum] = v else
if string.sub(k, 1, 3) == "sep" then
            if string.sub(k, 1, 3) == "sep" then
local sepnum = tonumber(string.sub(k, 4))
                local sepnum = tonumber(string.sub(k, 4))
if sepnum then seps[sepnum] = v end
                if sepnum then seps[sepnum] = v end
end
            end
end
        end
end
    end
-- sofern keine expliziten Separatoren angegeben sind, den Standardseparator verwenden
    -- sofern keine expliziten Separatoren angegeben sind, den Standardseparator verwenden
for i = 1, math.max(#seps, #lists) do
    for i = 1, math.max(#seps, #lists) do
if not seps[i] then seps[i] = defaultsep end
        if not seps[i] then seps[i] = defaultsep end
end
    end


-- Listen splitten
    -- Listen splitten
local maxListLen = 0
    local maxListLen = 0
for i = 1, #lists do
    for i = 1, #lists do
lists[i] = mw.text.split(lists[i], seps[i])
        lists[i] = mw.text.split(lists[i], seps[i])
if #lists[i] > maxListLen then maxListLen = #lists[i] end
        if #lists[i] > maxListLen then maxListLen = #lists[i] end
end
    end


local result = ""
    local result = ""
for i = 1, maxListLen do
    for i = 1, maxListLen do
if i ~= 1 then result = result .. outersep end
        if i ~= 1 then result = result .. outersep end
for j = 1, #lists do
        for j = 1, #lists do
if j ~= 1 then result = result .. innersep end
            if j ~= 1 then result = result .. innersep end
result = result .. (lists[j][i] or "")
            result = result .. (lists[j][i] or "")
end
        end
end
    end
return result
    return result
end
end


function p.listToFormat(frame)
 
local lists = {}
 
local pformat = frame.args["format"]
function p.failsafe()
local sep = frame.args["sep"] or ";"
    return Text.serial
-- Parameter parsen: Listen
for k, v in pairs(frame.args) do
local knum = tonumber(k)
if knum then lists[knum] = v end
end
-- Listen splitten
local maxListLen = 0
for i = 1, #lists do
lists[i] = mw.text.split(lists[i], sep)
if #lists[i] > maxListLen then maxListLen = #lists[i] end
end
-- Ergebnisstring generieren
local result = ""
local result_line = ""
for i = 1, maxListLen do
result_line = pformat
for j = 1, #lists do
result_line = mw.ustring.gsub(result_line, "%%s", lists[j][i], 1)
end
result = result .. result_line
end
return result
end
end


p.Text = function ()
p.Text = function ()
Anonymer Benutzer