{{#invoke:Сезон сериала|getPrevSeasonArticle|title=The Voice (США, сезон 15)}}
{{#invoke:Сезон сериала|getPrevSeasonArticle|title=Американская история ужасов: 1984}}
[[Американская история ужасов: Апокалипсис|Апокалипсис]]
[[Американская история ужасов: Апокалипсис|Апокалипсис]]
{{#invoke:Сезон сериала|getPrevSeasonArticle|title=Американская история ужасов: Двойной сеанс}}
[[Американская история ужасов: 1984|1984]]
[[Американская история ужасов: 1984|1984]]
{{#invoke:Сезон сериала|getPrevSeasonArticle|title=Американская история ужасов: 1984|link=[[Американская история ужасов: Апокалипсис|Апокалипсис]]}}
[[Американская история ужасов: Апокалипсис|Апокалипсис]]
[[Американская история ужасов: Апокалипсис|Апокалипсис]]
N
{{#invoke:Сезон сериала|getPrevSeasonArticle|title=Американская история ужасов: Нежность|link={{нп4|Американская история ужасов: NYC|NYC||American Horror Story: NYC}}}}
<span data-interwiki-lang="en" data-interwiki-article="American Horror Story: NYC">[[Американская история ужасов: NYC|NYC]]</span><sup class="noprint" style="font-style:normal; font-weight:normal;">[[:en:American Horror Story: NYC|<span title="American Horror Story: NYC — версия статьи «Американская история ужасов: NYC» на английском языке">[англ.]</span>]]</sup>
{{#invoke:Сезон сериала|getPrevSeasonArticle|title=Убийство Джанни Версаче: Американская история преступлений|link=[[Народ против О. Джея Симпсона: Американская история преступлений|Народ против О. Джея Симпсона]]}}
[[Народ против О. Джея Симпсона: Американская история преступлений|Народ против О. Джея Симпсона]]
[[Народ против О. Джея Симпсона: Американская история преступлений|Народ против О. Джея Симпсона]]
{{#invoke:Сезон сериала|getPrevSeasonArticle|title=Морские рейнджеры с планеты Аквитар|link=[[Могучие рейнджеры (телесериал, 1993)|Могучие рейнджеры]]}}
{{#invoke:Сезон сериала|getNextSeasonArticle|title=The Voice (США, сезон 17)}}
{{#invoke:Сезон сериала|getNextSeasonArticle|title=Американская история ужасов: 1984}}
[[Американская история ужасов: Двойной сеанс|Двойной сеанс]]
[[Американская история ужасов: Двойной сеанс|Двойной сеанс]]
{{#invoke:Сезон сериала|getNextSeasonArticle|title=Американская история ужасов: Апокалипсис}}
[[Американская история ужасов: 1984|1984]]
[[Американская история ужасов: 1984|1984]]
{{#invoke:Сезон сериала|getNextSeasonArticle|title=Американская история ужасов: Двойной сеанс|link=[[Американская история ужасов: Нью-Йорк|Нью-Йорк]]}}
[[Американская история ужасов: Нью-Йорк|Нью-Йорк]]
[[Американская история ужасов: Нью-Йорк|Нью-Йорк]]
{{#invoke:Сезон сериала|getNextSeasonArticle|title=Классический «Доктор Кто» (26-й сезон)|link=[[Доктор Кто (фильм, 1996)|Доктор Кто]] <small>(фильм)</small><br>[[Доктор Кто (1 сезон)|Сезон 1]] <small>(2005)</small>}}
[[Доктор Кто (фильм, 1996)|Доктор Кто]] <small>(фильм)</small><br>[[Доктор Кто (1 сезон)|Сезон 1]] <small>(2005)</small>
[[Доктор Кто (фильм, 1996)|Доктор Кто]] <small>(фильм)</small><br>[[Доктор Кто (1 сезон)|Сезон 1]] <small>(2005)</small>
{{#invoke:Сезон сериала|getNextSeasonArticle|title=Убийство Джанни Версаче: Американская история преступлений|link=[[Импичмент: Американская история преступлений|Импичмент]]}}
[[Импичмент: Американская история преступлений|Импичмент]]
[[Импичмент: Американская история преступлений|Импичмент]]
{{#invoke:Сезон сериала|getNextSeasonArticle|title=Суд над Повелителем времени|link=[[Классический «Доктор Кто» (24 сезон)|Сезон 24]]}}
[[Классический «Доктор Кто» (24 сезон)|Сезон 24]]
[[Классический «Доктор Кто» (24 сезон)|Сезон 24]]
{{#invoke:Сезон сериала|getNextSeasonArticle|title=Частный детектив Магнум (2018, сезон 3)}}
[[Частный детектив Магнум (2018, сезон 4)|Сезон 4]]
[[Частный детектив Магнум (2018, сезон 4)|Сезон 4]]
N
{{#invoke:Сезон сериала|getNextSeasonArticle|title=Список серий аниме One Piece (серии 1—61)}}
[[Список серий аниме One Piece (серии 1—61)|Серии 1—61]]
test_07_getInfoboxHeader
Тест
Ожидаемое значение
Фактическое значение
{{#invoke:Сезон сериала|getInfoboxHeader|title=Остаться в живых (сезон 2)}}
{{#invoke:Сезон сериала|getListOfEpisodes|title=Мир Дикого Запада (1-й сезон)}}
{{#invoke:Сезон сериала|getListOfEpisodes|title=Части тела (сезон 1)}}
{{#invoke:Сезон сериала|getListOfEpisodes|title=Американская история ужасов: Двойной сеанс|link=Список эпизодов телесериала «Американская история ужасов»}}
[[Список эпизодов телесериала «Американская история ужасов»|Список серий]]
[[Список эпизодов телесериала «Американская история ужасов»|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=x}}
[[x|Список серий]]
[[x|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=Список эпизодов телесериала «Остаться в живых»|Список серий}}
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=Список эпизодов телесериала «Остаться в живых»|Список эпизодов телесериала «Остаться в живых»}}
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=[[Список эпизодов телесериала «Остаться в живых»]]}}
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=[[Список эпизодов телесериала «Остаться в живых»|Список серий]]}}
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Остаться в живых (сезон 1)|link=[[Список эпизодов телесериала «Остаться в живых»|Список эпизодов телесериала «Остаться в живых»]]}}
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
[[Список эпизодов телесериала «Остаться в живых»|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Симпсоны (сезон 34)|link=[[Список эпизодов мультсериала «Симпсоны» (с 21 сезона)|Список серий (с 21 сезона)]]}}
[[Список эпизодов мультсериала «Симпсоны» (с 21 сезона)|Список серий]]
[[Список эпизодов мультсериала «Симпсоны» (с 21 сезона)|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Торчвуд: День Чуда}}
[[Список серий телесериала «Торчвуд»|Список серий]]
[[Список серий телесериала «Торчвуд»|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Американская история ужасов: Двойной сеанс}}
[[Список эпизодов телесериала «Американская история ужасов»|Список серий]]
[[Список эпизодов телесериала «Американская история ужасов»|Список серий]]
{{#invoke:Сезон сериала|getListOfEpisodes|title=Топ-модель по-американски (сезон 1)|link={{Нп5|Список эпизодов шоу «Топ-модель по-американски»|Список серий|en|List of America's Next Top Model episodes}}}}
{{#invoke:Сезон сериала|getListOfEpisodes|title=Топ-модель по-американски (сезон 1)|link=[[:en:|List of America's Next Top Model episodes|Список серий]]}}
require('strict')locallistOfTitlesArticles=require('Модуль:Сезон сериала/БД списки эпизодов')localwikidata=require('Модуль:Wikidata').formatPropertylocalgetArgs=require('Модуль:Arguments').getArgslocalyesno=require("Модуль:Yesno")localformat=mw.ustring.formatlocalmatch=mw.ustring.matchlocalfind=mw.ustring.findlocalgsub=mw.ustring.gsublocalsub=mw.ustring.sublocalp={}localcache={}----------------------------------------------------------------------------------- LOCALS----------------------------------------------------------------------------------- Returns true if param has value (not nil and not empty string)--- @param param string--- @return booleanlocalfunctionhasValue(param)ifparamandparam:find('%S')thenreturntrueendend--- Returns true if page exist and not redirect--- @param param string--- @return booleanlocalfunctionhasPage(page)ifpageandpage.existsandpage.redirectTarget~=mw.title.getCurrentTitle()thenreturntrueendreturnfalseend--- Returns a delinked string--- @param link string--- @return stringlocalfunctiongetPlainText(text)localtext=mw.text.trim(text,'%[%]%s'):gsub('<.->.-$','')iftext:find('^{{нп')ortext:find('^%[%[нп')ortext:find('^{{')thentext=mw.text.trim(text,'{}%[%]:%s')text=text:gsub('^[^|]-|','')endiftext:find('^%[%[:')thentext=mw.text.trim(text,'{}%s')text=text:gsub('^%[%[:[^:]-:','')endtext=text:gsub('%s*|.*$',''):gsub('%s*{.*$',''):gsub('<.->.-<.->',' '):gsub('<.->',' '):gsub('%s+',' ')text=mw.text.trim(text,'%s')returntextend--- Returns a formatted link to the list of episodes article.--- @param listOfEpisodesArticle string--- @return stringlocalfunctiongetListOfEpisodesLink(listOfEpisodesArticle)locallistOfEpisodesPage=mw.title.new(listOfEpisodesArticle,0)ifhasPage(listOfEpisodesPage)thenreturnformat('[[%s|Список серий]]',listOfEpisodesArticle)endend--- Returns an article link.--- @param article string The article's title.--- @param pipedLink string The piped link.--- @return stringlocalfunctiongetArticleLink(article,pipedLink)localarticleLink=mw.title.new(article,0)ifhasPage(articleLink)thenifnothasValue(pipedLink)thenreturn'[['..article..']]'endreturn'[['..article..'|'..pipedLink..']]'endend--- Returns the disambiguation without the '(year) TV series,' part.--- @param disambiguation string The article's disambiguation.--- @return stringlocalfunctiongetShortDisambiguation(disambiguation)localshortDisambiguation=gsub(disambiguation,'^.+,%s*','')returnshortDisambiguationend--- Returns the current season number from the disambiguation.--- @param disambiguation string The article's disambiguation.--- @return stringlocalfunctiongetCurrentSeasonNumberFromDisambiguation(disambiguation)localcommasText,shortDisambiguation,prefix,number,postfixifmatch(disambiguation,'%d+[—%-]%d+')thenprefix,number,postfix=match(disambiguation,'^(%D*)(%d+%-?—?%d+)(%D*)$')elseifdisambiguation:find(', ')thencommasText=match(disambiguation,'^.+,%s*')shortDisambiguation=getShortDisambiguation(disambiguation)prefix,number,postfix=match(shortDisambiguation,'^(%D*)(%d+)(%D*)$')elseprefix,number,postfix=match(disambiguation,'^(%D*)(%d+)(%D*)$')endpostfix=postfixor''commasText=commasTextor''prefix=commasText..(prefixor'')returnnumber,prefix,postfixend--- Returns the type of word used for 'season' in the disambiguation.--- @param disambiguation string The article's disambiguation.--- @return stringlocalfunctiongetSeasonType(disambiguation)localcurrentTitleText=mw.title.getCurrentTitle().textlocalseasonTypes={'Мультсериал','Телесериал','Телепередача','Спецвыпуски','Телешоу','Шоу','Анимационный сериал','Аниме-сериал','Веб-сериал','Мини-сериал','Серии мультсериалов','Телевизионный сериал','Сюжетная арка','Выпуск','Сериал','Аниме','Серии','Сезоны','Сезона','Сезон','Серии с'}for_,seasonTypeinpairs(seasonTypes)doifmatch(disambiguation,sub(seasonType,3))theniffind(currentTitleText,'^Список')andnotfind(currentTitleText,'%d+[—%-]%d+')thenifseasonType=='Сезона'thenreturn'Сезоны с'elseifseasonType=='Серии'thenreturn'Серии с'endelsereturnseasonTypeendendendreturn'Сезон'end--- Returns the disambiguation from the title.--- @param title string The article's title.--- @return string | nil, string | nillocalfunctiongetDisambiguation(title)localdisambiguationLast,disambiguationNextlocalpattern='%s*%(([^()]+)%)$'disambiguationLast=match(title,pattern)localtitle=gsub(title,pattern,'')disambiguationNext=match(title,pattern)ifdisambiguationLast~=''thenreturndisambiguationLast,disambiguationNextendend--- Returns the show's name from the title.--- @param title string The article's title.--- @return stringlocalfunctiongetShowName(title)whilematch(title,'%)%s*$')dotitle=gsub(title,'%s+%b()%s*$','')endreturntitleend--- Returns 'true' if the given link is valid; nil otherwise.--- A link is valid in the following cases:--- -- A season article exists.--- -- A redirect exists to a season section.------ A link is invalid in the following cases:--- -- A season article or redirect do not exist.--- -- A redirect exists, but it is a general redirect and not for any specific season section.------ Note: Return values are not booleans as the returned value is used in template space.--- @param title string The article's title.--- @return string | nillocalfunctionisLinkValid(title)localarticle=mw.title.new(title)-- Article or redirect do not exist; Not a valid link.ifnotarticleornotarticle.existsthenreturnnilendlocalredirectTarget=article.redirectTarget-- Article exists and is not a redirect; Valid link.ifnotredirectTargetthenreturntrueendlocalfullLink=redirectTarget.fullTextlocalisSection=fullLink:find("#")-- Article is a section redirect; Valid link.ifisSectionthenreturntrueend-- Article is a general redirect; Not a valid link.returnnilend--- Returns a season article title and a piped link.--- @param title string The article's title.--- @param seasonNumberDiff number The number difference between the current season and the other season.--- @return string, stringlocalfunctiongetArticleTitleAndPipedLink(title,seasonNumberDiff)localexcludeList={'Американская история ужасов: Дом-убийца','Американская история ужасов: Психбольница','Американская история ужасов: Шабаш','Американская история ужасов: Фрик-шоу','Американская история ужасов: Отель','Американская история ужасов: Роанок','Американская история ужасов: Культ','Американская история ужасов: Апокалипсис','Американская история ужасов: 1984','Американская история ужасов: Двойной сеанс','Американская история ужасов: Нью-Йорк','Американская история ужасов: Нежность'}localiExcludeList={['Дом-убийца']=1,['Психбольница']=2,['Шабаш']=3,['Фрик-шоу']=4,['Отель']=5,['Роанок']=6,['Культ']=7,['Апокалипсис']=8,['1984']=9,['Двойной сеанс']=10,['Нью-Йорк']=11,['Нежность']=12}localshowName=getShowName(title)localdisambiguationLast,disambiguationNext=getDisambiguation(title)ifseasonNumberDiff==0andnothasValue(disambiguationLast)theniftitle:find('мериканская история ужасов')thenreturntitle,title:match(':%s*([^:]-)%s*$')elsereturntitle,nilendelseifnothasValue(disambiguationLast)theniftitle:find('мериканская история ужасов')thenlocalindex=iExcludeList[title:match(':%s*([^:]-)%s*$')]localarticle=excludeList[index+seasonNumberDiff]ifarticlethenreturnarticle,article:match(':%s*([^:]-)%s*$')elsereturnnil,nilendelseifnotshowName:find('%s+(%d+)$')thenreturn'',nilendendifhasValue(disambiguationNext)thendisambiguationNext=' ('..disambiguationNext..')'elsedisambiguationNext=''endlocalprefix,seasonType,seasonNumber,postfixlocalshortDisambiguation,showNameModifiedlocalpipedLinkifhasValue(disambiguationLast)thenseasonType=getSeasonType(disambiguationLast)seasonNumber,prefix,postfix=getCurrentSeasonNumberFromDisambiguation(disambiguationLast)pipedLink=seasonTypeendifnothasValue(seasonNumber)thenshowNameModified,seasonNumber=match(showName,'(.+)%s+(%d+)$')endiftonumber(seasonNumber)thenseasonNumber=tonumber(seasonNumber)+seasonNumberDiffendseasonNumber=tostring(seasonNumber)ifhasValue(seasonNumber)andhasValue(pipedLink)thenpipedLink=pipedLink..' '..seasonNumberelseifhasValue(seasonNumber)thenpipedLink='Сезон '..seasonNumberend-- Titles such as 'Big Brother 1 (American season)'.ifhasValue(showNameModified)andhasValue(disambiguationLast)thenreturnshowNameModified..' '..seasonNumber..' ('..disambiguationLast..')',pipedLink-- Titles such as 'Big Brother Brasil 1'.elseifhasValue(showNameModified)thenreturnshowNameModified..' '..seasonNumber,pipedLinkelsereturnshowName..disambiguationNext..' ('..prefix..seasonNumber..postfix..')',pipedLinkendend--- Returns the article's title either from args (usually from /testcases) or from the page itself.--- @param args table The args invoking the module.--- @return stringlocalfunctiongetTitle(title)ifnothasValue(title)thentitle=mw.title.getCurrentTitle().textendreturntitleend--- Returns 'true' if the given season link is valid; nil otherwise.--- @param args table The args invoking the module.--- @param seasonNumberDiff number The number difference between the current season and the other season.--- @return string | nillocalfunctionisSeasonLinkValid(args,seasonNumberDiff)ifyesno(args.link)==falsethenreturnnilendifhasValue(args.link)andargs.link:find('%[%[.*%]%]')thenreturntrueelseifhasValue(args.link)andisLinkValid(getPlainText(args.link))thenreturnisLinkValid(getPlainText(args.link))endlocaltitle=getTitle(args.title)localarticleTitle=getArticleTitleAndPipedLink(title,seasonNumberDiff)ifhasValue(articleTitle)andarticleTitle~=mw.title.getCurrentTitle().fullTextthenreturnisLinkValid(articleTitle)endend--- Returns a season article link.--- @param args table The args invoking the module.--- @param seasonNumberDiff number The number difference between the current season and the other season.--- @return stringlocalfunctiongetSeasonArticleLink(args,seasonNumberDiff)ifyesno(args.link)==falsethenreturnnilendlocaltitle,articleTitle,pipedLinkifhasValue(args.link)andargs.link:find('%[%[.*%]%]')thenreturnargs.linkelseifhasValue(args.link)andisLinkValid(getPlainText(args.link))thenarticleTitle,pipedLink=getArticleTitleAndPipedLink(args.link,0)endifnothasValue(articleTitle)thentitle=getTitle(args.title)articleTitle,pipedLink=getArticleTitleAndPipedLink(title,seasonNumberDiff)endifhasValue(articleTitle)andarticleTitle~=mw.title.getCurrentTitle().fullTextthenreturngetArticleLink(articleTitle,pipedLink)endend-- Декоратор для передачи аргуметнов в функциюlocalfunctionmakeInvokeFunc(funcName)returnfunction(frame)localargs=getArgs(frame)returnp[funcName](args)endend----------------------------------------------------------------------------------- MAIN CLASS---------------------------------------------------------------------------------- Проверка Викидинных пока не реализована-- Предыдущий сезон ### wikidata|P155-- Следующий сезон ### wikidata|P156-- ОБРАЗЕЦ: wikidata({args={{property='P1811', value='Список эпизодов телесериала «Во все тяжкие»', from='Q126004'}})--- Returns 'true' if the season link for the next season is valid; nil otherwise.--- @param args table The args invoking the module.--- @return string | nilp.isNextSeasonLinkValid=makeInvokeFunc('_isNextSeasonLinkValid')functionp._isNextSeasonLinkValid(args)returnisSeasonLinkValid(args,1)end--- Returns 'true' if the season link for the previous season is valid; nil otherwise.--- @param args table The args invoking the module.--- @return string | nilp.isPrevSeasonLinkValid=makeInvokeFunc('_isPrevSeasonLinkValid')functionp._isPrevSeasonLinkValid(args)returnisSeasonLinkValid(args,-1)end--- Returns the next season article title.--- @param args table The args invoking the module.--- @return stringp.getNextSeasonArticle=makeInvokeFunc('_getNextSeasonArticle')functionp._getNextSeasonArticle(args)returngetSeasonArticleLink(args,1)end--- Returns the previous season article title.--- @param args table The args invoking the module.--- @return stringp.getPrevSeasonArticle=makeInvokeFunc('_getPrevSeasonArticle')functionp._getPrevSeasonArticle(args)returngetSeasonArticleLink(args,-1)end--- @param args table The args invoking the module.--- @return stringp.getInfoboxHeader=makeInvokeFunc('_getInfoboxHeader')functionp._getInfoboxHeader(args)localtitle=getTitle(args.title)localheader=getShowName(title)returnheaderend--- Returns the relevant text for the sub-header field.--- @param args table The args invoking the module.--- @return string | nilp.getInfoboxSubHeader=makeInvokeFunc('_getInfoboxSubHeader')functionp._getInfoboxSubHeader(args)localtitle=getTitle(args.title)localdisambiguation=getDisambiguation(title)localseasonNumber=args.season_numberorargs.series_numberlocalseasonType,shortDisambiguationifnothasValue(disambiguation)andnothasValue(seasonNumber)thenreturnnilendifnothasValue(seasonNumber)thenshortDisambiguation=getShortDisambiguation(disambiguation)seasonNumber=getCurrentSeasonNumberFromDisambiguation(shortDisambiguation)endifhasValue(disambiguation)thenseasonType=getSeasonType(disambiguation)endifnothasValue(seasonType)andhasValue(seasonNumber)thenreturn'Сезон '..seasonNumberelseifhasValue(seasonNumber)thenreturnseasonType..' '..seasonNumberendend--- Returns a formatted link to the list of episodes article.------ The returned link is in the style of:--- [List of <series name> <disambiguation, if present> episodes <range, if present>|List of episodes]------ The link will only return if the page exists.--- @param args table The args invoking the module.--- @return string | nilp.getListOfEpisodes=makeInvokeFunc('_getListOfEpisodes')functionp._getListOfEpisodes(args)--[=[== Схема-приоритет поиска рабочей ссылки типа [[Список эпизодов телесериала «Название»]] == args.link -> wikidata -> database -> zeronamespace -> nil ]=]iffind(mw.title.getCurrentTitle().text,'^Список')oryesno(args.link)==falsethenreturnnilend-- Проверка args.linkifhasValue(args.link)andargs.link:find('%[%[.*%]%]')thenreturngetListOfEpisodesLink(getPlainText(args.link))elseifhasValue(args.link)andisLinkValid(getPlainText(args.link))thenreturngetListOfEpisodesLink(args.link)end-- list of episodes (P1811)-- ОБРАЗЕЦ: wikidata({args={{property='P1811', value='Список эпизодов телесериала «Во все тяжкие»', from='Q126004'}})-- Проверка Викиданных--[=[ ДОРАБОТАТЬ!!!! local linkFromWikidata = wikidata({args={property='P1811', value='', from=args.from or '', title=args.title, link=args.link}}) if hasValue(linkFromWikidata) then local wikidataLinkText = getPlainText(linkFromWikidata) local wikidataLink = getListOfEpisodesLink(wikidataLinkText) if hasValue(wikidataLink) then return wikidataLink end end ]=]-- Остальные проверкиlocaltitle=getTitle(args.title)localshowName=getShowName(title)ifnothasValue(showName)thenreturnnilend-- Проверка Базы данныхlocalshowName2,shortShowName,shortShowName2='~','~','~'ifshowName:find('[«"]')thenshowName2=showName:gsub('«','„'):gsub('»','“')shortShowName=match(showName,'[«"](.-)["»]')endifshowName:find('[:.]')thenshortShowName2=showName:gsub('[:.].-$','')endlocalfindedName1,findedName2,findedName3,findedName4localpattern,articleText,databaseLinkfor_,searchNameinipairs({shortShowName2,showName2,shortShowName,showName})dopattern=format('{{([^{«]+[« ]%s[ »][^»}]*)}}',searchName)articleText=match(listOfTitlesArticles,pattern)ifhasValue(articleText)thendatabaseLink=getListOfEpisodesLink(articleText)ifhasValue(databaseLink)thenreturndatabaseLinkendendend-- Проверка основного пространства имён википедииlocallistOfEpisodesArticle,listOfEpisodesLinklocallistOfShowNames={showName,showName2,shortShowName,shortShowName2}--- ??? работает ли кэш ???for_,showTitleinpairs(listOfShowNames)doifcache[showTitle]thenreturncache[showTitle]endendlocallistOfAllTypes={'серий','эпизодов','выпусков','серий телесериала','эпизодов телесериала','серий телесериала','эпизодов сериала','серий мультсериала','эпизодов мультсериала','серий аниме','эпизодов аниме','эпизодов телепередачи','эпизодов шоу','выпусков телепередачи','выпусков телешоу'-- не используются:-- 'выпусков шоу', 'серий сериала', 'серий телепередачи', 'серий телешоу', 'серий шоу',-- 'эпизодов анимационного сериала', 'эпизодов аниме-сериала', 'эпизодов веб-сериала', 'эпизодов мини-сериала'}for_,insertThisinpairs(listOfAllTypes)dofor_,showTitleinpairs(listOfShowNames)dolistOfEpisodesArticle=format('Список %s «%s»',insertThis,showTitle)listOfEpisodesLink=getListOfEpisodesLink(listOfEpisodesArticle)iflistOfEpisodesLinkthen--- ??? работает ли кэш ???cache[showTitle]=listOfEpisodesLinkreturnlistOfEpisodesLinkendlistOfEpisodesArticle=format('Список %s %s',insertThis,showTitle)listOfEpisodesLink=getListOfEpisodesLink(listOfEpisodesArticle)iflistOfEpisodesLinkthen--- ??? работает ли кэш ???cache[showTitle]=listOfEpisodesLinkreturnlistOfEpisodesLinkendendendendreturnp