Interested Article - Religious reference
nelly
- 2020-06-28
- 1
Реализация Шаблон:Библия и, как планируется, Шаблон:Коран .
См. также
- Категория:Википедия:Страницы с неправильно заполненным шаблоном Библия
- Категория:Википедия:Страницы с постфиксом в шаблоне Библия
Тесты Шаблон:Библия
Код | Результат |
---|---|
{{Библия|Быт|1:31}}
|
Быт. |
{{Библия|Быт|1:31, 32}}
|
Быт. , |
{{Библия|Быт|1:31-33}}
|
Быт. |
{{Библия|Быт|1:31-32}} (sic!)
|
Быт. , (sic!) |
{{Библия|Быт|1:31-33, 35}}
|
Быт. , |
{{Библия|Быт|1:31, 33-35}}
|
Быт. , |
{{Библия|Быт|1:31-33, 35-37}}
|
Быт. , |
{{Библия|Быт|1:31-33, 35-37, 2:11}} (sic!)
|
Быт. , , (sic!) |
{{Библия|Быт|1:31-2:11}}
|
Быт. — |
{{Библия|Быт|5}}
|
Быт. |
{{Библия|Быт|5, 7}}
|
Быт. , |
{{Библия|Быт|5-7}}
|
Быт. |
{{Библия|Быт|5-6}} (sic!)
|
Быт. , (sic!) |
{{Библия|Быт|1:31; 2:11}}
|
Быт. ; |
{{Библия|Быт|1:31, 2:11}} (sic!)
|
Быт. , (sic!) |
{{Библия|Быт|1:31;5}}
|
Быт. ; |
{{Библия|Быт|1:31, 34-36; 5, 7}}
|
Быт. , ; , |
{{Библия|Быт|1, 3; 5:31, 34-36}}
|
Быт. , ; , |
{{Библия|Быт|1:31a}}
|
Библия: недопустимое значение 1:31a |
{{Библия|Быт|1:31-33a}}
|
Библия: недопустимое значение 1:31-33a |
{{Библия|Быт|1:31a-33}}
|
Библия: недопустимое значение 1:31a-33 |
{{Библия|Быт|1:31a-33b}}
|
Библия: недопустимое значение 1:31a-33b |
{{Библия|Исх|1:31}}
|
Исх. |
{{Библия|1Кор|1:31}}
|
1Кор. |
Нестандартное оформление | |
{{Библия|Быт|1:31—33}}
|
Быт. |
{{Библия|Быт|1:31,32}}
|
Быт. , |
{{Библия|Быт|1:31 - 32}}
|
Быт. , |
{{Библия|Быт|1:31;2:11}}
|
Быт. ; |
{{Библия|Быт|1:31|б=1}}
|
|
{{Библия|Быт|1:31|без книги=1}}
|
|
{{Библия|Быт|1:31|без книги=}}
|
Быт. |
{{Библия|Быт|1:6|т=шестой стих}}
|
|
{{Библия|Быт|1:6|текст=шестой стих}}
|
|
{{Библия|Быт|1:6|текст=}}
|
Быт. |
Устаревшее | |
{{Библия|Быт|1:31|—31}}
|
Быт. |
{{Библия|Быт|1:31|, 31}}
|
Быт. |
{{Библия|Быт|1:31, 34|}}
|
Быт. , |
{{Библия|Быт|1:31|a}}
|
Быт. |
{{Библия|Быт|1:31-33|a}}
|
Быт. |
{{Библия|Быт|1:31|a-33}}
|
Быт. |
Ошибки | |
{{Библия}}
|
Библия: отсутствует название книги |
{{Библия|}}
|
Библия: отсутствует название книги |
{{Библия|Быт}}
|
Библия: отсутствует последовательность стихов |
{{Библия|Быт|}}
|
Библия: отсутствует последовательность стихов |
{{Библия|Бум|1:31}}
|
Библия: сокращение Бум неизвестно, см. список допустимых |
{{Библия|1 Кор|1:31}}
|
Библия: сокращение 1 Кор неизвестно, см. список допустимых |
{{Библия|Быт|1:31, 32|т=текст}}
|
Библия: при указании текста допустимо вводить только один стих или одну главу |
{{Библия|Быт|1:31, 32|, 33}}
|
Библия: при указании постфикса допустимо вводить только один стих или одну главу |
{{Библия|Быт|31, 1:32}}
|
Библия: перед стихом 31 не указана глава |
{{Библия|Быт|1:31; 33, 1:35}}
|
Библия: перед стихом 33 не указана глава |
{{Библия|Быт|1-5:11}}
|
Библия: недопустимое значение 1-5:11 |
Замечания
- Второе послание к Тимофею - странно преобразовывать 1-2 в 1,2, когда рядом через тире
local p = {} -- p stands for package
function linkVerses(verses)
local normalized_verses = mw.ustring.gsub(mw.ustring.gsub(verses, '%s', ''), '[‐‒–—―−]', '-')
-- hyphen, figure dash, en dash, em dash, horizontal bar and minus to hyphen-minus
local raw_blocks = mw.text.split(normalized_verses, ';')
local linked_blocks = {}
for _, raw_block in ipairs(raw_blocks) do
local raw_parts = mw.text.split(raw_block, ',')
local linked_parts = {}
if mw.ustring.match(raw_block, ':') then
local chapter, verses, chapter_prefix
for _, raw_part in ipairs(raw_parts) do
-- possible forms of raw_part: 1, 1-2, 1:2, 1:2-3, 1:2-2:3
if mw.ustring.match(raw_part, ':') then
chapter, verses = mw.ustring.match(raw_part, '^([0-9]+):(.*)$')
if not chapter then
return nil, 'недопустимое значение ' .. raw_part
end
--[[
if #linked_parts > 0 then
table.insert(linked_blocks, linked_parts)
linked_parts = {}
end
]]
if mw.ustring.match(verses, ':') then
local chapter1, verse1, chapter2, verse2 =
mw.ustring.match(raw_part, '^([0-9]+):([0-9]+)-([0-9]+):([0-9]+)$')
if chapter1 then -- deal with 1:2-2:3
table.insert(linked_parts, {chapter1 .. ':' .. verse1, chapter1 .. ':' .. verse1,
chapter2 .. ':' .. verse2, chapter2 .. ':' .. verse2})
else
return nil, 'недопустимое значение ' .. raw_part
end
break
end
chapter_prefix = chapter .. ':' -- transform 1:2 to 2 and 1:2-3 to 2-3
else
if chapter == nil then
return nil, 'перед стихом ' .. raw_part .. ' не указана глава'
end
verses = raw_part
chapter_prefix = ''
end
local verse = mw.ustring.match(verses, '^([0-9]+)$') -- deal with 1 and 1-2, but possibly with prefix
if verse then
table.insert(linked_parts, {chapter .. ':' .. verse, chapter_prefix .. verse})
else
local verse1, verse2 = mw.ustring.match(verses, '^([0-9]+)-([0-9]+)$')
if verse1 then
if tonumber(verse2) - tonumber(verse1) == 1 then
table.insert(linked_parts, {chapter .. ':' .. verse1, chapter_prefix .. verse1})
table.insert(linked_parts, {chapter .. ':' .. verse2, verse2})
else
table.insert(linked_parts, {chapter .. ':' .. verse1, chapter_prefix .. verse1 .. '—' .. verse2})
end
else
return nil, 'недопустимое значение ' .. raw_part
end
end
end
else
for _, raw_part in ipairs(raw_parts) do
local chapter = mw.ustring.match(raw_part, '^[0-9]+$')
if chapter then
table.insert(linked_parts, {chapter, chapter})
else
local chapter1, chapter2 = mw.ustring.match(raw_part, '^([0-9]+)-([0-9]+)$')
if chapter1 then
if tonumber(chapter2) - tonumber(chapter1) == 1 then
table.insert(linked_parts, {chapter1, chapter1})
table.insert(linked_parts, {chapter2, chapter2})
else
table.insert(linked_parts, {chapter1, chapter1 .. '—' .. chapter2})
end
else
return nil, 'недопустимое значение ' .. raw_part
end
end
end
end
table.insert(linked_blocks, linked_parts)
end
return linked_blocks, nil
end
function generateBibleError(text)
return '<span class="error">Библия: ' .. text .. '</span>[[Категория:Википедия:Страницы с неправильно заполненным шаблоном Библия]]'
end
function getNotEmpty(args, arg)
local val = args[arg]
if val == '' then
return nil
else
return val
end
end
function p.citeBible (frame)
local args = frame:getParent().args
local book = getNotEmpty(args, 1)
local verses = getNotEmpty(args, 2)
local postfix = getNotEmpty(args, 3)
local nobook = getNotEmpty(args, 'б') or getNotEmpty(args, 'без книги')
local text = getNotEmpty(args, 'т') or getNotEmpty(args, 'текст')
if book == nil then
return generateBibleError('отсутствует название книги')
end
if verses == nil then
return generateBibleError('отсутствует последовательность стихов')
end
local wikisource_link = frame:preprocess('{{Библия/сокращение книги|' .. book .. '|s}}')
if wikisource_link == '' then
return generateBibleError('сокращение ' .. book .. ' неизвестно, см. [[Шаблон:Библия/сокращение книги|список допустимых]]')
end
local linked_blocks, error = linkVerses(verses)
if error then
return generateBibleError(error)
end
local formatted_blocks = {}
local parts_number = 0
for _, linked_parts in ipairs(linked_blocks) do
local formatted_parts = {}
for _, linked_part in ipairs(linked_parts) do
if #linked_part == 4 then
table.insert(formatted_parts, frame:preprocess(
'[[:s:' .. wikisource_link .. '#' .. linked_part[1] .. '|' .. linked_part[2] .. ']] — ' ..
'[[:s:' .. wikisource_link .. '#' .. linked_part[3] .. '|' .. linked_part[4] .. ']]'
))
else
table.insert(formatted_parts, frame:preprocess(
'[[:s:' .. wikisource_link .. '#' .. linked_part[1] .. '|' ..
(text or (linked_part[2] .. (postfix or ''))) .. ']]' -- TODO
))
parts_number = parts_number + 1
end
end
table.insert(formatted_blocks, table.concat(formatted_parts, ', '))
end
if text ~= nil and text ~= '' and parts_number > 1 then
return generateBibleError('при указании текста допустимо вводить только один стих или одну главу')
end
if postfix ~= nil and postfix ~= '' and parts_number > 1 then
return generateBibleError('при указании постфикса допустимо вводить только один стих или одну главу')
end
local res = table.concat(formatted_blocks, ';' .. mw.ustring.char( 0x2002 )) -- EN SPACE
-- TODO
if postfix ~= nil and postfix ~= '' then
res = res .. '[[Категория:Википедия:Страницы с постфиксом в шаблоне Библия]]'
end
if not text and not nobook then
res = frame:preprocess(
'[[{{Библия/сокращение книги|' .. book .. '}}|' .. book .. '.]] '
) .. res
end
return res
end
return p
nelly
- 2020-06-28
- 1