Модуль:NameConvert
Файл:Greek lc beta.svg | Этот модуль оценён как бета-версия. Он готов для широкого применения, но должен применяться с осторожностью. |
Модуль предназначен для преобразования имени автора в библиографических ссылках
Функции
Функция преобразования строки «И. О. Фамилия» в формат «Фамилия И. О.»
{{#invoke:NameConvert|convert|<И.О. Фамилия>}}
Параметры
- первый неименованный параметр — строка
noprefix
— '0' или 'no' или 'false' отключает удаление префиксов фамилий (по умолчанию true)nolink
— '0' или 'no' или 'false' отключает удаление внутренних ссылок (по умолчанию true)
Примеры
{{#invoke:NameConvert|convert|А. Б. Иванов}}
→ Иванов А. Б.{{#invoke:NameConvert|convert|Ж. фон Иоганнес}}
→ Иоганнес Ж.{{#invoke:NameConvert|convert|Де Вито, Дэнни}}
→ Вито, Дэнни{{#invoke:NameConvert|convert|М. Робертес Карлос}}
→ Робертес Карлос М.{{#invoke:NameConvert|convert|Christopher L. Bennett}}
→ Bennett Christopher L.{{#invoke:NameConvert|convert|Уильям С.-мл. Берроуз}}
→ Берроуз Уильям С.-мл.
Могут быть случаи, когда есть и префикс фамилии и третье имя, тогда префикс оказывается не в начале строки, и он не удаляется.
{{#invoke:NameConvert|convert|L. Sprague De Camp}}
→ Sprague De Camp L.{{#invoke:NameConvert|convert|L. S. De Camp}}
→ Camp L. S.
В строках, содержащих запятые, удаляются только префиксы в начале строки:
{{#invoke:NameConvert|convert|Иванов, А. Б.}}
→ Иванов, А. Б.{{#invoke:NameConvert|convert|De Camp, L. Sprague}}
→ Camp, L. Sprague
Параметр noprefix=0
отключеает удаление префиксов фамилий:
{{#invoke:NameConvert|convert|Ж. фон Иоганнес|noprefix=0}}
→ фон Иоганнес Ж.
Параметр nolink=0
отключает удаление внутренних ссылок:
{{#invoke:NameConvert|convert|[[А. С. Пушкин]]}}
→ Пушкин А. С.{{#invoke:NameConvert|convert|[[А. С. Пушкин]]|nolink=0}}
→ Пушкин А. С.{{#invoke:NameConvert|convert|[[Пушкин, Александр Сергеевич|А. С. Пушкин]]}}
→ Пушкин А. С.{{#invoke:NameConvert|convert|[[Пушкин, Александр Сергеевич|А. С. Пушкин]]|nolink=0}}
→ Пушкин А. С.
local p = {} --[[ Функция преобразования строки "И.О. Фамилия" в формат "Фамилия И.О." Параметры: первый неименованный парметр - исходная строка noprefix -- '0' или 'no' или 'false' отключает удаление префиксов фамилий nolink -- '0' или 'no' или 'false' отключает удаление внутренних ссылок ]] function p.convert( frame ) local source_str = frame.args[1] or ''; local name = mw.ustring.gsub( source_str, '^%[%[(.-)%]%]', '%1'); -- исключаем внутренние ссылки local notstripped = name == source_str; local leftpart = nil; if not notstripped then local parts = mw.text.split( name, '|', true ); -- разделяем строку if #parts > 1 then leftpart = parts[1]; name = parts[2]; end end local result = mw.ustring.gsub( name, '^([^,]+%.) ?([^%.]*)', '%2 %1' ); -- инициалы в конце local prefix = {'[Фф]он', '[Дд]е', '[Дд]и', 'ван', '[Vv]on', '[Dd]e', '[Dd]i'} local noprefix = frame.args['noprefix'] or true; if type( noprefix ) == 'string' and (noprefix == 'false' or noprefix == 'no' or noprefix == '0') then noprefix = false end if noprefix then for i, pref in ipairs(prefix) do result = mw.ustring.gsub(result, '^' .. pref .. ' ', ''); -- Убираем префиксы фамилий в начале end end local nolink = frame.args['nolink'] or true; if type( nolink ) == 'string' and (nolink == 'false' or nolink == 'no' or nolink == '0') then nolink = false end if nolink or notstripped then return result; elseif leftpart ~= nil then return '[[' .. leftpart .. '|'.. result .. ']]'; else return '[[' .. result .. ']]'; end end return p