Modul:Text

Aus FreeWiki
Version vom 22. Juni 2015, 14:34 Uhr von te>PerfektesChaos (2015-06-21)
Zur Navigation springen Zur Suche springen

local Text = { suite = "Text",

              serial = "2015-06-21" };

--[=[ Text utilities ]=]


-- local globals local PatternCJK = false local PatternCombined = false local PatternLatin = false local PatternTerminated = false local QuoteLang = false local QuoteType = 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()


Text.concatParams = function ( args, apply, adapt )

   -- Concat list items into one string
   -- Parameter:
   --     args   -- table (sequence) with numKey=string
   --     apply  -- string (optional); separator (default: "|")
   --     adapt  -- string (optional); format including "%s"
   -- Returns: string
   local collect = { }
   for k, v in pairs( args ) do
       if type( k ) == "number" then
           v = mw.text.trim( v )
           if v ~= "" then
               if adapt then
                   v = mw.ustring.format( adapt, v )
               end
               table.insert( collect, v )
           end
       end
   end
   return table.concat( collect,  apply or "|" )

end -- Text.concatParams()


Text.containsCJK = function ( analyse )

   -- Is any CJK code within?
   -- Parameter:
   --     analyse  -- string
   -- Returns: true, if CJK detected
   local r
   if not patternCJK then
       patternCJK = mw.ustring.char( 91,
                                      13312, 45,  40959,
                                     131072, 45, 178207,
                                     93 )
   end
   if mw.ustring.find( analyse, patternCJK ) then
       r = true
   else
       r = false
   end
   return r

end -- Text.containsCJK()


Text.getPlain = function ( adjust )

   -- Remove wikisyntax from string, except templates
   -- Parameter:
   --     adjust  -- string
   -- Returns: string
   local i = adjust:find( "",  i + 3,  true )
       if j then
           r = r:sub( 1, i ) .. r:sub( j + 3 )
       else
           r = r:sub( 1, i )
       end
       i = r:find( "