Modul:Text: Unterschied zwischen den Versionen

6.795 Bytes hinzugefügt ,  vor 10 Jahren
2015-05-22
w>PerfektesChaos
(2015-03-17)
w>PerfektesChaos
(2015-05-22)
Zeile 1: Zeile 1:
--[=[ 2015-03-17
--[=[ 2015-05-22
Text utilities
Text utilities
]=]
]=]
Zeile 10: Zeile 10:
local PatternLatin      = false
local PatternLatin      = false
local PatternTerminated = false
local PatternTerminated = false
local QuoteLang        = false
local QuoteType        = false
local RangesLatin      = false
local RangesLatin      = false
local SeekQuote        = false
local function factoryQuote()
    -- Create quote definitions
    QuoteLang = { af        = "bd",
                  ar        = "la",
                  be        = "labd",
                  bg        = "bd",
                  ca        = "la",
                  cs        = "bd",
                  da        = "bd",
                  de        = "bd",
                  dsb      = "bd",
                  et        = "bd",
                  el        = "lald",
                  en        = "ld",
                  es        = "la",
                  eu        = "la",
                  fi        = "rd",
                  fr        = "la",
                  ga        = "ld",
                  he        = "ldla",
                  hr        = "bd",
                  hsb      = "bd",
                  hu        = "bd",
                  hy        = "labd",
                  id        = "rd",
                  is        = "bd",
                  it        = "ld",
                  ja        = "x300C",
                  ka        = "bd",
                  ko        = "ld",
                  lt        = "bd",
                  lv        = "bd",
                  nl        = "ld",
                  nn        = "la",
                  no        = "la",
                  pl        = "bdla",
                  pt        = "lald",
                  ro        = "bdla",
                  ru        = "labd",
                  sk        = "bd",
                  sl        = "bd",
                  sq        = "la",
                  sr        = "bd",
                  sv        = "rd",
                  th        = "ld",
                  tr        = "ld",
                  uk        = "la",
                  zh        = "ld",
                  ["de-ch"] = "la",
                  ["en-gb"] = "lsld",
                  ["en-us"] = "ld",
                  ["fr-ch"] = "la",
                  ["it-ch"] = "la",
                  ["pt-br"] = "ldla",
                  ["zh-tw"] = "x300C",
                  ["zh-zh"] = "ld" }
    QuoteType = { bd    = { { 8222, 8220 },  { 8218, 8217 } },
                  bdla  = { { 8222, 8220 },  {  171,  187 } },
                  la    = { {  171,  187 },  { 8249, 8250 } },
                  labd  = { {  171,  187 },  { 8222, 8220 } },
                  lald  = { {  171,  187 },  { 8220, 8221 } },
                  ld    = { { 8220, 8221 },  { 8216, 8217 } },
                  ldla  = { { 8220, 8221 },  {  171,  187 } },
                  lsld  = { { 8216, 8217 },  { 8220, 8221 } },
                  rd    = { { 8221, 8221 },  { 8217, 8217 } },
                  x300C = { { 0x300C, 0x300D },
                            { 0x300E, 0x300F } } }
    return r
end -- factoryQuote()
local function fiatQuote( apply, alien, advance )
    -- Quote text
    -- Parameter:
    --    apply    -- string, with text
    --    alien    -- string, with language code
    --    advance  -- number, with level 1 or 2
    local r = apply
    local suite
    if not QuoteLang then
        factoryQuote()
    end
    suite = QuoteLang[ alien ]
    if not suite then
        local slang = alien:match( "^(%l+)-" )
        if slang then
            suite = QuoteLang[ slang ]
        end
        if not suite then
            suite = QuoteLang[ "en" ]
        end
    end
    if suite then
        local quotes = QuoteType[ suite ]
        if quotes then
            quotes = quotes[ advance ]
            if quotes then
                r = mw.ustring.format( "%s%s%s",
                                      mw.ustring.char( quotes[ 1 ] ),
                                      apply,
                                      mw.ustring.char( quotes[ 2 ] ) )
            end
        else
            mw.log( "fiatQuote() " .. suite )
        end
    end
    return r
end -- fiatQuote()




Zeile 81: Zeile 196:
         end    -- for i
         end    -- for i
         PatternLatin = PatternLatin .. "]*$"
         PatternLatin = PatternLatin .. "]*$"
mw.log(PatternLatin)
     end
     end
     if adjust then
     if adjust then
Zeile 92: Zeile 206:
     return r
     return r
end -- Text.isLatinRange()
end -- Text.isLatinRange()
Text.isQuote = function ( ask )
    -- Is this character any quotation mark?
    -- Parameter:
    --    ask  -- string, with single character
    -- Returns: true, if ask is quotation mark
    local r
    if not SeekQuote then
        SeekQuote = mw.ustring.char(  34,      -- "
                                      39,      -- '
                                      171,      -- laquo
                                      187,      -- raquo
                                    8216,      -- lsquo
                                    8217,      -- rsquo
                                    8218,      -- sbquo
                                    8220,      -- ldquo
                                    8221,      -- rdquo
                                    8222,      -- bdquo
                                    8249,      -- lsaquo
                                    8250,      -- rsaquo
                                    0x300C,    -- CJK
                                    0x300D,    -- CJK
                                    0x300E,    -- CJK
                                    0x300F )    -- CJK
    end
    if ask == "" then
        r = false
    elseif mw.ustring.find( SeekQuote, ask, 1, true ) then
        r = true
    else
        r = false
    end
    return r
end -- Text.isQuote()




Zeile 115: Zeile 265:
     return mw.text.listToText( collect )
     return mw.text.listToText( collect )
end -- Text.listToText()
end -- Text.listToText()
Text.quoteUnquoted = function ( apply, alien, advance )
    -- Quote text, if not yet quoted
    -- Parameter:
    --    apply    -- string, with text
    --    alien    -- string, with language code, or nil
    --    advance  -- number, with level 1 or 2, or nil
    -- Returns: string; possibly quoted
    local r = mw.text.trim( apply )
    local s = mw.ustring.sub( r, 1, 1 )
    if s ~= ""  and  not Text.isQuote( s ) then
        s = mw.ustring.sub( r, -1, 1 )
        if not Text.isQuote( s ) then
          local mode, slang
          if type( alien ) == "string" then
              slang = alien:lower()
          else
              slang = mw.language.getContentLanguage():getCode()
          end
          if advance == 2 then
              mode = 2
          else
              mode = 1
          end
          r = fiatQuote( r, slang, mode )
        end
    end
    return r
end -- Text.quoteUnquoted()




Zeile 300: Zeile 481:
     return r
     return r
end -- Text.uprightNonlatin()
end -- Text.uprightNonlatin()
Text.test = function ( about )
    local r
    if about == "quote" then
        factoryQuote()
        r = { }
        r.QuoteLang = QuoteLang
        r.QuoteType = QuoteType
    end
    return r
end -- Text.test()




Zeile 329: Zeile 523:
function p.isLatinRange( frame )
function p.isLatinRange( frame )
     return Text.isLatinRange( frame.args[1] or "" ) and "1" or ""
     return Text.isLatinRange( frame.args[1] or "" ) and "1" or ""
end
function p.isQuote( frame )
    return Text.isQuote( frame.args[1] or "" ) and "1" or ""
end
end


Zeile 344: Zeile 542:
     end
     end
     return Text.listToText( args, frame.args.format )
     return Text.listToText( args, frame.args.format )
end
function p.quoteUnquoted( frame )
    local slang = frame.args[2]
    if type( slang ) == "string" then
        slang = mw.text.trim( slang )
    end
    return Text.quoteUnquoted( frame.args[1] or "",
                              slang,
                              tonumber( frame.args[3] ) )
end
end


Anonymer Benutzer