Modul:Text: Unterschied zwischen den Versionen
2015-05-22
w>PerfektesChaos (2015-03-17) |
w>PerfektesChaos (2015-05-22) |
||
| Zeile 1: | Zeile 1: | ||
--[=[ 2015- | --[=[ 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 .. "]*$" | ||
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 | ||