Модуль: TaxonItalics ( Обсуждение · · истор · Ссылки · Doc · подстраниц · песочница · testcases )
Этот модуль Lua используется примерно на 500 000 страницах . Чтобы избежать серьезных сбоев и нагрузки на сервер, любые изменения следует тестировать на подстраницах модуля / sandbox или / testcases . Протестированные изменения могут быть добавлены на эту страницу одним редактированием. Обсудите изменения на странице обсуждения, прежде чем внедрять их. Счетчик включений обновляется автоматически ( см. Документацию ). |
Цель
Модуль поддерживает правильное выделение курсивом научных названий. Ботанические ( ICNafp ) названия могут содержать «связующие термины»; они не должны выделяться курсивом. Гибридный символ × также не следует выделять курсивом. Модуль опционально добавляет вики-ссылки и сокращает имена, выделенные курсивом.
Для невирусных таксонов курсив используется в ранге рода или ниже. Модуль не решает, следует ли выделять научное название курсивом. Используйте для этой цели.{{Is italic taxon}}
использование
- {{#invoke: TaxonItalics | main | TAXON_NAME}} - выделяет название таксона курсивом.
- {{#invoke: TaxonItalics | main | TAXON_NAME | connected = yes}} - имя таксона выделяется курсивом, wikil выводит выделенный курсивом вывод на неизмененный ввод
- {{#invoke: TaxonItalics | main | TAXON_NAME | abbreviated = yes}} - выделяет название таксона курсивом, сокращая все, кроме последней части, до первой буквы.
Его также можно использовать с помощью {{ Taxon italics }}.
Примеры
Просто выделено курсивом
- Подключение терминов
- Pinus subg. Pinus → Pinus subg. Pinus
- P. subgenus Pinus → P. subg. Pinus
- П. п. Пинастер → П. п . Pinaster
- Acer tataricum subsp. ginnala → Acer tataricum subsp. Ginnala
- Aster ericoides var. ericoides → Aster ericoides var. ericoides
- A. ericoides varietas ericoides → A. ericoides var. ericoides
- А. е. подвар. ericoides → A. e. подвар. ericoides
Ботанические названия могут содержать только один внутривидовой эпитет; строка типа «Fragaria vesca subsp. vesca f. semperflorens» является классификацией, а не именем, и модуль не обрабатывает ее.
- Гибридные символы
- Elaeagnus × submacrophylla → Elaeagnus × submacrophylla
- × Беаллара → × Беаллара
- & раз; Беаллара → × Беаллара
- {{hybrid}} Беаллара → × Беаллара
Связано
С использованием |linked=yes
- Populus sect. Айгейрос → Populus sect. Aigeiros
- Elaeagnus × submacrophylla → Elaeagnus × submacrophylla
Сокращенно
С использованием |abbreviated=yes
- Populus sect. Айгейрос → П. разд. Aigeiros
- Acer tataricum subsp. ginnala → А. т. subsp. Ginnala
- [также связано] × Sorbaronia mitschurinii → × S. mitschurinii
- [также связаны] Elaeagnus × submacrophylla → E. × submacrophylla
- Elaeagnus × submacrophylla → E. × submacrophylla
- Elaeagnus {{hybrid}} submacrophylla → E. × submacrophylla
Еще больше примеров см. В тестовых примерах .
- [[============================================== ===========================Выделите имя таксона соответствующим курсивом, вызвав italicizeTaxonName.Используемый алгоритм:* Если имя выделено курсивом в начале или в конце, ничего не делайте.* Еще * Удалить (внутреннюю) разметку курсивом. * Если имя состоит из четырех слов, а третье слово - ботанический связующий термин, выделите связующий термин курсивом и добавьте курсив разметка вне имени. * В противном случае, если имя состоит из трех слов, а второе слово - ботанический связующий термин или вариант слова "ср.", выделите курсивом связующий термин и добавить курсивом разметку снаружи имени. * В противном случае просто добавьте курсивом разметку снаружи имени. Также модуль: * Гарантирует, что гибридный символ, × и круглые скобки не выделяются курсивом. * Имеет возможность сокращать все части названий таксонов, кроме последней до первой буквы (например, "Pinus sylvestris var. sylvestris" становится "P. s. Var. Sylvestris"). * Имеет возможность привязать выделенное курсивом имя к имени входа.================================================== ===========================]]местный p = {}local l = {} - используется для хранения чисто локальных функций- соединение терминов в трехчастных названиях (например, Pinus sylvestris var. sylvestris)local cTerms3 = {--под. subspecies = "subsp." , [ "подп." ] = "subsp." , subsp = "subsp." , [ "ssp." ] = "subsp." , ssp = "subsp." , --var. varietas = "var." , [ "var." ] = "var." , var = "var." , - подвар. subvarietas = "subvar." , [ "подвар." ] = "подвар." , subvar = "subvar." , --f. forma = "f." , [ "е." ] = "f." , f = "f." , --subf. subforma = "subf." , [ "субф." ] = "subf." , subf = "subf." }- соединение терминов в двух названиях частей (например, Pinus sect. Pinus)local cTerms2 = {- под. subgenus = "subg." , [ "подрод." ] = "subg." , [ "subg." ] = "subg." , subg = "subg." , --суперсект. supersection = "supersect." , [ "заменить". ] = "supersect." , supersect = "supersect." , - разд. section = "sect." , [ "секта" ] = "секта" , sect = "sect." , --подраздел. subsction = "subsct." , [ "подраздел" ] = "подраздел" , subsct = "subsct." , - сер. series = "ser." , [ "сер." ] = "сер." , ser = "ser." , --подсудник. Subsries = "subser." , [ "subser." ] = "subser." , subser = "subser." , --cf. cf = "cf." , [ "ср." ] = "ср." , [ "cf" ] = "cf." }- [[============================================== ===========================Основная функция - выделить название таксона курсивом.================================================== ===========================]]функция p . основной ( фрейм ) локальное имя = фрейм . аргументы [ 1 ] или "" local connected = frame . args [ 'connected' ] == 'да' местный сокращенный = фрейм . args [ 'сокращенно' ] == 'да' возврат п . italicizeTaxonName ( имя , ссылка , сокращение )конец- [[============================================== ===========================Служебная локальная функция для сокращения входной строки до ее первого символас последующим ".".И "×", и HTML-объект в начале строки пропускаются вопределение первого символа, как открывающая скобка и открывающая скобка ",что приводит к включению соответствующего закрывающего символа.================================================== ===========================]]функция l . сокращенно ( str )местный результат = ""местные hasParentheses = falselocal isQuoted = falseесли мв . ustring . len ( str ) < 2, тогда- односимвольные строки остаются без измененийрезультат = strеще- пропустить открывающую скобку, которая могла бы присутствовать в начале строкиесли мв . ustring . sub ( str , 1 , 1 ) == "(" затемhasParentheses = trueрезультат = "(" str = mw . ustring . sub ( str , 2 , mw . ustring . len ( str ))elseif mw . ustring . sub ( str , 1 , 1 ) == '"', затемisQuoted = trueрезультат = '"'str = mw . ustring . sub ( str , 2 , mw . ustring . len ( str ))конец- пропустить гибридный символ, который может присутствовать в начале строкиесли мв . ustring . sub ( str , 1 , 1 ) == "×", затемрезультат = "×" str = mw . ustring . sub ( str , 2 , mw . ustring . len ( str ))конец- пропустить HTML-объект, который может присутствовать в начале строкиесли мв . ustring . sub ( str , 1 , 1 ) == "&", затемместный я , фиктивный = mw . ustring . find ( str , ";" , 2 , plain )результат = результат .. мв . ustring . sub ( str , 1 , i )str = mw . ustring . sub ( str , i + 1 , mw . ustring . len ( str ))конец- если что-то осталось, сократите его до первого символа плюс ".",- добавление закрывающей круглой скобки или цитаты, если требуетсяесли str ~ = "", то результат = результат .. мв . ustring . sub ( str , 1 , 1 ) .. "."если hasParentheses, то результат = результат .. ")"elseif isQuoted, то результат = результат .. '"'конецконецконецвернуть результатконец- [[============================================== ===========================Функция, которая выделяет курсивом.================================================== ===========================]]функция p . italicizeTaxonName ( имя , ссылка , сокращение ) имя = мв . текст . обрезать ( имя ) - если имя начинается с "[", то предполагается, что форматирование присутствует. если мв . ustring . sub ( name , 1 , 1 ) == '[' затем верните имя end - в противном случае начните с замены любого использования курсивных тегов HTML - по разметке Викимедиа; заменить любые альтернативы сущностей на гибридный символ - самим символом; предотвратить обработку гибридного символа как - «слово» путем преобразования следующего пробела в объект HTML местный italMarker = "''" name = string.gsub ( mw . text . trim ( name ), «</? i>» , italMarker ) name = string.gsub ( string.gsub ( name , "& # 215;" , "×" ), "& times;" , "×" ) name = string.gsub ( name , "</? span .->" , "" ) - удалить любую разметку диапазона name = string.gsub ( name , «×» , «× & # 32;» ) - теперь выделите курсивом и при необходимости сократите локальный результат = имя если имя ~ = '', то если string.sub ( name , 1 , 2 ) == italMarker или string.sub ( name , - 2 ) == italMarker, то - ничего не делать, если у имени уже есть курсивные маркеры в начале или в конце еще name = string.gsub ( name , italMarker , "" ) - сначала удалите любой внутренний курсив местные слова = mw . текст . split ( имя , "" , истина ) если # слова == 4 и cTerms3 [ слова [ 3 ]], то - третье слово из четырех слов имени является связующим термином - убедитесь, что соединительный термин не выделен курсивом words [ 3 ] = '<span style = "font-style: normal;">' .. cTerms3 [ words [ 3 ]] .. '</span>' если сокращено, то слова [ 1 ] = л . сокращать ( слова [ 1 ]) слова [ 2 ] = л . сокращать ( слова [ 2 ]) конец результат = слова [ 1 ] .. "" .. слова [ 2 ] .. "" .. слова [ 3 ] .. "" .. слова [ 4 ] elseif # words == 3 и cTerms2 [ words [ 2 ]], затем - второе слово трехсловного имени является связующим термином - убедитесь, что соединительный термин не выделен курсивом words [ 2 ] = '<span style = "font-style: normal;">' .. cTerms2 [ words [ 2 ]] .. '</span>' если сокращено, то слова [ 1 ] = л . сокращать ( слова [ 1 ]) конец результат = слова [ 1 ] .. "" .. слова [ 2 ] .. "" .. слова [ 3 ] еще - не имя, как указано выше; иметь дело только с сокращениями если сокращено, то если # слов > 1, то результат = l . сокращать ( слова [ 1 ]) для i = 2 , # слов - 1 , 1 сделать результат = результат .. "" .. л . сокращать ( слова [ i ]) конец result = result .. "" .. слова [ # слова ] конец еще результат = имя конец конец - работайте с любым гибридным символом, так как он не должен выделяться курсивом result = string.gsub ( result , "×" , '<span style = "font-style: normal;"> × </span>' ) - используйте круглые скобки, так как они не должны выделяться курсивом result = string.gsub ( string.gsub ( result , "% (" , '<span style = "font-style: normal;"> (</span>' ), "%)" , '<span style = " font-style: normal; ">) </span> ' ) - любые вопросительные знаки, окруженные пролётами, могут соединять пролёты result = string.gsub ( result , '</span>%? <span style = "font% -style: normal;">' , '?' ) - добавить внешнюю разметку если связаны, то если результат ~ = имя, то result = "[[" .. name .. "|" .. italMarker .. результат .. italMarker .. "]]" еще result = italMarker .. "[[" .. name .. "]]" .. italMarker конец еще результат = italMarker .. результат .. italMarker конец конец конец вернуть результатконец- [[============================================== ===========================Служебная функция, используемая другими модулями для проверки наличия соединительного термина.присутствует в имени. Предполагается, что значение имени представляет собой обычный текст.================================================== ===========================]]функция p . hasCT ( кадр ) возврат п . hasConnectingTerm ( frame . args [ 1 ] или "" )конец функция p . hasConnectingTerm ( имя )местные слова = mw . текст . split ( имя , "" , истина )если # словами == 4 и cTerms3 [ слова [ 3 ]] затем вернуться верноelseif # words == 3 и cTerms2 [ words [ 2 ]], затем возвращается истинаиначе вернуть ложьконецконецвернуть p