Википедия rskwiki https://rsk.wikipedia.org/wiki/%D0%93%D0%BB%D0%B0%D0%B2%D0%BD%D0%B8_%D0%B1%D0%BE%D0%BA MediaWiki 1.47.0-wmf.19 first-letter Медий Окреме Розгварка Хаснователь Розгварка зоз хасновательом Википедия Розгварка о Википедиї Файл Розгварка о файлу МедияВики Розгварка о МедияВикию Шаблон Розгварка о шаблону Помоц Розгварка о помоци Катеґория Розгварка о катеґориї TimedText TimedText talk Модул Разговор о модулу Event Event talk Юлиян Рамач (дириґент) 0 490 21364 20258 2026-09-13T15:57:54Z Olirk55 19 Означени викивязи 21364 wikitext text/x-wiki {| class="wikitable" align=right width=300п ! colspan="2" |<big>Юлиян Рамач Чамо</big> |- | colspan="2" |[[Файл:Julin Ramač Čamo.jpg|alt=Юлиян Рамач Чамо|center|мини|300x300п|Юлиян Рамач (1987. року)]] |- |'''Народзени''' |21. децембра 1963. |- |'''Умар''' |24. юния 2016 (53) |- |'''Державянство''' |югославянске, сербске |- |'''Язик творох''' |руски |- |'''Школа''' |Штредня музична школа Исидор Баїч Нови Сад |- |'''Период твореня''' |1986—2016. |- |'''Жанри''' |музичар, аранжер, композитор, дириґент |- |'''Поховани''' |на теметове у Руским Керестуре |} '''Юлиян Рамач''' (*21. децембер 1963—†24. юний 2016), визначни [[музичар]], [[композитор]], аранжер, дириґент и музичних фаховец. == Биоґрафия == Юлиян Рамач народзени 21. децембра 1963. року у [[Руски Керестур|Руским Керестуре]]. Родичи [[оцец]] Дюра и [[мац]] Леона родз. Медєши. Юлиян бул наймладши спомедзи пецерих дзецох у фамелиї Рамачових. Основну школу закончел у Руским Керестуре. Попри основней школи Ю. Рамач ходзел до [[Основна музична школа|основней музичней школи]]-ШОМО, Кула одделєнє у Р. Керестуре и учел ше грац на гармоники. Його позарядови талант за [[Музика|музику]] препознал [[Яким Сивч]], так же после основней музичней школи, без огляду же нє закончел цалу нїзшу музичну школу, Юлиян Рамач початком 80-тих рокох прешлого вику ше уписал и закончел Штредню [[Музична школа ,,Исидор Баїч''|музичну школу ''Исидор Баїч'']] у Новим Садзе, теорийни напрям а грал инструмент клавир (як факултативни инстурмент) и дуйни инструмент-фаґот. == Юлиянова музична драга == [[Файл:Hudaci z DKRK.jpg|alt=Оркестер Дома култури Руски Керестур|thumb|414x414п|Оркестер Дома култури Руски Керестур - з лїва: Янко Гайдук Омер, Мижо Бодянец, Юлиян Рамач Чамо и Миронь Гарди Йоле. ]] После законченя стреднєй школи Юлиян Рамач ше уписал на [[Академия уметносци Универзитету у Новим Садзе|Академию уметносцох у Новим Садзе]], одслухал три семестри та претаргнул студиї и 1986. року почал робиц у [[Дом култури Руски Керестур|Доме култури у Руским Керестуре]] як музични сотруднїк и [[Корепетиция|корепетитор]]. Попри тим, Юлиян Рамач вецей роки пририхтовал музични точки у вецей наших културно-уметнїцких дружтвох зоз тамтейшима аматерами, або там бул и корепетитор у пририхтованю танцох у нових [[Хореоґрафия|хореоґрафийох]]. Под час роботи у Доме култури у Руским Керестуре Юлиян зоз замеркованим успихом водзел дзивоцки [[хор]], мишани хор, жридлову шпивацку ґрупу (хлопску и женску), парохиялни хлопски хор Церкви св. о. Николая у Руским Керестуре, [[Тамбура|тамбурови]] [[оркестер]] керестурского Дому култури и вельки народни оркестер Дому култури. Тиж так, вон пририхтовал и дзецински вокални ґрупи. Попри такей анґажованосци у нашим музичним живоце, Юлиян Рамач Чамо бул и плодни композитор и [[Оркестрация|аранжер]]. Розписовал аранжмани нє лєм за свойо [[Композиция|композициї]], алє и за композициї других авторох, котри були виводзени на Червеней ружи або на Ружовей заградки. Треба ту спомнуц же ше Юлиян Рамач Чамо опробовал и у компонованю одвитуюцей [[Подзелєнє музики|музики]] и за театрални представи за одроснутих и за дзеци. Як абсолутни слухиста, цо велька ридкосц, грал на клавиятурох и гармоники, на струнових - тамбурових [[Подзелєнє музичних инструментох|инструментох]], на дуйних- фаґот и сопилку, нє були му страни анї смиково инструменти и за свойо нєполни 53. роки живота зохабел за собу вельке музичне дїло и фахову роботу, цо шлєбодно мож поровнац з дїлом велїканох рускей музики, як цо [[Яким Сивч]], браца Тимково, [[Витомир Бодянєц]], у дзепоєдним их аж и прероснул. У Доме култури, як музични сотруднїк Юлиян Рамач почал робиц у новембру 1986. року и три децениї бул твардо „звязани” за тоту институцию та мож шлєбодно повесц – цалосна музична дїялносц Дому култури остатнї пар децениї була на Чамових плєцох. Як цо ношел музичну роботу Дому култури, так бул водзаца особа и у музичним живоце Руснацох на тих просторох. Окреме нашо музични фестивали мали його печац, насампредз ''Фестивал култури Червена ружа'' и Ружова заградка, з хторима вєдно роснул и Юлин – як композитор, аранжер, дириґент, фахови руководитель. Юлиян Рамач достал и награду Културно-просвитней заєднїци Општини [[Кула]] Зарї култури, подзекованє з нагоди 50-го ювилейного Фестивалу. == Музични опус == Юлиян Рамач Чамо компоновал коло 40 нови руски шпиванки у народним духу, коло 15 у забавним и коло 45 дзецински, найвецей на тексти своєй шестри Меланки и брата Михала, велї подоставали и награди на ''Ружи'' и ''Заградки''. За нїм числени аранжмани, авторска музика за театрални представи, коло 50 сонґи за дзецински театрални представи, компоновал музичну приповедку ''Сказка о гушлї и гушлярови'' за Радио Нови Сад, сотрудзовал з нашима редакциями радия и ТВ, з кулску музичну школу, дириґовал и з Националним оркестром Руснацох, писал за ньго аранжмани… И шицко цо робел, робел з дзеку, вредно, даваюци цалого себе, нє шпоруюци ше. Як позарядови фаховец у музики свойо музичне знанє и искуство нєсебично преношел и на младших, так же вишколовал велї ґенерациї музичарох, нє лєм у Керестуре, алє и у КУД-ох по местох дзе жию Руснаци. Попри тим же бул позарядови [[музичар]], Юлина шицки паметаю и як барз доброго чловека, котри нїкому нє превредзел и котри за каждого мал сцерпеня, без нервози и дзвиганя гласу, як у роботи з аматерами, так и вообще. Юлиян Рамач бул оженєти зоз Татяну родз. Няради и у малженстве мали два дзивчата, Оксану и Олесю. Юлиян Рамач умар 24. юния. 2016. року. Поховани є на [[Теметов|теметове]] у Руским Керестуре. На Фестивалу рускей култури Червена ружа од 2016. установена нова манифестация на спомин тому музичному ентузиястови под назву Музични вечар Юлиян Рамач Чамо. Оркестер Дома култури тиж од нєдавна ноши назву його мена ''Юлиян Рамач-Чамо'' === Авторски композициї Юлияна Рамача === {| class="wikitable" |+ ! colspan="8" |Фестивал култури Червена ружа |- | | colspan="6" |<div style="text-align: center;"> '''У народним духу''' | |- |'''Рок''' |'''Композиция''' |'''Автор текста''' | | |'''Рок''' |'''Композиция''' |'''Автор текста''' |- |1989. |Танєц любови |Мелания Римар | rowspan="10" | | rowspan="10" | |2001. |Букет младосци |Мелания Римар |- |1990. |У цудзим швеце |align="center" | " |2002. |[https://www.youtube.com/watch?v=GghduktDoPQ Руски коренї] |Серафина Макаї |- |1991. |Стари обичаї |align="center" | " |2003. |Жиєме любов |Мелания Римар |- |1993. |[https://www.youtube.com/watch?v=tzA8LnFJc-c Ноцни шпиванки] |[[Михайло Зазуляк]] |2003. |Нашо Нове Орахово |Любо Рац |- |1994. |Зохабел ме |Амалия Хромиш |2004. |[https://www.youtube.com/watch?v=WXDpPTQc3_g Писня керестурских ловарох] |Михал Рамач |- |1995. |Чувайме свойо |Мелания Римар |2004. |Салаши |align="center" | " |- |1996. |Златна свадзба |align="center" | " |2006. |[https://www.youtube.com/watch?v=KgaxFWOE4rc&list=RDKgaxFWOE4rc&start_radio=1 Свадзебни дзень] |Любомир Загорянски |- |1997. |Шпивай ми |Ясмина Арва |2007. |Стари леґинь |Михал Рамач |- |1997. |Ширцом по швеце |Мелания Римар |2008. |[https://www.youtube.com/watch?v=pnURkj65wys Студзенка] |Мелания Римар |- |1998. |Гудаци муша грац |align="center" | " | | | |} {| class="wikitable" |+ ! colspan="8" |Фестивал култури Червена ружа |- ! ! colspan="2" |У забавним духу ! ! ! ! colspan="2" |Червене пупче |- |'''Рок''' |'''Композиция''' |'''Автор текста''' | | |'''Рок''' |'''Композиция''' |'''Автор текста''' |- |1985. |Михалово лєто |Михал Рамач | | |1993. |Велька любов |Владимир Бесерминї |- |1986. |Блуканя ґу златастому |Мелания Римар | | |1995. |Таня |Мария Фа |- |1988. |[https://www.youtube.com/watch?v=7RKHgTS6fRk Одходза младосци з очох] |align="center" | " | | |1996. |Прешла уж жима |Раде Павелкич/М. Зазуляк |- |1989. |Заорани дильови |align="center" | " | | |1997. |Пре нови амрел |Мелания Римар |- |1989. |[https://www.youtube.com/watch?v=7qqSE3ijP3A&list=RD7qqSE3ijP3A&start_radio=1 Гварел ши ми же одходзиш] |Любка Гаргаї | | |1997. |Чом Иринка финка |align="center" | " |- |1991. |Най ружа останє |Владимир Бесерминї | | |1998. |Моя школа |Серафина Макаї |- |1993. |[https://www.youtube.com/watch?v=mdZaZrNBzMU Єшеньски нємири] |Михайло Зазуляк | | |1998. |Фантазиї |Мелания Римар |- |1993. |Дзивоцки чеканя |align="center" | " | | |1998. |Новотни тротинет |align="center" | " |- |1995. |Знова до цудзини |align="center" | " | | |2001. |Любим Мижа |Янко Николич |- |1996. |По полноци |Мелания Римар | | |2001. |Добре пчолом |Мелания Римар |- |1997. |Христово роки |Михайло Зазуляк | | |2002. |Моя мамочка |Любомир Загорянски |- |1998. |Тей ноци |Ясмина Арва | | |2002. |Прави дїдо |Мелания Римар |- |2003. |Дражка на салаш |Михал Рамач | | |2003. |Ми би сцели |align="center" | " |- |2010. |[https://www.youtube.com/watch?v=qEM5b9zAV5I Чувай ме] |Мелания Римар | | |2003. |Муки любовни |align="center" | " |- | colspan="3" | | | |2004. |Стреже за мну Сенка |Михайло Зазуляк |- ! colspan="3" |Червене пупче | | |2004. |Мацерово лїки |Мелания Римар |- |1987. |Лєто у дїда |Мелания Римар | | |2006. |Баба метеоролоґ |align="center" | " |- |1988. |[https://www.youtube.com/watch?v=fOo0CdTK9KI Стари приповедки] |align="center" | " | | |2006. |Чаривне путованє |Любомир Загорянски |- |1988. |Нажалєна математика |align="center" | " | | |2007. |Чарни слон |Мелания Римар |- |1988. |Семафор |Владимир Бесерминї | | |2007. |Дїдово витамини |align="center" | " |- |1989. |Зебра |align="center" | " | | |2008. |Пупче мале |Владимир Еделински |- |1989. |Нєясни рахунки |Мелания Римар | | |2008. |Цмота нїчовка |Мелания Римар |- |1989. |Бавиц нам ше дайце |Михайло Зазуляк | | |2009. |Школа у природи |align="center" | " |- |1990. |Дзеци без гришки |Мелания Римар | | |2009. |Нїяка жима |align="center" | " |- |1990. |Живи бависка |align="center" | " | | |2013. |[https://www.youtube.com/watch?v=reQcunf1Y20 Здравко люштавко] |align="center" | " |- |1991. |Цибулько моя |Михайло Зазуляк | | |2013. |Стародавни лакотки |(Ю.Рамач - М.Римар) |- |1991. |Лєгко зубарови |Мелания Римар | | |2014. |Коцки |(Ю.Рамач - М.Римар) |- |1993. |Нє страшце нас з бубушами |align="center" | " | | |2015. |Чаривни заглавчок |(Ю-Рамач - М.Римар) |- |1993. |Любовна загадка |Михайло Зазуляк | | |2016. |[https://www.youtube.com/watch?v=Navubc1mcVQ Нїч нє прескочим] |Мелания Римар |} {| class="wikitable" |+ ! colspan="8" |Ружова заградка |- !Рок !Композиция !Автор текста | | !Рок !Композиция !Автор текста |- |1992. |У вербинкох |Мелания Римар | | |2005. |[https://www.youtube.com/watch?v=jIqp_wOVpE4 Даруй ше] |Мелания Римар |- |1993. |[https://www.youtube.com/watch?v=S_wsSOVdRlQ Свадзебна] |align="center" | " | | |2007. |Млади мешац |align="center" | " |- |1993. |Буджацка |Михайло Зазуляк | | |2007. |Три руски валали |С. Макаї |- |1997. |Одходзим |Ясмина Арва | | |2008. |[https://www.youtube.com/watch?v=LkbWWYvgSbw Ноцне шпиванє] |Мелания Римар |- |1997. |Любме любени |Мелания Римар | | |2010. |[https://www.youtube.com/watch?v=PC5-yGl18qU Паприґарска] |Михайло Зазуляк |- |1998. |[https://www.youtube.com/watch?v=a-8cVqUpP-E Нашо нєдзелї] |align="center" | " | | |2012. |Цепли домик |Мелания Римар |- |1999. |[https://www.youtube.com/watch?v=jIqp_wOVpE4 Били жими] |align="center" | " | | |2014. |Шпиванка лїчи |align="center" | " |- |2001. |[https://www.youtube.com/watch?v=fXxjarE5Eko Млада руска андя] |Серафина Макаї | | |2015. |[https://www.youtube.com/watch?v=gqHSrOtJOmg Дзе любов греє] |align="center" | " |- |2003. |Мам гунцута |Михайло Зазуляк | | |2016. |Ми єдно друге маме |align="center" | " |- |2004. |[https://www.youtube.com/watch?v=iiOP8figH6A&list=RDiiOP8figH6A&start_radio=1 Руснакова драга] |Владимир Дїтко | | | | | |} == Литература == * Тамаш, др Юлиян: „Дом културиˮ, ''Руски Керестур, лїтопис и история (1745-1991),'' Месна заєднїца Руски Керестур, 1992, бок 419. * ''Руски християнски календар'' 2017. рок, бок 202 == Вонкашнї вязи == * [https://zavod.rs/wp-content/uploads/2019/04/CERVENA-RUZA-II-WEB.pdf ''Юлиян Рамач Чамо'' (биоґрафия и список композицийох)], ''Червена ружа 1962-2011, Том II,'' Завод за културу войводянских Руснацох, Нови Сад, 2014., б. 526-528. * [https://www.youtube.com/watch?v=Aqx9JcdOk_M ''MUKI LJUBOVNI (МУКИ ЛЮБОВНИ'')], Проєкт Дома култури Руски Керестур – Червене пупче 2020. Музика: Юлиян Рамач Чамо Текст: Михайло Зазуляк Аранжман: Мирослав Пап * [https://rntdjadja.com/%D1%80%D1%83%D1%81%D0%B0%D0%BB%D0%BA%D0%B0/ ''РУСАЛКА''] Премиєра: 28.01.2012. Руски Керестур, директор Сашо Палєнкаш, Автор: Штефан Гудак, Режия, адаптация и вибор музики: [[Михайло Зазуляк]], Сценоґрафия: Биляна Роман, Костимоґраф: Таня Орос, Автор музики: Юлиян Рамач Чамо и Яким Сивч * [https://www.danas.rs/kultura/in-memoriam-julijan-ramac-camo-1963-2016/ IN MEMORIAM: ''Julijan Ramač Čamo (1963-2016)''], ''Danas,'' kultura, 28.06.2016. * [https://rtv.rs/sr_lat/hronika/preminuo-julijan-ramac-camo_731155.html ''Preminuo Julijan Ramač Čamo''], Radio-televizija Vojvodine, Hronika, 24. jun 2016., Novi Sad * [https://www.youtube.com/watch?v=04BsvgCUn48 ''in memoriam Юлиян Рамач Чамо - in memoriam Julijan Ramac Camo''], YouTube. РТВ Войводина, Jun 24, 2016 * [https://www.youtube.com/watch?v=Ulm7-4jFbZw ''Revijalna časc,'' predstavjanje muzičnej tvorčosci Julijana Ramača], 26 Ružova zahradka, 12. marec 2016. {{DEFAULTSORT:Рамач , Юлиян }} [[Катеґория:Руснаци у Сербиї]] [[Катеґория:Керестурци]] [[Катеґория:Музика]] [[Катеґория:Музичаре]] [[Катеґория:Дириґенти]] [[Катеґория:Композиторе]] [[Катеґория:21. децембер]] [[Катеґория:Народзени 1963]] [[Катеґория:24. юний]] [[Катеґория:Умарли 2016]] sp0vgnvlkpkufjebuqgl4xlspb3nnvq Панонски руски язик 0 554 21371 15404 2026-09-14T02:19:28Z ~2026-49599-13 2557 /* */ 21371 wikitext text/x-wiki {| class="wikitable" align=right width=300px ! colspan="2" |<big>Панонски руски язик</big> |- ! colspan="2" |Народна назва: ''руски язик'' (''руснацки язик'', ''русински язик'') |- |'''Бешедує ше на нїм у''' |[[Файл:Flag_of_Serbia.svg|22п|border]] [[Сербия]]<br />[[Файл:Flag_of_Croatia.svg|22п|border]] [[Горватска]] |- |'''Число бешеднїкох у швеце''' |приблїжно 9.500 |- |'''Язична фамелия''' |<small>индоевропски</small> * <small>балтославянски</small> ** <small>славянски</small> *** <small>заходно- восточнославянски</small> **** <small>Панонски руски/русински язика</small> |- |'''Писмо''' |[[панонскоруска кирилка]] (вариянта русинскей кирилки) |- ! colspan="2" |Урядови статус |- |'''Официйни язик у''' |[[Файл:Flag_of_Serbia.svg|22п|border]] Сербия<br/>([[Файл:Flag of Vojvodina.svg|22п|border]] [[Войводина]]) |- |'''Тото реґулує''' |Статут Войводини<ref>[https://www.skupstinavojvodine.gov.rs/Strana.aspx?s=statut ''Стaтут Aвтономнeй Покрaїни Войводини'' (на руским язику).] 22. мая 2014. Скупштина Автономней покраїни Войводини.</ref> |- ! colspan="2" |Язични коди |- |'''ISO 639-3''' |[https://iso639-3.sil.org/code/rsk rsk] |- | colspan="2" |Панонски руски язик класификовани як дефинитивно загрожени язик спрам УНЕСКО-вого Атласа шветових язикох у опасносци (2010) [[Файл:Lang Status 60-DE.svg|290п|center]] |} == Статистично-демоґрафски податки о Руснацох == :'''Векше информациї:''' [[Руснаци у Сербиї]] У Републики Сербиї, спрам Попису жительства зоз 2022. року, єст 11.483 Руснацох. З того у [[Войводина|Войводини]] жию 11.207 Руснаци (найвецей у [[Руски Керестур|Руским Керестуре]], Новим Садзе, [[Коцур]]е, [[Вербас|Вербаше]], [[Дюрдьов]]е, Новим Орахове, Бачкей Тополї, Сримскей Митровици, [[Шид]]зе, [[Бикич Дол|Бикичу]], [[Бачинци|Бачинцох]] итд.). У [[Горватска|Републики Горватскей]], спрам Попису жительства зоз 2021. року, єст 1.343 Руснацох (найвецей у Вуковарско-сримскей и Осецко-бараньскей жупаниї, та городзе Заґребе). == Теориї о походзеню панонского руского язика == Питанє ґенетскей зродносци и места панонского руского язика у фамелиї славянских язикох ма длугу традицию, о чим єст даскельо теориї. По першей, панонски руски язик стандардизовани заходноукраїнски диялект ([[Володимир Гнатюк|В. Гнатюк]], [[Микола Мушинка|М. Мушинка]], А. П. Коваль, П. Чучка, Н. Т. Толстой, Ю. Тамаш, [[Гавриїл Костельник|Г. Костельник]], [[Янко Рамач|Я. Рамач]]). По другей, панонски руски язик стандардизовани восточнословацки диялект (Ф. Пастрнек, О. Соболевский, О. Брох, Й. Шкулети, Й. Штолц, Ф. Тихи, Е. Паулини, В. Чарски). По трецей теориї, панонски руски язик то стандардизована преходна бешеда медзи восточнословацким и заходноукраїнским (С. Цамбел, Ж. Штибер, С. Ґуставсон, М. Пешикан). По штвартей, слово о окремним микроязику у хторим ше преплєтаю примарни восточнославянски и заходнославянски, а часточнє и южнославянски уплїви ([[Александр Дмитриєвич Дуличенко|А. Дуличенко]]). == Фонетика == Сучасну руску фонетику, синхронийно патрене, характеризує класична система пейцох вокалох: {| style="text-align:center;" |+ ! colspan="3" |у транскрибциї ! colspan="2" | ! colspan="3" |з руским писмом |- |<big>i</big> | |<big>u</big> | rowspan="3" | | rowspan="3" | |<big>и (ї)</big> | |<big>у (ю)</big> |- |<big>e</big> | |<big>o</big> |<big>е (є)</big> | |<big>о</big> |- | |<big>a</big> | | |<big>а (я)</big> | |} Дифтонґи и обачлївши позицийни варияциї вокалскей фарби нєт, як анї складотворни сонанти. Нєт фонолоґийни розлики медзи длугима и краткима вокалами. Виразну характеристику рускей фонетики представя розвита и дошлїдна система правих консонантох, з подполну симетрию дзвонких и нєдзвонких консонантох, а тиж и розвита система сонантох: [[Файл:Po mesce tvorenja.jpg|центар|мини|824x824п]] Важни характеристики тей системи таки: - єст дзвонки африкати '''дз''' и '''дж''' (''радзиц, будзиц, дзешка; джобац, маджун, диждж'') <u>дз</u>; - єст експлозивни и фрикативни дзвонки велар '''ґ''' и '''г''' (''ґовля, ґунар, ґаґац; глава, глас, голуб''); - єст шор палаталних консонантох '''ть''' и '''дь''' и '''ль''' и '''нь''' (''контя, андя, дєплови; лїпа, лїсце, коритнявка''); - змегчане вигварянє шумових консонантох '''ч''' и '''ш'''; - нєт векши уплїв вокалох на вигварянє предходного консонанту, у синхронийним смислу, анї обратно, алє приходзи до вираженя автономносц консонантох и вокалох. - (За розлику од сербского язика, дзе нєт консонанти '''дз''' и '''г''', у руским язику нєт африкати '''ћ''' и '''ђ'''.) За першу палатализацию руски язик зна: 1.у вокативе меновнїкох хлопского роду (''чловек – чловече''); 2. у презенту дїєсловох (''пекол – печеш''). Тота пременка ше окончує и пред другима вокалами при твореню нових словох: а) пред нєпостояним '''о''' (''друк – дручок, поток – поточок''); б) пред полугласнїком хтори бул состойна часц суфиксу як наприклад '''-ьни''', '''-ька''' (''грих – гришни, рука – ручка''). Од другей палатализациї у руским язику остали лєм шлїди, и то у меновнїкох хлопского роду у номинативе множини (''Руснак – Руснаци, вояк – вояци''). При меновнїкох женского роду палатализация ше нє окончує (''рука – руки, нога – ноги''); нє окончує ше анї при меновнїкох хлопского роду кед означую нєживе (''орех – орехи, пняк – пняки''). Понеже друга палатализация нє постала обща пременка, нє окончує ше анї у словох як цо ''Чех – Чехи, Влах – Влахи, припаднїк – припаднїки, представнїк – представнїки''. Преднєподнєбни консонанти (й, ж, ш, дь, ть, ть, ч, дж, дз, ц) у руским язику нє мож далєй змегчовац. Консонанти б, п, в, ф, м ше тиж нє мегчую. Змегчую ше консонанти к, х, ґ, д, т, з, с, л, н, кед ше за нїма находзи '''й'''. Вони вєдно з '''й''' даваю одредзени поднєбни (мегки) консонант. У сучасней бешеди ше нє зна дзе було '''й''' хторе вименєло тварди консонант, алє тото можеме дознац кед поровнаме нєвименєни консонантски основи, як наприклад ''душа – дух, плачеш – плакац, кожи – коза, клаше – класка'', дзе консонант вименєни под уплївом '''й'''. Резултати йотованя, палатализациї и змегчованя консонантох пре други причини дали исти вименєни гласи, та прикладнєйше розпатриц змегчованє консонантох як обще зявенє у руским язику. Тварди консонанти, хтори ше у руским язику нє змегчую тоти: б, п, в, ф, м и р; мегки: й, ль, нь, ть, дь, дз, а дакедишнї мегки: ш, ж, дж, ч, с. Мегки и дакедишнї мегки консонанти ше тиж нє змегчую. Остава же ше можу змегчац к, ґ, х, д, т, з, с, л, н. Тоти консонанти ше змегчую кед за нїма приходза гласи е, и, и й. Або дакедишнї полугласнїки (ь, ъ), хтори у сучасних словох находзиме у суфиксох як нєпостояне <u>о</u> або нє маю одвитуюци глас (напр. дакедишнї суфикси -'''ьни''', -'''ька''', нєшка маме '''''-ни''''' , -'''ка'''). Змегчованє консонантох ше окончує у основи слова, на гранїци основи и законченя у пременки словох и на гранїци основи и суфиксу у виводзеню словох. Змегчованє у основи словох обачуєме теди кед руске слово поровнаме з истима словами з других славянских язикох. Опрез '''е''' и '''и''' ше змегчую с, з, л, н, д, т: ''шиви – сив, жима – зима, лєто – лето, небо – нєбо, дзешец – десет, цело – тело''. Змегчованє може буц и поштредне, у консонатскей ґрупи после хторей приходзи '''е''', '''и''': ''шнїг – снег, шлєпи – слепи, шлїна – слина, жвир – звер, шмерц – смрт, шмели – смео, цми – таман, швитац – свитати''. Змегчованє пред законченьом ше окончує при меновнїкох хлопского роду у вокативе єднини, и то: к, ґ, х хтори преходза до ч, ж, ш пред законченьом -'''е''': чловече, душе. У руским язику тота пременка нє ма вельку важносц, бо вокатив ма и законченє -у пред хторим ше пременка нє окончує (''хлапчику, юнаку, лєнюху, зазраку''). У локативе єднини меновнїкох хлопского роду пред законченьом -'''е''' змегчую ше '''с''', '''з''', '''л''', '''н''', '''д''', '''т''': ''Вербас – у Вербаше, валал – у валалє, комин – у коминє, гвозд – по гвоздзе, приклєт – у приклєце''. Медзитим, понеже локатив може мац и законченє -'''у''', пред хторим ше пременка нє окончує, велї меновнїки зоз спомнутима консонантами зявюю ше без пременки: ''на носу, на мразу'' итд. Дошлїдне змегчованє консонантох у руским язику ше окончує у пременки дїєсловох – у презенту и императиве. Презент ма у законченю вокали '''е''', '''и''', '''а'''. Опрез '''а''' ше пременка нє окончує, а пред '''е''' и '''и''' ше консонант основи (к, ґ, х, д, т, з, с, л, н) вше змегчує: ''пекол – печем, стрегол – стрежем, брехац – бреше, предол – предзем, тресол – трешем, стануц – станєм''. Императив за другу особу єднини вше ма мегки консонант; ''печ, стреж, бреш, предз, плєц, реж, веж, треш, коль''. При виводзеню меновнїкох єст найчастейше тоти два пременки: # виводзенє основних меновнїкох: ''дух – душа, пасц – паше, класки – клаше''; # виводзенє деминутивнох: ''рука – ручка, рика – ричка, нога – ножка, шнїг – шнїщок''. При виводзеню дїєсловох за змегчованє шицки консонанти пред '''е'''<u>,</u> '''и''': ''сухи – сушиц, длуги – длужиц, квиток – квициц, рада – радзиц''. При виводзеню прикметнїкох ше змегчую '''к''', '''ґ''', '''х''': ''рок – рочни, страх – страшни, грих – гришни''. У даєдних виведзених словох єст и обратни процес – у поровнаню з основнима словами, консонанти ше нє змегчую, алє ше зявюю як тварди: ''косц – косточка, часц – часточка''. == Акцент == Акцент у руским язику динамични (удерни) и находзи ше вше на предостатнїм складзе полнозначних словох. Нєполнозначни слова <u>нє</u> маю свой акцент. Вони ше приключую ґу акцентованим словом по одредзених правилох. Наглашени помоцни дїєслова и нєнаглашени заменовнїцки форми (енклитики) приключую ше ґу словом опрез себе (''питал ше; вон ше питал''), а применовнїки, злучнїки и словка – ґу словом за собу (''на польо, пойдзем и я''). Од нєполнозначних словох, лєм викричнїки маю свой акцент, алє то уж и прето же вони у виреченю емоционално означени. У бешеди, акцент єдноскладових наглашених словох преходзи на єдноскладову применовнїцку проклитику: ''нá жем, зá хвост, пóд нос, прéз мост''. Медзитим, кед главне слово у пременки дoстанє два склади, акцент ше нє преноши: ''на жéми, за хвóстом, под нóсом''. У словох хтори ше закончую на -'''из(е)м''', акцент (у номинативе єднини) на предостатнїм складзе: социялѝз(е)м, колониялѝз(е)м, конформѝз(е)м. У експресивней бешеди акцент часто на першим складзе, односно на єдноскладовим применовнїку и неґациї <u>нє</u> и кед после нїх вецейскладове слово: тéльо му нáказуєм, а вон лєм нє послуха, лєм ýпрекосци. == Азбука == По 1932. рок Руснаци нє мали свою азбуку. Хасновали церковнославянске писмо (дзекеди поєдноставене), сербски кирилку и латинку и мадярске писмо. Руснаци у Войводини пишу з українску азбуку хтору предложел перши руски писатель и линґвиста о. др Гавриїл Костельник у своєй Граматики бачваньско-рускей бешеди (Сримски Карловци 1923). Руске писмо ма 32 знаки, односно 31 букву и додати мегки знак: {| style="font-family:Microsoft Sans Serif; font-size:1.4em; border-color:#000000; border-width:1px; border-style:solid; border-collapse:collapse; background-color:#F8F8EF; text-align:center" | style="width:3em"| А а | style="width:3em"| Б б | style="width:3em"| В в | style="width:3em"| Г г | style="width:3em"| Ґ ґ | style="width:3em"| Д д | style="width:3em"| Е е |- | Є є | Ж ж | З з | И и | Ї ї | Й й | К к |- | Л л | М м | Н н | О о | П п | Р р | С с |- | Т т | У у | Ф ф | Х х | Ц ц | Ч ч | Ш ш |- | Щ щ | Ю ю | Я я | Ь ь | | | |}Понеже Руснаци у Републики Горватскей барз часто пишу по руски з латинску азбуку, вона випатра так: {| style="font-family:Microsoft Sans Serif; font-size:1.4em; border-color:#000000; border-width:1px; border-style:solid; border-collapse:collapse; background-color:#F8F8EF; text-align:center" | style="width:3em"| A a | style="width:3em"| B b | style="width:3em"| V v | style="width:3em"| H h | style="width:3em"| G g | style="width:3em"| D d | style="width:3em"| Dj dj |- |Dž dž |Dz dz |E e |Ž ž |Z z |I i |J j |- |K k |L l |Lj lj |M m |N n |Nj nj |O o |- |P p |R r |S s |T t |Tj tj |U u |F f |- |Ch ch |C c |Č č |Š š | | | |} Наприклад:<blockquote><big>Ked '''h'''olubica ljecela, drobni pirečka tracela, Ljecela vona prez '''h'''ori do svojej milej maceri; '''Ch'''ižočko stara, '''ch'''udobko naša, ti nam na bilim švece najkrasša.</big></blockquote> == Правопис == Перши руски правопис бул у составе ''Граматики бачваньско-рускей бешеди'' о. др Ґабра Костелника 1923. року под назву ''Писовня'', други Правопис руского язика (школске виданє) написал [[Микола М. Кочиш]] 1971. року, а треци Правопис руского язика з правописним словнїком др Михайло Фейса и мр Гелена Медєши 2021. року. Руски правопис фонетско-етимилоґийни: слова ше пише так як ше их вигваря, алє ше, з другого боку, морфеми найчастейше пише нєвименєни, без огляду на тото же ше у вигваряню меняю: 1. виєдначованє по дзвонкосци: ''хладок – хладку'' (у вигваряню: ''хлатку''), ''хижа – дем. хижка'' (у вигваряню: ''хишка''); 2. слова зоз палатализацию: ''драга – дражка'' (у вигваряню: ''драшка''); 3. други меновнїки: ''приповедац – приповедка'' (у вигваряню: ''приповетка''); 4. прикметнїки: ''бридки'' (у вигваряню: ''бритки''), ''гладки'' (у вигваряню: ''глатки''); 5. префикси: а) '''об'''-: ''обстац'' (у вигваряню: ''опстац''): б) '''од'''-: ''одпутовац'' (у вигваряню: ''отпутовац''); в) '''пред'''-: ''предпоставка'' (у вигваряню: ''претпоставка''); г) '''под'''-: ''подплациц'' (у вигваряню: ''потплациц''); ґ) '''над'''-: ''надприродни'' (у вигваряню: ''натприродни'') д) '''роз'''-: ''розсипац'' (у вигваряню: ''росипац''); 6. виєдначованє по месце твореня: ''розчисциц'' (у вигваряню: ''рошчисциц''); 7. випадованє консонантох у консонантских ґрупох: '''стн'''-, '''сцн'''-: ''посни'' (постни), ''радосни'' (радостни); 8. подвоєни консонанти ше чува у писаню кед єден припада префиксу, а други кореню: ''оддалїц, беззуби''; 9. суфикс -'''ски''' при прикметнїкох дзе ше на концу вигваря -'''цки''': а) основи на '''д''', '''т''' ше пише зоз суфиксом – '''ски''': ''беоґрадски, горватски''; б) основи на '''к''', '''ч''', '''ц''' ше пише зоз -'''цки''': ''юнак – юнацки, ковач – ковацки''; в) при основох на '''с''', '''х''' тоти консонанти ше траца пред -'''ски''': Ч''ех – чехски- чески''; г) при основох на '''з''' суфикс -'''ски''' траци '''с''': ''Француз – французки''; ґ) при основох на '''г''', '''ґ''' пред -'''ски''' приходзи до палатализациї '''г''', '''ґ''', при чим ше '''ж''' чува у писаню, гоч ше вигваря '''ш''': ''Прага – пражски'' (у вигваряню: ''прашки''). == Морфолоґия == === Меновнїки === У руским язику єст седем припадки. Єст два типи меновнїцких пременкох: 1.а) меновнїки хлопского роду на тварди и мегки консонант (''стол, карсцель''); б) меновнїки хлопского роду на -'''о''': (''дїдо''); пожички хтори до руского язика вошли прейґ сербского (''авто''), власни мена (''Янко, Владо''); в) власни мена на -'''и''': (''Дюри, Силви''); г) меновнїки хлопского роду на -'''е''': (''бифе, пире''); ґ) меновнїки штреднього роду на -'''о''', -'''е'''/-'''є''': (''место, племе, знанє''); 2.а) меновнїки женскогороду на -'''а'''/-'''я''': (''школа, вишня''): б) меновнїки женского роду на консонант: (''косц, радосц''); 3. даєдни меновнїки, презвиска и назвиска хлопского роду маю мишану пременку (''ґазда, слуга, судия; Новта, Митя''). ==== Перша деклинация ==== У зукосих припадкох нєт розлики у законченьох медзи основами на тварди и мегки консонант: {| class="wikitable" |Н. |стол |столи |конь |конї |- |Ґ. |стола |столох |коня |коньох |- |Д. |столу |столом |коньови |коньом |- |А. |стол |столи |коня |конї |- |В. |столу |столи |коню |конї |- |И. |столом |столами |коньом |коньми |- |Л. |столє/-у |столох |коньови |коньох |} Вельке число меновнїкох хтори знача особи по занїманю, дїялносци, прикмети, походзеню або националносци у номинатове множини маю законченє -'''е''' (-'''є'''). То углавним меновнїки на консонант. - '''ар''': ''школяр'' – ''школяре, пекар – пекаре''; - '''ач''': ''орач –'' ''ораче, слухач – слухаче''; - '''ош''': ''смаркош – смаркоше, нялкош - нялкоше''; - '''тель''': ''писатель – писателє''; - '''ан'''/-'''чань''': ''Новосадянь – Новосдянє, Петровчань – Петровчанє''; - '''ор''', '''ер''', '''ир''': ''директор – директоре, шофер – шофере, пастир – пастире''. Законченє -'''ове''' (-'''ов''' випадує у зукосих припадкох) маю меновнїки хтори знача родзинство, титули: ''оцец – оцове, син – синове, шовґор – шовґрове, цар – царове, княз – князове''. Власни мена, презвиска и назвиска, кед ше их хаснує у множини, маю тиж законченє -'''ове''': ''Янко – Янкове, Сабадош – Сабадошове''. Меновнїки штреднього роду хтори знача мали (млади) преширюю основу у зукосих припадкох єднини зоз -'''ец'''-, а у множини зоз -'''ат'''-: {| class="wikitable" !Н. !каче !качата |- |Ґ. |качеца |качатох |- |Д. |качецу |качатом |- |А. |каче |качата |- |В. |каче |качата |- |И. |качецом |качатми |- |Л. |качецу |качатох |} ==== Друга деклинация ==== (меновнїки женского роду на -'''а''' (-'''я''') и на консонант): {| class="wikitable" !Н. !школа !школи !косц !косци !мац !мацери |- |Ґ. |школи |школох |косци |косцох |мацери |мацерох |- |Д. |школи |школом |косци |косцом |мацери |мацером |- |А. |школу |школи |косц |косци |мацер |мацери |- |В. |школо |школи |косц |косци |мамо |мацери |- |И. |школу |школами |косцу |косцами |мацеру |мацерами |- |Л. |школи |школох |косци |косцох |мацери |мацерох |} ==== Мишана деклинация ==== Меновнїки хлопского роду на -'''а''' (-'''я''' и -'''ия''') хтори знача особи, у дативе, инструменталу и локативе и у номинативе множини маю законченя першей, а у ґенитиве, акузативе и вокативе єднини законченя другей деклинациї: {| class="wikitable" !Н. !ґазда ! !В. !ґаздо |- |Ґ. |ґазди | |И. |ґаздом |- |Д. |ґаздови | |Л. |ґаздови |- |А. |ґазду | | | |} === Прикметнїки === Векшина описних прикметнїкох, шицки материялни прикметнїки и присвойни прикметнїки на -'''и''' маю законченя: хлопски род на -'''и''' (красни), женски род на -'''а''' (красна), штреднї род на -'''е''' (красне), множина -'''и''' (за шицки три роди: красни хлопи, красни жени, красни дзеци). У руским язику нєт розлики медзи одредзеним и нєодредзеним прикметнїцким видом. У деклинациї нєт розлики у законченьох медзи основу на мегки и тварди консонант: {| class="wikitable" ! !х. р. !х. р. !ш. р. !ш. р. !ж. р. !ж. р. |- |Н. |желєни |ярнї |желєне |ярнє |желєна |ярня |- |Ґ. |желєного |ярнього | | |желєней |ярнєй |- |Д. |желєному |ярньому | | |желєней |ярнєй |- |А. |желєни |ярнї |желєне |ярнє |желєну |ярню |- |В. |желєни |ярнї |желєне |ярнє |желєна |ярня |- |И. |желєним |ярнїм | | |желєну |ярню |- |Л. |желєним /-ому |ярнїм/-ньому | | |желєней |ярнєй |} {| class="wikitable" ! !множина !множина |- |Н. |желєни |ярнї |- |Ґ. |желєних |ярнїх |- |Д. |желєним |ярнїм |- |А. |желєни |ярнї |- |В. |желєни |ярнї |- |И. |желєнима |ярнїма |- |Л. |желєних |ярнїх |} '''Компаратив''' ше прави зоз двох суфиксох: -'''ши''' и -'''ейши'''. Суфикс –'''ши''' доставаю основи на єден консонант (''били, билши, билша, билше''; мн. ''билши''), а суфикс -'''ейши''' основи на два консонанти (''тварди – твардейши; прости – простейши''). '''Суперлатив''' ше прави з помоцу суфикса '''най''', хтори ше додава пред основу (''били – билши – найбилши''). === Числовнїки === Число '''єден''' ма форми за шицки три роди и за множину: (''єдна, єдно'', мн. ''єдни''), а число ''два'' их нє ма ''(два столи, два кнїжки, два места''). При зложених числох пред єдинками мож хасновац злучнїк '''и''': ''двацец єден'' або ''двацец и єден''. Меновнїки коло основних числох (од числа '''два''') маю форму номинативу множини: ''два столи, три столи, штири вароши, пейц автобуси''. Основни числа ше меняю по число '''шейсц'''. Число '''єден''' ше меня як прикметнїки, а други числа як меновнїки у множини, з винїмком инструменталу, хтори при меновнїкох ма законченє -'''ами''', а при числох -'''ома''' (''двома, трома, штирома'' новима столами). При збирних числох, за особи хлопского роду ше хаснує збирну форму на -'''ме''', хтору ше виводзи зоз числох 20-40 и, ридко, зоз стоткох: ''двоме, троме, дзветнацецме, стоцецме''. Меновнїки коло тих збирних числох, як и коло основних, стоя у номинативе множини: ''двоме студенти''. Єст и збирни форми на -'''о''', хтори ше хаснує за мишани роди и за младе животиньох. И коло тих числох меновнїки стоя у номинативе множини: ''двойо качата''. Множина збирних числох на -'''о''' ше хаснує при меновнїкох плуралия тантум: ''трої ножнїчки, двої панталони''. Шорни числа ше меняю по прикметнїцкей деклинациї. === Дїєслова === У руским язику єст 10 дїєсловни форми: 1. '''инфинитив''', хтори ма суфикс -'''ц''': жац, пасц, шиц, читац, писац; 2. '''презент''': 2. '''презент''': я лєцим / ми лєциме ти лєциш / ви лєцице вон лєци / вони лєца 3. '''футур''': а) '''прости футур''': я пойдзем / ми пойдзем ти пойдзеш / ви пойдзеце вон пойдзе / вони пойду б) '''зложени футур''': я будзем читац / ми будземе читац ти будзеш читац / ви будзеце читац вон будзе читац / вони буду читац 4. '''перфект''': читал сом / читали зме читал ши / читали сце читал (-ла, -ло) / читали (форма читали за шицки три роди) Кед субєкт висловени, перфект без помоцного дїєслова: я читал / ми читали ти читал / ви читали вон читал / вони читали (за шицки три роди) вона читала воно читало 5. '''плусквамперфект''': я бул читал / бул сом читал ти бул читал / бул ши читал вон бул читал / бул читал ми були читали / були зме читали ви були читали / були сце читали вони були читали / були читали 6. '''императив''': а) пиш, беж, пий б) ведз, предз, плєц в) шеднї, утри 7. '''потенциял''': я би читал / читал бим, читал би сом ти би читал / читал биш, читал би ши вон би читал / читал би Ми би читали / читали бизме ви би читали / читали бисце вони би читали / читали би 8. '''потенциял прешли''': я би бул читал / бул бим читал, бул би сом читал ти би бул читал / бул биш читал, бул би ши читал вон би бул читал / бул би читал ми би були читали / були бизме читали ви би були читали / були бисце читали вони би були читали / були би читали 9. '''дїєприкметнїк пасивни перфекта''' (пасив перфекта): читани, плєцени, замасцени, злєкнути, зроснути, вигладнєти, спрети, затити 10. '''дїєприсловнїк презента''' читаюци, пишуци, шедзаци, кричаци, робяци, ламуци/ламаюци == Здобуванє статуса литературного язика == [[Файл: %D0%AE%D0%B6%D0%BD%D0%BE%D1%80%D1%83%D1%81%D0%B8%D0%BD%D1%81%D0%BA%D0%B8%D0%B5-%D0%BD%D0%B0%D1%81%D0%B5%D0%BB%D1%91%D0%BD%D0%BD%D1%8B%D0%B5-%D0%BF%D1%83%D0%BD%D0%BA%D1%82%D1%8B.png|370x370px|алт=Населєня у Сербиї и Горватскей у хторих жию припаднїки рускей националней меншини|мини|Населєня у Сербиї и Горватскей у хторих жию припаднїки рускей националней меншини]] У чаше присельованя на южни папнонски простори през 18. вик, Руснаци зоз Старого краю принєсли свой народни руски язик, хтори зачували по нєшка. У найвекшей часци 18. и 19. вику, образоване пасмо медзи Руснацами у южних угорских обласцох були углавним грекокатолїцки священїки и локални учителє, медзи хторима були и перши творителє литературних дїлох. [[Файл:Z mojoho valala 1903.jpg|алт=Гавриїл Костельник, Идилски венєц З мойого валала, 1903. рок|мини|172x172п|Гавриїл Костельник, Идилски венєц ''З мойого валала'', 1903. рок]] З поштредованьом грекокатолїцкого священства, хторе свойо образованє найчастейше здобувало у Галичини, медзи Руснацох у южних обласцох Угорскей почали приходзиц литературни твори зоз сиверовосточних (карпатских) обласцох. Єден з найзначнєйших творох у хторим представена тедишня поетска творчосц на руским язику була збирка писньох рижних русинских авторох под насловом ''Русскій соловей,'' хтору 1890. року пририхтал [[Михайло Врабель]]. Зоз твореньом Кральовини СГС (1918) наступели лєпши обставини за розвой домашнього руского язика, хтори постал наставни язик у основних школох у руских штредкох. Теди русински просвититель [[Михаил А. Поливка]] 1920. року пририхтал першу читанку на домашнїм руским язику. Такой потим, 1921. року, обявени и народни буквар, а у наступних рокох ушлїдзели и нови виданя руских учебнїкох. Року 1904. о. др Ґабор Костельник обявел кнїжку поезиї Идилски венєц ''З мойого валала'' (Жовква), а 1923. ''Граматику бачваньско-рускей бешеди'' (Сербска манастирска друкарня, Сримски Карловци). Важни датум у розвою руского язика у бувшей Югославиї бул 21. фебруар 1969. року, кед принєшени Уставни закон зоз хторим руски язик урядово припознати як єден зоз пейцох службених язикох на подручу Войводини, а иста одредба потвердзена и у шицких познєйших найвисших актох Войводини. З приношеньом тих актох и з їх запровадзованьом у пракси створени добри условия за дальши розвой руского язика. [[Файл:Dr H. Kosteljnik Gramatika 1924.jpg|алт=Гавриїл Костельник, Граматикa бачваньско-рускей бешеди, 1923. рок|мини|Гавриїл Костельник'', Граматикa бачваньско-рускей бешеди,'' 1923. рок]] Робота на линґвистичней стандардизациї руского язика у бувшей Югославиї постала окреме интензивна концом шейдзешатих и на початку седемдзешатих рокох 20. вику. У Новим Садзе 1970. року основане Дружтво за руски язик и литературу, хторе од 1975. року видавало рочни часопис ''Творчосц'' (нєшка ''Studia Ruthenica'') и старало ше о розвою и зачуваню руского язика. У медзичаше, писатель и линґвиста Микола М. Кочиш 1971. року обявел ''Правопис руского язика'', три роки познєйше обявена и його ''Ґраматика руского язика'', а комплетну ''Ґраматику руского язика'' написал 2002. року [[Юлиян Рамач]]. Потим почала дїлотворна активносц на полю руского язика. Вишол ''Приручни терминолоґийни словнїк себскогрватско-руско-українски'' Миколи М. Кочиша (1972), потим ''Лексика руского язика'' Юлияна Рамача (1983), ''Лексика Гавриїла Костельника'' тиж Юлияна Рамача (1991), ''Сербско-руски словнїк'' (перши том А-Њ 1995, други том О-Ш 1997), ''Jugoslavo Ruthenica I'' Александра Д. Дуличенка (1995), ''Словнїк медицинскей терминолоґиї'' (2006), ''Jugoslavo Ruthenica II'' Александра Д. Дуличенка (2009), ''Руско-сербски словнїк'' у редакциї Юлияна Рамача (2010), ''Словнїк руского народного язика'' Юлияна Рамача (у двох томох 2010), ''Словнїк защити рошлїнох и животного стредку'' [[Радмила Шовлянски|Радмили Шовлянски]] (2010), ''Назви рошлїнох и животиньох у руским язику'' Оксани Тимко Дїтко (2016), ''Словнїк компютерскей терминолоґиї'' Михайла Фейси (2020), ''Анґлийско-руски словнїк'' (2022) М. Фейси, М. Шлемендер и С. Чельовски, як и вецей кнїжки з обласци нормованя язика.[[Файл:Панонски руски язик позиция.jpg|алт=Шема розподзелєня язичних характеристикох у Панонским руским язику|мини|300x300п|Шема розподзелєня язичних характеристикох заходнославянского, восточнославянского и южнославянского походзеня у Панонским руским язику]] Од 1972. року, на Филозофским факултету у Новим Садзе почала з роботу Катедра за руски язик и литературу хтора мала за циль преучовац руски язик и образовац кадри у обласци русинистики, цо потим приведло и до формованя Одсеку за русинистику. З тим створени предусловия за додатне унапредзованє роботи на преучованю руского язика у тедишнєй Югославиї и нєшкайшей Сербиї. Од 2017. року, при Одсеку порушани наукови часопис з насловом: ''Русинистични студиï''. У складзе з уставнима одредбами и законскима предписанями хтори обезпечую образованє на меншинских язикох, Руснаци у Сербиї маю нагоду основне и штреднє образованє здобувац на своїм мацеринским язику. Коло основних школох у руских штредкох, у Руским Керестуре єст и штредня школа и ґимназия по руски и за тоти школи у Войводини друковани вецей як 270 учебнїцки наслови на руским язику. == Язики зоз хторима руски язик бул у контакту == Руснаци у Старим краю приходзели до контакту з другима народами и язиками – українским, мадярским и нємецким, та у лексики пред приселєньом на Долню жем єст пожички з тих язикох, алє и латински (хтори прияти прейґ нємецкого, мадярского або директно прейґ администрациї). Векше число латинизмох пришло зоз церковней терминолоґиї, а єст и гречески пожички (тиж з церковней терминолоґиї) и єдно число румунских словох (зоз статкарскей терминолоґиї). Значи, у рускей лексики по приселєню до Панониї, коло старого лексичного пасма, субстрату, наставали и нови пасма – сербске, горватске, мадярске, нємецке, нови слова литературного язика, восточнославянски пожички, а у новшим чаше – анґликанизми. [[Файл:East_Slavic_Languages_Tree_de.png|494x494px|алт=Фамилийне стебло восточнославянских язикох|мини|Фамилийне стебло восточнославянских язикох]] '''Нємецки суперстрат''': велї слова з нємецкого язика (комплетна ремеселнїцка терминолоґия) хаснує ше зошицким нєасимиловано и нєадаптовано: ''пейґла, шалїтра, нїтна, бренза, фейдер, цолштоки, шрафшток, штекер, шрафциґер, дихтунґ, куплунґ, бендикс, фелдна, шайбна; ринґловка, мушкатла, мишлинґ'' итд. '''Мадярски суперстрат''': ''аколь, арвачка, алаши, ашов, варош, ґунар, бочкора, канчов, лаба, мунтатов, катона, парадича, рондя, ровка, форґов, цверна, чапаш, чутка, югас, яраш, шкатула'' итд. Уплїв '''восточнославянских язикох''': ''подприємство, памятнїк, соловей, просвита, надїя, одвит, увага, успих, чувствовац, судьба, паломнїцтво, утрата, становиско, граждан, святочни, чекальня, єдальня, безпечни, зраднїцтво, началнїк, нєрухомосц'' итд. '''Русийски суперстрат''': ''безчислени, кавички, уровень, воспитанє, количество, нєпреривни, предстояци, предшедуюци, руководитель, пояшнїц, образец; чистка, уровнїловка, верхушка, кадровик'' итд. '''Церковнославянски пожички''': ''спаситель, хранїтель, предсидатель, водитель, писатель, думатель, правобранїтель; змагательни, погосцительни, видавательни, будовательни; возрост, возбудзенє, совласнїк, состойок, всестрани'' итд. Уплїв '''язичия''': ''вироятно, витирвали, орудиє, отечество, побида, семейство, столїтиє, таїнствени, условиє, чловечество, довириє, собитиє'' итд. == Уплїв сербского язика як доминантного у Сербиї на руски язик: == '''Адаптация руского язика на фонетским уровню:''' а) длуги вокали ше вигваряю як кратки; б) дифтонґ '''ау''' преходзи до '''ав''' (''авто, кавч, космонавт''); в) вокалне '''р''' преходзи до '''ер''' або '''ар''': (''бербляц, церпиц, герчок; зарно, тварди, гарчок''); г) сербски африкати '''ђ''', '''ћ''' ше заменює з експлозивнима палаталами '''дь''', '''ть''': (''мутяк, дутян, дєрма''); ґ) нєпостояне '''а''' преходзи до '''е''', '''о''': (''трошок, уложок, шлюнок''); д) интернационализми з нєпостояним '''а''' ше у руским литературним язику хаснує без нєпостояного (випадного) вокала, або зоз випадним '''е''': (''рит(е)м, социялиз(е)м, спект(е)р''); е) '''ґ''' преходзи до '''г''': (''гласац, голи, гуска'') є) сонант '''н''' ше змегчує при меновнїкох на -'''ник''', -'''ница''': (''технїка, длужнїк, умивальнїк, наставнїца''); ж) '''г''' на месце сербского '''х''': (''гимна, гидроцентрала, гомоґени''). '''Адаптация руского язика на морфолоґийним уровню:''' а) З пременєним родом у руским язику сербски меновнїки: (''сувач, плаката, пец''); б) сербски прикметнїки у руским язику маю форму одредзеного виду: (''вешти, ґадни, фини''); в) инфинитивни суфикс -'''ти''' заменює ше у руским язику зоз -'''ц''': (''трошиц, шиц, копац''); г) повратне словко '''се''' ше заменює у руским язику зоз '''ше''': (''умивац ше, радовац ше, тресц ше''). '''Адаптация на уровню твореня словох:''' Руски слова и їх еквиваленти у сербским язику часто виведзени з истих кореньох, алє з розличнима суфиксами (''повериц ше, сплациц, уписац ше''). Пожички хтори зоз сербского язика уходза до руского адаптую ше и так же основа остава нєпременєна, з додаваньом одвитуюцих руских префиксох, суфиксох и инфиксох (''уртошок, ґлумец, єдинка, пумповац, малтеровац, анализовац; кральовина, розкомоциц ше, видаток, предаванє; литровка, машинка, фодбаловац ше''). ==== Анґликанизми: ==== Єст три файти анґликанизмох: 1) очиглядни анґликанизми (слова и афикси превжати з анґлийского язика) хтори ше прилагодзели ґу рускому язику: ''файл, милкшейк; даунлоудовац, чековац; кул, лайв;'' '''e'''- (од eлектроник): ''e-циґаретла; e-банкарство, e-бициґла;'' '''екс'''- (од eкс): ''екс-югославянски, екс-министер;'' 2) скрити анґликанизми (слова, синтаґми або виреченя у руским язику хтори одражую норму и/або шлїдза обичаї анґлийского язика): ''миша'' (спрам анґл. Mouse); синтаґми: ''часова машина'' (спрам анґл. time machine); виреченя: ''Приповедай ми о тим!'' (спрам анґл. Tell me about it!); 3) сирови анґликанизми (слова, синтаґми и виреченя хтори превжати з анґлийского язика директно, без прилагодзованя їх писаня ґу писаню руского язика): слова: prеpaid (''припейд''), attachment (''атачмент''); виреченя: ''No comment!'' На концу 20. и на початку 21, столїтия пришло до пошвидшаного розвою компютерскй технолоґиї и до звекшаня характеристичней терминолоґиї (''абстракт, акцелератор, мултипроцесор, гард диск, имейл, едитор, дилитуй, декодовац, деинсталовац, ресетовац, рестратовац, табулатор, стикер, четовац, атачирац, скроловац, сейвовац, Фейсбук, Инстаґрам, Ют'юб, пребукировани, ґолґетер, мейкап, стайлинґ, бренд, шопинґ, имидж, бенефит, шеровац, даунлодовац, фан, стейдж, флаєр, фаст фуд, лайв, скриншот, френд'') итд. хтори характеристични у хаснованю при младшим ґенерацийним пасме руского язика. == ISO код и назва язика == Инициятиву за реґистрованє руского язика у Медзинародней орґанизациї за стандардизацию (ISO) порушал новинар и публициста Гавриїл Колєсар зоз Торонта у Канади концом 2017. року. У зложеним процесу реґистрациї активно участвовали проф. др Юлиян Рамач, мр Гелена Медєши и проф. др Михайло Фейса, познати линґвисти-русинисти. Були пополнєти апликациї за приєм руского язика до стандарду ISO 639-3 и штредком 2018. року су послати. На початку 2019. року ше дознало же рускому язику була одбита реґистрация. Од половки 2020. року Гавриїл Колєсар и проф. др Михайло Фейса почали процес виполньованя другей апликациї, обезпечени ширши вибор линґвистичней документациї и шицко послате у априлу 2021. року до Медзинародней орґанизациї за стандардизацию (ISO). После шейсцмешачней явней розправи о понукнутих материялох, 20. януара 2022. року обявене же руски язик, язик Руснацох з Войводини, и урядово реґистровани у Медзинародним стандарду за реґистрованє язикох ISO 639-3, достал идентификацийни код rsk а пoд меном Rusnak, Ruthenian, як активни, живи и окремни (individual) язик.<ref>ISO 639-3: [https://iso639-3.sil.org/request/2021-005 ''Change Request Documentation:''] 2021—005.</ref> З доставаньом rsk кодного трознаку була отворена драга за уход руского язика до шветовей интернет енциклопедиї Википедия. Гавриїл Колєсар почал уж у фебруаре 2022. року процес реґистрованя руского язика на Википедиї. Роботи на тим и творенє векшого числа енциклопедийних текстох поробела окремна ґрупа сотруднїкох, так же штредком октобра 2024. року з Язичного комитету Википедиї сцигло потвердзенє же Панонски руски язик реґистровани як 330. язик хтори у хаснованю на шветовей интернет енциклопедиї Википедия.<ref>В. Вуячич (16. октобра 2024). [https://www.ruskeslovo.com/vikipedija-na-ruskim-jaziku-aktivna-na-internetu/ ''Википедия на руским язику активна на интернету'' (на руским язику).[] ''Рутенпрес'', www.ruskeslovo.com. </ref> {| class="wikitable" ! colspan="3" | == Основни слова и вирази у руским язику == (У заградзеньох дата приблїжна транскрибция зоз сербску латинку) |- |'''Поздрави и здравканя''': * Барз добре, а ви? (/barz dobre, a vi?/) – Веома добро, а ви? * Видз вонка/Войдз нука (/Vidz vonka,Vojdz nuka/) – Изађи напоље/Уђи унутра * Винчованка (/Vinčovanka/) – Честитка * Винчуєм (/Vinčujem/) – Честитам * Витай (/Vitaj/) – Добродошао * Витайце (/Vitajce/) – Добродошли * Витайце у нас (/Vitajce u nas/) – Добродошли код нас * Волам ше... (/volam še/) – Зовем се... * Гей (/hej/) — Да * Дай Боже щесцa (Одповид: Дай Боже и Вам) (/Daj Bože ščesca (Одговор: Daj Bože i Vam)/) – Дај Боже среће (Одговор: Дај Боже и Вама) * Дзе ве-це? (/Dze wе-cе?/) — Где је ве-це? * Дзекуєм (/dzekujem/) — Хвала * Дзекуєм крашнє! (/Dzekujem krašnje!/) – Хвала лепо! * Добре рано (/dobre rano/) — Добро јутро * Добри вечар (/dobri večar/) — Добро вече * Добри дзень (/dobri dzenj/) — Добар дан * Довидзеня (/dovidzenja/) — До виђења * Жадам/Жичим (/Žadam/Žičim/) – Желим * Идзце/Гибайце, Поце (/Idzce/Hibajce, Poce/) – Идите/Дођите * Кельо то кошта? (/Keljo to košta/) — Koliko to košta? * Любим це! (/Ljubim ce!/) — Волим те! * Модлїм Вас/це (/modljim vas ili ce/) — Молим Вас/те * Наздраве! (/Nazdrave/) – На здравље! * Най ше пачи! (/Naj še pači!/) – Изволи! * Нє (/nje/) — Не * Охабце ме (/Ohabce me/) – Oставите ме! * Пребачце (/prebačce/) – Извините * Пущце ме! (/Puščce me!/) – Пустите ме! * Слава Исусу Христу (Одповид: Навики слава) (/Slava Isusu Hristu (Одповид: Naviki slava)/) – Слава Исусу Христу (Одговор: Слава на векове) * Ходзиш ту часто? (/Hodziš tu často?/) — Долазиш овамо често? * Христос раждаєтся (Одповид: Славите єго) (/Hristos raždajetsja (Одговор: Slavite jeho)/) – Христос се роди (Одговор: Ваистину се роди) * Швето (/Šveto/) – Празник * Шицко найлєпше! (/Šicko najljepše!/) – Све најбоље! * Щешлївa драга! (/Ščešljiva draha!/) – Срећан пут! * Щешлїва Велька ноц! (/Ščešljiva Veljka noc /) – Срећан Ускрс! * Щешлїви Крачун! (/Ščešljivi Kračun!/) — Srećan Božić! * Щешлїви Нови рок! (/Ščešljivi Novi rok!/) – Срећна Нова година! * Щешлїви Нови рок/Щещлїви новорочни швета (/Ščešljivi Novi rok/Ščešljivi novoročni šveta/) – Срећна Нова година/Срећни новогодишњи празници * Щешлїви родзени дзень! (/Ščešljivi rodzeni dzenj/) – Срећан рођендан! * Щешлїви швета! (/Ščešljivi šveta/) – Срећни празници! * Як сце? (/jak sce?/) — Како сте? * Як ше волаце? (/jak še volace/) — Како се зовете? '''Фамелия''': * ви (/vi/) – ви * вон (/von/) — он * вона (/vona/) – она * вони (/voni) – они * воно (/vono) — оно * дзеци (/dzeci/) – деца * дзивка (/dzivka/) – девојка * дїдо (/đido/) – деда * жена (/žena/) – супруга * ми (/mi/) — ми * муж (/muž/) — супруг * пан (/рan/) – господин * панї (/рanji/) – госпођа * родзина (/rodzina/) – родбина * родичи (/rodiči/) – родитељи * ти (/ti/) — ти * хлоп/хлапец (/hlоp/hlapec/) – момак * чловeк (/človek/) – човек * шицки (/šicki/) – сви * я (/ja/) — ја | |'''Звичайни слова''': * барз (/barz/) — баш * буква (/bukva/) – слово * валал (/valal/) – село * валалчанє (/valalčanje/) – становници села, сељани * вєдно (/vjedno/) – заједно * вибор (/vibor/) – избор * вояк (/vojak/) – војник * глєдац (/hljedac/) – тражити * годзина (/hodzina/) – сат, час * гордосц (/hordosc/) – гордост * город (/нorod/) – град * городоначалнїк (/horodonačalnjik/) – градоначелник * грац (/hrac/) – свирати * гушля (/hušlja/) – виолина * дакеди (/dakedi/) – некада (у прошлости) * дахто (/dahto/) – неко * дацо (/daco/) – нешто * дзвери (/dzveri/) – врата * диждж (/diždž/) – киша * доля (/dolja/) – судбина * достац (/dostac/) – добити, освојити * драга (/draha/) – пут * думка/думанє (/dumкa/dumanje/) – мисао/мишљење * Єдeн язик нїґда нє досц (/Jeden jazik njigda nje dosc/) – Један језик никада није довољан * желєзо (/željеzо/) – гвожђе * забувац (/zabuvac/) – заборављати * ище (/išče/) – још * кажди (/každi/) – сваки * кнїжка (/knjižka/) – књига * коляда (/koljada/) – божићна песма * конєц (/konjec/) – крај * коч (/koč/) – кола (коњска) * кукурица (/kukurica/) – кукуруз * кура (/kura/) – кокошка * курче (/kurčе/) – пиле * кухня (/kuсhnja/) – кухиња * лєм (/ljem/) – само * любиц (/ljubic/) – волети, допадати се * мено (/meno/) – име * модлїм вас (/modljim vas/) – молимо вас * на щесце(/na ščesce/) – на срећу * нєправда (/njepravda/) – лаж * нєшка (/nješka/) – данас * пайташ (/pajtaš/) – друг, пријатељ * паметац (/pametac/) – памтити, сећати се * паприґа (/papriga/) – паприка * пенєжи (/penježi/) – новац * перше (/perše/) – прво * поволанка (/povolanka/) – позивница * поволуєме (/povolujeme/) – позивамо * послац (/poslac/) – послати * правда (/pravda/) – истина * приємни (/prijemni/) – пријатан * рада; совит (/rada,sovit/) – веће; савет * рахунки (/rahunki/) – рачуни * рок (/rok/) — година * скруциц (/skrucic/) – скренути (у улицу) * слово (/slovo/) – реч * смияд (/smijad/) – жеђ * староста (/starosta/) – старешина * сушед (/sušed/) – сусед, комшија * схадзка (/shadzka/) – седница * танєц (/tanjec/) – игра, плес * танцовац (/tancovac/) – играти, плесати * тераз (/teraz/) – сада * уж (/už/) – већ * фриштик (/frištik/) – доручак * хвиля (/hvilja/) – време * хижа (/hiža/) – кућа * цукер (/cuker/) – шећер * черешня (/čerešnja/) – трешња * число (/čislo/) – број * чуц (/čuc/) – чути * шор (/šor/) – ред * шпивац (/špivac/) – певати * шумни/о (/šumni/o/) – лепи/о * ядловец (/jadlovec/) – јелка * як (/jak/) – како, као * яр (/jar/) – пролеће |} == Опатриц ище == * [[Дружтво за руски язик, литературу и културу]] * [http://rusini.rs/ Национални совит рускей националней меншини] * [[Руска матка]] * [[Руска матка (други период)]] == Литература == * Врабель, Михаилъ А. (1890). ''Русскій соловей: Народная лира или собраніе народныхъ пѣсней на разныхъ угро-русскихъ нарѣчіахъ.'' Унгваръ: Келетъ. * Костельник, Габор (1923). ''Граматика бачваньско-рускей бешеди.'' Руски Керестур: РНПД. * Кочиш, Микола М. (1974). ''Ґраматика руского язика: Фонетика, морфолоґия, лексика (1. вид.).'' Нови Сад: Покраїнски завод за видаванє учебнїкох. * [[Федор Лабош|Лабош, Федор]] (1979). ''История Русинох Бачкей, Сриму и Славониї 1745-1918.'' Вуковар: Союз Русинох и Українцох Горватской. * Поливка, Михаил (1920). ''Читанка за III. класу южно-руских основних школох.'' Сремски Карловци: Српска манастирска штампарија. * Поливка, Михаил; Мудри, Михаил (1921). ''Буквар за южно-руски основни школи. Сремски Карловци:'' Српска манастирска штампарија. * Рамач, Юлиян (2002). ''Ґраматика руского язика (1. вид.).'' Београд: Завод за уџбенике и наставна средства. == Вонкашнї вязи == * [[Евґения Барич|Barić, Eugenija]] (2007). [https://books.google.ca/books?id=Bvk_AQAAIAAJ&redir_esc=y ''Rusinski jezik u procjepu prošlosti i sadašnjosti.''] Zagreb: Institut za hrvatski jezik i jezikoslovlje. * [[Владимир Бильня|Biljnja, Vladimir]] (1987). [https://books.google.com/books?id=lXQMAAAAIAAJ ''Rusini u Vojvodini: Prilog izučavanju istorije Rusina Vojvodine (1918-1945).''] Novi Sad: Dnevnik. * Brock, Peter (1972). [https://www.jstor.org/stable/40866428 ''„Ivan Vahylevych (1811-1866) and the Ukrainian National Identity”''.[] Canadian Slavonic Papers. '''14''' (2): 153—190.'' * Bunčić, Daniel (2015). [https://core.ac.uk/download/pdf/83527423.pdf  ''„On the dialectal basis of the Ruthenian literary language” (PDF)''.] Die Welt der Slaven. '''60''' (2): 276—289. * [[Юлиян Колєсар|Кольесаров, Юлиян Д.]] (1977). [https://books.google.com/books?id=P7ewNAAACAAJ ''Панонско-руски язик.''] Монтреал. * Кочиш, Микола М. (1971). [https://books.google.ca/books?id=5zmmNQAACAAJ&redir_esc=y ''Правопис руского язика: Школске виданє.''] Нови Сад: Покраїнски завод за видаванє учебнїкох. * Magocsi, Paul R. (1996). [https://shron3.chtyvo.org.ua/Magochii_Pavlo_Robert/The_Rusyn_language_question_revisited_anhl.pdf  ''„The Rusyn language question revisited” (PDF)''.] International Journal of the Sociology of Language. '''120''': 63—84. * Magocsi, Paul R.; Pop, Ivan I., ур. (2005) [2002]. [https://utorontopress.com/9780802035660/encyclopedia-of-rusyn-history-and-culture/?srsltid=AfmBOorQAECI2Ar3kLY5tGxqNV5cSI7pv7fTpyiE2cavNQPg-0cwS7xR ''Encyclopedia of Rusyn History and Culture (2. изд.).''] Toronto: University of Toronto Press. * Magocsi, Paul R. (2011). [https://cius-archives.ca/files/original/06e65909058c8543b80153d33b7f3a55.pdf ''„The Fourth Rus': A New Reality in a New Europe” (PDF)''.] Journal of Ukrainian Studies. 35-36 (2010-2011): 167—177. * Magocsi, Paul R. (2015). [https://books.google.com/books?id=Nzj2DAAAQBAJ ''With Their Backs to the Mountains: A History of Carpathian Rus’ and Carpatho-Rusyns.''] Budapest-New York: Central European University Press. * Медєши, Гелена (2008). [https://issuu.com/rusnak/docs/jazik_bas_nasusni ''Язик наш насущни.''] Нови Сад: Дружтво за руски язик, литературу и културу. * Медєши, Гелена (2016). [https://www.unipo.sk/public/media/24966/dynamicke%20procesy%2006-10%20-%20Koporov%c3%a1_1.pdf ''„Пожичени слова у язику южнопанонских Руснацох” (PDF).''] Dynamické procesy v súčasnej slavistike. Prešov: Vydavateľstvo Prešovskej univerzity. стр. 145—159. * Медєши, Гелена; Тимко-Дїтко, Оксана; Фейса, Михайло (2010). [https://www.academia.edu/43436831 ''Руско-сербски словнїк.''] Нови Сад: Филозофски факултет, Одсек за русинистику: Завод за културу войводянских Руснацох. * Медєши, Любомир (2007). [https://issuu.com/rusnak/docs/ruska_tradicija_1 ''Руска традиция.''] Нови Сад: Дружтво за руски язик, литературу и културу. * Plishkova, Anna (2009). [https://www.academia.edu/1373480 ''Language and National Identity: Rusyns South of Carpathians.''] Boulder: East European Monographs.'' * Рамач, Янко (1993). [https://issuu.com/rusnak/docs/kratka_istorija_rusnacoh ''Кратка история Руснацох (1745-1918).''] Нови Сад: Грекокатолїцка парохия св. Петра и Павла.'' * Рамач, Јанко (2013). [http://istrazivanja.ff.uns.ac.rs/index.php/istr/article/view/1718/1754 ''„Русинско народно просветно друштво и рецепција о Поткарпатској Русији / Карпатској Украјини у његовим издањима 1938–1939. године”.''] Истраживања. Филозофски факултет у Новом Саду. '''24''': 457—475. * Рамач, Јанко (2017). [http://slavistickodrustvo.org.rs/pdf_dokumenti/Slavistika_XXI_2017.pdf ''„Граматика русинског језика Хавријила Костељника и њена рецепција у периоду између два светска рата” (PDF).''] Славистика. '''21''': 155—161. * Ramač, Janko (2018). [http://www.irbis-nbuv.gov.ua/cgi-bin/irbis_nbuv/cgiirbis_64.exe?C21COM=2&I21DBN=UJRN&P21DBN=UJRN&IMAGE_FILE_DOWNLOAD=1&Image_file_name=PDF/Khs_2018_1_10.pdf ''„Osnovni pravci, težnje i dileme u kulturno-prosvetnom i nacionalnom životu Rusina u Jugoslaviji (1945-1970)” (PDF)''.] Київські історичні студії. '''6''' (1): 63—73. * Рамач, Јулијан; Фејса, Михајло; Међеши, Хелена, ур. (1995). [https://zavod.rs/wp-content/uploads/2019/07/Srpsko-rusinski-recnik-Web.pdf ''Српско-русински речник (PDF).''] '''1'''. Нови Сад: Филозофски факултет - Катедра за русински језик и књижевност, Друштво за русински језик и књижевност.'' * Рамач, Јулијан; Фејса, Михајло; Међеши, Хелена, ур. (1997). [https://zavod.rs/wp-content/uploads/2021/02/Serbsko-ruski-slovnjik-II-tom-WEB-2.pdf ''Српско-русински речник (PDF).''] '''2'''. Београд-Нови Сад: Завод за уџбенике и наставна средства, Филозофски факултет - Катедра за русински језик и књижевност, Друштво за русински језик и књижевност. * Рамач-Фурман, Анамария (2013). [http://www.druztvo.org/ruski/vidania/5a%20Studia%20Pdf%20Ruthenica%2018%20za%202013..pdf ''„Ґраматика бачваньско-рускей бешеди Гавриїла Костельника як фундамент руского литературного язика” (PDF).''] ''Studia Ruthenica'': Зборнїк роботох. '''18''' (31): 15—25. * [https://rdsa.tripod.com/ Руснаци у Панониї,] вебсайт, rdsa.tripod.com, 25. октобер 1998 * Суботић, Момчило (2018). [https://www.ips.ac.rs/wp-content/uploads/2018/09/PR-56-3.pdf ''„Русини и Украјинци у Војводини” (PDF).''] Политичка ревија. '''30''' (56): 45—70. * Тамаш, Јулијан (2004). [https://books.google.com/books?id=Il0XAQAAIAAJ ''„Русинистика између украјинистике и србистике”.''] Славистика. '''8''': 306—309. * Тамаш, Юлиян, ур. (2015). [https://d.cobiss.net/repository/sr/files/298887687/9664/0298887687_001.pdf ''Русинистични студиї (PDF).''] Нови Сад: Филозофски факултет. * Тамаш, Юлиян (2017). [https://books.google.com/books?id=EmH3vQEACAAJ ''Складанє идентитетох: Вибрани студиï и есеï з русинистики и украïнистики.''] Нови Сад: Руске слово.'' * Тир, Михал (2004). [https://books.google.com/books?id=Il0XAQAAIAAJ ''„Русинистика са аспекта славистике”.''] Славистика. '''8''': 310—314.'' * Фејса, Михајло (2005). [https://books.google.com/books?id=FjMYAQAAIAAJ ''Време и вид у русинском и енглеском језику.''] Нови Сад: Прометеј.'' * Фејса, Михајло (2012). [https://doisrpska.nub.rs/index.php/filolog/article/view/391/345 ''„Русински језик у Републици Србији/Војводини”.''] ''Филолог'': Часопис за језик, књижевност и културу. '''5''': 217—223.'' * Фејса, Михајло (2016a). [http://digitalna.ff.uns.ac.rs/sadrzaj/2016/978-86-6065-374-3 ''„Русински језик и његове варијанте”.''] Језици и културе у времену и простору: Тематски зборник. '''5'''. Нови Сад: Филозофски факултет. стр. 613—622.'' * Фејса, Михајло (2016b). [http://slavistickodrustvo.org.rs/pdf_dokumenti/Slavistika_XX_2016.pdf ''„Основе новог правописа русинског језика” (PDF).''] ''Славистика''. '''20''': 167—172.'' * Фейса, Михайло (2018a). [https://www.unipo.sk/public/media/34579/20%20rokov%20zbornik_s%20obalkou.pdf ''„Меновнїцки деклинациї у бачко-сримскей и прешовскей вариянти русинского язика”'' (PDF).] 20 років высокошкольской русиністікы на Словакії. Пряшів: Інштітут русиньского языка і културы. стр. 188—204. * Fejsa, Mihajlo P. (2018b). [https://www.researchgate.net/publication/3323358620 ''„Verb forms/constructions in the Prešov variant and the Bačka-Srem variant of the Rusyn language”.''] ''Studia Slavica.'' '''63''' (2): 367—378. * Фейса, Михайло (2019). [http://digitalna.ff.uns.ac.rs/sites/default/files/db/books/978-86-6065-520-4.pdf ''Правопис руского язика (PDF).''] Нови Сад: Филозофски факултет. * Фејса, Михајло (2020). [http://doi.fil.bg.ac.rs/pdf/journals/slavistika/2020-2/slavistika-2020-24-2-17.pdf ''„Нови правопис русинског језика” (PDF).''] ''Славистика''. '''24''' (2): 255—280. * Himka, John-Paul (1999). [https://books.google.com/books?id=j2yhkvCx60IC ''Religion and Nationality in Western Ukraine: The Greek Catholic Church and the Ruthenian National Movement in Galicia, 1870-1900.''] Montreal & Kingston: McGill-Queen's University Press. * Csernicskó, István; Fedinec, Csilla (2016). [https://www.researchgate.net/publication/311926631 ''„Four Language Laws of Ukraine”.''] International Journal on Minority and Group Rights. '''23''': 560—582. * Чарский, Вячеслав В. (2011). [https://books.google.com/books?id=9ZdKMwEACAAJ ''Русинский язык Сербии и Хорватии в свете языковых контактов: Лингвогенетический аспект:''] Монография. Щелково: Мархотин. * [[Владимир Шанта|Шанта, Владимир]] (2002). [https://books.google.ca/books?id=PIMZnAEACAAJ&redir_esc=y ''Енигма Русини-Руснаци-Рутени: Дожица, роздумованя и прешвеченя о етнїчним идентитету югославаянских Руснацох.''] Нови Сад: Фељтон.'' == Референци == [[Катеґория:Руски язик]] cvwh32aon28np3dqjnwrp5xnc8bwo94 Шаблон:Nowrap 10 743 21386 2015-11-28T10:13:53Z Edokter 2742 Adapt comment; edits inside noinclude blocks should not affect job queue, but won't kill parser either way. 21386 wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{documentation}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> avb5tcymgupik1ikutqclidkj9tnitx 21387 7356 2026-09-14T15:30:44Z Keresturec 18 1 измена увезена из [[:en:Template:Nowrap]]: Importing from the English wikipedia 7356 wikitext text/x-wiki <span class="nowrap">{{{1}}}</span><noinclude> {{Документация}} <!-- Categories go on the /doc page; interwikis go to Wikidata. --> </noinclude> fxnsoqe5e8dkaobmi80nbai1cjsirp9 Нове Орахово 0 2062 21372 19932 2026-09-14T02:47:03Z ~2026-49599-13 2557 /* */ 21372 wikitext text/x-wiki {| class="wikitable" align="right" width="300px" |+ ! colspan="2" |<big>Нове Орахово</big> |- | colspan="2" |[[File:Novo Orahovo, Serbia (2007).jpg|Center|270px|]] |- | colspan="2" |[[File:Novo Orahovo coat of arms.svg|center|120px|Герб]] <div style="text-align: center;">Герб Нового Орахова |- ! colspan="2" |Административни податки |- |'''Держава''' |[[Сербия]] |- |'''Автономна покраїна''' |Войводина |- |'''Управни округ''' |Сивернобачки |- |'''Општина''' |Бачка Тополя |- ! colspan="2" |Жительство |- |'''—2022 |1449 |- |'''—густосц''' |23/km<sup>2</sup> |- ! colspan="2" |Ґеоґрафски характеристики |- |'''Координати''' |45° 50′ 34″ С; 19° 46′ 01″ В |- |'''Часово зони''' |UTC+1 (CET), влєце UTC+2 (CEST) |- |'''Абс. висина''' |111 m |- |'''Поверхносц''' |65,3 km<sup>2</sup> |- ! colspan="2" style="background:#efefef;" | Нове Орахово на мапи Сербиї |- | colspan="2" style="text-align:center;" | {{Location map | Serbia | label = Нове Орахово | lat_deg = 45 | lat_min = 50 | lat_sec = 34| lat_dir = N | lon_deg = 19 | lon_min = 46 | lon_sec = 01 | lon_dir = E | position = right | width = 290 | float = center | caption = }} |- ! colspan="2"|Инши податки |- |'''Поштове число''' |24351 |- |'''Поволуюце число''' |024 |- |'''Реґистерска ознака''' | BT |} '''Нове Орахово''' ( мадь. ''Zentagunaras'') валалске населєнє у централней часци високоровнїни [[Телечка]], медзи [[Бачка Тополя|Бачку Тополю]] на югозаходзе, Чантавиром на сиверу, Боґарошом, Светичевом и Нєґошевом на югу и ричку Чик на востоку. Валал ма вигодне ґеоґрафске положенє, бо ше находзи нєдалєко од важних транспортних драгох. Нове Орахово ше находзи на 111 [[Метер|метери]] надморскей висини. Населєнє забера [[поверхносц]] 65,3 квадратни километри. Зазначене число жительох 1449. То значи же на 1 квадратни километер єст 23 жительох. Восточно од Нового Орахова цече рика Чик. Єй жридло у Мадярскей нєдалєко од гранїци. Цек Чика закончує ше при Бачким Петровим Селу, дзе ше улїва до [[Тиса (рика)|Тиси]]. Вкупна длужина рички 100 километри. Глїбина 3-5 метери, а ширина даскельо метери. == История подруча == Понеже Бачка у прешлосци мала барз добри природни условия за насельованє, даєдни часци [[Бачка|Бачки]] були населєни ище у каменим чаше. Зоз неолиту єст шлїди и нєдалєко од Нового Орахова, на Криваї при Пачире, коло Байши, Старей Моравици и Малого Идьошу, а зоз бронзового часу на Чику при Чантавире. На тим подручу 1975. року окончовани археолоґийни випитованя, та установене же ту у штвартим вику було населєнє Сарматох. Писани историйни документи твердза же ту у XIII вику було пустарске населєнє хторе ше волало Лакашедьгаза. После Мохацкей битки 1526. року тоти краї остали цалком пусти. После турского руйнованя траца ше шлїди и населєня и його жительства. У периодзе од XVI по XVIII вик ту була пустара на хтору з часу на час приходзели лєм статкаре номади, алє ше нє затримовали длуго. После Сентянскей битки 1697. року, зоз поцагованьом турского войска и ошлєбодзованьом територийох нєшкайшей [[Войводина|Войводини]], почина розвой околних населєньох и починаю нови селїдби [[Народ|народох]]. У XIX вику у пустари на териториї нєшкайшого Нового Орахова настало валалске населєнє чийо ше жителє занїмали зоз землєдїлством, алє статкарство и далєй остало главне занїманє, дзекуюци добрим пасовиском. У XVII и XIX вику на тим подручу свойо [[Салаш|салаши]] направели Мадяре зоз Сенти. У другей половки XIX вику ше предлужує усельованє. Орачей жеми єст вше вецей, та на початку XX вику рошню вельки маєтки чийо их ґаздове тримаю аж по конєц Другей шветовей войни. Аґрарна реформа валалу меня твар. Нове Орахово основане на початку XX вику. Як подруче розруцаних [[Салаш|салашох]] од 1702. року припадало Сенти. После Другей шветовей войни приєдинєне є ґу Бачкей Тополї. Мено – назву места Нове Орахово ше хаснує од 1948. року. == Колонизация валала == После 1918. року сцигли приселєнци зоз Лики и Герцеґовини. У першей половки 1946. року до населєня хторе теди наволоване Ґунарош колонизовани 360 фамелиї рускей националносци. Перша ґрупа колонистох зоз [[Руски Керестур|Руского Керестура]] рушела [[13. май|13. мая]] 1946. року. У нєй було 49 фамелиї хтори ше наздавали же на другим месце почню лєгчейше жиц. Мали лєм три кочи, та валалски орґани власци розказали най тоти цо оставаю у валалє, а маю свойо кочи, задармо одселя колонистох до Ґунарошу.[[File:Katoli%C4%8Dka_crkva_u_Novom_Orahovu._02.jpg|360x360px|Католїцка церква у Новим Орахове|алт=Католїцка церква у Новим Орахове|мини]] У Ґунарошу вєшенї 1946. року було коло 60 дзеци за школу, а валал нє мал анї школу анї учителя. За школски будинок предвидзени стари Каштель, а зоз Руского Керестура принєшени [[Лавка|лавки]] и нєобходни инвентар. За першого учителя меновани [[Владимир Рогаль]]. После нього Владимир Владо Бесерминї, та його шестра Олґа Бесерминї, потим Янко Медєши и [[Йовґен Планчак]]. Кажди зоз нїх по дацо зохабел и у култури тамтейших Руснацох. Зоз приходом учительки Аранки Канюховей (познєйше Планчаковей) и єй шестри Милици и учителя [[Янко Рац|Янка Раца]], понеже валал уж бул вибудовани, та остало кус вецей часу за дружтвени живот и тедишнє културне дружтво збогацовало свой репертоар. Рихтало ше драми, нє лєм єднодїйки. Младеж активно участвовала у шицких секцийох. Давало ше театрални представи ''На синокосу, Пан Тома, Зла жена, Єрофейска чаривна травка'' и други. Госцовало ше и по наших валалох. У тей роботи найвецей заслуги мали [[Янко Будински|Янко Будински,]] Олґа и Владо Бесерминьово, Дюра Паланчаї, Штефан Шпрох, Любо Папуґа и велї други. [[Оркестер]] ше пополньовал зоз младшима; починали грац Любо Папуґа и Янко Бучко, Дюра и Владо Еделински и други. Учителє основали и фолклорну секцию. Зоз приходом до Нового Орахова учителя [[Витомир Бодянєц|Витомира Бодянца]] и познєйше [[Микола Сеґеди|Миколи Сеґедия]], а потим и [[Священїк|паноца]] Владимира Тимка зоз супругу-наставнїцу Марию, културни живот у месце здобул тоту праву форму. Основало ше [[Тамбура|тамбурови]] [[оркестер]] зоз младежу и зоз школярами, робела драмска секция, основало ше хорску секцию зоз соло-[[Шпивач|шпивачами]], а фолклорна секция робела при школи. Нє мож нє спомнуц нашо соло-шпивачки цо перши крочаї у шпиваню направели у нашим дружтве, а то Натала Арваї, нєшка Барна и Гелена Будински, тераз Сабадош зоз [[Кула|Кули]], односно [[Вербас|Вербасу]], Гелена Папуґа. == Метеоролоґийни условия == Податки од мераних штреднїх [[Температура|температурох]] Нового Орахова то: * рочна штредня температура виноши 10,7 ступнї Целзиюса; * у януаре найжимнєйше, штредня температура виноши – 1,4 ступнї Ц; * у юлию найцеплєйше и температура виноши штреднє 21 ступень Ц; Паданя у Новим Орахове: * 1969. року виношели 734,8 мм; * 1971. року тот мерани податок виноши 452,9 мм == Жительство Нового Орахова == Спрам попису зоз 2022. року у валалє було 1449 жительох. Штредня старосц жительох виноши 40,7 роки (39,4 при хлопох и 42,0 при женох). Число жительства ше, такповесц, нєпреривно зменшує. Нове Орахово напущую углавним млади. Одходза з векшей часци до варошох котри ту нєдалєко, до Бачкей Тополї, Сенти, [[Суботица|Суботици]]. Тото указую и числа: {| class="wikitable" |+ ! colspan="3" |Демоґрафия<ref>„Књига 9”. [https://pod2.stat.gov.rs/ObjavljenePublikacije/G2002/pdf/G20024009.pdf Становништво, упоредни преглед броја становника 1948, 1953, 1961, 1971, 1981, 1991, 2002, подаци по насељима (PDF)]. webrzs.stat.gov.rs. Београд: Републички завод за статистику. мај 2004. ISBN 86-84433-14-9.</ref> |- |Рок | colspan="2" |Жительох |- |1948. |3119 | rowspan="5" | |- |1953. |2859 |- |1961. |2970 |- |1971. |2673 |- |1981. |2307 |- |1991. |2263 |2.207 |- |2002. |2029 |2.151 |- |2011. |1768 | |} Тоти тренди потвердзую и таки статистични податки: {| class="wikitable" |+ !Рок !1948. !1953. !1961. !1971. !1981. |- |Число фамелийох |779 |819 |905 |846 |830 |- |Штреднє членох у фамелиї |4,00 |3,49 |3,28 |3,16 |2,78 |} {| class="wikitable" |+ ! colspan="2" |Етнїчни состав жительства спрам попису 2002. року<ref>„Књига 1”. Становништво, национална или етничка припадност, подаци по насељима. webrzs.stat.gov.rs. Београд: Републички завод за статистику. фебруар 2003. ISBN 86-84433-00-9.</ref> |- |Мадяре |1737<div style="text-align:right;">85,60% |- |[[Руснаци у Сербиї|Руснаци]] |181 8,92% |- |Серби |59 2,90% |- |Югославянє |14 0,68% |- |Горвати |7 0,34% |- |Чарногорци |4 0.19% |- |Муслиманє |1 0.04% |- |Бунєвци |1 0.04% |- |Нєпознати |1 0.04% |} == Економски профил валала == Жителє Нового Орахова углавним землєдїлци. Зоз польопривреду ше самостойно занїма 681 фамелия. У месней задруґи и у месних и бачкотопольских фирмох и индустриї заняти члени зоз 249 фамелийох. 1981. року у Новим Орахове 151 ґаздовство мало трактор, а було и 13 комбайни. == Польопривреда == Жителє Нового Орахова занїмаю ше зоз овчарством, говедарством и швинярством, односно зоз продукцию [[Житарки|житаркох]], цукровей цвикли, слунечнїку и [[Кукурица|кукурици]]. == Транспорт == Нове Орахово нє ма желєзнїцу. Путнїцки транспорт ше одвива на автобусох. Путнїки можу каждодньово путовац зоз Нового Орахова до Бачкей Тополї, Нового Саду, [[Кула|Кули]], Зомбора, Сенти, Кикинди, Чантавиру, Суботици, Горґошу, зоз можлївосцу одходу до Сеґедину (Мадярска), Темишвару (Румуния), Осєку ([[Горватска]]). '''Як валал напредовал''' ♦ 1946. року отворена пошта: теди Нове Орахово достало 2 телефонски линиї зоз 30 приключками (предплатнїками); ♦ 1977. року вигласани месни самодопринос и од теди драги асфалтовани и тротоари вибетоновани. ♦ 1981. року у Новим Орахове єст 450 ТВ апарати и 170 радиоапарати ♦ 1970. року отворена самопослуга. Окрем того, єст ище три предавальнї. ♦ До 1970. року у штред валала була єдна з надом закрита хижа „Чарда”, єдини погосцительни обєкт. Теди на тим месце вибудовани модерни мотел „Рона”. Тераз єст ище три погосцительни обєкти – карчми. ♦ Ловни туризем каждого року вше моцнєйши. За тото заслужне Ловарске дружтво ''Нове Орахово'', котре ма 35 членох. '''Предїли – часци Нового Орахова маю окремни назви:''' Чарна школа Кадвань-шор Ґунарош Угел Руски (русински) валал Мали шор Били криж итд. == Литература == * [[Руснаци у Сербиї|Русини]] у Новом Орахову/Ruszinok Zentagunarason/Руснаци у Новим Орахове, [[Дружтво за руски язик, литературу и културу]] и КУД ''Петро Кузмяк'', Нове Орахово,  Нови Сад-Нове Орахово, 2009. == Референци == <references /> [[Катеґория:Нове Орахово]] [[Катеґория:Валали у Войводини]] [[Катеґория:Места у општини Бачка Тополя]] l47bqfbomygestbntwacjfqdcoaxprf Шаблон:Уметнїки 10 3518 21376 21312 2026-09-14T06:13:48Z Sveletanka 20 21376 wikitext text/x-wiki <noinclude> То шаблон за инфорамик о уметнїкох. {{/док}} </noinclude><includeonly><table class="infobox vcard" style="width: 22em; text-align: left; font-size: 88%; line-height: 1.5em; border-spacing: 3px; border: 1px solid #b0c4de; background-color: #f0f8ff;"> <tr> <th colspan="2" class="fn" style="text-align: center; font-size: 125%; font-weight: bold; background-color: #b0e0e6; padding: 6px; color: #000000;">{{{Мено|{{PAGENAME}}}}}</th> </tr> {{#if:{{{Полне мено|}}}| <tr> <td colspan="2" style="text-align: center; font-style: italic; background-color: #e6f2ff; padding: 2px 5px; font-size: 95%;">{{{Полне мено}}}</td> </tr> }} {{#if:{{{Слика|}}}| <tr> <td colspan="2" style="text-align: center; padding: 5px;"> [[Файл:{{{Слика}}}|{{{Ширина слики|220px}}}|alt={{{Мено|}}}]] {{#if:{{{Опис слики|}}}|<br /><span style="font-size: 90%;">{{{Опис слики}}}</span>}} </td> </tr> }} {{#if:{{{Други мена|}}}| <tr> <th style="background-color: #dbeafe; width: 40%; text-align: left; padding: 3px 5px;">Други мена:</th> <td style="padding: 3px 5px;">{{{Други мена}}}</td> </tr> }} {{#if:{{{Датум народзеня|}}}| <tr> <th style="background-color: #dbeafe; width: 40%; text-align: left; padding: 3px 5px;">Датум народзеня:</th> <td style="padding: 3px 5px;">{{{Датум народзеня}}}</td> </tr> }} {{#if:{{{Место народзеня|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Мєсто народзеня:</th> <td style="padding: 3px 5px;">{{{Место народзеня}}}</td> </tr> }} {{#if:{{{Держава народзеня|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Держава народзеня:</th> <td style="padding: 3px 5px;">{{{Держава народзеня}}}</td> </tr> }} {{#if:{{{Датум шмерци|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Датум шмерци:</th> <td style="padding: 3px 5px;">{{{Датум шмерци}}}</td> </tr> }} {{#if:{{{Место шмерци|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Мєсто шмерци:</th> <td style="padding: 3px 5px;">{{{Место шмерци}}}</td> </tr> }} {{#if:{{{Держава шмерци|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Держава шмерци:</th> <td style="padding: 3px 5px;">{{{Держава шмерци}}}</td> </tr> }} {{#if:{{{Обласц|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Обласц:</th> <td style="padding: 3px 5px;">{{{Обласц}}}</td> </tr> }} {{#if:{{{Школованє|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Школованє:</th> <td style="padding: 3px 5px;">{{{Школованє}}}</td> </tr> }} {{#if:{{{Познати_дїла|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Познати дїла:</th> <td style="padding: 3px 5px;">{{{Познати дїла}}}</td> </tr> }} {{#if:{{{Награди и припознаня|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Награди:</th> <td style="padding: 3px 5px;">{{{Награди и припознаня}}}</td> </tr> }} {{#if:{{{Вебсайт|}}}| <tr> <th style="background-color: #dbeafe; text-align: left; padding: 3px 5px;">Вебсайт:</th> <td style="padding: 3px 5px;">{{{Вебсайт}}}</td> </tr> }} </table></includeonly> [[Катеґория:Шаблони]] o0ihwbzzjjn3qei6t20zn23v53n63dn Шаблон:Рошлїни 10 3531 21374 21356 2026-09-14T06:11:42Z Sveletanka 20 21374 wikitext text/x-wiki <noinclude> То шаблон за инфорамик о рошлїнох. {{/док}} </noinclude><includeonly><table class="infobox biota" style="width: 22em; text-align: left; font-size: 88%; line-height: 1.5em; border-spacing: 3px; border: 1px solid #a3d3a3; background-color: #f4fbf4;"> <tr> <th colspan="2" style="text-align: center; font-size: 125%; font-weight: bold; background-color: #b1e8b1; padding: 6px; color: #000000;">{{{Назва|{{PAGENAME}}}}}</th> </tr> {{#if:{{{Латинска назва|}}}| <tr> <td colspan="2" style="text-align: center; font-style: italic; background-color: #e2f7e2; padding: 3px 5px; font-size: 95%;">{{{Латинска назва}}}</td> </tr> }} {{#if:{{{Слика|}}}| <tr> <td colspan="2" style="text-align: center; padding: 5px;"> [[Файл:{{{Слика}}}|{{{Ширина_слики|220px}}}|alt={{{Назва|}}}]] {{#if:{{{Опис_слики|}}}|<br /><span style="font-size: 90%;">{{{Опис_слики}}}</span>}} </td> </tr> }} <tr> <th colspan="2" style="background-color: #c0edc0; text-align: center; font-weight: bold; padding: 3px 5px;">[[Таксономия (биолоґия)|Наукова класификация]]</th> </tr> {{#if:{{{Домен|}}}| <tr> <th style="background-color: #d8f5d8; width: 40%; text-align: left; padding: 3px 5px;">Домен:</th> <td style="padding: 3px 5px;">{{{Домен}}}</td> </tr> }} {{#if:{{{Царство|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Царство:</th> <td style="padding: 3px 5px;">{{{Царство}}}</td> </tr> }} {{#if:{{{Кладус1|{{{Кладус|}}}}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Кладус:</th> <td style="padding: 3px 5px;">{{{Кладус1|{{{Кладус|}}}}}}</td> </tr> }} {{#if:{{{Кладус2|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Кладус:</th> <td style="padding: 3px 5px;">{{{Кладус2}}}</td> </tr> }} {{#if:{{{Кладус3|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Кладус:</th> <td style="padding: 3px 5px;">{{{Кладус3}}}</td> </tr> }} {{#if:{{{Дивизия|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Дивизия:</th> <td style="padding: 3px 5px;">{{{Дивизия}}}</td> </tr> }} {{#if:{{{Класа|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Класа:</th> <td style="padding: 3px 5px;">{{{Класа}}}</td> </tr> }} {{#if:{{{Ряд|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Ряд:</th> <td style="padding: 3px 5px;">{{{Ряд}}}</td> </tr> }} {{#if:{{{Фамилия|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Фамилия:</th> <td style="padding: 3px 5px;">{{{Фамилия}}}</td> </tr> }} {{#if:{{{Подфамилия|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Подфамилия:</th> <td style="padding: 3px 5px;">{{{Подфамилия}}}</td> </tr> }} {{#if:{{{Род|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Род:</th> <td style="padding: 3px 5px;">{{{Род}}}</td> </tr> }} {{#if:{{{Секция|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Секция:</th> <td style="padding: 3px 5px;">{{{Секция}}}</td> </tr> }} {{#if:{{{Файта|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Файта:</th> <td style="padding: 3px 5px; font-style: italic;">{{{Файта}}}</td> </tr> }} {{#if:{{{Подфайта|}}}| <tr> <th style="background-color: #d8f5d8; text-align: left; padding: 3px 5px;">Подфайта:</th> <td style="padding: 3px 5px; font-style: italic;">{{{Подфайта}}}</td> </tr> }} {{#if:{{{Биномне_мено|}}}| <tr> <th colspan="2" style="background-color: #c0edc0; text-align: center; font-weight: bold; padding: 3px 5px;">[[Биномна номенклатура|Биномне мено]]</th> </tr> <tr> <td colspan="2" style="text-align: center; font-style: italic; font-weight: bold; padding: 4px 5px;">{{{Биномне_мено}}}</td> </tr> }} {{#if:{{{Слика_розширеносци|}}}| <tr> <th colspan="2" style="background-color: #c0edc0; text-align: center; font-weight: bold; padding: 3px 5px;">Ареал розширеносци</th> </tr> <tr> <td colspan="2" style="text-align: center; padding: 5px;"> [[Файл:{{{Слика_розширеносци}}}|220px|alt=Мапа розширеносци]] {{#if:{{{Опис_розширеносци|}}}|<br /><span style="font-size: 90%;">{{{Опис_розширеносци}}}</span>}} </td> </tr> }} {{#if:{{{Синоними|}}}| <tr> <th colspan="2" style="background-color: #c0edc0; text-align: center; font-weight: bold; padding: 3px 5px;">Синоними</th> </tr> <tr> <td colspan="2" style="text-align: center; font-size: 90%; padding: 4px 5px;">{{{Синоними}}}</td> </tr> }} </table></includeonly> [[Катеґория:Шаблони]] p5t4ykt5fk48pn631c8sj1q094ifuls Сакайтов 0 3535 21365 21362 2026-09-13T17:15:50Z Olirk55 19 Форматированє референцох 21365 wikitext text/x-wiki [[File:Mand in vorm van een omgekeerde kegel, asset l2BognwdVViSMVUMSH4pN8tJ.jpg|right|thumb|300px|Сакайтов]]'''Сакайтов''' (всл. ''sakajtov'', од мадь. ''szakajto'', серб. ''саћура, саћур'') Слово сакайтов походзи зоз восточнославянских диялектох (обласц Шариш и Земплин, нєшкайша восточна Р. Словацка), одкаль ше часц Руснацох у 18. вику доселєли до [[Бачка|Бачкей]]). У жридловим диялекту, ''sakajtov'' або ''sakajtev'' означує судзину/кошаричок зоз слами.<ref>[https://rusinisticnistudi.ff.uns.ac.rs/index.php/rs/article/download/33/28/ ИСТОЧНОСЛОВАЧКЕ ПАРАЛЕЛЕ У РАТАРСКОЈ И ПОВРТАРСКОЈ ЛЕКСИЦИ РУСИНА У ВОЈВОДИНИ]</ref><ref>[https://narecie.sk/sakajtov Sakajtov]</ref> На мадярским язику ше плєцена торба або [[кошар]]/кошарик (зоз дикиню або [[Слама|слами]]) вола сатйор (''szatyor''). По руски слово сакайтов и мадярски сатйор звуча подобно и маю исту наменку. Мадярске слово ''szakyto'', ''szatyor'', локални Серби у Бачкей тото слово часто хасновали у каждодньовей бешеди фонетски „саћур” або „саћура.” ▶ Сакайтов при Руснацох ма два значеня:[[File:Basket MET 25.3.107.jpg|right|thumb|300px|Плїтши сакайтовик]]1. з дикиню плєцена [[кошарка]] або кошарик (без ручки); 2. прен. дакус глупи чловек, дурґов, тутмак. До сакайтова ше кладло замишене цесто на [[хлєб]], дзе ше пред тим на сподок положело чисту [[Хлєбовка|хлєбовку]]. З другу хлєбовку, або з концами тей истей хлєбовки (кед же була векша) закрило ше цесто док нє викисло, а потим ше го садзало до [[Руски пец|руского пеца]] печиц. Окрем за хлєб, сакайтови ше хасновали и за триманє дачого иншого: [[жито]], [[кукурица]], пасуля, вайца, рискаша и подобне. У наших крайох сакайтови ше правело з лїсца чуткох узретей [[Кукурица|кукурици]], дикиню, шашу (дзиви мугар), слами и под. Найчастейше сакайтови правели хлопи прето же була потребнєйша векша моц рукох за зацогаванє шпарґи при обшиваню чомовох напр.дикиню, слами... == Фразеолоґия == ♦ Штригац на сакайтов (сакайтовик); штригали ше (старши хлопи) на сакайтовик. Здзали сакайтовик на главу, та шицко цо стирчало спод нього, одштригли. ♦ ''Жиє як мали бог у вельким сакайтове''; барз добре жиє; (подобне серб. живи као бубрег у лоју); ♦ ''Скрий ше под сакайтов''; тото цо ти гуториш або робиш нє добре, скрий ше од людзох, бо то на твою ганьбу. '''Сакайтовик''' то демунитив од слова сакайтов. Сакайтов то традицийни менши кошарик справени-виплєцени ручно зоз рижних материялох: дикиню, ражовей слами, шашу, та и лїсца зоз кукуричних чуткох (серб. љуштика, комушина). Плєтли ше зоз специфичну технїку; намотани чомови з начишлєних материялох хтори ше скруцовало и до круга ше зоз моцну шпарґу або скорку вербового пруца спирално обшивало єден шор за другим. Материял сакайтовом давал грубину, були тварди и моцни а мали цеплу нукашню часц бокох. (1) == Хаснованє при Руснацох == Руски ґаздовства ше после приселєня поступно осучашньовали, та скоро у каждим обисцу бул по голєм єден сакайотв а було их и по вецей. Прето же ше людзе а найчастейше хлопи, сами научели правиц сакайтови, поготов то робели у жимским периодзе кед нє було другей роботи. Тааки глїбши сакайтови а менших димензийох (20-25 по 30 цм) доставали ширшу наменку у валалских обисцох у [[Руски Керестур|Руским Керстуре]], [[Коцур|Коцуре]], [[Дюрдьов|Дюрьове]] и других местох дзе жили Руснаци. ▶ Сакайтови ше хасновало за: ♦ Зберанє и чуванє вайцох, поготову же им боки зоз слами, дикиню були мегки (та щицели од розбиваня). ♦ За триманє менших количествох кромпльох. (векше количество стало у [[Пиньвица|пиньвици]] лєбо [[Комора|коморки]]), орехи, [[овоц]] або вжиме сушену овоц итд. ♦ За карменє живини – зоз нїх ше лєгко з руку брало зарна (просо, кукурицу, жито итд.) хторе ше руцело [[Кура|куром]], курчатом и другей живини. == Виробок сакайтова == Вирабянє-плєценє сакайтовох представя прве мале ремесельнїцке ремек-дїло, а технїка способу правеня ше розликує од класичного правеня кошарох и кошаркох з материялу як цо [[Верба|вербово]] пруце. Таки кошаричок-сакайтов ше вирабя зоз такв. технїку спиралного шица–(обшиванє) ценших скруцених снопчкох шашу, дикиню, стебелкох слами и под. Прето сакайтов нєма „дзири“'' а'' його боки випатраю густи, тварди и грубши, правени є виключно зоз природних материялох. '''Зоз чого ше шицко може плєсц сакайтов''' Материял мушел буц, еластични за зогинанє, алє и достаточно моцни же би тирвал вецей роки<ref>[https://artexnaman.com/what-are-woven-baskets-made-of/ What Are Woven Baskets Made Of?]</ref> а сакайтови ше правело зоз: ♦ Слами, ражовей слами (найчастейше ражова слама була найлєпши материял) прето же ма длугоке, моцнєйше и твардейше стебелко од других [[Житарки|житаркох]] и ма добру изолацию. ♦ Дикиню (серб. роґоз, шевар), лїсце тей барскей рошлїни сушело ше даґдзе у циню же би затримало еластичносц и аж вец ше го могло похасновац за правенє сакайтова. Сакайтови зоз дикиню були дакус мегчейши алє барз одпорни на [[Влага|влагу]]. ♦ Шашу (дзиви мугар) исти поступок як и зоз дикиньом ♦ Потребно було и моцна шпарґа за обшиванє хтора була випредзена зоз конопи. Могло ше за обшиванє похасновац и длугоки настругани „пантлїки“ зоз верби (найчастейши файти ракита або била верба). == Процес виробку сакайтова == За виробок єдного сакайтова потребно вельо сцерпеня, а процес випатра так: ♦ '''Пририхта ше материял''': Пред тим як ше почнє правиц сакайтов, слама ше намочи до води, лєбо ше замота до влажних рендох же би постала мегчейша за скруцованє и же би нє пукала при формованю. ♦ '''Започина ше''' од дна - „ядра“ сакайтова. Вежнє ше ценши снопчок слами (грубини як палєц) и завяже ше го на єдним концу. Ту ше го почнє круциц до круга и то постава центер, штредок дна -„ядро.“ <ref>[https://etnosrb.rs/%D1%82%D1%80%D0%B0%D0%B4%D0%B8%D1%86%D0%B8%D1%98%D0%B0/%D1%87%D1%83%D0%B2%D0%B0%D0%BC%D0%BE-%D1%81%D1%82%D0%B0%D1%80%D0%B5-%D0%B7%D0%B0%D0%BD%D0%B0%D1%82%D0%B5-k%D0%BE%D1%80%D0%BF%D0%B0-%D0%B7%D0%B4%D1%80%D0%B0%D0%B2%D0%B8%D1%98%D0%B0-%D0%B8-%D0%BB%D0%B5/ ЧУВАМО СТАРЕ ЗАНАТЕ: Kорпа здравија и лепша од било које пластичне посуде] etnosrb.rs</ref> ♦ '''Спиралне зошиванє''' (''Coiling''): Сноп слами ше далєй круци до круга (як спиралу) а же би ше круг тримал вєдно, особа хтора плєце сакайтов хаснує шидло (металне або древене) прави дзирку у предхоним шоре, и прецагує шпарґу, або вербово ценки „пантлїки“ и так практично зошива и причверсцує нови шор за предходни. ♦ '''Подзвигованє бокох-''' „мурох“ на сакайтове: Кед ше направи ровне дно пречнїка (коло 20–23 цм), нови круги слами або дикиню ше вецей нє ширя, алє ше прикладаю єден на други до горе, же би ше далєй обшиваюци снопчки, формовал бок („мур“) сакайтова. Понеже ше боки дзвигаю ґу верху, скруцени чомови снопчкох ше благо ширя же би ше формовала и так достала '''препознатлїва конусна форма сакайтова''' (узши при дну, ширши при верху) хтори олєгчує сипанє зарна або винїманє вайцох, кромпльох итд. ♦ '''Законченє (рубец)''': Остатнї шор, односно горнї рубец сакайтова найважнєйши за стабилносц цалей його конструкциї. Рубец заокруглєни, окреме ше го '''твардо обшива''' и зоз шпарґу моцно зацагує и поступно зужує док ше снопчок слами або дикиню подполно нє сценша и виєдначи зоз рубцом, же би ше сакайтов нє опарал и нє розплєтал.<ref>[https://artexnaman.com/what-are-woven-baskets-made-of/ How to Make Baskets with Natural Basket Weaving Materials]</ref> Резултат такого ремсла правеня плєценя так густо, моцно и твардо бул сакйтов/кошарик (суд, судзина–стари вираз) до хторого кед ше усипало житарку, анї єдно зарно нє могло випаднуц на бокох. == Хаснованє сакайтова == '''Киснуце хлєба у сакйтове у руских обисцох''' Печенє традицийного хлєба при войводянских Руснацох бул окрени фамелийни ритуал у хторим сакайтов мал ключну улогу як „судзина“ за дзвиганє (киснуце) цеста. Сакайтов бул добра термоизолация прето же чувал цеплоту а загнєцене цесто могло добре у нїм „преробиц“ и викиснуц по сам рубец сакйтова. На тот способ викиснуте цесто ше витресло зоз сакайтова на древену лопату за хлєб и положело ше го печиц до руского пеца.       Сакайтов давал цесту точну и округлу форму за хлєб (здабал на такв. ципов). Упечени хлєб-ципов мал окрем приємного паху и благи ,,шлїд<nowiki>''</nowiki> од дикиньових або сламових смугох зоз дна сакайтова. == Литература == * ''Словнїк руского народного язика II'', Нови Сад 2017, б. 456. * Гордана Вуковић, ''Терминологија куће и покућства у Војводини''. Нови Сад (Филозофски факултет), 1988, 508 стр. * ''Речник српских говора Војводине'', измењено и допуњено издање у 4 тома, приредили мр Дејан Милорадов, Катарина Сунајко, мр Ивана Ћелић и др Драгољуб Петровић, Матица српска, Нови Сад. == Вонкашня вяза == * [https://www.youtube.com/watch?v=Vini8Z3Y1nI 100% Prirodno saćure, rogozare, asure, stari zanat - pletiva od rogoza] youtube.com (видео знїмок) * [https://www.youtube.com/watch?v=5-8lVv1rWSo&t=741s Велике корпе са трском и рогозом за некадашње складиштење житарица и орашастих плодова код куће] youtube.com == Референци == [[Катеґория:Традиция]] <references /> [[Катеґория:Ремесла]] 77kt8r81iv9qqvs94i7dm6oh0lecyus 21366 21365 2026-09-13T17:16:55Z Olirk55 19 21366 wikitext text/x-wiki [[File:Mand in vorm van een omgekeerde kegel, asset l2BognwdVViSMVUMSH4pN8tJ.jpg|right|thumb|300px|Сакайтов]]'''Сакайтов''' (всл. ''sakajtov'', од мадь. ''szakajto'', серб. ''саћура, саћур'') Слово сакайтов походзи зоз восточнославянских диялектох (обласц Шариш и Земплин, нєшкайша восточна Р. Словацка), одкаль ше часц Руснацох у 18. вику доселєли до [[Бачка|Бачкей]]). У жридловим диялекту, ''sakajtov'' або ''sakajtev'' означує судзину/кошаричок зоз слами.<ref>[https://rusinisticnistudi.ff.uns.ac.rs/index.php/rs/article/download/33/28/ ИСТОЧНОСЛОВАЧКЕ ПАРАЛЕЛЕ У РАТАРСКОЈ И ПОВРТАРСКОЈ ЛЕКСИЦИ РУСИНА У ВОЈВОДИНИ]</ref><ref>[https://narecie.sk/sakajtov Sakajtov]</ref> На мадярским язику ше плєцена торба або [[кошар]]/кошарик (зоз дикиню або [[Слама|слами]]) вола сатйор (''szatyor''). По руски слово сакайтов и мадярски сатйор звуча подобно и маю исту наменку. Мадярске слово ''szakyto'', ''szatyor'', локални Серби у Бачкей тото слово часто хасновали у каждодньовей бешеди фонетски „саћур” або „саћура.” ▶ Сакайтов при Руснацох ма два значеня:[[File:Basket MET 25.3.107.jpg|right|thumb|300px|Плїтши сакайтовик]]1. з дикиню плєцена [[кошарка]] або кошарик (без ручки); 2. прен. дакус глупи чловек, дурґов, тутмак. До сакайтова ше кладло замишене цесто на [[хлєб]], дзе ше пред тим на сподок положело чисту [[Хлєбовка|хлєбовку]]. З другу хлєбовку, або з концами тей истей хлєбовки (кед же була векша) закрило ше цесто док нє викисло, а потим ше го садзало до [[Руски пец|руского пеца]] печиц. Окрем за хлєб, сакайтови ше хасновали и за триманє дачого иншого: [[жито]], [[кукурица]], пасуля, вайца, рискаша и подобне. У наших крайох сакайтови ше правело з лїсца чуткох узретей [[Кукурица|кукурици]], дикиню, шашу (дзиви мугар), слами и под. Найчастейше сакайтови правели хлопи прето же була потребнєйша векша моц рукох за зацогаванє шпарґи при обшиваню чомовох напр.дикиню, слами... == Фразеолоґия == ♦ Штригац на сакайтов (сакайтовик); штригали ше (старши хлопи) на сакайтовик. Здзали сакайтовик на главу, та шицко цо стирчало спод нього, одштригли. ♦ ''Жиє як мали бог у вельким сакайтове''; барз добре жиє; (подобне серб. живи као бубрег у лоју); ♦ ''Скрий ше под сакайтов''; тото цо ти гуториш або робиш нє добре, скрий ше од людзох, бо то на твою ганьбу. '''Сакайтовик''' то демунитив од слова сакайтов. Сакайтов то традицийни менши кошарик справени-виплєцени ручно зоз рижних материялох: дикиню, ражовей слами, шашу, та и лїсца зоз кукуричних чуткох (серб. љуштика, комушина). Плєтли ше зоз специфичну технїку; намотани чомови з начишлєних материялох хтори ше скруцовало и до круга ше зоз моцну шпарґу або скорку вербового пруца спирално обшивало єден шор за другим. Материял сакайтовом давал грубину, були тварди и моцни а мали цеплу нукашню часц бокох. (1) == Хаснованє при Руснацох == Руски ґаздовства ше после приселєня поступно осучашньовали, та скоро у каждим обисцу бул по голєм єден сакайотв а було их и по вецей. Прето же ше людзе а найчастейше хлопи, сами научели правиц сакайтови, поготов то робели у жимским периодзе кед нє було другей роботи. Тааки глїбши сакайтови а менших димензийох (20-25 по 30 цм) доставали ширшу наменку у валалских обисцох у [[Руски Керестур|Руским Керстуре]], [[Коцур|Коцуре]], [[Дюрдьов|Дюрьове]] и других местох дзе жили Руснаци. ▶ Сакайтови ше хасновало за: ♦ Зберанє и чуванє вайцох, поготову же им боки зоз слами, дикиню були мегки (та щицели од розбиваня). ♦ За триманє менших количествох кромпльох. (векше количество стало у [[Пиньвица|пиньвици]] лєбо [[Комора|коморки]]), орехи, [[овоц]] або вжиме сушену овоц итд. ♦ За карменє живини – зоз нїх ше лєгко з руку брало зарна (просо, кукурицу, жито итд.) хторе ше руцело [[Кура|куром]], курчатом и другей живини. == Виробок сакайтова == Вирабянє-плєценє сакайтовох представя прве мале ремесельнїцке ремек-дїло, а технїка способу правеня ше розликує од класичного правеня кошарох и кошаркох з материялу як цо [[Верба|вербово]] пруце. Таки кошаричок-сакайтов ше вирабя зоз такв. технїку спиралного шица–(обшиванє) ценших скруцених снопчкох шашу, дикиню, стебелкох слами и под. Прето сакайтов нєма „дзири“'' а'' його боки випатраю густи, тварди и грубши, правени є виключно зоз природних материялох. '''Зоз чого ше шицко може плєсц сакайтов''' Материял мушел буц, еластични за зогинанє, алє и достаточно моцни же би тирвал вецей роки<ref>[https://artexnaman.com/what-are-woven-baskets-made-of/ What Are Woven Baskets Made Of?]</ref> а сакайтови ше правело зоз: ♦ Слами, ражовей слами (найчастейше ражова слама була найлєпши материял) прето же ма длугоке, моцнєйше и твардейше стебелко од других [[Житарки|житаркох]] и ма добру изолацию. ♦ Дикиню (серб. роґоз, шевар), лїсце тей барскей рошлїни сушело ше даґдзе у циню же би затримало еластичносц и аж вец ше го могло похасновац за правенє сакайтова. Сакайтови зоз дикиню були дакус мегчейши алє барз одпорни на [[Влага|влагу]]. ♦ Шашу (дзиви мугар) исти поступок як и зоз дикиньом ♦ Потребно було и моцна шпарґа за обшиванє хтора була випредзена зоз конопи. Могло ше за обшиванє похасновац и длугоки настругани „пантлїки“ зоз верби (найчастейши файти ракита або била верба). == Процес виробку сакайтова == За виробок єдного сакайтова потребно вельо сцерпеня, а процес випатра так: ♦ '''Пририхта ше материял''': Пред тим як ше почнє правиц сакайтов, слама ше намочи до води, лєбо ше замота до влажних рендох же би постала мегчейша за скруцованє и же би нє пукала при формованю. ♦ '''Започина ше''' од дна - „ядра“ сакайтова. Вежнє ше ценши снопчок слами (грубини як палєц) и завяже ше го на єдним концу. Ту ше го почнє круциц до круга и то постава центер, штредок дна -„ядро.“ <ref>[https://etnosrb.rs/%D1%82%D1%80%D0%B0%D0%B4%D0%B8%D1%86%D0%B8%D1%98%D0%B0/%D1%87%D1%83%D0%B2%D0%B0%D0%BC%D0%BE-%D1%81%D1%82%D0%B0%D1%80%D0%B5-%D0%B7%D0%B0%D0%BD%D0%B0%D1%82%D0%B5-k%D0%BE%D1%80%D0%BF%D0%B0-%D0%B7%D0%B4%D1%80%D0%B0%D0%B2%D0%B8%D1%98%D0%B0-%D0%B8-%D0%BB%D0%B5/ ЧУВАМО СТАРЕ ЗАНАТЕ: Kорпа здравија и лепша од било које пластичне посуде] etnosrb.rs</ref> ♦ '''Спиралне зошиванє''' (''Coiling''): Сноп слами ше далєй круци до круга (як спиралу) а же би ше круг тримал вєдно, особа хтора плєце сакайтов хаснує шидло (металне або древене) прави дзирку у предхоним шоре, и прецагує шпарґу, або вербово ценки „пантлїки“ и так практично зошива и причверсцує нови шор за предходни. ♦ '''Подзвигованє бокох-''' „мурох“ на сакайтове: Кед ше направи ровне дно пречнїка (коло 20–23 цм), нови круги слами або дикиню ше вецей нє ширя, алє ше прикладаю єден на други до горе, же би ше далєй обшиваюци снопчки, формовал бок („мур“) сакайтова. Понеже ше боки дзвигаю ґу верху, скруцени чомови снопчкох ше благо ширя же би ше формовала и так достала '''препознатлїва конусна форма сакайтова''' (узши при дну, ширши при верху) хтори олєгчує сипанє зарна або винїманє вайцох, кромпльох итд. ♦ '''Законченє (рубец)''': Остатнї шор, односно горнї рубец сакайтова найважнєйши за стабилносц цалей його конструкциї. Рубец заокруглєни, окреме ше го '''твардо обшива''' и зоз шпарґу моцно зацагує и поступно зужує док ше снопчок слами або дикиню подполно нє сценша и виєдначи зоз рубцом, же би ше сакайтов нє опарал и нє розплєтал.<ref>[https://artexnaman.com/what-are-woven-baskets-made-of/ How to Make Baskets with Natural Basket Weaving Materials]</ref> Резултат такого ремсла правеня плєценя так густо, моцно и твардо бул сакйтов/кошарик (суд, судзина–стари вираз) до хторого кед ше усипало житарку, анї єдно зарно нє могло випаднуц на бокох. == Хаснованє сакайтова == '''Киснуце хлєба у сакйтове у руских обисцох''' Печенє традицийного хлєба при войводянских Руснацох бул окрени фамелийни ритуал у хторим сакайтов мал ключну улогу як „судзина“ за дзвиганє (киснуце) цеста. Сакайтов бул добра термоизолация прето же чувал цеплоту а загнєцене цесто могло добре у нїм „преробиц“ и викиснуц по сам рубец сакйтова. На тот способ викиснуте цесто ше витресло зоз сакайтова на древену лопату за хлєб и положело ше го печиц до руского пеца.       Сакайтов давал цесту точну и округлу форму за хлєб (здабал на такв. ципов). Упечени хлєб-ципов мал окрем приємного паху и благи ,,шлїд<nowiki>''</nowiki> од дикиньових або сламових смугох зоз дна сакайтова. == Литература == * ''Словнїк руского народного язика II'', Нови Сад 2017, б. 456. * Гордана Вуковић, ''Терминологија куће и покућства у Војводини''. Нови Сад (Филозофски факултет), 1988, 508 стр. * ''Речник српских говора Војводине'', измењено и допуњено издање у 4 тома, приредили мр Дејан Милорадов, Катарина Сунајко, мр Ивана Ћелић и др Драгољуб Петровић, Матица српска, Нови Сад. == Вонкашня вяза == * [https://www.youtube.com/watch?v=Vini8Z3Y1nI 100% Prirodno saćure, rogozare, asure, stari zanat - pletiva od rogoza] youtube.com (видео знїмок) * [https://www.youtube.com/watch?v=5-8lVv1rWSo&t=741s Велике корпе са трском и рогозом за некадашње складиштење житарица и орашастих плодова код куће] youtube.com == Референци == [[Катеґория:Традиция]] <references /> 5u2ez4ims5g5cxrtozs1r9a6sipr2th 21378 21366 2026-09-14T06:31:04Z Sveletanka 20 катеґория и вики вяза 21378 wikitext text/x-wiki [[File:Mand in vorm van een omgekeerde kegel, asset l2BognwdVViSMVUMSH4pN8tJ.jpg|right|thumb|300px|Сакайтов]]'''Сакайтов''' (всл. ''sakajtov'', од мадь. ''szakajto'', серб. ''саћура, саћур'') Слово сакайтов походзи зоз восточнославянских диялектох (обласц Шариш и Земплин, нєшкайша восточна Р. Словацка), одкаль ше часц Руснацох у 18. вику доселєли до [[Бачка|Бачкей]]). У жридловим диялекту, ''sakajtov'' або ''sakajtev'' означує судзину/кошаричок зоз слами.<ref>[https://rusinisticnistudi.ff.uns.ac.rs/index.php/rs/article/download/33/28/ ИСТОЧНОСЛОВАЧКЕ ПАРАЛЕЛЕ У РАТАРСКОЈ И ПОВРТАРСКОЈ ЛЕКСИЦИ РУСИНА У ВОЈВОДИНИ]</ref><ref>[https://narecie.sk/sakajtov Sakajtov]</ref> На мадярским язику ше плєцена торба або [[кошар]]/кошарик (зоз дикиню або [[Слама|слами]]) вола сатйор (''szatyor''). По руски слово сакайтов и мадярски сатйор звуча подобно и маю исту наменку. Мадярске слово ''szakyto'', ''szatyor'', локални Серби у Бачкей тото слово часто хасновали у каждодньовей бешеди фонетски „саћур” або „саћура.” ▶ Сакайтов при Руснацох ма два значеня:[[File:Basket MET 25.3.107.jpg|right|thumb|300px|Плїтши сакайтовик]]1. з дикиню плєцена [[кошарка]] або кошарик (без ручки); 2. прен. дакус глупи чловек, дурґов, тутмак. До сакайтова ше кладло замишене цесто на [[хлєб]], дзе ше пред тим на сподок положело чисту [[Хлєбовка|хлєбовку]]. З другу хлєбовку, або з концами тей истей хлєбовки (кед же була векша) закрило ше цесто док нє викисло, а потим ше го садзало до [[Руски пец|руского пеца]] печиц. Окрем за хлєб, сакайтови ше хасновали и за триманє дачого иншого: [[жито]], [[кукурица]], [[пасуля]], вайца, рискаша и подобне. У наших крайох сакайтови ше правело з лїсца чуткох узретей [[Кукурица|кукурици]], дикиню, шашу (дзиви мугар), слами и под. Найчастейше сакайтови правели хлопи прето же була потребнєйша векша моц рукох за зацогаванє шпарґи при обшиваню чомовох напр.дикиню, слами... == Фразеолоґия == ♦ Штригац на сакайтов (сакайтовик); штригали ше (старши хлопи) на сакайтовик. Здзали сакайтовик на главу, та шицко цо стирчало спод нього, одштригли. ♦ ''Жиє як мали бог у вельким сакайтове''; барз добре жиє; (подобне серб. живи као бубрег у лоју); ♦ ''Скрий ше под сакайтов''; тото цо ти гуториш або робиш нє добре, скрий ше од людзох, бо то на твою ганьбу. '''Сакайтовик''' то демунитив од слова сакайтов. Сакайтов то традицийни менши кошарик справени-виплєцени ручно зоз рижних материялох: дикиню, ражовей слами, шашу, та и лїсца зоз кукуричних чуткох (серб. љуштика, комушина). Плєтли ше зоз специфичну технїку; намотани чомови з начишлєних материялох хтори ше скруцовало и до круга ше зоз моцну шпарґу або скорку вербового пруца спирално обшивало єден шор за другим. Материял сакайтовом давал грубину, були тварди и моцни а мали цеплу нукашню часц бокох. (1) == Хаснованє при Руснацох == Руски ґаздовства ше после приселєня поступно осучашньовали, та скоро у каждим обисцу бул по голєм єден сакайотв а було их и по вецей. Прето же ше людзе а найчастейше хлопи, сами научели правиц сакайтови, поготов то робели у жимским периодзе кед нє було другей роботи. Тааки глїбши сакайтови а менших димензийох (20-25 по 30 цм) доставали ширшу наменку у валалских обисцох у [[Руски Керестур|Руским Керстуре]], [[Коцур|Коцуре]], [[Дюрдьов|Дюрьове]] и других местох дзе жили [[Руснаци у Сербиї|Руснаци]]. ▶ Сакайтови ше хасновало за: ♦ Зберанє и чуванє вайцох, поготову же им боки зоз слами, дикиню були мегки (та щицели од розбиваня). ♦ За триманє менших количествох кромпльох. (векше количество стало у [[Пиньвица|пиньвици]] лєбо [[Комора|коморки]]), орехи, [[овоц]] або вжиме сушену овоц итд. ♦ За карменє живини – зоз нїх ше лєгко з руку брало зарна (просо, кукурицу, жито итд.) хторе ше руцело [[Кура|куром]], курчатом и другей живини. == Виробок сакайтова == Вирабянє-плєценє сакайтовох представя прве мале [[Ремеселнїцтво при Руснацох у Бачкей|ремесельнїцке]] ремек-дїло, а технїка способу правеня ше розликує од класичного правеня кошарох и кошаркох з материялу як цо [[Верба|вербово]] пруце. Таки кошаричок-сакайтов ше вирабя зоз такв. технїку спиралного шица–(обшиванє) ценших скруцених снопчкох шашу, дикиню, стебелкох слами и под. Прето сакайтов нєма „дзири“'' а'' його боки випатраю густи, тварди и грубши, правени є виключно зоз природних материялох. '''Зоз чого ше шицко може плєсц сакайтов''' Материял мушел буц, еластични за зогинанє, алє и достаточно моцни же би тирвал вецей роки<ref>[https://artexnaman.com/what-are-woven-baskets-made-of/ What Are Woven Baskets Made Of?]</ref> а сакайтови ше правело зоз: ♦ Слами, ражовей слами (найчастейше ражова слама була найлєпши материял) прето же ма длугоке, моцнєйше и твардейше стебелко од других [[Житарки|житаркох]] и ма добру изолацию. ♦ Дикиню (серб. роґоз, шевар), лїсце тей барскей рошлїни сушело ше даґдзе у циню же би затримало еластичносц и аж вец ше го могло похасновац за правенє сакайтова. Сакайтови зоз дикиню були дакус мегчейши алє барз одпорни на [[Влага|влагу]]. ♦ Шашу (дзиви мугар) исти поступок як и зоз дикиньом ♦ Потребно було и моцна шпарґа за обшиванє хтора була випредзена зоз конопи. Могло ше за обшиванє похасновац и длугоки настругани „пантлїки“ зоз верби (найчастейши файти ракита або била верба). == Процес виробку сакайтова == За виробок єдного сакайтова потребно вельо сцерпеня, а процес випатра так: ♦ '''Пририхта ше материял''': Пред тим як ше почнє правиц сакайтов, слама ше намочи до води, лєбо ше замота до влажних рендох же би постала мегчейша за скруцованє и же би нє пукала при формованю. ♦ '''Започина ше''' од дна - „ядра“ сакайтова. Вежнє ше ценши снопчок слами (грубини як палєц) и завяже ше го на єдним концу. Ту ше го почнє круциц до круга и то постава центер, штредок дна -„ядро.“ <ref>[https://etnosrb.rs/%D1%82%D1%80%D0%B0%D0%B4%D0%B8%D1%86%D0%B8%D1%98%D0%B0/%D1%87%D1%83%D0%B2%D0%B0%D0%BC%D0%BE-%D1%81%D1%82%D0%B0%D1%80%D0%B5-%D0%B7%D0%B0%D0%BD%D0%B0%D1%82%D0%B5-k%D0%BE%D1%80%D0%BF%D0%B0-%D0%B7%D0%B4%D1%80%D0%B0%D0%B2%D0%B8%D1%98%D0%B0-%D0%B8-%D0%BB%D0%B5/ ЧУВАМО СТАРЕ ЗАНАТЕ: Kорпа здравија и лепша од било које пластичне посуде] etnosrb.rs</ref> ♦ '''Спиралне зошиванє''' (''Coiling''): Сноп слами ше далєй круци до круга (як спиралу) а же би ше круг тримал вєдно, особа хтора плєце сакайтов хаснує шидло (металне або древене) прави дзирку у предхоним шоре, и прецагує шпарґу, або вербово ценки „пантлїки“ и так практично зошива и причверсцує нови шор за предходни. ♦ '''Подзвигованє бокох-''' „мурох“ на сакайтове: Кед ше направи ровне дно пречнїка (коло 20–23 цм), нови круги слами або дикиню ше вецей нє ширя, алє ше прикладаю єден на други до горе, же би ше далєй обшиваюци снопчки, формовал бок („мур“) сакайтова. Понеже ше боки дзвигаю ґу верху, скруцени чомови снопчкох ше благо ширя же би ше формовала и так достала '''препознатлїва конусна форма сакайтова''' (узши при дну, ширши при верху) хтори олєгчує сипанє зарна або винїманє вайцох, кромпльох итд. ♦ '''Законченє (рубец)''': Остатнї шор, односно горнї рубец сакайтова найважнєйши за стабилносц цалей його конструкциї. Рубец заокруглєни, окреме ше го '''твардо обшива''' и зоз шпарґу моцно зацагує и поступно зужує док ше снопчок слами або дикиню подполно нє сценша и виєдначи зоз рубцом, же би ше сакайтов нє опарал и нє розплєтал.<ref>[https://artexnaman.com/what-are-woven-baskets-made-of/ How to Make Baskets with Natural Basket Weaving Materials]</ref> Резултат такого ремсла правеня плєценя так густо, моцно и твардо бул сакйтов/кошарик (суд, судзина–стари вираз) до хторого кед ше усипало житарку, анї єдно зарно нє могло випаднуц на бокох. == Хаснованє сакайтова == '''Киснуце хлєба у сакайтове у руских обисцох''' Печенє традицийного хлєба при войводянских Руснацох бул окрени фамелийни ритуал у хторим сакайтов мал ключну улогу як „судзина“ за дзвиганє (киснуце) цеста. Сакайтов бул добра термоизолация прето же чувал цеплоту а загнєцене цесто могло добре у нїм „преробиц“ и викиснуц по сам рубец сакйтова. На тот способ викиснуте цесто ше витресло зоз сакайтова на древену лопату за хлєб и положело ше го печиц до руского пеца.       Сакайтов давал цесту точну и округлу форму за хлєб (здабал на такв. ципов). Упечени хлєб-ципов мал окрем приємного паху и благи ,,шлїд<nowiki>''</nowiki> од дикиньових або сламових смугох зоз дна сакайтова. == Литература == * ''Словнїк руского народного язика II'', Нови Сад 2017, б. 456. * Гордана Вуковић, ''Терминологија куће и покућства у Војводини''. Нови Сад (Филозофски факултет), 1988, 508 стр. * ''Речник српских говора Војводине'', измењено и допуњено издање у 4 тома, приредили мр Дејан Милорадов, Катарина Сунајко, мр Ивана Ћелић и др Драгољуб Петровић, Матица српска, Нови Сад. == Вонкашня вяза == * [https://www.youtube.com/watch?v=Vini8Z3Y1nI 100% Prirodno saćure, rogozare, asure, stari zanat - pletiva od rogoza] youtube.com (видео знїмок) * [https://www.youtube.com/watch?v=5-8lVv1rWSo&t=741s Велике корпе са трском и рогозом за некадашње складиштење житарица и орашастих плодова код куће] youtube.com == Референци == [[Катеґория:Традиция]] <references /> [[Катеґория:Ствари у Руским обисцу]] [[Катеґория:Предмети зоз слами]] 4yrf5w3qohnfg7wapwrk0cnrkwjr1s2 21379 21378 2026-09-14T06:32:18Z Sveletanka 20 21379 wikitext text/x-wiki [[File:Mand in vorm van een omgekeerde kegel, asset l2BognwdVViSMVUMSH4pN8tJ.jpg|right|thumb|300px|Сакайтов]]'''Сакайтов''' (всл. ''sakajtov'', од мадь. ''szakajto'', серб. ''саћура, саћур'') Слово сакайтов походзи зоз восточнославянских диялектох (обласц Шариш и Земплин, нєшкайша восточна Р. Словацка), одкаль ше часц Руснацох у 18. вику доселєли до [[Бачка|Бачкей]]). У жридловим диялекту, ''sakajtov'' або ''sakajtev'' означує судзину/кошаричок зоз слами.<ref>[https://rusinisticnistudi.ff.uns.ac.rs/index.php/rs/article/download/33/28/ ИСТОЧНОСЛОВАЧКЕ ПАРАЛЕЛЕ У РАТАРСКОЈ И ПОВРТАРСКОЈ ЛЕКСИЦИ РУСИНА У ВОЈВОДИНИ]</ref><ref>[https://narecie.sk/sakajtov Sakajtov]</ref> На мадярским язику ше плєцена торба або [[кошар]]/кошарик (зоз дикиню або [[Слама|слами]]) вола сатйор (''szatyor''). По руски слово сакайтов и мадярски сатйор звуча подобно и маю исту наменку. Мадярске слово ''szakyto'', ''szatyor'', локални Серби у Бачкей тото слово часто хасновали у каждодньовей бешеди фонетски „саћур” або „саћура.” ▶ Сакайтов при Руснацох ма два значеня:[[File:Basket MET 25.3.107.jpg|right|thumb|300px|Плїтши сакайтовик]]1. з дикиню плєцена [[кошарка]] або кошарик (без ручки); 2. прен. дакус глупи чловек, дурґов, тутмак. До сакайтова ше кладло замишене цесто на [[хлєб]], дзе ше пред тим на сподок положело чисту [[Хлєбовка|хлєбовку]]. З другу хлєбовку, або з концами тей истей хлєбовки (кед же була векша) закрило ше цесто док нє викисло, а потим ше го садзало до [[Руски пец|руского пеца]] печиц. Окрем за хлєб, сакайтови ше хасновали и за триманє дачого иншого: [[жито]], [[кукурица]], [[пасуля]], вайца, рискаша и подобне. У наших крайох сакайтови ше правело з лїсца чуткох узретей [[Кукурица|кукурици]], дикиню, шашу (дзиви мугар), слами и под. Найчастейше сакайтови правели хлопи прето же була потребнєйша векша моц рукох за зацогаванє шпарґи при обшиваню чомовох напр.дикиню, слами... == Фразеолоґия == ♦ Штригац на сакайтов (сакайтовик); штригали ше (старши хлопи) на сакайтовик. Здзали сакайтовик на главу, та шицко цо стирчало спод нього, одштригли. ♦ ''Жиє як мали бог у вельким сакайтове''; барз добре жиє; (подобне серб. живи као бубрег у лоју); ♦ ''Скрий ше под сакайтов''; тото цо ти гуториш або робиш нє добре, скрий ше од людзох, бо то на твою ганьбу. '''Сакайтовик''' то демунитив од слова сакайтов. Сакайтов то традицийни менши кошарик справени-виплєцени ручно зоз рижних материялох: дикиню, ражовей слами, шашу, та и лїсца зоз кукуричних чуткох (серб. љуштика, комушина). Плєтли ше зоз специфичну технїку; намотани чомови з начишлєних материялох хтори ше скруцовало и до круга ше зоз моцну шпарґу або скорку вербового пруца спирално обшивало єден шор за другим. Материял сакайтовом давал грубину, були тварди и моцни а мали цеплу нукашню часц бокох. (1) == Хаснованє при Руснацох == Руски ґаздовства ше после приселєня поступно осучашньовали, та скоро у каждим обисцу бул по голєм єден сакайотв а було их и по вецей. Прето же ше людзе а найчастейше хлопи, сами научели правиц сакайтови, поготов то робели у жимским периодзе кед нє було другей роботи. Тааки глїбши сакайтови а менших димензийох (20-25 по 30 цм) доставали ширшу наменку у валалских обисцох у [[Руски Керестур|Руским Керстуре]], [[Коцур|Коцуре]], [[Дюрдьов|Дюрьове]] и других местох дзе жили [[Руснаци у Сербиї|Руснаци]]. ▶ Сакайтови ше хасновало за: ♦ Зберанє и чуванє вайцох, поготову же им боки зоз слами, дикиню були мегки (та щицели од розбиваня). ♦ За триманє менших количествох кромпльох. (векше количество стало у [[Пиньвица|пиньвици]] лєбо [[Комора|коморки]]), орехи, [[овоц]] або вжиме сушену овоц итд. ♦ За карменє живини – зоз нїх ше лєгко з руку брало зарна (просо, кукурицу, жито итд.) хторе ше руцело [[Кура|куром]], курчатом и другей живини. == Виробок сакайтова == Вирабянє-плєценє сакайтовох представя прве мале [[Ремеселнїцтво при Руснацох у Бачкей|ремесельнїцке]] ремек-дїло, а технїка способу правеня ше розликує од класичного правеня кошарох и кошаркох з материялу як цо [[Верба|вербово]] пруце. Таки кошаричок-сакайтов ше вирабя зоз такв. технїку спиралного шица–(обшиванє) ценших скруцених снопчкох шашу, дикиню, стебелкох слами и под. Прето сакайтов нєма „дзири“'' а'' його боки випатраю густи, тварди и грубши, правени є виключно зоз природних материялох. '''Зоз чого ше шицко може плєсц сакайтов''' Материял мушел буц, еластични за зогинанє, алє и достаточно моцни же би тирвал вецей роки<ref>[https://artexnaman.com/what-are-woven-baskets-made-of/ What Are Woven Baskets Made Of?]</ref> а сакайтови ше правело зоз: ♦ Слами, ражовей слами (найчастейше ражова слама була найлєпши материял) прето же ма длугоке, моцнєйше и твардейше стебелко од других [[Житарки|житаркох]] и ма добру изолацию. ♦ Дикиню (серб. роґоз, шевар), лїсце тей барскей рошлїни сушело ше даґдзе у циню же би затримало еластичносц и аж вец ше го могло похасновац за правенє сакайтова. Сакайтови зоз дикиню були дакус мегчейши алє барз одпорни на [[Влага|влагу]]. ♦ Шашу (дзиви мугар) исти поступок як и зоз дикиньом ♦ Потребно було и моцна шпарґа за обшиванє хтора була випредзена зоз конопи. Могло ше за обшиванє похасновац и длугоки настругани „пантлїки“ зоз верби (найчастейши файти ракита або била верба). == Процес виробку сакайтова == За виробок єдного сакайтова потребно вельо сцерпеня, а процес випатра так: ♦ '''Пририхта ше материял''': Пред тим як ше почнє правиц сакайтов, слама ше намочи до води, лєбо ше замота до влажних рендох же би постала мегчейша за скруцованє и же би нє пукала при формованю. ♦ '''Започина ше''' од дна - „ядра“ сакайтова. Вежнє ше ценши снопчок слами (грубини як палєц) и завяже ше го на єдним концу. Ту ше го почнє круциц до круга и то постава центер, штредок дна -„ядро.“ <ref>[https://etnosrb.rs/%D1%82%D1%80%D0%B0%D0%B4%D0%B8%D1%86%D0%B8%D1%98%D0%B0/%D1%87%D1%83%D0%B2%D0%B0%D0%BC%D0%BE-%D1%81%D1%82%D0%B0%D1%80%D0%B5-%D0%B7%D0%B0%D0%BD%D0%B0%D1%82%D0%B5-k%D0%BE%D1%80%D0%BF%D0%B0-%D0%B7%D0%B4%D1%80%D0%B0%D0%B2%D0%B8%D1%98%D0%B0-%D0%B8-%D0%BB%D0%B5/ ЧУВАМО СТАРЕ ЗАНАТЕ: Kорпа здравија и лепша од било које пластичне посуде] etnosrb.rs</ref> ♦ '''Спиралне зошиванє''' (''Coiling''): Сноп слами ше далєй круци до круга (як спиралу) а же би ше круг тримал вєдно, особа хтора плєце сакайтов хаснує шидло (металне або древене) прави дзирку у предхоним шоре, и прецагує шпарґу, або вербово ценки „пантлїки“ и так практично зошива и причверсцує нови шор за предходни. ♦ '''Подзвигованє бокох-''' „мурох“ на сакайтове: Кед ше направи ровне дно пречнїка (коло 20–23 цм), нови круги слами або дикиню ше вецей нє ширя, алє ше прикладаю єден на други до горе, же би ше далєй обшиваюци снопчки, формовал бок („мур“) сакайтова. Понеже ше боки дзвигаю ґу верху, скруцени чомови снопчкох ше благо ширя же би ше формовала и так достала '''препознатлїва конусна форма сакайтова''' (узши при дну, ширши при верху) хтори олєгчує сипанє зарна або винїманє вайцох, кромпльох итд. ♦ '''Законченє (рубец)''': Остатнї шор, односно горнї рубец сакайтова найважнєйши за стабилносц цалей його конструкциї. Рубец заокруглєни, окреме ше го '''твардо обшива''' и зоз шпарґу моцно зацагує и поступно зужує док ше снопчок слами або дикиню подполно нє сценша и виєдначи зоз рубцом, же би ше сакайтов нє опарал и нє розплєтал.<ref>[https://artexnaman.com/what-are-woven-baskets-made-of/ How to Make Baskets with Natural Basket Weaving Materials]</ref> Резултат такого ремсла правеня плєценя так густо, моцно и твардо бул сакйтов/кошарик (суд, судзина–стари вираз) до хторого кед ше усипало житарку, анї єдно зарно нє могло випаднуц на бокох. == Хаснованє сакайтова == '''Киснуце хлєба у сакайтове у руских обисцох''' Печенє традицийного хлєба при войводянских Руснацох бул окрени фамелийни ритуал у хторим сакайтов мал ключну улогу як „судзина“ за дзвиганє (киснуце) цеста. Сакайтов бул добра термоизолация прето же чувал цеплоту а загнєцене цесто могло добре у нїм „преробиц“ и викиснуц по сам рубец сакйтова. На тот способ викиснуте цесто ше витресло зоз сакайтова на древену лопату за хлєб и положело ше го печиц до руского пеца.       Сакайтов давал цесту точну и округлу форму за хлєб (здабал на такв. ципов). Упечени хлєб-ципов мал окрем приємного паху и благи ,,шлїд<nowiki>''</nowiki> од дикиньових або сламових смугох зоз дна сакайтова. == Литература == * ''Словнїк руского народного язика II'', Нови Сад 2017, б. 456. * Гордана Вуковић, ''Терминологија куће и покућства у Војводини''. Нови Сад (Филозофски факултет), 1988, 508 стр. * ''Речник српских говора Војводине'', измењено и допуњено издање у 4 тома, приредили мр Дејан Милорадов, Катарина Сунајко, мр Ивана Ћелић и др Драгољуб Петровић, Матица српска, Нови Сад. == Вонкашня вяза == * [https://www.youtube.com/watch?v=Vini8Z3Y1nI 100% Prirodno saćure, rogozare, asure, stari zanat - pletiva od rogoza] youtube.com (видео знїмок) * [https://www.youtube.com/watch?v=5-8lVv1rWSo&t=741s Велике корпе са трском и рогозом за некадашње складиштење житарица и орашастих плодова код куће] youtube.com == Референци == [[Катеґория:Традиция]] <references /> [[Катеґория:Ствари у Руским обисцу]] [[Катеґория:Продукти зоз слами]] 8kib1hxrcwuplze45lwap2p4yg54g9o Шаблон:Животинї 10 3536 21375 21357 2026-09-14T06:12:56Z Sveletanka 20 21375 wikitext text/x-wiki <noinclude> То шаблон за инфорамик о животиньох. {{/док}} </noinclude><includeonly><table class="infobox biota" style="width: 22em; text-align: left; font-size: 88%; line-height: 1.5em; border-spacing: 3px; border: 1px solid #e2c070; background-color: #fffdf5;"> <tr> <th colspan="2" style="text-align: center; font-size: 125%; font-weight: bold; background-color: #fee8ab; padding: 6px; color: #000000;">{{{Назва|{{PAGENAME}}}}}</th> </tr> {{#if:{{{Латинска назва|}}}| <tr> <td colspan="2" style="text-align: center; font-style: italic; background-color: #fff3d1; padding: 3px 5px; font-size: 95%;">{{{Латинска назва}}}</td> </tr> }} {{#if:{{{Слика|}}}| <tr> <td colspan="2" style="text-align: center; padding: 5px;"> [[Файл:{{{Слика}}}|{{{Ширина_слики|220px}}}|alt={{{Назва|}}}]] {{#if:{{{Опис_слики|}}}|<br /><span style="font-size: 90%;">{{{Опис_слики}}}</span>}} </td> </tr> }} {{#if:{{{Статус_очуваня|}}}| <tr> <th colspan="2" style="background-color: #fbdc93; text-align: center; font-weight: bold; padding: 3px 5px;">Статус очуваня</th> </tr> <tr> <td colspan="2" style="text-align: center; padding: 4px 5px;">{{{Статус_очуваня}}}</td> </tr> }} <tr> <th colspan="2" style="background-color: #fbdc93; text-align: center; font-weight: bold; padding: 3px 5px;">[[Таксономия (биолоґия)|Наукова класификация]]</th> </tr> {{#if:{{{Домен|}}}| <tr> <th style="background-color: #fef0cd; width: 40%; text-align: left; padding: 3px 5px;">Домен:</th> <td style="padding: 3px 5px;">{{{Домен}}}</td> </tr> }} {{#if:{{{Царство|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Царство:</th> <td style="padding: 3px 5px;">{{{Царство}}}</td> </tr> }} {{#if:{{{Кладус1|{{{Кладус|}}}}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Кладус:</th> <td style="padding: 3px 5px;">{{{Кладус1|{{{Кладус|}}}}}}</td> </tr> }} {{#if:{{{Кладус2|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Кладус:</th> <td style="padding: 3px 5px;">{{{Кладус2}}}</td> </tr> }} {{#if:{{{Колєно|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Колєно:</th> <td style="padding: 3px 5px;">{{{Колєно}}}</td> </tr> }} {{#if:{{{Подколєно|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Подколєно:</th> <td style="padding: 3px 5px;">{{{Подколєно}}}</td> </tr> }} {{#if:{{{Класа|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Класа:</th> <td style="padding: 3px 5px;">{{{Класа}}}</td> </tr> }} {{#if:{{{Подкласа|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Подкласа:</th> <td style="padding: 3px 5px;">{{{Подкласа}}}</td> </tr> }} {{#if:{{{Ряд|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Ряд:</th> <td style="padding: 3px 5px;">{{{Ряд}}}</td> </tr> }} {{#if:{{{Подряд|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Подряд:</th> <td style="padding: 3px 5px;">{{{Подряд}}}</td> </tr> }} {{#if:{{{Фамилия|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Фамилия:</th> <td style="padding: 3px 5px;">{{{Фамилия}}}</td> </tr> }} {{#if:{{{Подфамилия|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Подфамилия:</th> <td style="padding: 3px 5px;">{{{Подфамилия}}}</td> </tr> }} {{#if:{{{Род|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Род:</th> <td style="padding: 3px 5px;">{{{Род}}}</td> </tr> }} {{#if:{{{Файта|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Файта:</th> <td style="padding: 3px 5px; font-style: italic;">{{{Файта}}}</td> </tr> }} {{#if:{{{Подфайта|}}}| <tr> <th style="background-color: #fef0cd; text-align: left; padding: 3px 5px;">Подфайта:</th> <td style="padding: 3px 5px; font-style: italic;">{{{Подфайта}}}</td> </tr> }} {{#if:{{{Биномне_мено|}}}| <tr> <th colspan="2" style="background-color: #fbdc93; text-align: center; font-weight: bold; padding: 3px 5px;">[[Биномна номенклатура|Биномне мено]]</th> </tr> <tr> <td colspan="2" style="text-align: center; font-style: italic; font-weight: bold; padding: 4px 5px;">{{{Биномне_мено}}}</td> </tr> }} {{#if:{{{Слика_розпрестартосци|}}}| <tr> <th colspan="2" style="background-color: #fbdc93; text-align: center; font-weight: bold; padding: 3px 5px;">Ареал розпрестартосци</th> </tr> <tr> <td colspan="2" style="text-align: center; padding: 5px;"> [[Файл:{{{Слика_розпрестартосци}}}|220px|alt=Мапа розпрестартосци]] {{#if:{{{Опис_розпрестартосци|}}}|<br /><span style="font-size: 90%;">{{{Опис_розпрестартосци}}}</span>}} </td> </tr> }} {{#if:{{{Синоними|}}}| <tr> <th colspan="2" style="background-color: #fbdc93; text-align: center; font-weight: bold; padding: 3px 5px;">Синоними</th> </tr> <tr> <td colspan="2" style="text-align: center; font-size: 90%; padding: 4px 5px;">{{{Синоними}}}</td> </tr> }} </table></includeonly> [[Катеґория:Шаблони]] cuqjwzz9atx1i5lek0pdqbg55bq3jmk Рискаша 0 3539 21367 2026-09-13T19:49:22Z Olirk55 19 Г. Медєши 21367 wikitext text/x-wiki Рискаша и коц. ришкаша (лат. Oryza sativa; с. пиринач; всл. riskaša; мадь. rizs = рискаша; мадь. riszkasa = рискаша з млєком; зазначена у мадярским и форма riskasa, од хторей може походзиц коцурска форма зоз ш; другу часц kasa Мадяре превжали од Славянох. Перша часц слова рис- єст у европских язикох: нєм. Reis; фр. Riz; итал. r:so) то нашенє трави файти Oryza sativa (азийска рискаша) або Oryza glaberrima (африцка рискаша). Тоту житарку ше навелько хаснує по цалим швеце як основну поживу за вельку часц людскей популациї, а окреме у Азиї. То польопривредна роба з трецу по велькосци продукцию у швеце (рискаша 741,5 милиони тони у 2014), после цукрового наду (1,9 милиярди тони) и кукурици (1,0 милиярди тони). Монокотну рискашу ше нормално пестує як рочну рошлїну, алє у тропских обласцох може прежиц як вецейрочна култура и дату пресаду мож хасновац и 30 роки. Пестованє рискаши добре прилагодзене жемом и реґионом зоз нїзким трошком роботней моци и вельким количеством паданьох, понеже пестованє роботно интензивне и вимага вельки количества води. Медзитим, рискашу мож садзиц скоро вшадзи, аж и на прикрих брегових и горских подручох з хаснованьом терасастих системох зоз хторима ше контролує приводзенє води. Традиционална метода за хованє рискаши то вилїванє польох при садзеню, або после садзеня младей пресади. Тота єдноставна метода вимага добре планованє и сервисованє системох гацох и каналох за наводньованє, алє тиж редукує роснуце меншого коровча и чкодлївих рошлїнох хтори нє можу роснуц у вилятей жеми. На тот способ ше тиж одвраца животиньских чкодлївцох. Характеристики Рошлїна рискаши може нароснуц 1-1,8 метери високо, дзекеди и висше, у зависносци од файти и плодносци жеми. Рискаша ма длугоке, струнке лїсце длугоке 50-100 центи и 2-2,5 центи широке. Мали з витром опращковани квитки ше формую у розконарених лукових до вишацих ґириздочкох хтори длугоки 30-50 центи. Нашенє хторе ше є то зарна 5-12 милиметри длугоки и 2-3 милиметри груби. Нутритивна вредносц на 100 g (3,5 oz) Енерґия: 544 kJ (130 kcal) Угльово гидрати: 29 g Цукри: 0 g Поживни влакна: 0 g Масци: 0 g Протеїни: 2,4 g Витаммини Тиамин (Б1): (17%) 0,2 mg Рибофлавин (Б2): (0%) 0 mg Ниацин (Б3): (10%) 1,5 mg Витамин Б5: (13%) 0,164 mg Минерали Калциюм: (0%) 1 mg Желєзо: (12%) 1,5 mg Маґнезиюм: (2%) 8 mg Манґан: (19%) 0,4 mg Фосфор: (5%) 33 mg Калиюм: (0%) 23 mg Цинк: (4%) 0,4 mg Други конституенти: Вода: 68,5 g Варенє Сорти рискаши ше типично класификує як длугоко, штреднє и кратко зарнасти. Зарна длугокозарнастей рискаши (з високим количеством амилози) маю тенденцию остац цали после вареня; зарна рискаши штреднєй длужини (богати з амилопектином) поставаю лїпкаци. Зарна штреднєй длужини ше хаснує у сладких єдлох. Даєдни сорти длугокого зарна маю вельке кличество амилопектину, як цо тайландска лїпкаца рискаша, та ше их вари на пари. Лїпкацу рискашу штреднєй длужини ше хаснує за суши; лїпкацосц оможлївює рискаши затримац форму. Рискашу краткого зарна ше звичайно хаснує за сутлияш. Инстантна рискаша ше розликує од тей цо варена на пари по тим же є варена, а потим осушена. Вона ма обачлїво деґрадовани смак и текстуру. Фарби за рискашу и скроб ше часто хаснує кед ше прави чечне цесто и хлєбову масу пре звекшанє хрупкавосци. Литература Словнїк руского народного язика II, О – Я, Нови Сад 2025, б. 398. Вонкашнї вязи https://sr.wikipedia.org/sr-ec/%D0%9F%D0%B8%D1%80%D0%B8%D0%BD%D0%B0%D1%87 0x7jy0b8z72357pbwzbrnmz41g7xha2 21368 21367 2026-09-13T21:06:37Z Olirk55 19 Форматированє бока, уложена таблїчка (спрам шаблону) 21368 wikitext text/x-wiki {{Рошлїни | Назва = Рискаша | Латинска назва = Oryza sativa | Слика = Oryza sativa - Köhler–s Medizinal-Pflanzen-232.jpg | Опис_слики = Илустрация часцох рискаши | Домен = Eukaryota | Царство = Plantae (Рошлїни) | Кладус1 = | Кладус2 = | Кладус3 = | Дивизия = Magnoliophyta | Класа = Liliopsida | Ряд = Poales | Фамилия = Poaceae | Подфамилия = Oryzoideae | Род = Oryza L., 1753 | Секция = | Файта = Oryza sativa (азийска рискаша), Oryza glaberrima (африцка рискаша) | Подфайта = Індійска рискаша (O. s. subsp. indica), Японска рискаша (O. s. subsp. japonica) | Биномне_мено = | Слика_розширеносци = | Опис_розширеносци = | Синоними = }}'''Рискаша''' и [[Коцур|коц]]. ришкаша (лат. ''Oryza sativa''; серб. ''пиринач''; всл. ''riskaša''; мадь. ''rizs, або'' ''riszkasa''; рискаша з млєком; зазначена у мадярским и форма ''riskasa'', од хторей може походзиц коцурска форма зоз ш; другу часц лсова ''kasa'' Мадяре превжали од Славянох. Перша часц слова ''рис''- єст у европских язикох: нєм. ''Reis''; фр. ''Riz''; итал. ''r:so'') то нашенє трави файти ''Oryza sativa'' (азийска рискаша) або ''Oryza glaberrima'' (африцка рискаша). Тоту житарку ше навелько хаснує по цалим швеце як основну [[Пожива|поживу]] за вельку часц людскей популациї, а окреме у Азиї. То польопривредна роба з трецу по велькосци продукцию у швеце (рискаша 741,5 милиони тони у 2014), после цукрового наду (1,9 милиярди тони) и [[Кукурица|кукуриц]]<nowiki/>и (1,0 милиярди тони). Монокотну рискашу ше нормално пестує як рочну рошлїну, алє у тропских обласцох може прежиц як вецейрочна култура и дату пресаду мож хасновац и 30 роки. Пестованє рискаши добре прилагодзене жемом и реґионом зоз нїзким трошком роботней моци и вельким количеством паданьох, понеже пестованє роботно интензивне и вимага вельки количества води. Медзитим, рискашу мож садзиц скоро вшадзи, аж и на прикрих брегових и горских подручох з хаснованьом терасастих системох зоз хторима ше контролує приводзенє води. [[File:Cambodian farmers planting rice.jpg|right|thumb|306x306px|Садзенє рискаши на традицийни способ]]Традиционална метода за хованє рискаши то вилїванє польох при садзеню, або после садзеня младей пресади. Тота єдноставна метода вимага добре планованє и сервисованє системох гацох и каналох за наводньованє, алє тиж редукує роснуце меншого коровча и чкодлївих рошлїнох хтори нє можу роснуц у вилятей жеми. На тот способ ше тиж одвраца животиньских чкодлївцох. == Характеристики == [[File:20201102.Hengnan.Hybrid rice Sanyou-1.6.jpg|right|thumb|306x306px|Класка рискаши]]Рошлїна рискаши може нароснуц 1-1,8 [[Метер|метери]] високо, дзекеди и висше, у зависносци од файти и плодносци жеми. Рискаша ма длугоке, струнке лїсце длугоке 50-100 центи и 2-2,5 центи широке. Мали з витром опращковани квитки ше формую у розконарених лукових до вишацих ґириздочкох хтори длугоки 30-50 центи. Нашенє хторе ше є то зарна 5-12 милиметри длугоки и 2-3 милиметри груби. == Нутритивна вредносц на 100 g (3,5 oz) == [[File:Rice grains (IRRI).jpg|right|thumb|305x305px]] '''Енерґия''': 544 kJ (130 kcal) '''Угльово гидрати''': 29 g :* Цукри: 0 g :* Поживни влакна: 0 g :* Масци: 0 g :* Протеїни: 2,4 g '''Витаммини''' [[File:Rice farmers Mae Wang Chiang Mai Province.jpg|right|thumb|306x306px|После жатви рискаши, зазберованє слами на традицийни способ.]] :* Тиамин (Б1): (17%) 0,2 mg :* Рибофлавин (Б2): (0%) 0 mg :* Ниацин (Б3): (10%) 1,5 mg :* Витамин Б5: (13%) 0,164 mg '''Минерали''' :* Калциюм: (0%) 1 mg :* Желєзо: (12%) 1,5 mg :* Маґнезиюм: (2%) 8 mg [[File:Tumpeng Slametan IGDA.JPG|right|thumb|304x304px|Єдла з рискаши]] :* Манґан: (19%) 0,4 mg :* Фосфор: (5%) 33 mg :* Калиюм: (0%) 23 mg :* Цинк: (4%) 0,4 mg '''Други конституенти:''' :* Вода: 68,5 g == Варенє == [[File:Steinpilzrisotto.jpg|right|thumb|300px|]]Сорти рискаши ше типично класификує як длугоко, штреднє и кратко зарнасти. Зарна длугокозарнастей рискаши (з високим количеством амилози) маю тенденцию остац цали после вареня; зарна рискаши штреднєй длужини (богати з амилопектином) поставаю лїпкаци. Зарна штреднєй длужини ше хаснує у сладких єдлох. Даєдни сорти длугокого зарна маю вельке кличество амилопектину, як цо тайландска лїпкаца рискаша, та ше их вари на пари. Лїпкацу рискашу штреднєй длужини ше хаснує за суши; лїпкацосц оможлївює рискаши затримац форму. Рискашу краткого зарна ше звичайно хаснує за сутлияш. Инстантна рискаша ше розликує од тей цо варена на пари по тим же є варена, а потим осушена. Вона ма обачлїво деґрадовани смак и текстуру. [[Фарба|Фарби]] за рискашу и скроб ше часто хаснує кед ше прави чечне цесто и хлєбову масу пре звекшанє хрупкавосци. == Литература == ''Словнїк руского народного язика II, О – Я'', Нови Сад 2025, б. 398. == Вонкашнї вязи == https://sr.wikipedia.org/sr-ec/%D0%9F%D0%B8%D1%80%D0%B8%D0%BD%D0%B0%D1%87 3xg6pq9ylocs35eintc3az88d55lebs 21382 21368 2026-09-14T07:35:46Z Olirk55 19 Фотоґрафиї 21382 wikitext text/x-wiki {{Рошлїни | Назва = Рискаша | Латинска назва = Oryza sativa | Слика = Oryza sativa - Köhler–s Medizinal-Pflanzen-232.jpg | Опис_слики = Илустрация часцох рискаши | Домен = Eukaryota | Царство = Plantae (Рошлїни) | Кладус1 = | Кладус2 = | Кладус3 = | Дивизия = Magnoliophyta | Класа = Liliopsida | Ряд = Poales | Фамилия = Poaceae | Подфамилия = Oryzoideae | Род = Oryza L., 1753 | Секция = | Файта = Oryza sativa (азийска рискаша), Oryza glaberrima (африцка рискаша) | Подфайта = Індійска рискаша (O. s. subsp. indica), Японска рискаша (O. s. subsp. japonica) | Биномне_мено = | Слика_розширеносци = | Опис_розширеносци = | Синоними = }}'''Рискаша''' и [[Коцур|коц]]. ришкаша (лат. ''Oryza sativa''; серб. ''пиринач''; всл. ''riskaša''; мадь. ''rizs, або'' ''riszkasa''; рискаша з млєком; зазначена у мадярским и форма ''riskasa'', од хторей може походзиц коцурска форма зоз ш; другу часц лсова ''kasa'' Мадяре превжали од Славянох. Перша часц слова ''рис''- єст у европских язикох: нєм. ''Reis''; фр. ''Riz''; итал. ''r:so'') то нашенє трави файти ''Oryza sativa'' (азийска рискаша) або ''Oryza glaberrima'' (африцка рискаша). Тоту житарку ше навелько хаснує по цалим швеце як основну [[Пожива|поживу]] за вельку часц людскей популациї, а окреме у Азиї. То польопривредна роба з трецу по велькосци продукцию у швеце (рискаша 741,5 милиони тони у 2014), после цукрового наду (1,9 милиярди тони) и [[Кукурица|кукуриц]]<nowiki/>и (1,0 милиярди тони). Монокотну рискашу ше нормално пестує як рочну рошлїну, алє у тропских обласцох може прежиц як вецейрочна култура и дату пресаду мож хасновац и 30 роки. Пестованє рискаши добре прилагодзене жемом и реґионом зоз нїзким трошком роботней моци и вельким количеством паданьох, понеже пестованє роботно интензивне и вимага вельки количества води. Медзитим, рискашу мож садзиц скоро вшадзи, аж и на прикрих брегових и горских подручох з хаснованьом терасастих системох зоз хторима ше контролує приводзенє води. [[File:Cambodian farmers planting rice.jpg|right|thumb|306x306px|Садзенє рискаши на традицийни способ]]Традиционална метода за хованє рискаши то вилїванє польох при садзеню, або после садзеня младей пресади. Тота єдноставна метода вимага добре планованє и сервисованє системох гацох и каналох за наводньованє, алє тиж редукує роснуце меншого коровча и чкодлївих рошлїнох хтори нє можу роснуц у вилятей жеми. На тот способ ше тиж одвраца животиньских чкодлївцох. == Характеристики == [[File:20201102.Hengnan.Hybrid rice Sanyou-1.6.jpg|right|thumb|306x306px|Класка рискаши]]Рошлїна рискаши може нароснуц 1-1,8 [[Метер|метери]] високо, дзекеди и висше, у зависносци од файти и плодносци жеми. Рискаша ма длугоке, струнке лїсце длугоке 50-100 центи и 2-2,5 центи широке. Мали з витром опращковани квитки ше формую у розконарених лукових до вишацих ґириздочкох хтори длугоки 30-50 центи. Нашенє хторе ше є то зарна 5-12 милиметри длугоки и 2-3 милиметри груби. == Нутритивна вредносц на 100 g (3,5 oz) == [[File:Rice grains (IRRI).jpg|right|thumb|305x305px]] '''Енерґия''': 544 kJ (130 kcal) '''Угльово гидрати''': 29 g :* Цукри: 0 g :* Поживни влакна: 0 g :* Масци: 0 g :* Протеїни: 2,4 g '''Витаммини''' [[File:Rice farmers Mae Wang Chiang Mai Province.jpg|right|thumb|306x306px|После жатви рискаши, зазберованє слами на традицийни способ.]] :* Тиамин (Б1): (17%) 0,2 mg :* Рибофлавин (Б2): (0%) 0 mg :* Ниацин (Б3): (10%) 1,5 mg :* Витамин Б5: (13%) 0,164 mg '''Минерали''' :* Калциюм: (0%) 1 mg :* Желєзо: (12%) 1,5 mg :* Маґнезиюм: (2%) 8 mg [[File:Tumpeng Slametan IGDA.JPG|right|thumb|304x304px|Кулинарски декорациї єдлох з рискаши]] :* Манґан: (19%) 0,4 mg :* Фосфор: (5%) 33 mg :* Калиюм: (0%) 23 mg :* Цинк: (4%) 0,4 mg '''Други конституенти:''' :* Вода: 68,5 g == Процес преробку == [[File:Stages of rice milling.jpg|right|thumb|412x412px|З лїва на право: интеґрална (жовта) рискаша, рискаша з ключку, била рискаша]] {|class="wikitable floatright" style="font-size:85%;text-align:left;width:25em;" |-style="text-align:center;" |colspan=2 |[[File:Rice Animation.gif|frameless|upright=1.15|alt=Five-step animation showing the removal of successive layers from raw rice grains, starting with the grain with its inedible hull and ending with polished white rice.]]<br/> Илустрация процеса обробки рискаши. |- |{{ordered list|list_style_type=upper-alpha |Rскаша з лупу [[chaff]] |[[Brown rice]] |Rice with [[Cereal germ|germ]] |[[White rice]] with [[bran]] [[Crop residue|residue]] |Polished }} |{{ordered list |[[Chaff]] |[[Bran]] |Bran [[Crop residue|residue]] |[[Cereal germ]] |[[Endosperm]] }} |}Преробок рискаши подразумює одкланянє єдного або вецей пасмох з рискаши пре доставанє квалитетнєйших прикметох продукта за тарґовину и тарґовище. Сухе зарно ше третирує же би ше одклонєли-очисцели вонкашнї пасма, односно лупки и отруби. Шицки пасма ше можу очисциц швидко з єдним або двома ,,крочайнима<nowiki>''</nowiki> поступками, або – як цо то случай у индустрийним преробку–през вецейпоступкови процес хтори залапює чисцење, сепарацию, ґланцанє, класификовнає и мерање.<ref>[https://web.archive.org/web/20231215150726/http://www.knowledgebank.irri.org/step-by-step-production/postharvest/milling<nowiki> "Milling".][</nowiki>https://en.wikipedia.org/wiki/International_Rice_Research_Institute<nowiki> International Rice Research Institute. ][</nowiki>https://web.archive.org/web/20231215150726/http://www.knowledgebank.irri.org/step-by-step-production/postharvest/milling<nowiki> Archived] from the original on December 15, 2023. Retrieved January 4, 2024.</nowiki></ref> Интегралней рискаши (кафова) одстаранєна лєм лупка хтора нє за єдзенє.<ref name=":1">[https://web.archive.org/web/20180802162740/http://www.riceassociation.org.uk/content/1/10/varieties.html<nowiki> "Types of rice".] Rice Association. Archived from [</nowiki>https://web.archive.org/web/20180802162740/http://www.riceassociation.org.uk/content/1/10/varieties.html<nowiki> the original] on August 2, 2018. Retrieved August 2, 2018.</nowiki></ref> После ше ю далєй мелє и одклонює ше отруби и ключки. Зоз тим ше достава продукти-рискаша хтора вше блядшей [[Фарба|фарби]].<ref name=":1" /> Рискашу ше третирує зоз гидротермалним обробком (на пари), през процс третированя на пари преходзи през пред самим млєцом. == Варенє == [[File:Steinpilzrisotto.jpg|right|thumb|310x310px]]Сорти рискаши ше типично класификує як длугоко, штреднє и кратко зарнасти. Зарна длугокозарнастей рискаши (з високим количеством амилози) маю тенденцию остац цали после вареня; зарна рискаши штреднєй длужини (богати з амилопектином) поставаю лїпкаци. У рискаши нєт глутену; обезбечує протеини, алє нє шицки есенциялни аминокиселини потребни за добре здравє. Рискаша различиних файтох шеконзумирує ширцом швета. Состав скроба у зарну, амилози и амилопектина, дава єй различни текстурни прикмети. <ref>Rosell, Cristina M.; Marco, Cristina (2008). "Rice". ''Gluten-Free Cereal Products and Beverages''. Elsevier. [https://en.wikipedia.org/wiki/Digital_object_identifier doi:10.1016/b978-012373739-7.50006-x.] [https://en.wikipedia.org/wiki/ISBN ISBN&#x20;<bdi>978-0-12-373739-7</bdi><nowiki>.]</ref>Зарна штреднєй длужини ше хаснує у сладких єдлох. Даєдни сорти длугокого зарна маю вельке кличество амилопектину, як цо тайландска лїпкаца рискаша, та ше их вари на пари. Лїпкацу рискашу штреднєй длужини ше хаснує за суши; лїпкацосц оможлївює рискаши затримац форму. Рискашу краткого зарна ше звичайно хаснує за сутлияш. Инстантна рискаша ше розликує од тей цо варена на пари по тим же є варена, а потим осушена. Вона ма обачлїво деґрадовани смак и текстуру. [[Фарба|Фарби]] за рискашу и скроб ше часто хаснує кед ше прави чечне цесто и хлєбову масу пре звекшанє хрупкавосци. == Литература == ''Словнїк руского народного язика II, О – Я'', Нови Сад 2025, б. 398. == Вонкашнї вязи == == Референци == k4h1db31vv894pqrvc70q2u1a6rv0r4 21383 21382 2026-09-14T12:02:17Z Olirk55 19 Уложени елементи и фотоґрафиї 21383 wikitext text/x-wiki {{Рошлїни | Назва = Рискаша | Латинска назва = Oryza sativa | Слика = Oryza sativa - Köhler–s Medizinal-Pflanzen-232.jpg | Опис_слики = Илустрация часцох рискаши | Домен = Eukaryota | Царство = Plantae (Рошлїни) | Кладус1 = | Кладус2 = | Кладус3 = | Дивизия = Magnoliophyta | Класа = Liliopsida | Ряд = Poales | Фамилия = Poaceae | Подфамилия = Oryzoideae | Род = Oryza L., 1753 | Секция = | Файта = Oryza sativa (азийска рискаша), Oryza glaberrima (африцка рискаша) | Подфайта = Індійска рискаша (O. s. subsp. indica), Японска рискаша (O. s. subsp. japonica) | Биномне_мено = | Слика_розширеносци = | Опис_розширеносци = | Синоними = }}'''Рискаша''' и [[Коцур|коц]]. ришкаша (лат. ''Oryza sativa''; серб. ''пиринач''; всл. ''riskaša''; мадь. ''rizs, або'' ''riszkasa''; рискаша з млєком; зазначена у мадярским и форма ''riskasa'', од хторей може походзиц коцурска форма зоз ш; другу часц лсова ''kasa'' Мадяре превжали од Славянох. Перша часц слова ''рис''- єст у европских язикох: нєм. ''Reis''; фр. ''Riz''; итал. ''r:so'') то нашенє трави файти ''Oryza sativa'' (азийска рискаша) або ''Oryza glaberrima'' (африцка рискаша). Тоту житарку ше навелько хаснує по цалим швеце як основну [[Пожива|поживу]] за вельку часц людскей популациї, а окреме у Азиї. То польопривредна роба з трецу по велькосци продукцию у швеце (рискаша 741,5 милиони тони у 2014), после цукрового наду (1,9 милиярди тони) и [[Кукурица|кукуриц]]<nowiki/>и (1,0 милиярди тони). Монокотну рискашу ше нормално пестує як рочну рошлїну, алє у тропских обласцох може прежиц як вецейрочна култура и дату пресаду мож хасновац и 30 роки. Пестованє рискаши добре прилагодзене жемом и реґионом зоз нїзким трошком роботней моци и вельким количеством паданьох, понеже пестованє роботно интензивне и вимага вельки количества води. Медзитим, рискашу мож садзиц скоро вшадзи, аж и на прикрих брегових и горских подручох з хаснованьом терасастих системох зоз хторима ше контролує приводзенє води. Постоя вецей файти и вариянти рискаши у зависносци од реґиона.<ref> [https://www.theculinarypro.com/rice-varieties "Rice varieties".] The Culinery Pro</ref> Традиционална метода за хованє рискаши то вилїванє польох при садзеню, або после садзеня младей пресади. Тота єдноставна метода вимага добре планованє и сервисованє системох гацох и каналох за наводньованє, алє тиж редукує роснуце меншого коровча и чкодлївих рошлїнох хтори нє можу роснуц у вилятей жеми. На тот способ ше тиж одвраца животиньских чкодлївцох. == Характеристики == [[File:20201102.Hengnan.Hybrid rice Sanyou-1.6.jpg|right|thumb|313x313px|Класка рискаши]]Рошлїна рискаши може нароснуц 1-1,8 [[Метер|метери]] високо, дзекеди и висше, у зависносци од файти и плодносци жеми. Рискаша ма длугоке, струнке лїсце длугоке 50-100 центи и 2-2,5 центи широке. Мали з витром опращковани квитки ше формую у розконарених лукових до вишацих ґириздочкох хтори длугоки 30-50 центи. Нашенє хторе ше є то зарна 5-12 милиметри длугоки и 2-3 милиметри груби. == Нутритивна вредносц на 100 g (3,5 oz) == [[File:Rice grains (IRRI).jpg|right|thumb|312x312px]] '''Енерґия''': 544 kJ (130 kcal) '''Угльово гидрати''': 29 g :* Цукри: 0 g :* Поживни влакна: 0 g :* Масци: 0 g :* Протеїни: 2,4 g '''Витаммини''' :[[File:Rice farmers Mae Wang Chiang Mai Province.jpg|right|thumb|314x314px|После жатви рискаши, зазберованє слами на традицийни способ.]] :* Тиамин (Б1): (17%) 0,2 mg :* Рибофлавин (Б2): (0%) 0 mg :* Ниацин (Б3): (10%) 1,5 mg :* Витамин Б5: (13%) 0,164 mg '''Минерали''' :[[File:Cambodian farmers planting rice.jpg|right|thumb|316x316px|Садзенє рискаши на традицийни способ]] :* Калциюм: (0%) 1 mg :* Желєзо: (12%) 1,5 mg :* Маґнезиюм: (2%) 8 mg :* Манґан: (19%) 0,4 mg :* Фосфор: (5%) 33 mg :* Калиюм: (0%) 23 mg :* Цинк: (4%) 0,4 mg '''Други конституенти:''' :* Вода: 68,5 g == Процес преробку == {| class="wikitable" |+ ! colspan="2" |Процес преробку рискаши |- | colspan="2" | [[File:Rice Animation.gif|center|thumb|280px|Приказ чисценя пасмох у процесу преробку]] |- |а) Рискаша у лупки б) Интеґрална (жовкава) рискаша в) Рискаша з ключку г) Била рискаша зоз остатками отруби д) Полирана рискаша |1. Лупки 2. Отруби 3. Остатки отрубох 4. Ключки 5. Ендосерм |} Преробок рискаши подразумює одкланянє (чисценє) єдного або вецей пасмох з рискаши з намиру доставаня квалитетнєйших прикметох продукта за тарґовину и тарґовище. [[File:Stages of rice milling.jpg|left|thumb|480x480px|З лїва на право: интеґрална (жовта) рискаша, рискаша з ключку, била рискаша]] Зарно ше третирує же би ше одклонєли и очисцели вонкашнї пасма, односно лупки и отруби. Шицки пасма ше можу очисциц швидко з єдним або двома поступками. Индустрийни преробок преходзи през вецейнїсти процес, хтори залапює чисценє, сепарацию, ґланцанє, бланширанє на пари, класификовнає и меранє рискаши.<ref>[[:en:International_Rice_Research_Institute|International Rice Research Institute.]][https://web.archive.org/web/20231215150726/http://www.knowledgebank.irri.org/step-by-step-production/postharvest/milling Archived] from the original on December 15, 2023. Retrieved January 4, 2024.</ref> Интеґралней рискаши (хтора жовкаста) оддзелює ше лєм лупка хтора нє за єдзенє.<ref name=":1">[https://web.archive.org/web/20180802162740/http://www.riceassociation.org.uk/content/1/10/varieties.html "Types of rice".] Rice Association. Archived from [https://web.archive.org/web/20180802162740/http://www.riceassociation.org.uk/content/1/10/varieties.html the original] on August 2, 2018. Retrieved August 2, 2018.</ref> У дальшим поступку процеа рискаши ше одклонює отруби и ключки. Зоз тим ше достава продукт-рискаша хтора вше блядшей [[Фарба|фарби]].<ref name=":1" /> Рискашу ше третирує зоз гидротермалним обробком (на пари). През процес третированя на пари преходзи пред самим млєцом.<ref>[https://web.archive.org/web/20231215150726/http://www.knowledgebank.irri.org/step-by-step-production/postharvest/milling "Milling".][https://en.wikipedia.org/wiki/International_Rice_Research_Institute International Rice Research Institute. ][https://web.archive.org/web/20231215150726/http://www.knowledgebank.irri.org/step-by-step-production/postharvest/milling Archived] from the original on December 15, 2023. Retrieved January 4, 2024.</ref> == Варенє == [[File:Steinpilzrisotto.jpg|right|thumb|310x310px]]Сорти рискаши ше типично класификує як длугоко, штреднє и кратко зарнасти. Зарна длугокозарнастей рискаши (з високим количеством амилози) маю тенденцию остац цали после вареня; зарна рискаши штреднєй длужини (богати з амилопектином) поставаю лїпкаци. У рискаши нєт глутену; обезбечує протеини, алє нє шицки есенциялни аминокиселини потребни за добре здравє. [[File:Tumpeng Slametan IGDA.JPG|right|thumb|310x310px|Кулинарски декорациї єдлох з рискаши]] Рискаша различиних файтох шеконзумирує ширцом швета. Состав скроба у зарну, амилози и амилопектина, дава єй различни текстурни прикмети.<ref>Rosell, Cristina M.; Marco, Cristina (2008). "Rice". ''Gluten-Free Cereal Products and Beverages''. Elsevier. [https://en.wikipedia.org/wiki/Digital_object_identifier doi:10.1016/b978-012373739-7.50006-x.] [https://en.wikipedia.org/wiki/ISBN ISBN&#x20;<bdi>978-0-12-373739-7</bdi>.]</ref> Зарна штреднєй длужини ше хаснує у сладких єдлох. Даєдни сорти длугокого зарна маю вельке кличество амилопектину, як цо тайландска лїпкаца рискаша, та ше их вари на пари. Лїпкацу рискашу штреднєй длужини ше хаснує за суши; лїпкацосц оможлївює рискаши затримац форму. Рискашу краткого зарна ше звичайно хаснує за сутлияш (то слатке єдло хторе уварене зоз рискаши у млєку). Инстантна рискаша ше розликує од тей цо варена на пари по тим же є варена, а потим осушена. Вона ма обачлїво деґрадовани смак и текстуру. Фарби за рискашу и скроб ше часто хаснує кед ше прави чечне цесто и хлєбову масу пре звекшанє хрупкавосци. Варена рискаша комбинoвана зоз млєком, цукром и медом, хаснує ше за правенє лакоткох (десератох). У даєдних реґионох, як Табаристан, [[хлєб]] ше прави зоз рискашовей муки. Штредньовиковни исламски тексти пишу о медицинским хаснованю тей рошлїни.<ref>[https://sr.wikipedia.org/wiki/%D0%9F%D0%B8%D1%80%D0%B8%D0%BD%D0%B0%D1%87#CITEREFWatson1983 Watson 1983,] стр. 15.</ref> Зоз рискаши ше тиж може правиц каша (позната такв. цицвара) зоз додаваньом вецей води як звичайно итд. == Литература == * ''Словнїк руского народного язика II, О – Я'', Нови Сад 2025, б. 398. == Вонкашнї вязи == * [https://rulek.rs/pirinac-2/ Pirinač > Lekovita Svojstva i Upotreba Pirinča] *[https://www.zdravisimo.com/blog/pirinac-kako-ga-pripremiti-i-za-sta-je-dobar.html Pirinač - kako ga pripremiti i za šta je dobar?] zdravisimo.com {{Commonscat}} == Референци == <references /> [[Катеґория:Рошлїни]] [[Катеґория:Кулинарство]] p2k6dheyh1dgeo66z9syy2e3g2uwrnl Хвост 0 3540 21369 2026-09-14T01:39:53Z Ruskinja2022 22 Г. Медєши 21369 wikitext text/x-wiki '''Хвост''' (серб. реп; слц. chvost; поль. диял. chwost „исте”; рсй. хвост „исте”. Общеславянске слово, од праслав. хvostъ) File:Ateles-fusciceps 54724770b.jpg Чарноглави маймун паук 1. хвост при похребцинарох облапя задню часц похребцини, находзи ше за аналним отвором и до нєй нє уходзи брухова глїбка. У хвосце ше находза мускули и тетиви, а закрити є зоз скору на хторей може буц бундичка, пирє, пирка (як на рибох), а може буц и по цалей длужини голи. При даєдних похребцинарох є зложени зоз велїх медзисобнє повязаних персценьох хтори пре мускули барз рухоми (напр. хвост за лапанє при велїх маймунох), при других є кратки або аж и запшети, а при даєдних може буц широки и скляпчисцени, док го даєдни вообще нє маю (жаби, людзе). При даєдних людзох постої хвосцик як атавизем. Мачки хасную хвост як за отримованє ровноваги, так и за медзисобне спорозумйованє (бешеда цела); File:Pfau imponierend.jpg Хвост самца павура 2. жилка (або деминутивна форма хвосцик) на цукровей цвикли. Фразеолоґия Можеш му [заяцови и под.] положиц солї под хвост, полож му солї под хвост [та го влапиш] = сцекол ци, нє влапиш го (гвари ше и дзецом о даким/дачим кого чежко влапиц; Стануц дакому на хвост = застановиц дакого у нєдобрей роботи: ''Па да є горша як босорка, я би єй ипак на хвост станул.'' Як кед биш му на хвост станул = барз є чувствительни, такой реаґує: ''Нєшка ци кажде таке як кед биш му на хвост станул.'' Як кед ше мачки на хвост станє = барз чувствительне. Ґалерия File:Sanc0116 - Flickr - NOAA Photo Library.jpg Китов хвост File:Lemur (26617451451).jpg Лемуров хвост File:Dog tail erect.jpg Пши хвост Литература Словнїк руского народного язика II, О – Я, Нови Сад 2017, б. 666. Вонкашнї вязи 27c2n92o7yzwlgj6bsjjedv3e2cpgdc 21381 21369 2026-09-14T06:34:35Z Sveletanka 20 катеґория 21381 wikitext text/x-wiki '''Хвост''' (серб. реп; слц. chvost; поль. диял. chwost „исте”; рсй. хвост „исте”. Общеславянске слово, од праслав. хvostъ) File:Ateles-fusciceps 54724770b.jpg Чарноглави маймун паук 1. хвост при похребцинарох облапя задню часц похребцини, находзи ше за аналним отвором и до нєй нє уходзи брухова глїбка. У хвосце ше находза мускули и тетиви, а закрити є зоз скору на хторей може буц бундичка, пирє, пирка (як на рибох), а може буц и по цалей длужини голи. При даєдних похребцинарох є зложени зоз велїх медзисобнє повязаних персценьох хтори пре мускули барз рухоми (напр. хвост за лапанє при велїх маймунох), при других є кратки або аж и запшети, а при даєдних може буц широки и скляпчисцени, док го даєдни вообще нє маю (жаби, людзе). При даєдних людзох постої хвосцик як атавизем. Мачки хасную хвост як за отримованє ровноваги, так и за медзисобне спорозумйованє (бешеда цела); File:Pfau imponierend.jpg Хвост самца павура 2. жилка (або деминутивна форма хвосцик) на цукровей цвикли. Фразеолоґия Можеш му [заяцови и под.] положиц солї под хвост, полож му солї под хвост [та го влапиш] = сцекол ци, нє влапиш го (гвари ше и дзецом о даким/дачим кого чежко влапиц; Стануц дакому на хвост = застановиц дакого у нєдобрей роботи: ''Па да є горша як босорка, я би єй ипак на хвост станул.'' Як кед биш му на хвост станул = барз є чувствительни, такой реаґує: ''Нєшка ци кажде таке як кед биш му на хвост станул.'' Як кед ше мачки на хвост станє = барз чувствительне. Ґалерия File:Sanc0116 - Flickr - NOAA Photo Library.jpg Китов хвост File:Lemur (26617451451).jpg Лемуров хвост File:Dog tail erect.jpg Пши хвост Литература Словнїк руского народного язика II, О – Я, Нови Сад 2017, б. 666. Вонкашнї вязи [[Катеґория:Анатомия животиньох]] ifcunztat6bbshq9osp2dc1h8c7pfi2 Бардо 0 3541 21370 2026-09-14T01:46:31Z Ruskinja2022 22 Г. Медєши 21370 wikitext text/x-wiki File:QSMM Pemberton loom 2582.JPG Кросна типу Пембертон за тканє финшого платна '''Бардо''' (серб. ''брдо''; поль. ''bardo''; слц. ''brdo''; всл. ''bardo''; укр. ''бердо''; праславянске ''bьrdo'') часц ткацких кроснох, здабе на гребень у раму: до двох палїчкох хтори служа як рам на густо управени такв. тирсци – на узко нарезани фалатки з наду длужини коло 10 центи. Файти барда у зависносци од густосци тирсцох: бардо од 7, 8, 10, 12 (дванацнїца), 14 (штернацнїца), 16 (шеснацнїца) пасма (пасмо ту мера за ширину): на барду од 7 пасма ткало ше на мехи, на барду од 8 пасма – на керпари, на барду од 10 пасма – платно на хлєбовки и под., на бардох од 12 и 14 пасма – на поньви; штернацнїца и шеснацнїца ше хасновали за тканє плахиткох на посцелї. File:Pravenje gagorkoh.jpg Густейши тип барда на хторим ше можу правиц ґаґорки На бардзе ше правя и ґаґорки. Фразеолоґия Прешол през бардо и през шитко = вельо прежил, зазнал; Як кед би були (яґда су) на истим (у єдним) бардзе ткани = цалком су исти по справованю, характеру Литература Словнїк руского народного язика I, А – Н, Нови Сад 2017, б. 49. Ručno tkanje (prevod i obrada Margareta Legaš) - Mladost Zagreb 1977. Weaving & spinning / [edited by Yvonne Deutch]. London [etc.] Marshall Cavendish. 1977. ISBN 978-0-525-70070-8. Уметност и техника ручног ткања Миланка Николић, Стручна књига Београд 1999 ИД – 743621244160 pwgq9osk31uo5j6iu720j9pbmru8eyf Охридски бисер 0 3542 21373 2026-09-14T05:46:56Z Sveletanka 20 нова статя 21373 wikitext text/x-wiki Охридски бисер (або охридска перла) єден з препознатлївих символох Македониї - жеми културних и историйних памятнїкох, природних красотох и богатствох, традициї и квалитету. Гоч Охрид ма велї културни и историйни знаменїтосци, памятнїки и, вшелїяк, Охридске озеро, треба видзиц охридски бисер и одкриц приповедку хтора за нїм стої. Леґенда о бисеру Далєкого 1928. року, у Охриду, Михайло Филев – син Николе Филева, погосцителя и власнїка карчми „Велька Сербия” – упознал у тим обєкту таїнственого госца по мену Йован Субанович. Йован пришол на Балкан як емиґрант з далєкей Русиї, а до Охриду, у Македониї, пришол зошицким случайно. Док там бул, медзи нїм и Михайлом ше розвило глїбоке приятельство. Раз так, док ше шейтали по побрежю Охридского озера и бешедовали о рижних темох, збачели рибарох – хтори, иншак, були блїзка родзина Михайлови Филевови – як ноша кошари полни з плашицу, єдну файту риби хтора автохтона за Охридске озеро. Потим як присуствовал тей подїї з рибу, Йован похопел же би ше тайна хтору принєсол з Русиї – точнєйше з Байкалског озера – могла одкриц праве ту. Тота тайна ше скривала у риби цо ше вола плашица (позната и як кедер, мала сладководна риба з фамилиї потькох (Cyprinidae), латинскей назви Alburnus alburn), ендемскей файти чийо ше лупки могло хасновац за виробок бисерох. Так, на знак глїбокого приятельства, Йован упознал пана Михайла Филева з таїнствену схопносцу виробку бисерох. По теди нїхто у Охриду нє знал за таке ремесло. После того, фамелия Филев почала правиц бисери и преношиц фамелийну тайну з ґенерациї на ґенерацию – з оца на сина. Як вершински сувенир варошу Охриду и препознатлїви бренд Републики Македониї, тоти бисери украшую шиї и збогацую колекциї прикраскох велїх людзох у Македониї и ширцом швета. Продукция Лєм фамелиї Филев и Талев знаю подполну тайну виробку того бисера. Тоти два фамелиї пестую традицию и продукую тото цо познате як „Ориґинални охридски бисер”. Процес у сущносци ручни. Ядро бисера ше достава з водового коритка – точнєйше, з материялу нукашнєй часци шкарупини – хтори ше оформює до рижних формох (як кульки, пацерки и у форми слизи) и велькосци (од F5 до F15). Потим ше зоз лупки риби плашици прави емулзию хтору ше наноши на ядро. Наношенє емулзиї представя найхарактеристичнєйшу часц процесу виробку бисерох. Емулзию ше наноши зоз щеточку з природного материялу – найчастейше зоз шерсци на вивирковим хвосце. Наноши ше вецей раз, у зависносци од велькосци ядра бисера (наприклад, на ядро типу „F5” наноши ше пейц пасма). Ядро ше зохабя док ше нє осуши, а поступок ше повторює. Тота ручна продукция бисерох то поступни процес хтори ше одвива у вецей фазох. Тоти нови креациї представяю спокусу за младши ґенерацијї у фамелийох же би предлужели длугорочну фамелийну традицию. Познати особи повязани з охридскима бисерами Йованка Броз (перша дама Югославиї) Даяна (принцеза од Велсу) Марґарета II (кралїца Данскей) Юлияна (кралїца Голандиї) Мария (кралїца Югославиї) Дьована (кралїца Болгарскей) Вилма Трайковска (перша дама Македониї) Елизабета II (кралїца Зєдинєного Кральовства) Каролина Ґочева (македонска шпивачка) Жилиєт Бинош (французка ґлумица) Продукт ма велї сертификати и призпознаня шветового ранґу. 0fktlk5rg84zw2ebpq420b5zr4rq8hj Катеґория:Шаблони 14 3543 21377 2026-09-14T06:16:55Z Sveletanka 20 катеґория 21377 wikitext text/x-wiki [[Катеґория:Головна]] 7bw1k594kwke6em67vfy06mrzq0cjoj Катеґория:Продукти зоз слами 14 3544 21380 2026-09-14T06:32:42Z Sveletanka 20 катеґория 21380 wikitext text/x-wiki [[Катеґория:Привреда]] gjq0lwzm2hmjt5wfkkwboalrvjt98z9 Шаблон:Infobox mountain 10 3545 21384 2026-08-16T22:52:22Z Zackmann08 2741 removing support for deprecated parameters that have been cleaned. 21384 wikitext text/x-wiki <includeonly>{{Infobox | bodyclass = vcard | child = {{{child|}}} | subbox = {{{subbox|}}} | above = {{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} | aboveclass = fn org | autoheaders = y | abovestyle = background-color: #E7DCC3;color:#000; | headerstyle = background-color: #E7DCC3;color:#000; | imagestyle = padding: 0.3em 0.2em 0.2em 0.2em; | captionstyle = padding: 0.2em 0em; | bodystyle = width:24.5em; line-height:1.5em; | subheaderclass= nickname | subheader = {{{other_name|}}} | image = {{#invoke:InfoboxImage|InfoboxImage|image=<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->||size={{{image_size|}}}|upright={{{image_upright|}}}|sizedefault=272px|maxsize=288px|alt={{{image_alt|}}}}} | caption = {{#if:{{{image|}}}|{{{image_caption|}}}|{{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2=|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}|<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2=|name=caption|qid={{{qid|}}}|qual=P2096|qualsonly=true|rank=best|maxvals=1|ps=2}}<!-- -->}}}} | {{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->|data36|data1}} = {{#if:{{{pushpin_map|}}} | <div style="padding:0.2em 0.2em 0.5em 0.2em;">{{#invoke:Location map|infobox_pushpin_map | default_width = 272 | max_width = 288 | pushpin_mark = Red triangle with thick white border.svg | pushpin_mark_size = 16 | pushpin_relief = 1 | pushpin_label = {{{name|}}} | coordinates = {{if empty|{{{range_coordinates|}}}|{{{coordinates|}}}}} }} </div> }} | {{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->|data37|data2}} = {{#if:{{{image_map|}}} |<div style="padding:0.2em 0.2em {{#if:{{{image_map_caption|}}}{{{map_caption|}}}{{{location|}}}|0.5em|0.2em}} 0.2em;">{{#invoke:InfoboxImage |InfoboxImage |image={{{image_map|}}} |size={{if empty|{{{map_width|}}}|{{{map_size|}}}}} |upright={{{map_upright|}}} |sizedefault=272px |maxsize=288px |alt={{{map_alt|}}}}}{{#switch:{{if empty|{{{image_map_caption|}}}|{{{map_caption|}}}}}|none|=|#default=<div>{{if empty|{{{image_map_caption|}}}|{{{map_caption|}}}}}</div> }}</div> }} | {{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->|data38|data3}} = <!-- -->{{#invoke:Infobox mapframe | auto | onByDefault = {{#if:{{{image_map|}}}{{{pushpin_map|}}}|no|yes}} | mapframe-coord = {{if empty|{{{mapframe-coordinates|}}}|{{{range_coordinates|}}}||{{{coordinates|}}}}} | mapframe-frame-width = 250 | mapframe-wikidata = {{#if:{{{mapframe-coordinates|}}}{{{mapframe-coord|}}}{{{range_coordinates|}}}{{{coordinates|}}}|no|yes}} | mapframe-marker = mountain | mapframe-type = mountain | mapframe-length_km = {{{length_km|}}} | mapframe-length_mi = {{{length_mi|}}} | mapframe-width_km = {{{width_km|}}} | mapframe-width_mi = {{{width_mi|}}} | mapframe-area_mi2 = {{{area_mi2|}}} | mapframe-area_km2 = {{{area_km2|}}} | mapframe-id = {{{qid|}}} | mapframe-shape = yes }} | {{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->|data39|data4}} = {{#invoke:Infobox mapframe |autocaption |onByDefault={{#if:{{{image_map|}}}{{{pushpin_map|}}}|no|yes}} }} | header5 = Highest&nbsp;point | label6 = Peak | data6 = {{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2044|2={{{highest|}}}|name=highest|qid={{{qid|}}}|qual=P2561|qualsonly=Y|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|noicon=false}}<!-- -->|{{If last display both|,&#32;|<!-- -->{{#invoke:WikidataIB|getValue|1=P2044|2={{{highest_location|}}}|name=highest_location|qid={{{qid|}}}|qual=P276|qualsonly=Y|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|qshortname=true|noicon=false}}<!-- -->}}}} | label7 = [[Summit|Elevation]] | data7 = {{If empty|{{{elevation|}}}|{{#if:{{{elevation_m|}}}{{{elevation_ft|}}}|{{Convinfobox|{{{elevation_m|}}}|m|{{{elevation_ft|}}}|ft}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2044|2=|name=elevation|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|maxvals=1|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2044}}}}}}}}{{{elevation_ref|}}}{{If last display both|<br/>|<!-- -->{{#invoke:WikidataIB|getValue|1=P2044|2={{{elevation_system|}}}|name=elevation_system|qid={{{qid|}}}|qual=P459|qualsonly=Y|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|qshortname=true|maxvals=1|noicon=true}}<!-- -->}} | label8 = [[Topographic prominence|Prominence]] | data8 = {{If empty|{{{prominence|}}}|{{#if:{{{prominence_m|}}}{{{prominence_ft|}}}|{{Convinfobox|{{{prominence_m|}}}|m|{{{prominence_ft|}}}|ft}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2660|2=|name=prominence|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|maxvals=1|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2660}}}}}}}}{{#if:{{{prominence_ref|}}}|{{{prominence_ref|}}}}} | label9 = [[Topographic prominence#Prominence parentage|Parent peak]] | data9 = {{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P3137|2={{{parent_peak|}}}|name=parent_peak|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|shortname=true|maxvals=1|noicon=false|replacetext={{#ifeq:{{{fetchwikidata|}}}|ALL||[[Category:Wikidata value to be checked for Infobox mountain]]}}<!-- -->}}|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P3137}}}}}} | label10 = [[Topographic isolation|Isolation]] | data10 = {{If empty|{{{isolation|}}}|{{#if:{{{isolation_km|}}}{{{isolation_mi|}}}|{{Convinfobox|{{{isolation_km|}}}|km|{{{isolation_mi|}}}|mi}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2659|2=|name=isolation|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|maxvals=1|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2659}}}}}}}}{{If last display both|<br/>to&nbsp;|<!-- -->{{#invoke:WikidataIB|getValue|1=P2659|2={{{isolation_parent|}}}|name=isolation_parent|qid={{{qid|}}}|qual=P2210|qualsonly=Y|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|qshortname=true|maxvals=1|noicon=true}}<!-- -->}}{{#if:{{{isolation_ref|}}}|{{{isolation_ref|}}}}} | class11 = category | label11 = [[Lists of mountains|Listing]] | data11 = {{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P361|2={{{listing|}}}|name=listing|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|qshortname=true|sorted=true|noicon=false|list=ubl|replacetext={{#ifeq:{{{fetchwikidata|}}}|ALL||[[Category:Wikidata value to be checked for Infobox mountain]]}}<!-- -->}}|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P3137}}}}}} | label12 = Coordinates | data12 = {{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|type:mountain|{{#if:{{{range_coordinates|}}}||scale:{{Map scale|type=mountain|<!-- -->length_km={{{length_km|}}}|length_mi={{{length_mi|}}}|width_km={{{width_km|}}}|width_mi={{{width_mi|}}}|<!-- -->area_mi2={{{area_mi2|}}}|area_km2={{{area_km2|}}}}}}}}}<!-- -->{{{coordinates_ref|}}} }} | header20 = Dimensions | label21 = Length | data21 = {{If first display both|{{If empty|{{{length|}}}|{{#if:{{{length_km|}}}{{{length_mi|}}}|{{Convinfobox|{{{length_km|}}}|km|{{{length_mi|}}}|mi}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2043|2=|name=length|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2043}}}}}}}}|{{If last display both|&#32;|{{If empty|{{{length_orientation|}}}|{{#ifeq:{{#invoke:String|match|s=<!-- -->{{#invoke:WikidataIB|getQualifierIDs|1=P2043|2=|qid={{{qid|}}}|fwd=ALL|osd=n|qlist=P7469}}|pattern=Q36477|nomatch=}}<!-- -->|Q36477|(NS)|}}|{{#ifeq:{{#invoke:String|match|s=<!-- -->{{#invoke:WikidataIB|getQualifierIDs|1=P2043|2=|qid={{{qid|}}}|fwd=ALL|osd=n|qlist=P7469}}|pattern=Q34027|nomatch=}}<!-- -->|Q34027|(EW)|}}}}}}{{{length_ref|}}}}} | label22 = Width | data22 = {{If first display both|{{If empty|{{{width|}}}|{{#if:{{{width_km|}}}{{{width_mi|}}}|{{Convinfobox|{{{width_km|}}}|km|{{{width_mi|}}}|mi}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2049|2=|name=width|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2049}}}}}}}}|{{If last display both|&#32;|{{If empty|{{{width_orientation|}}}|{{#ifeq:{{#invoke:String|match|s=<!-- -->{{#invoke:WikidataIB|getQualifierIDs|1=P2049|2=|qid={{{qid|}}}|fwd=ALL|osd=n|qlist=P7469}}|pattern=Q36477|nomatch=}}<!-- -->|Q36477|(NS)|}}|{{#ifeq:{{#invoke:String|match|s=<!-- -->{{#invoke:WikidataIB|getQualifierIDs|1=P2049|2=|qid={{{qid|}}}|fwd=ALL|osd=n|qlist=P7469}}|pattern=Q34027|nomatch=}}<!-- -->|Q34027|(EW)|}}}}}}{{{width_ref|}}}}} | label23 = Area | data23 = {{If first display both|{{If empty|{{{area|}}}|{{#if:{{{area_km2|}}}{{{area_mi2|}}}|{{Convinfobox|{{{area_km2|}}}|km2|{{{area_mi2|}}}|mi2}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2046|2=|name=area|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2046}}}}}}}}|{{{area_ref|}}}}} | label24 = Volume | data24 = {{If first display both|{{If empty|{{{volume|}}}|{{#if:{{{volume_km3|}}}{{{volume_mi3|}}}|{{Convinfobox|{{{volume_km3|}}}|km3|{{{volume_mi3|}}}|mi3}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2234|2=|name=volume|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2234}}}}}}}}|{{{volume_ref|}}}}} | header25 = Naming | label26 = [[Etymology]] | data26 = {{{etymology|}}} | class27 = nickname | label27 = [[Nickname|Nickname{{pluralize from text|{{{nickname|}}}|likely=(s)|plural=s}}]] | data27 = {{{nickname|}}} | class28 = nickname | label28 = Native name | data28 = {{native name checker|{{{native_name|}}}}} | label29 = {{longitem|English translation}} | data29 = {{{translation|}}} | label30 = {{longitem|Language of name}} | data30 = {{#if:{{{native_name|}}}||<!-- -->{{#if:{{{language|}}}|{{{language}}}|<!-- -->{{#if:{{{native_name_lang|}}}|{{ISO 639 name|{{{native_name_lang|}}}|link=yes}}}}}}}} | label31 = Pronunciation | data31 = {{{pronunciation|}}} | label32 = {{longitem|Defining authority}} | data32 = {{{authority|}}} | header35 = Geography <!-- data36 <=> data1 reserved for map when image is present --> <!-- data37 <=> data2 reserved for map image when image is present --> <!-- data38+data39 <=> data3+data4 mapframe slots --> | class40 = label | label40 = Location | data40 = {{{location|}}} | class41 = label | label41 = {{longitem|{{If empty|{{{country_type|}}}|{{pluralize from text|{{{country|}}}|singular=Country|plural=Countries}}}}}} | data41 = {{{country|}}} | class42 = label | label42 = {{longitem|{{If empty|{{{subdivision1_type|}}}|{{{state_type|}}}|State{{pluralize from text|{{if empty|{{{subdivision1|}}}|{{{state|}}}}}|likely=(s)|plural=s}}}}}} | data42 = {{if empty|{{{subdivision1|}}}|{{{state|}}}}} | class43 = label | label43 = {{longitem|{{If empty|{{{subdivision2_type|}}}|{{{region_type|}}}|Region{{pluralize from text|{{if empty|{{{subdivision2|}}}|{{{region|}}}}}|likely=(s)|plural=s}}}}}} | data43 = {{if empty|{{{subdivision2|}}}|{{{region|}}}}} | class44 = label | label44 = {{longitem|{{If empty|{{{subdivision3_type|}}}|{{{district_type|}}}|District{{pluralize from text|{{if empty|{{{subdivision3|}}}|{{{district|}}}}}|likely=(s)|plural=s}}}}}} | data44 = {{if empty|{{{subdivision3|}}}|{{{district|}}}}} | label45 = {{longitem|{{If empty|{{{subdivision4_type|}}}|{{{part_type|}}}|Subdivision{{pluralize from text|{{if empty|{{{subdivision4|}}}|{{{part|}}}}}|likely=(s)|plural=s}}}}}} | data45 = {{if empty|{{{subdivision4|}}}|{{{part|}}}}} | label46 = {{longitem|{{If empty|{{{settlement_type|}}}|Settlement{{pluralize from text|{{{settlement|}}}|likely=(s)|plural=s}}}}}} | data46 = {{{settlement|}}} | label47 = {{longitem|Range coordinates}} | data47 = {{#if:{{{range_coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{range_coordinates|}}}||type:mountain|scale:{{Map scale|type=mountain|<!-- -->length_km={{{length_km|}}}|length_mi={{{length_mi|}}}|width_km={{{width_km|}}}|width_mi={{{width_mi|}}}|<!-- -->area_mi2={{{area_mi2|}}}|area_km2={{{area_km2|}}}}}}}<!-- -->{{{range_coordinates_ref|}}}}} | class48 = category | label48 = [[Mountain range|{{nowrap|Parent range}}]] | data48 = {{if empty|{{{parent|}}}|{{{range|}}}}} | label49 = Borders on | data49 = {{{borders_on|}}} | label50 = [[Ordnance Survey National Grid|OS grid]] | data50 = {{#if:{{{grid_ref_UK|}}}|{{Gbmappingsmall|{{{grid_ref_UK|}}}|name={{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} }}{{{grid_ref_UK_ref|}}}}} | label51 = [[Irish grid reference system|OSI/OSNI grid]] | data51 = {{#if:{{{grid_ref_Ireland|}}}|{{iem4ibx|{{{grid_ref_Ireland|}}}|name={{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} }}{{{grid_ref_Ireland_ref|}}}}} | label52 = [[Topographic map|Topo map{{pluralize from text|{{if empty|{{{topo|}}}|{{{topo_map|}}} }}|likely=(s)|plural=s}}]] | data52 = {{#if:{{{topo_maker|}}}|{{{topo_maker}}}&nbsp;}}{{if empty|{{{topo|}}}|{{{topo_map|}}} }} | label53 = [[Biome]] | data53 = {{{biome|}}} | header62 = Geology | label63 = [[Mountain formation|Formed by]] | data63 = {{{formed_by|}}} | label64 = [[Orogeny|{{pluralize from text|{{{orogeny|}}}|singular=Orogeny|plural=Orogenies}}]] | data64 = {{{orogeny|}}} | label65 = [[Geologic time scale|Rock age{{pluralize from text|{{{age|}}}|likely=(s)|plural=s}}]] | data65 = {{{age|}}} | label66 = {{longitem|[[List of mountain types|Mountain type{{pluralize from text|{{if empty|{{{mountain_type|}}}|{{{type|}}}}}|<!-- -->likely=(s)|plural=s}}]]}} | data66 = {{if empty|{{{mountain_type|}}}|{{{type|}}}}} | label67 = [[List of rock types|Rock type{{pluralize from text|{{if empty|{{{geology|}}}|{{{rock|}}}}}|likely=(s)|plural=s}}]] | data67 = {{if empty|{{{geology|}}}|{{{rock|}}}}} | label68 = Volcanic&nbsp;zone | data68 = {{{volcanic_zone|}}} | label69 = {{nowrap|[[Volcanic arc]]}} | data69 = {{{volcanic_arc|}}} | label70 = {{nowrap|[[Volcanic belt]]}} | data70 = {{{volcanic_belt|}}} | label71 = {{nowrap|[[Volcanic field]]}} | data71 = {{{volcanic_field|}}} | label73 = {{nowrap|[[volcanic eruption|Last eruption]]}} | data73 = {{{last_eruption|}}} | header80 = Climbing | label81 = [[First ascent]] | data81 = {{{first_ascent|}}} | label82 = [[Normal route|{{nowrap|Easiest route}}]] | data82 = {{{easiest_route|}}} | label83 = [[Normal route]] | data83 = {{{normal_route|}}} | label84 = Access | data84 = {{{access|}}} | header85 = _BLANK_ | data86 = {{{embedded|}}} | data87 = {{{module|}}} }}{{main other|{{#if:{{{region|}}}|{{#ifeq:{{#invoke:string|replace|{{{region}}}|^[A-Z0-9/\-]*$|MATCH|plain=false}}|MATCH|[[Category:Pages using infobox mountain with unknown parameters|ρ]] }}}} }}{{#ifeq:{{if empty|{{{child|}}}|{{{embed|}}}}}|yes||{{Wikidata image |1={{{image|}}}{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}} |2={{{nocat_wdimage|}}}}} }}{{main other| {{#if:{{{language|}}}|[[Category:Pages using infobox mountain with language parameter|{{#invoke:string|replace|{{{language}}}|[^A-Za-z0-9]||plain=false}} ]]}} }}</includeonly>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox mountain with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox mountain]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| pushpin_map_args = y | access | age | area | area_km2 | area_mi2 | area_ref | authority | biome | borders_on | child | coordinates | coordinates_ref | country | country_type | district | district_type | easiest_route | elevation | elevation_ft | elevation_m | elevation_ref | elevation_system | embed | embedded | etymology | fetchwikidata | first_ascent | formed_by | geology | grid_ref_Ireland | grid_ref_Ireland_ref | grid_ref_UK | grid_ref_UK_ref | highest | highest_location | image | image_alt | image_caption | image_map | image_map_caption | image_size | image_upright | isolation | isolation_km | isolation_mi | isolation_parent | isolation_ref | language | last_eruption | length | length_km | length_mi | length_orientation | length_ref | listing | location | map_alt | map_caption | map_size | map_upright | map_width | module | mountain_type | name | native_name | native_name_lang | nickname | nocat_wdimage | normal_route | onlysourced | orogeny | other_name | parent | parent_peak | part | part_type | prominence | prominence_ft | prominence_m | prominence_ref | pronunciation | qid | range | range_coordinates | range_coordinates_ref | refs | region | region_type | rock | settlement | settlement_type | state | state_type | subbox | subdivision1 | subdivision1_type | subdivision2 | subdivision2_type | subdivision3 | subdivision3_type | subdivision4 | subdivision4_type | suppressfields | topo | topo_maker | topo_map | translation | type | volcanic_arc | volcanic_belt | volcanic_field | volcanic_zone | volume | volume_km3 | volume_mi3 | volume_ref | width | width_km | width_mi | width_orientation | width_ref }}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox mountain]] | cat = {{main other|Category:Pages using infobox mountain with conflicting parameters}} | map_width; map_size | subdivision1; state | subdivision2; region | subdivision3; district | subdivision4; part | parent; range | topo; topo_map | mountain_type; type | geology; rock | child; embed }}<noinclude> {{documentation}} </noinclude> nkd0rlmwjp4ivuzcr60fzzpqgeh8egc 21385 21384 2026-09-14T15:30:44Z Keresturec 18 1 измена увезена из [[:en:Template:Infobox_mountain]]: Importing from the English wikipedia 21384 wikitext text/x-wiki <includeonly>{{Infobox | bodyclass = vcard | child = {{{child|}}} | subbox = {{{subbox|}}} | above = {{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} | aboveclass = fn org | autoheaders = y | abovestyle = background-color: #E7DCC3;color:#000; | headerstyle = background-color: #E7DCC3;color:#000; | imagestyle = padding: 0.3em 0.2em 0.2em 0.2em; | captionstyle = padding: 0.2em 0em; | bodystyle = width:24.5em; line-height:1.5em; | subheaderclass= nickname | subheader = {{{other_name|}}} | image = {{#invoke:InfoboxImage|InfoboxImage|image=<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->||size={{{image_size|}}}|upright={{{image_upright|}}}|sizedefault=272px|maxsize=288px|alt={{{image_alt|}}}}} | caption = {{#if:{{{image|}}}|{{{image_caption|}}}|{{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2=|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}|<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2=|name=caption|qid={{{qid|}}}|qual=P2096|qualsonly=true|rank=best|maxvals=1|ps=2}}<!-- -->}}}} | {{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->|data36|data1}} = {{#if:{{{pushpin_map|}}} | <div style="padding:0.2em 0.2em 0.5em 0.2em;">{{#invoke:Location map|infobox_pushpin_map | default_width = 272 | max_width = 288 | pushpin_mark = Red triangle with thick white border.svg | pushpin_mark_size = 16 | pushpin_relief = 1 | pushpin_label = {{{name|}}} | coordinates = {{if empty|{{{range_coordinates|}}}|{{{coordinates|}}}}} }} </div> }} | {{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->|data37|data2}} = {{#if:{{{image_map|}}} |<div style="padding:0.2em 0.2em {{#if:{{{image_map_caption|}}}{{{map_caption|}}}{{{location|}}}|0.5em|0.2em}} 0.2em;">{{#invoke:InfoboxImage |InfoboxImage |image={{{image_map|}}} |size={{if empty|{{{map_width|}}}|{{{map_size|}}}}} |upright={{{map_upright|}}} |sizedefault=272px |maxsize=288px |alt={{{map_alt|}}}}}{{#switch:{{if empty|{{{image_map_caption|}}}|{{{map_caption|}}}}}|none|=|#default=<div>{{if empty|{{{image_map_caption|}}}|{{{map_caption|}}}}}</div> }}</div> }} | {{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->|data38|data3}} = <!-- -->{{#invoke:Infobox mapframe | auto | onByDefault = {{#if:{{{image_map|}}}{{{pushpin_map|}}}|no|yes}} | mapframe-coord = {{if empty|{{{mapframe-coordinates|}}}|{{{range_coordinates|}}}||{{{coordinates|}}}}} | mapframe-frame-width = 250 | mapframe-wikidata = {{#if:{{{mapframe-coordinates|}}}{{{mapframe-coord|}}}{{{range_coordinates|}}}{{{coordinates|}}}|no|yes}} | mapframe-marker = mountain | mapframe-type = mountain | mapframe-length_km = {{{length_km|}}} | mapframe-length_mi = {{{length_mi|}}} | mapframe-width_km = {{{width_km|}}} | mapframe-width_mi = {{{width_mi|}}} | mapframe-area_mi2 = {{{area_mi2|}}} | mapframe-area_km2 = {{{area_km2|}}} | mapframe-id = {{{qid|}}} | mapframe-shape = yes }} | {{#if:<!-- -->{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}}<!-- -->|data39|data4}} = {{#invoke:Infobox mapframe |autocaption |onByDefault={{#if:{{{image_map|}}}{{{pushpin_map|}}}|no|yes}} }} | header5 = Highest&nbsp;point | label6 = Peak | data6 = {{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2044|2={{{highest|}}}|name=highest|qid={{{qid|}}}|qual=P2561|qualsonly=Y|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|noicon=false}}<!-- -->|{{If last display both|,&#32;|<!-- -->{{#invoke:WikidataIB|getValue|1=P2044|2={{{highest_location|}}}|name=highest_location|qid={{{qid|}}}|qual=P276|qualsonly=Y|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|qshortname=true|noicon=false}}<!-- -->}}}} | label7 = [[Summit|Elevation]] | data7 = {{If empty|{{{elevation|}}}|{{#if:{{{elevation_m|}}}{{{elevation_ft|}}}|{{Convinfobox|{{{elevation_m|}}}|m|{{{elevation_ft|}}}|ft}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2044|2=|name=elevation|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|maxvals=1|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2044}}}}}}}}{{{elevation_ref|}}}{{If last display both|<br/>|<!-- -->{{#invoke:WikidataIB|getValue|1=P2044|2={{{elevation_system|}}}|name=elevation_system|qid={{{qid|}}}|qual=P459|qualsonly=Y|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|qshortname=true|maxvals=1|noicon=true}}<!-- -->}} | label8 = [[Topographic prominence|Prominence]] | data8 = {{If empty|{{{prominence|}}}|{{#if:{{{prominence_m|}}}{{{prominence_ft|}}}|{{Convinfobox|{{{prominence_m|}}}|m|{{{prominence_ft|}}}|ft}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2660|2=|name=prominence|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|maxvals=1|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2660}}}}}}}}{{#if:{{{prominence_ref|}}}|{{{prominence_ref|}}}}} | label9 = [[Topographic prominence#Prominence parentage|Parent peak]] | data9 = {{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P3137|2={{{parent_peak|}}}|name=parent_peak|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|shortname=true|maxvals=1|noicon=false|replacetext={{#ifeq:{{{fetchwikidata|}}}|ALL||[[Category:Wikidata value to be checked for Infobox mountain]]}}<!-- -->}}|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P3137}}}}}} | label10 = [[Topographic isolation|Isolation]] | data10 = {{If empty|{{{isolation|}}}|{{#if:{{{isolation_km|}}}{{{isolation_mi|}}}|{{Convinfobox|{{{isolation_km|}}}|km|{{{isolation_mi|}}}|mi}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2659|2=|name=isolation|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|maxvals=1|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2659}}}}}}}}{{If last display both|<br/>to&nbsp;|<!-- -->{{#invoke:WikidataIB|getValue|1=P2659|2={{{isolation_parent|}}}|name=isolation_parent|qid={{{qid|}}}|qual=P2210|qualsonly=Y|fetchwikidata={{if empty|{{{fetchwikidata|}}}|ALL}}|suppressfields={{{suppressfields|}}}|onlysourced=true|qshortname=true|maxvals=1|noicon=true}}<!-- -->}}{{#if:{{{isolation_ref|}}}|{{{isolation_ref|}}}}} | class11 = category | label11 = [[Lists of mountains|Listing]] | data11 = {{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P361|2={{{listing|}}}|name=listing|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|qshortname=true|sorted=true|noicon=false|list=ubl|replacetext={{#ifeq:{{{fetchwikidata|}}}|ALL||[[Category:Wikidata value to be checked for Infobox mountain]]}}<!-- -->}}|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P3137}}}}}} | label12 = Coordinates | data12 = {{#if:{{{coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{coordinates|}}}|type:mountain|{{#if:{{{range_coordinates|}}}||scale:{{Map scale|type=mountain|<!-- -->length_km={{{length_km|}}}|length_mi={{{length_mi|}}}|width_km={{{width_km|}}}|width_mi={{{width_mi|}}}|<!-- -->area_mi2={{{area_mi2|}}}|area_km2={{{area_km2|}}}}}}}}}<!-- -->{{{coordinates_ref|}}} }} | header20 = Dimensions | label21 = Length | data21 = {{If first display both|{{If empty|{{{length|}}}|{{#if:{{{length_km|}}}{{{length_mi|}}}|{{Convinfobox|{{{length_km|}}}|km|{{{length_mi|}}}|mi}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2043|2=|name=length|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2043}}}}}}}}|{{If last display both|&#32;|{{If empty|{{{length_orientation|}}}|{{#ifeq:{{#invoke:String|match|s=<!-- -->{{#invoke:WikidataIB|getQualifierIDs|1=P2043|2=|qid={{{qid|}}}|fwd=ALL|osd=n|qlist=P7469}}|pattern=Q36477|nomatch=}}<!-- -->|Q36477|(NS)|}}|{{#ifeq:{{#invoke:String|match|s=<!-- -->{{#invoke:WikidataIB|getQualifierIDs|1=P2043|2=|qid={{{qid|}}}|fwd=ALL|osd=n|qlist=P7469}}|pattern=Q34027|nomatch=}}<!-- -->|Q34027|(EW)|}}}}}}{{{length_ref|}}}}} | label22 = Width | data22 = {{If first display both|{{If empty|{{{width|}}}|{{#if:{{{width_km|}}}{{{width_mi|}}}|{{Convinfobox|{{{width_km|}}}|km|{{{width_mi|}}}|mi}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2049|2=|name=width|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2049}}}}}}}}|{{If last display both|&#32;|{{If empty|{{{width_orientation|}}}|{{#ifeq:{{#invoke:String|match|s=<!-- -->{{#invoke:WikidataIB|getQualifierIDs|1=P2049|2=|qid={{{qid|}}}|fwd=ALL|osd=n|qlist=P7469}}|pattern=Q36477|nomatch=}}<!-- -->|Q36477|(NS)|}}|{{#ifeq:{{#invoke:String|match|s=<!-- -->{{#invoke:WikidataIB|getQualifierIDs|1=P2049|2=|qid={{{qid|}}}|fwd=ALL|osd=n|qlist=P7469}}|pattern=Q34027|nomatch=}}<!-- -->|Q34027|(EW)|}}}}}}{{{width_ref|}}}}} | label23 = Area | data23 = {{If first display both|{{If empty|{{{area|}}}|{{#if:{{{area_km2|}}}{{{area_mi2|}}}|{{Convinfobox|{{{area_km2|}}}|km2|{{{area_mi2|}}}|mi2}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2046|2=|name=area|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2046}}}}}}}}|{{{area_ref|}}}}} | label24 = Volume | data24 = {{If first display both|{{If empty|{{{volume|}}}|{{#if:{{{volume_km3|}}}{{{volume_mi3|}}}|{{Convinfobox|{{{volume_km3|}}}|km3|{{{volume_mi3|}}}|mi3}}|}}|{{If first display both|<!-- -->{{#invoke:WikidataIB|getValue|1=P2234|2=|name=volume|qid={{{qid|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|suppressfields={{{suppressfields|}}}|onlysourced=true|unitabbr=true|convert=true|noicon=true}}<!-- -->|{{#ifeq:{{if empty|{{{refs|}}}|no}}|yes|{{Wikidata|references|normal+|{{{qid|}}}|P2234}}}}}}}}|{{{volume_ref|}}}}} | header25 = Naming | label26 = [[Etymology]] | data26 = {{{etymology|}}} | class27 = nickname | label27 = [[Nickname|Nickname{{pluralize from text|{{{nickname|}}}|likely=(s)|plural=s}}]] | data27 = {{{nickname|}}} | class28 = nickname | label28 = Native name | data28 = {{native name checker|{{{native_name|}}}}} | label29 = {{longitem|English translation}} | data29 = {{{translation|}}} | label30 = {{longitem|Language of name}} | data30 = {{#if:{{{native_name|}}}||<!-- -->{{#if:{{{language|}}}|{{{language}}}|<!-- -->{{#if:{{{native_name_lang|}}}|{{ISO 639 name|{{{native_name_lang|}}}|link=yes}}}}}}}} | label31 = Pronunciation | data31 = {{{pronunciation|}}} | label32 = {{longitem|Defining authority}} | data32 = {{{authority|}}} | header35 = Geography <!-- data36 <=> data1 reserved for map when image is present --> <!-- data37 <=> data2 reserved for map image when image is present --> <!-- data38+data39 <=> data3+data4 mapframe slots --> | class40 = label | label40 = Location | data40 = {{{location|}}} | class41 = label | label41 = {{longitem|{{If empty|{{{country_type|}}}|{{pluralize from text|{{{country|}}}|singular=Country|plural=Countries}}}}}} | data41 = {{{country|}}} | class42 = label | label42 = {{longitem|{{If empty|{{{subdivision1_type|}}}|{{{state_type|}}}|State{{pluralize from text|{{if empty|{{{subdivision1|}}}|{{{state|}}}}}|likely=(s)|plural=s}}}}}} | data42 = {{if empty|{{{subdivision1|}}}|{{{state|}}}}} | class43 = label | label43 = {{longitem|{{If empty|{{{subdivision2_type|}}}|{{{region_type|}}}|Region{{pluralize from text|{{if empty|{{{subdivision2|}}}|{{{region|}}}}}|likely=(s)|plural=s}}}}}} | data43 = {{if empty|{{{subdivision2|}}}|{{{region|}}}}} | class44 = label | label44 = {{longitem|{{If empty|{{{subdivision3_type|}}}|{{{district_type|}}}|District{{pluralize from text|{{if empty|{{{subdivision3|}}}|{{{district|}}}}}|likely=(s)|plural=s}}}}}} | data44 = {{if empty|{{{subdivision3|}}}|{{{district|}}}}} | label45 = {{longitem|{{If empty|{{{subdivision4_type|}}}|{{{part_type|}}}|Subdivision{{pluralize from text|{{if empty|{{{subdivision4|}}}|{{{part|}}}}}|likely=(s)|plural=s}}}}}} | data45 = {{if empty|{{{subdivision4|}}}|{{{part|}}}}} | label46 = {{longitem|{{If empty|{{{settlement_type|}}}|Settlement{{pluralize from text|{{{settlement|}}}|likely=(s)|plural=s}}}}}} | data46 = {{{settlement|}}} | label47 = {{longitem|Range coordinates}} | data47 = {{#if:{{{range_coordinates|}}}|{{#invoke:Coordinates|coordinsert|{{{range_coordinates|}}}||type:mountain|scale:{{Map scale|type=mountain|<!-- -->length_km={{{length_km|}}}|length_mi={{{length_mi|}}}|width_km={{{width_km|}}}|width_mi={{{width_mi|}}}|<!-- -->area_mi2={{{area_mi2|}}}|area_km2={{{area_km2|}}}}}}}<!-- -->{{{range_coordinates_ref|}}}}} | class48 = category | label48 = [[Mountain range|{{nowrap|Parent range}}]] | data48 = {{if empty|{{{parent|}}}|{{{range|}}}}} | label49 = Borders on | data49 = {{{borders_on|}}} | label50 = [[Ordnance Survey National Grid|OS grid]] | data50 = {{#if:{{{grid_ref_UK|}}}|{{Gbmappingsmall|{{{grid_ref_UK|}}}|name={{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} }}{{{grid_ref_UK_ref|}}}}} | label51 = [[Irish grid reference system|OSI/OSNI grid]] | data51 = {{#if:{{{grid_ref_Ireland|}}}|{{iem4ibx|{{{grid_ref_Ireland|}}}|name={{if empty|{{{name|}}}|{{PAGENAMEBASE}}}} }}{{{grid_ref_Ireland_ref|}}}}} | label52 = [[Topographic map|Topo map{{pluralize from text|{{if empty|{{{topo|}}}|{{{topo_map|}}} }}|likely=(s)|plural=s}}]] | data52 = {{#if:{{{topo_maker|}}}|{{{topo_maker}}}&nbsp;}}{{if empty|{{{topo|}}}|{{{topo_map|}}} }} | label53 = [[Biome]] | data53 = {{{biome|}}} | header62 = Geology | label63 = [[Mountain formation|Formed by]] | data63 = {{{formed_by|}}} | label64 = [[Orogeny|{{pluralize from text|{{{orogeny|}}}|singular=Orogeny|plural=Orogenies}}]] | data64 = {{{orogeny|}}} | label65 = [[Geologic time scale|Rock age{{pluralize from text|{{{age|}}}|likely=(s)|plural=s}}]] | data65 = {{{age|}}} | label66 = {{longitem|[[List of mountain types|Mountain type{{pluralize from text|{{if empty|{{{mountain_type|}}}|{{{type|}}}}}|<!-- -->likely=(s)|plural=s}}]]}} | data66 = {{if empty|{{{mountain_type|}}}|{{{type|}}}}} | label67 = [[List of rock types|Rock type{{pluralize from text|{{if empty|{{{geology|}}}|{{{rock|}}}}}|likely=(s)|plural=s}}]] | data67 = {{if empty|{{{geology|}}}|{{{rock|}}}}} | label68 = Volcanic&nbsp;zone | data68 = {{{volcanic_zone|}}} | label69 = {{nowrap|[[Volcanic arc]]}} | data69 = {{{volcanic_arc|}}} | label70 = {{nowrap|[[Volcanic belt]]}} | data70 = {{{volcanic_belt|}}} | label71 = {{nowrap|[[Volcanic field]]}} | data71 = {{{volcanic_field|}}} | label73 = {{nowrap|[[volcanic eruption|Last eruption]]}} | data73 = {{{last_eruption|}}} | header80 = Climbing | label81 = [[First ascent]] | data81 = {{{first_ascent|}}} | label82 = [[Normal route|{{nowrap|Easiest route}}]] | data82 = {{{easiest_route|}}} | label83 = [[Normal route]] | data83 = {{{normal_route|}}} | label84 = Access | data84 = {{{access|}}} | header85 = _BLANK_ | data86 = {{{embedded|}}} | data87 = {{{module|}}} }}{{main other|{{#if:{{{region|}}}|{{#ifeq:{{#invoke:string|replace|{{{region}}}|^[A-Z0-9/\-]*$|MATCH|plain=false}}|MATCH|[[Category:Pages using infobox mountain with unknown parameters|ρ]] }}}} }}{{#ifeq:{{if empty|{{{child|}}}|{{{embed|}}}}}|yes||{{Wikidata image |1={{{image|}}}{{#invoke:WikidataIB|getValue|1=P18|2={{{image|}}}|name=image|qid={{{qid|}}}|rank=best|suppressfields={{{suppressfields|}}}|fetchwikidata={{if empty|{{{fetchwikidata|}}}|NONE}}|onlysourced={{if empty|{{{onlysourced|}}}|false}}|maxvals=1|noicon=true}} |2={{{nocat_wdimage|}}}}} }}{{main other| {{#if:{{{language|}}}|[[Category:Pages using infobox mountain with language parameter|{{#invoke:string|replace|{{{language}}}|[^A-Za-z0-9]||plain=false}} ]]}} }}</includeonly>{{#invoke:Check for unknown parameters|check|unknown={{main other|[[Category:Pages using infobox mountain with unknown parameters|_VALUE_{{PAGENAME}}]]}}|preview=Page using [[Template:Infobox mountain]] with unknown parameter "_VALUE_"|ignoreblank=y|mapframe_args=y| pushpin_map_args = y | access | age | area | area_km2 | area_mi2 | area_ref | authority | biome | borders_on | child | coordinates | coordinates_ref | country | country_type | district | district_type | easiest_route | elevation | elevation_ft | elevation_m | elevation_ref | elevation_system | embed | embedded | etymology | fetchwikidata | first_ascent | formed_by | geology | grid_ref_Ireland | grid_ref_Ireland_ref | grid_ref_UK | grid_ref_UK_ref | highest | highest_location | image | image_alt | image_caption | image_map | image_map_caption | image_size | image_upright | isolation | isolation_km | isolation_mi | isolation_parent | isolation_ref | language | last_eruption | length | length_km | length_mi | length_orientation | length_ref | listing | location | map_alt | map_caption | map_size | map_upright | map_width | module | mountain_type | name | native_name | native_name_lang | nickname | nocat_wdimage | normal_route | onlysourced | orogeny | other_name | parent | parent_peak | part | part_type | prominence | prominence_ft | prominence_m | prominence_ref | pronunciation | qid | range | range_coordinates | range_coordinates_ref | refs | region | region_type | rock | settlement | settlement_type | state | state_type | subbox | subdivision1 | subdivision1_type | subdivision2 | subdivision2_type | subdivision3 | subdivision3_type | subdivision4 | subdivision4_type | suppressfields | topo | topo_maker | topo_map | translation | type | volcanic_arc | volcanic_belt | volcanic_field | volcanic_zone | volume | volume_km3 | volume_mi3 | volume_ref | width | width_km | width_mi | width_orientation | width_ref }}{{#invoke:Check for conflicting parameters|check | template = [[Template:Infobox mountain]] | cat = {{main other|Category:Pages using infobox mountain with conflicting parameters}} | map_width; map_size | subdivision1; state | subdivision2; region | subdivision3; district | subdivision4; part | parent; range | topo; topo_map | mountain_type; type | geology; rock | child; embed }}<noinclude> {{documentation}} </noinclude> nkd0rlmwjp4ivuzcr60fzzpqgeh8egc Модул:Lang 828 3546 21388 2026-05-12T23:20:12Z Andrybak 2743 make_error_span, make_error_msg: use CSS variable `--color-error` to improve readability 21388 Scribunto text/plain --[=[ Lua support for the {{lang}}, {{langx}}, {{lang-??}}, and {{transliteration}} templates and replacement of various supporting templates. ]=] require('strict'); local getArgs = require ('Module:Arguments').getArgs; local unicode = require ("Module:Unicode data"); -- for is_Latin() and is_rtl() local yesno = require ('Module:Yesno'); local sandbox = (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- when called from a sandbox template or module load sandbox data and sandbox configuration local lang_data = mw.loadData ('Module:Lang/data' .. sandbox); -- language name override and transliteration tool-tip tables local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts local lang_table = lang_data.lang_name_table.lang; local lang_dep_table = lang_data.lang_name_table.lang_dep; local script_table = lang_data.lang_name_table.script; local region_table = lang_data.lang_name_table.region; local variant_table = lang_data.lang_name_table.variant; local suppressed_table = lang_data.lang_name_table.suppressed; local override_table = lang_data.override; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local cfg = mw.loadData ('Module:Lang/configuration' .. sandbox); -- for internationalization local is_latn_data = mw.loadData ('Module:Lang/data/is latn data'); local sizeof_ranges_t = is_latn_data.sizeof_ranges_t; local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local content_lang = mw.language.getContentLanguage(); local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic() local maint_cats = {}; -- maintenance categories go here local maint_msgs = {}; -- and their messages go here --[[--------------------------< M A K E _ E R R O R _ S P A N >-------------------------------------------------- ]] local function make_error_span (template, msg) return table.concat ({'<span style="color:var(--color-error,#d33)">', cfg.misc_text_t.error, ': ', template, msg, '</span>'}) end --[[--------------------------< S U B S T I T U T E >---------------------------------------------------------- Substitutes $1, $2, etc in <message> with data from <data_t>. Returns plain-text substituted string when <data_t> not nil; returns <message> else. ]] local function substitute (message, data_t) return data_t and mw.message.newRawMessage (message, data_t):plain() or message; end --[[--------------------------< M A K E _ E R R O R _ M S G >-------------------------------------------------- Assembles an error message from template name, message text, help link, and error category. ]] local function make_error_msg (msg, args_t, template) local category; local text; -- handle the oddity that is {{langx}} if cfg.templates_t.langxx == template then text = args_t.text or args_t[1]; -- for {{lang-xx}} else text = args_t.text or args_t[2]; -- for {{lang}}, {{langx}}, and {{transliteration}} end if cfg.templates_t.transliteration == template then category = cfg.make_error_msg_t.xlit_err_cat; else category = cfg.make_error_msg_t.lang_err_cat; end local category_link = ((0 == namespace or 10 == namespace) and not args_t.nocat) and substitute ('[[Category:$1]]', {category}) or ''; return substitute ('[$1] <span style="color:var(--color-error,#d33)">$2: &#x7B;{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- &#x7B; prevents template name from being treated as a template call in certain situations { text or cfg.make_error_msg_t.undefined, cfg.misc_text_t.error, template, msg, category, cfg.misc_text_t.help, category_link }) end --[[--------------------------< P A R A M E T E R _ V A L I D A T E >------------------------------------------ ]] local function parameter_validate (args_t, template) local err_msg = cfg.parameter_validate_t.invalid_param; if cfg.templates_t.lang == template then -- for {{lang}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_t[param] and -- unique {{lang}} parameters not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langx == template then -- for {{langx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_langx_t[param] and -- unique {{langx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langxx == template then -- for {{lang-xx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_xx_t[param] and -- unique {{lang-xx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end end end --[[--------------------------< I S _ S E T >------------------------------------------------------------------ Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set (var) return not (var == nil or var == ''); end --[[--------------------------< I N V E R T _ I T A L I C S >------------------------------------------------- This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing apostrophes are converted to their HTML numeric entity equivalent so that the new italic markup doesn't become bold markup inadvertently. Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal, replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements. In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns. This function expects that markup in args.text is complete and correct; if it is not, oddness may result. ]] local function invert_italics (source) local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns [""]="\'\'", -- empty string becomes italic markup ["\'\'"]="", -- italic markup becomes empty string ["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic ["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold }; local seg = {}; source = source:gsub ("%f[\']\'%f[^\']", '&#39;'); -- protect single quote marks from being interpreted as bold markup seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text' seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup elseif '' ~= seg[1] then seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup elseif '' ~= seg[3] then seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup else seg[2] = source -- when there is no markup end seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table return table.concat (seg); -- put it all back together and done end --[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------ Validates |italic= or |italics= assigned values. When |italic= is set and has an acceptable assigned value, return the matching CSS font-style property value or, for the special case 'default', return nil. When |italic= is not set, or has an unacceptable assigned value, return nil and a nil error message. When both |italic= and |italics= are set, returns nil and a 'conflicting' error message. The return value nil causes the calling lang, lang_xx, or xlit function to set args.italic according to the template's defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-??}} depending on the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}} and {{lang-??}} only). Accepted values and the values that this function returns are are: nil - when |italic= absent or not set; returns nil default - for completeness, should rarely if ever be used; returns nil yes - force args.text to be rendered in italic font; returns 'italic' no - force args.text to be rendered in normal font; returns 'normal' unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit' invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert' ]] local function validate_italic (args) local properties = {[cfg.keywords_t.affirmative] = 'italic', [cfg.keywords_t.negative] = 'normal', [cfg.keywords_t.unset] = 'inherit', [cfg.keywords_t.invert] = 'invert', [cfg.keywords_t.default] = nil}; local count = 0 for _, arg in pairs {'italic', 'italics', 'i'} do if args[arg] then count = count + 1 end end if count > 1 then -- return nil and an error message if more than one is set return nil, cfg.validate_italic_t.multi_italic; end return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message end --[=[--------------------------< V A L I D A T E _ C A T _ A R G S >---------------------------------------------------------- Default behavior of the {{lang}} and {{lang-??}} templates is to add categorization when the templates are used in main space. This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters to control categorization. Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the parameter is treated as if it were not set in the template. Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply. Accepted values for |nocat= are the text strings: 'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else for |cat= 'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else ]=] local function validate_cat_args (args) if not (args.nocat or args.cat) then -- both are nil, so categorize return; end if false == yesno (args.cat) or true == yesno (args.nocat) then args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template) else -- args.nocat is the parameter actually used. args.nocat = nil; end end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack. ]] local function in_array (needle, haystack) if needle == nil then return false; end for n,v in ipairs (haystack) do if v == needle then return n; end end return false; end --[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------ Prettify IETF tags to use recommended subtag formats: code: lower case script: sentence case region: upper case variant: lower case private: lower case prefixed with -x- ]] local function format_ietf_tag (code, script, region, variant, private) local out = {}; if is_set (private) then return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored end table.insert (out, code:lower()); if is_set (script) then script = script:lower():gsub ('^%a', string.upper); table.insert (out, script); end if is_set (region) then table.insert (out, region:upper()); end if is_set (variant) then table.insert (out, variant:lower()); end return table.concat (out, '-'); end --[[--------------------------< G E T _ I E T F _ P A R T S >-------------------------------------------------- Extracts and returns IETF language tag parts: primary language subtag (required) - 2 or 3 character IANA language code script subtag - four character IANA script code region subtag - two-letter or three digit IANA region code variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag in any one of these forms lang lang-variant lang-script lang-script-variant lang-region lang-region-variant lang-script-region lang-script-region-variant lang-x-private each of lang, script, region, variant, and private, when used, must be valid. Languages with both two- and three-character code synonyms are promoted to the two-character synonym because the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding the synonymous three-character codes in the lang= attribute. For {{lang-??}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}} because those parameters are superfluous to the IETF subtags in |code=). Returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil. See http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1. ]] local function get_ietf_parts (source, args_script, args_region, args_variant) local code, script, region, variant, private; -- IETF tag parts if not is_set (source) then return nil, nil, nil, nil, nil, cfg.get_ietf_parts_t.missing_lang_tag; end local pattern = { -- table of tables holding acceptable IETF tag patterns and short names of the IETF part captured by the pattern {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits) {'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss {'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR {'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits) {'^(%a%a%a?)$'}, -- 18 - ll {'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters) } local t = {}; -- table of captures; serves as a translator between captured IETF tag parts and named variables for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i]) if c1 then -- c1 always set on match code = c1; -- first capture is always code t = { [pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures [pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures [pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table }; script = t.s or ''; -- translate table contents to named variables; region = t.r or ''; -- absent table entries are nil so set named IETF parts to empty string for concatenation variant= t.v or ''; private = t.p or ''; break; -- and done end end if not code then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_tag, {source}); -- don't know what we got but it is malformed end code = code:lower(); -- ensure that we use and return lower case version of this if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_code, {code}); -- invalid language code, don't know about the others (don't care?) end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym table.insert (maint_cats, substitute (cfg.get_ietf_parts_t.maint_promo_cat, {code})); table.insert (maint_msgs, substitute (cfg.get_ietf_parts_t.maint_promo_msg, {code, synonym_table[code]})); code = synonym_table[code]; -- use the synonym end if is_set (script) then if is_set (args_script) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_scr; -- both code with script and |script= not allowed end else script = args_script or ''; -- use args.script if provided end if is_set (script) then script = script:lower(); -- ensure that we use and return lower case version of this if not script_table[script] then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_scr_code, {script, code}); -- language code OK, invalid script, don't know about the others (don't care?) end end if suppressed_table[script] then -- ensure that code-script does not use a suppressed script if in_array (code, suppressed_table[script]) then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.script_code, {script, code}); -- language code OK, script is suppressed for this code end end if is_set (region) then if is_set (args_region) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_reg; -- both code with region and |region= not allowed end else region = args_region or ''; -- use args.region if provided end if is_set (region) then region = region:lower(); -- ensure that we use and return lower case version of this if not region_table[region] then return code, script, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_reg_code, {region, code}); end end if is_set (variant) then if is_set (args_variant) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_var; -- both code with variant and |variant= not allowed end else variant = args_variant or ''; -- use args.variant if provided end if is_set (variant) then variant = variant:lower(); -- ensure that we use and return lower case version of this if not variant_table[variant] then -- make sure variant is valid return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var, {variant}); end -- does this duplicate/replace tests in lang() and lang_xx()? if is_set (script) then -- if script set it must be part of the 'prefix' if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_scr, {variant, code, script}); end elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound) if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred) if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound) return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_reg, {variant, code, region}); end end else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0 if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code, {variant, code}); end end end if is_set (private) then private = private:lower(); -- ensure that we use and return lower case version of this if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_pri, {private}); end end return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({'[[', link, '|', display, ']]'}); else return table.concat ({'[[', link, ']]'}); end else return ''; end end --[[--------------------------< D I V _ M A R K U P _ A D D >-------------------------------------------------- Adds <i> and </i> tags to list-item text or to implied <p>..</p> text. Mixed not supported. ]] local function div_markup_add (text, style) if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text if 'italic' == style then return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item else return text; end end if text:find ('\n+') then -- look for any number of \n characters in text text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics MediaWiki if 'italic' == style then text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each implied p (two or more consecutive '\n\n' sequences) else text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each implied p text = text:gsub ('\n', ''); -- strip newline characters end end return text; end --[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------ Makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where <title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in HTML markup. This because the lang= attribute applies to the content of its enclosing tag. <tag> holds a string 'div' or 'span' used to choose the correct wrapping tag. ]] local function title_wrapper_make (title_text, content_text, tag) local wrapper_t = {}; table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag table.insert (wrapper_t, ' title=\"'); -- begin title attribute table.insert (wrapper_t, title_text); -- add <title_text> table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag table.insert (wrapper_t, content_text); -- add <content_text> table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag return table.concat (wrapper_t); -- make a big string and done end --[[--------------------------< M A K E _ T E X T _ H T M L >-------------------------------------------------- Add the HTML markup to text according to the type of content that it is: <span> or <i> tags for inline content or <div> tags for block content The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish language text' is English: <i lang="es" title="Spanish language text">casa</i> should be: <span title="Spanish language text"><i lang="es">casa</i></span> or for <div>...</div>: <div title="Spanish language text"><div lang="es"><spanish-language-text></div></div> ]] local function make_text_html (code, text, tag, rtl, style, size, language) local html_t = {}; local style_added = ''; local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div if text:match ('^%*') then table.insert (html_t, '&#42;'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki text = text:gsub ('^%*', ''); -- remove the splat from the text end if 'span' == tag then -- default HTML tag for inline content if 'italic' == style then -- but if italic tag = 'i'; -- change to <i> tags end else -- must be div so go text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i> end table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> HTML tag code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of Wikipedia table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages end if 'normal' == style then -- when |italic=no table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any style_added = '\"'; -- remember that style attribute added and is not yet closed end if is_set (size) then -- when |size=<something> if is_set (style_added) then table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted else table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute style_added = '\"'; -- remember that style attribute added and is not yet closed end end table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening HTML tag table.insert (html_t, text); -- insert the text table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> HTML tag if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div local title_text; if 'zxx' == code then -- special case for this tag 'no linguistic content' title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.zxx}); -- not a language so don't use 'language' in title text elseif mw.ustring.find (language, 'languages', 1, true) then title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.collective}); -- for collective languages else title_text = substitute ('$1-$2', {language, cfg.make_text_html_t.individual}); -- for individual languages end return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag); else return table.concat (html_t); end end --[=[-------------------------< M A K E _ C A T E G O R Y >---------------------------------------------------- For individual language, <language>, returns: [[Category:Articles containing <language>-language text]] For English: [[Category:Articles containing explicitly cited English-language text]] For ISO 639-2 collective languages (and for 639-1 bh): [[Category:Articles with text in <language> languages]] ]=] local function make_category (code, language_name, nocat, name_get) if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space return ''; -- return empty string for concatenation end if mw.ustring.find (language_name, 'languages', 1, true) then return substitute ('[[$1 $2]]', {cfg.make_category_t.collective_cat, language_name}); end if this_wiki_lang_tag == code then return substitute ('[[$1 $2 $3-$4]]', { -- unique category name for the local language cfg.make_category_t.cat_prefix, cfg.make_category_t.explicit_cat, language_name, cfg.make_category_t.cat_postfix, }); else return substitute ('[[$1 $2-$3]]', { -- category for individual languages cfg.make_category_t.cat_prefix, language_name, cfg.make_category_t.cat_postfix, }); end end --[[--------------------------< M A K E _ T R A N S L I T >---------------------------------------------------- Return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string. The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code. To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed to be |translit-script= (in this function, tscript). This function is used by both lang_xx() and xlit() lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style xlit() always provides language_name, translit, and one of code or tscript, never both; always provides style For {{transliteration}}, style only applies when a language code is provided. ]] local function make_translit (code, language_name, translit, std, tscript, style, engvar) local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local title_text = ''; -- tool tip text for title= attribute std = std and std:lower(); -- lower case for table indexing if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified title_text = language_name; -- write a generic tool tip if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', {title_text, cfg.misc_text_t.language}); -- skip this text (individual and macro languages only) end title_text = substitute ('$1 $2', {title_text, mw.ustring.lower (cfg.engvar_t[engvar]['romanisz_lc'])}); -- finish the tool tip; use romanization when neither script nor standard supplied elseif is_set (std) and is_set (tscript) then -- when both are specified if title_t[std] then -- and if standard is legitimate if title_t[std][tscript] then -- and if script for that standard is legitimate if script_table[tscript] then title_text = substitute ('$1$2 ($3 $4) $5', { -- add the appropriate text to the tool tip title_text, title_t[std][tscript:lower()], script_table[tscript], cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else return ''; -- invalid standard, setup for error message end elseif is_set (std) then -- translit-script not set, use language code if not title_t[std] then return ''; end -- invalid standard, setup for error message if title_t[std][code] then -- if language code is in the table (xlit may not provide a language code) local fmt_str = '$1$2 ($3 $4) $5'; -- generic format string for tool tip if language_name:match ('languages') then fmt_str = '$1$2 ($3) $5'; -- format string for collective languages tool tip end title_text = substitute (fmt_str, { -- add the appropriate text to the tool tip title_text, title_t[std][code:lower()], language_name, cfg.misc_text_t.language, cfg.make_translit_t.transliteration, }); else -- code doesn't match title_text = title_text .. title_t[std]['default']; -- so use the standard's default end else -- here if translit-script set but translit-std not set if title_t['no_std'][tscript] then title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set elseif title_t['no_std'][code] then title_text = title_text .. title_t['no_std'][code]; -- use language code else if is_set (tscript) then title_text = substitute ('$1$2-$3 $4', { -- write a script tool tip title_text, language_name, cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); elseif is_set (code) then if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', { -- skip this text (individual and macro languages only) title_text, cfg.misc_text_t.language, }); end title_text = substitute ('$1 $2', { -- finish the tool tip title_text, cfg.make_translit_t.transliteration, }); else title_text = substitute ('$1 $2', { -- generic tool tip (can we ever get here?) title_text, cfg.make_translit_t.transliteration, }); end end end local tag if is_set (code) then -- when a language code is provided (always with {{lang-??}} templates, not always with {{transliteration}}) code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag if not style then -- nil for the default italic style tag = '<i lang="%s-Latn">%s</i>' else tag = '<span style="font-style: %s" lang="%s-Latn">%s</span>' -- non-standard style, construct a span tag for it tag = string.format(tag, style, "%s", "%s") end tag = string.format(tag, code, "%s") else tag = '<span>%s</span>' -- when no language code: no lang= attribute, not italic ({{transliteration}} only) end tag = string.format(tag, translit) -- add the translit text if '' == title_text then -- when there is no need for a tool-tip return tag; -- done else title_text = cfg.engvar_sel_t.gb == engvar and title_text:gsub ('([Rr]omani)z', '%1s') or title_text; -- gb eng when engvar specifies gb eng; us eng else return title_wrapper_make (title_text, tag, 'span'); -- wrap with a tool-tip span and done end end --[[--------------------------< V A L I D A T E _ T E X T >---------------------------------------------------- This function checks the content of args.text and returns empty string if nothing is amiss else it returns an error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup. Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert. ]] local function validate_text (template, args) if not is_set (args.text) then return make_error_msg (cfg.validate_text_t.no_text, args, template); end if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes return make_error_msg (cfg.validate_text_t.malformed_markup, args, template); end local style = args.italic; if (cfg.keywords_t.unset ~= style) and (cfg.keywords_t.invert ~=style) then if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic return make_error_msg (cfg.validate_text_t.italic_markup, args, template); end end end --[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------ Render mainenance messages and categories. ]] local function render_maint (nocat) local maint = {}; if 0 < #maint_msgs then -- when there are maintenance messages table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag for _, msg in ipairs (maint_msgs) do table.insert (maint, table.concat ({msg, ' '})); -- add message strings end table.insert (maint, '</span>'); -- close the span end if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only for _, cat in ipairs (maint_cats) do table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories end end return table.concat (maint); end --[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------ For proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we do nothing. proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and inhibits regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac. ]] local function proto_prefix (text, language_name, proto_param) if false == proto_param then -- when forced by |proto=no return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats end return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat end --[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------ Looks for a poem strip marker in text; returns true when found; false else. Auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know the content that will replace the stripmarker. ]] local function has_poem_tag (text) return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false; end --[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------ Inspects content of and selectively trims text. Returns text and the name of an appropriate HTML tag for text. If text contains: \n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return If text begins with list markup: \n* unordered \n; definition \n: definition \n# ordered trim all leading whitespace except \n and trim all trailing whitespace If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because the stripmarker is replaced with text wrapped in <div>..</div> tags. If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div> tags are used to wrap it, to prevent div/span inversion. ]] local function html_tag_select (text) local tag; if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that) tag = 'div'; -- poem replacement is in div tags so lang must use div tags elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags tag = 'div'; elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags text = mw.text.trim (text); -- trim leading and trailing whitespace characters tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags elseif text:find ('\n[%*:;%#]') then -- if text has list markup text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n' tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki) else text = mw.text.trim (text); -- plain text tag = 'span'; -- so span is fine end return text, tag; end --[[--------------------------< V A L I D A T E _ P R O T O >-------------------------------------------------- Validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false, empty string (or parameter omitted) returns as nil; any other value returns nil with <proto_param> as second return value for use in error message. ]] local function validate_proto (proto_param) if cfg.keywords_t.affirmative == proto_param then return true; elseif cfg.keywords_t.negative == proto_param then return false; elseif is_set (proto_param) then return nil, proto_param; -- |proto= something other than 'yes' or 'no' else return nil; -- missing or empty end end --[[--------------------------< L A N G U A G E _ N A M E _ G E T >-------------------------------------------- Common function to return language name from the data set according to IETF tag. Returns language name if found in data tables; nil else. ]] local function language_name_get (ietf, code, cat) ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case local name; -- remains nil if not found if override_table[ietf] then -- look for whole IETF tag in override table name = override_table[ietf]; elseif override_table[code] then -- not there so try basic language tag name = override_table[code]; elseif lang_table[code] then -- shift to IANA active tag/name table name = lang_table[code]; elseif lang_dep_table[code] then -- try the IANA deprecated tag/name table name = lang_dep_table[code]; end if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name table.insert (maint_cats, substitute (cfg.language_name_get_t.deprecated_cat, {code})); table.insert (maint_msgs, substitute (cfg.language_name_get_t.deprecated_msg, {code})); end return name; -- name from data tables or nil end --[[--------------------------< T E X T _ S C R I P T _ M A T C H _ T E S T >---------------------------------- IETF script subtag should match the script of the <text>. This module does not attempt to know all scripts and what they look like. It does know what Latn script looks like so when <text> is written using other than the Latn script, the IETF script subtag, if present, should not be Latn. Conversely, when <text> is written using the Latn script, the IETF script subtag, if present, should be Latn. For the purposes of this test, Latf (Fraktur) and Latg (Gaelic) are considered to be equivalent to Latn because unicode treats these two scripts as font-specific variants of Latn. Returns an error message when mismatch detected; nil else. ]] local function text_script_match_test (script, is_latn_text, pos, char) local scripts_t = {['latf'] = true, ['latg'] = true, ['latn'] = true}; -- unicode 'latn' scripts; 'latf' and 'latg' are font variants so there are no Fraktur or Gaelic codepoints if is_set (script) then -- don't bother with the rest of this if <script> is nil or empty string script = script:lower(); -- lower case to index into <scripts_t> if is_latn_text then -- when text is wholly Latn script if not scripts_t[script] then -- but a non-Latn script is specified return cfg.text_script_match_test_t.latn_txt_mismatch; -- emit an error message end else -- when text is not wholly Latn script if scripts_t[script] then -- but a Latn script is specified return substitute (cfg.text_script_match_test_t.latn_scr_mismatch, {pos, char}); -- emit an error message with position of first offending character end end end end --[[--------------------------< B I N A R Y _ S E A R C H >--------------------------------------------------- conducts a binary search of <ranges_t> for a sub-range that holds <target>. returns boolean true if a sub-range holding <target> is found; boolean false else. ]] local function binary_search (target, ranges_t) local idx_bot = 1; -- initialize to index of first key local idx_top = sizeof_ranges_t; -- initialize to index of last key (number of keys) if (target < ranges_t[idx_bot][1]) or (target > ranges_t[idx_top][2]) then -- invalid; target out of range return; -- abandon end local idx_mid; -- calculated index of range midway between top index and bottom index local flag = false; -- flag to tell us when we've evaluated last (highest) range in <ranges_t> while 1 do idx_mid = math.ceil ((idx_bot + idx_top) / 2); -- get the mid-point in the <ranges_t> sequence if (target >= ranges_t[idx_mid][1]) and (target <= ranges_t[idx_mid][2]) then -- indexed range low value <= target <= indexed range high value return true; -- we found the range that holds the <target> character; return true elseif (target > ranges_t[idx_mid][2]) then -- is <target> > indexed range high value? idx_bot = idx_mid; -- adjust <idx_bot> up else -- here when <target> less than indexed range low value idx_top = idx_mid - 1; -- adjust <idx_top> down end if flag then break; -- here when we just evaluated the last range and <target> not found end if not flag and (idx_bot == idx_top) then -- set true just before we evaluate the last (highest) range in <ranges_t> flag = true; end end end --[[--------------------------< I S _ L A T I N >-------------------------------------------------------------- compare <text> as codepoints to lists of known codepoints accepted as Latn script returns boolean true and modified <text> when <text> is wrapped in accept-as-written markup returns boolean true and <text> when codepoint is known returns boolean false, <text>, non-Latn codepoint position in <text> (left to right), and the codepoint character when codepoint is not known TODO: when text has accept-as-written markup, return a non-boolean value to indicate that <text> is not wholly latn script? Use that return value to create non-Latn HTML lang= attribute because <text> isn't really latn so lang=und (undetermined)? or instead, omit the -Latn subtag? (without -Latn need to force |italic=yes) ]] local function is_latin (text, tag) local count; text, count = text:gsub ('^%(%((.+)%)%)$', '%1'); -- remove accept-as-written markup if present if 0 ~= count then return true, text; -- markup present so assume that <text> is Latn-script end local pos = 0; -- position counter for error messaging for codepoint in mw.ustring.gcodepoint (text) do -- fetch each code point pos = pos + 1; -- bump the position counter if not is_latn_data.singles_t[codepoint] and -- codepoint not found in the singles list? not binary_search (codepoint, is_latn_data.ranges_t) and -- codepoint not a member of a listed range? not (tag and is_latn_data.specials_t[codepoint] and is_latn_data.specials_t[codepoint][tag]) then -- not a language-specific codepoint? return false, text, pos, mw.ustring.char (codepoint); -- codepoint not known; return false with codepoint position and character representation end end return true, text; -- is known; return <text> end --[[--------------------------< _ L A N G >-------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function _lang (args) local out = {}; local language_name; -- used to make category names local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, variant, and private local code; -- the language code local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or cfg.templates_t.lang; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; validate_cat_args (args); -- determine if categorization should be suppressed if args[1] and args.code then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'1', cfg.lang_t.conflict_n_param_types.code}), args, template); else args.code = args[1] or args.code; -- prefer args.code end if args[2] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'2', cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[2] or args.text; -- prefer args.text end msg = validate_text (template, args); -- ensure that |text= is set if is_set (msg) then -- msg is an already-formatted error message return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {msg}), args, template); end code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}}) if msg then return make_error_msg (msg, args, template); end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, code); -- make a boolean msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and is_latn_text) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics) args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end if is_set (subtags.script) then -- if script set, override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if cfg.keywords_t.invert == args.italic and 'span' == tag then -- invert only supported for in-line content args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name)); table.insert (out, make_category (code, language_name, args.nocat)); table.insert (out, render_maint (args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G >---------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function lang (frame) local args_t = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text valueFunc = function (key, value) if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); args_t.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang|...}} local msg = parameter_validate (args_t, cfg.templates_t.lang); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args_t, cfg.templates_t.lang); -- when template has unsupported params, abandon with error message end return _lang (args_t); end --[[--------------------------< T R A N S L A T I O N _ M A K E >---------------------------------------------- Stand-alone function to create literal translation of main text. Also used by {{lang-x2}}. ]] local function translation_make (args_t) local translation_t = {', '}; -- initialize output if 'none' ~= args_t.label then -- if we want a label table.insert (translation_t, '<small>'); -- open the <small> HTML tag if cfg.keywords_t.negative == args_t.link then table.insert (translation_t, substitute ('<abbr title="$1">$2</abbr>', {cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr})); -- unlinked form else table.insert (translation_t, make_wikilink (cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr)); -- linked form end table.insert (translation_t, "&thinsp;</small>"); -- close the <small> HTML tag end table.insert (translation_t, table.concat ({ -- user styling spans match spand from {{gloss}} '<span class="gloss-quot">\'</span>', -- user styling span for quote marks; use HTML entities to avoid wiki markup confusion '<span class="gloss-text">', -- open user styling span for the translation args_t.translation, -- the translation '</span>', -- close user styling span for the translation '<span class="gloss-quot">\'</span>' -- user styling span for quote marks })); return table.concat (translation_t); -- make a big string and done end --[[--------------------------< _ L A N G _ X X >-------------------------------------------------------------- For the {{lang-??}} templates, the only parameter required to be set in the template is the language code. All other parameters can, usually should, be written in the template call. For {{lang-??}} templates for languages that can have multiple writing systems, it may be appropriate to set |script= as well. For each {{lang-??}} template choose the appropriate entry-point function so that this function knows the default styling that should be applied to text. For normal, upright style: <includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly> For italic style: <includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly> All other parameters should be received from the template's frame (parent frame) Supported parameters are: |code = (required) the IANA language code |script = IANA script code; especially for use with languages that use multiple writing systems |region = IANA region code |variant = IANA variant code |text = (required) the displayed text in language specified by code |link = boolean false ('no') does not link code-spcified language name to associated language article |rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language |nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected |cat = boolian false ('no') opposite form of |nocat= |italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state |lit = text that is a literal translation of text |label = 'none' to suppress all labeling (language name, 'translit.', 'lit.') any other text replaces language-name label - automatic wikilinking disabled for those {{lang-??}} templates that support transliteration (those templates where |text= is not entirely latn script): |translit = text that is a transliteration of text |translit-std = the standard that applies to the transliteration |translit-script = ISO 15924 script name; falls back to code For {{lang-??}}, the positional parameters are: {{{1}}} text {{{2}}} transliterated text {{{3}}} literal translation text no other positional parameters are allowed ]] local function _lang_xx (args, base_template) -- base_template will be either of 'langx' or 'lang-xx' local out = {}; local language_name; -- used to make display text, article links local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, and variant local code; -- the language code local translit_script_name; -- name associated with IANA (ISO 15924) script code local translit; local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or base_template; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; local text_idx = (cfg.templates_t.langx == base_template) and 2 or 1; -- for {{langx}} 'text' positional parameter is '2' local translit_idx = (cfg.templates_t.langx == base_template) and 3 or 2; local xlate_idx = (cfg.templates_t.langx == base_template) and 4 or 3; if args[text_idx] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {text_idx, cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[text_idx] or args.text; -- prefer positional 'text' parameter end msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding if is_set (msg) then return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly if args[translit_idx] and args.translit then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {translit_idx, cfg.lang_t.conflict_n_param_types.translit}), args, template); else args.translit = args[translit_idx] or args.translit -- prefer positional 'translit' parameter end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if args[xlate_idx] and (args.translation or args.lit) then return make_error_msg (substitute (cfg.lang_xx_t.conflict_n_lit, {xlate_idx}), args, template); elseif args.translation and args.lit then return make_error_msg (cfg.lang_xx_t.conflict_lit, args, template); else args.translation = args[xlate_idx] or args.translation or args.lit; -- prefer positional 'translation' parameter end if args.links and args.link then return make_error_msg (cfg.lang_xx_t.conflict_link, args, template); else args.link = args.link or args.links; -- prefer args.link end validate_cat_args (args); -- determine if categorization should be suppressed args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if args.translit then local latn, pos, char; latn, args.translit, pos, char = is_latin (args.translit, (('' ~= subtags.private) and (code .. '-x-' .. subtags.private)) or code); if not latn then return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); end end local is_latn_text, text, pos, char = is_latin (args.text, code); -- make a boolean args.text = text; -- may have been modified (accept-as-written markup removed) msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if cfg.templates_t.langx == base_template then -- auto-italics for {{langx}} templates; adapted from {{lang}} (no support for poem tag) if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and is_latn_text) then -- text is not this wiki's language, no script specified and is wholly latn script (auto-italics) args.italic = 'italic'; -- set font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end else -- {{lang-xx}} does not do auto italics; retained for those wikis that don't support {{langx}} if nil == args.italic then -- args.italic controls if is_set (subtags.script) then if 'latn' == subtags.script then args.italic = 'italic'; -- |script=Latn; set for font-style:italic else args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state> end else args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state> end end end if is_set (subtags.script) then -- if script set override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {args.proto}), args, template); end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any) language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if args.label then if 'none' ~= args.label then table.insert (out, table.concat ({args.label, ': '})); -- custom label end else if cfg.keywords_t.negative == args.link then table.insert (out, language_name); -- language name without wikilink else if mw.ustring.find (language_name, 'languages', 1, true) then table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink elseif lang_data.article_name[args.code:lower()] then -- is IETF tag in article name over ride? table.insert (out, make_wikilink (lang_data.article_name[args.code:lower()], language_name)); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article override table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data else table.insert (out, make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), language_name)); -- language name with wikilink end end table.insert (out, ': '); -- separator end if cfg.keywords_t.invert == args.italic then args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil)) if is_set (args.translit) and not is_latn_text then -- transliteration; not supported when args.text is wholly latn text (this is an imperfect test) table.insert (out, ', '); -- comma to separate text from translit if 'none' ~= args.label then table.insert (out, '<small>'); if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name translit_script_name = script_table[args['translit-script']]; else translit_script_name = language_name; -- fall back on language name end local translit_title_obj = mw.title.makeTitle (0, substitute ('$1 $2',{cfg.lang_xx_t.romanization, translit_script_name})); -- make a title object; no engvar, article titles use US spelling if translit_title_obj.exists and (cfg.keywords_t.negative ~= args.link) then table.insert (out, make_wikilink (substitute ('$1 $2', {cfg.lang_xx_t.romanization, translit_script_name or language_name}), substitute ('$1', {cfg.engvar_t[args.engvar]['romanisz_pt']})) .. ':'); -- make a wikilink if there is an article to link to; engvar the display text else table.insert (out, substitute ('$1:', {cfg.engvar_t[args.engvar]['romanisz_pt']})); -- else plain text per engvar end table.insert (out, '&nbsp;</small>'); -- close the small tag end translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'], nil, args.engvar) if is_set (translit) then table.insert (out, translit); else return make_error_msg (substitute ('$1: $2', {cfg.lang_xx_t.invalid_xlit_std, args['translit-std'] or '[missing]'}), args, template); end elseif is_set (args.translit) and is_latn_text then -- when creating a transliteration of Latn script <text> return make_error_msg (cfg.lang_xx_t.xlit_of_latn, args, template); -- emit error message and abandon end if is_set (args.translation) then -- translation (not supported in {{lang}}) table.insert (out, translation_make (args)); end table.insert (out, make_category (code, category_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G _ X X _ A R G S _ G E T >---------------------------------------------- Common function to get args table from {{lang-??}} templates. Returns table of args. Text positional parameters are not trimmed here but are selectively trimmed at html_tag_select(). ]] local function lang_xx_args_get (frame, base_template) local args_t = getArgs(frame, { parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}} valueFunc = function (key, value) if ((cfg.templates_t.langx == base_template) and 2 or 1) == key then -- the 'text' positional parameter; 1 for {{lang-??}}, 2 for {{langx}}; do not trim wite space return value; -- return untrimmed 'text' positional parameter elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return args_t; end --[[--------------------------< L A N G _ X X _ I T A L I C >-------------------------------------------------- Entry point for those {{lang-??}} templates that call lang_xx_italic(). Sets the initial style state to italic. ]] local function lang_xx_italic (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_italic|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------ Entry point from another module. Sets the initial style state to italic. ]] local function _lang_xx_italic (args) initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------ Entry point for those {{lang-??}} templates that call lang_xx_inherit(). Sets the initial style state to inherit. ]] local function lang_xx_inherit (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_inherit|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I N H E R I T >---------------------------------------------- Entry point from another module. Sets the initial style state to inherit. ]] local function _lang_xx_inherit (args) initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< _ L A N G X >------------------------------------------------------------------ Entry point from another module. ]] local function _langx (args_t) local langx_data = mw.loadData ('Module:Lang/langx'); -- get necessary data local rtl_t = langx_data.rtl_t; -- get list of language tags for languages that are rendered right-to-left local link_t = langx_data.link_t; -- get list of language tags for {{lang-??}} templates that set |link=<something> local size_t = langx_data.size_t; -- get list of language tags for {{lang-??}} templates that set |size=<something> local msg = parameter_validate (args_t, cfg.templates_t.langx); if msg then return make_error_msg (msg, args_t, cfg.templates_t.langx); end args_t.code = args_t[1] or args_t.code; -- get the language tag; must be {{{1}}} or |code= if not args_t.code then return make_error_msg (cfg.get_ietf_parts_t.missing_lang_tag, args_t, cfg.templates_t.langx); end args_t.rtl = args_t.rtl or (rtl_t[args_t.code] and cfg.keywords_t.affirmative); -- prefer |rtl= in template call, use rtl_t else args_t.link = args_t.link or link_t[args_t.code]; -- prefer |link= in template call, use link_t felse args_t.size = args_t.size or size_t[args_t.code]; -- prefer |size= in template call, use size_t else args_t[1] = nil; -- unset to mimic {{lang-??}} templates which set |code=xx local lang_subtag = args_t.code; -- use only the base language subtag for unsupported tag test; some args_t.code are modified by |script= etc return _lang_xx (args_t, cfg.templates_t.langx); end --[[--------------------------< L A N G X >-------------------------------------------------------------------- Entry point for {{langx}}. this function calls _lang_xx() to render non-English text. The {{lang-??}} templates have three positional paramters but {{langx}} has four: | 1 | 2 | 3 | 4 {{lang-xx |<text> |<xlit> |<xlat> }} {{langx |<tag> |<text> |<xlit> |<xlat> }} The calls to lang_xx_args_get() and _lang_xx() use 'langx' as a flag for those functions to select the proper positional parameters. {{lang-??}} depends on the calling template to select 'inherit' or 'italic' to establish the default rendering. {{langx}} can't do that. The initial version of {{langx}} relied on a list of language tags (inherit_t in ~/langx) scraped from those {{lang-??}} templates that call lang_xx_inherit() to render text in upright font. langx() now uses auto-italics code adapted from {{lang}} (doesn't support poem tags). ]] local function langx (frame) local args_t = lang_xx_args_get (frame, cfg.templates_t.langx); -- get the arguments; 'langx' is the <base_template> used to decide which positional param is 'text', 'translit', 'lit' return _langx (args_t); end --[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------ Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _is_ietf_tag (tag) -- entry point when this module is require()d into another local c, s, r, v, p, err; -- code, script, region, variant, private, error message c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else end --[[--------------------------< I S _ I E T F _ T A G >-------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function is_ietf_tag (frame) return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the IETF language tag to be tested; also get parent frame end --[[--------------------------< I S _ I E T F _ T A G _ F R A M E >-------------------------------------------- Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent (template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag> is in the parent frame. ]] local function is_ietf_tag_frame (frame) return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the IETF language tag to be tested; do not get parent frame end --[[--------------------------< _ N A M E _ F R O M _ T A G >-------------------------------------------------- Returns language name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Set invoke's |link= parameter to yes to get wikilinked version of the language name. Module entry point from another module. ]] local function _name_from_tag (args) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args['link']; -- make a boolean local label = args.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local language_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private language_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if 'yes' ~= args.raw then language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them end if link then -- when |link=yes, wikilink the language name if mw.ustring.find (language_name, 'languages', 1, true) then language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink elseif lang_data.article_name[raw_code:lower()] then -- is IETF tag in article name override? language_name = make_wikilink (lang_data.article_name[raw_code:lower()], label or language_name); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article name override? language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data else language_name = make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), label or language_name); -- language name with wikilink end end return language_name; end --[[--------------------------< N A M E _ F R O M _ T A G >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function name_from_tag (frame) -- entry point from an {{#invoke:lang|name_from_tag|<IETF tag>|link=<yes>|template=<template name>}} return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< _ T A G _ F R O M _ N A M E >-------------------------------------------------- Returns the IETF language tag associated with the language name. Spelling of language name must be correct according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator, that disambiguator must be omitted (they are not present in the data name-to-tag tables). Module entry point from another module. ]] local function _tag_from_name (args) -- entry point from another module local msg; if args[1] and '' ~= args[1] then local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct) local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard if tag then return tag, true; -- language name found so return tag and done; second return used by is_lang_name() else msg = substitute (cfg.tag_from_name_t.lang_not_found, {args[1]}); -- language name not found, error message end else msg = cfg.tag_from_name_t.missing_lang_name; -- language name not found, error message end local template = ''; if args.template and '' ~= args.template then template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template) end return make_error_span (template, msg); end --[[--------------------------< T A G _ F R O M _ N A M E >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function tag_from_name (frame) -- entry point from an {{#invoke:lang|tag_from_name|<language name>|link=<yes>|template=<template name>}} local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name() return result; end --[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------ Module entry point from an {{#invoke:}}. ]] local function is_lang_name (frame) local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name() return result and true or nil; end --[[--------------------------< _ X L I T >-------------------------------------------------------------------- Module entry point from another module. ]] local function _xlit (args) local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local language_name; -- language name that matches language code; used for tool tip local translit; -- transliterated text to display local script; -- IANA script local msg; -- for when called functions return an error message local template = args.template or cfg.templates_t.transliteration; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}} args.text = args[3]; -- get the transliterated text args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing if not title_table[args.translit_std] then return make_error_msg (substitute (cfg.transl_t.unrecog_xlit_std, {args.translit_std}), args, template); end else if is_set (args[2]) then -- [2] set when {{transliteration|code|text}} args.text = args[2]; -- get the transliterated text else if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text? args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag return make_error_msg (cfg.transl_t.no_text, args, template); -- args[1] is a code so we're missing text else args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); end end end if is_set (args[1]) then -- IANA language code used for HTML lang= attribute; or ISO 15924 script code if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form? args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args[1]}), args, template); -- invalid language / script code end else return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); -- missing language / script code so quit end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, args.code); -- is latn text? strip accept-as-written markup if not is_latn_text then -- when text is not latn return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); -- abandon with error message end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default args.italic = nil; -- set to nil; end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if override_table[args.code] then -- is code a language code defined in the override table? language_name = override_table[args.code]; args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables? language_name = lang_table[args.code]; elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables? language_name = lang_dep_table[args.code]; elseif script_table[args.code] then -- if here, code is not a language code; is it a script code? language_name = script_table[args.code]; script = args.code; -- code was an ISO 15924 script so use that instead args.code = ''; -- unset because not a language code else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args.code}), args, template); -- invalid language / script code end -- here only when all parameters passed to make_translit() are valid return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic, args.engvar); end --[[--------------------------< X L I T >---------------------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function xlit (frame) return _xlit (getArgs(frame)); end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Returns category name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _category_from_tag (args_t) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args_t[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args_t.link; -- make a boolean local label = args_t.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local category_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private category_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', ''); if link then return table.concat ({'[[:', category_name, ']]'}); else return category_name; end end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function category_from_tag (frame) -- entry point from an {{#invoke:lang|category_from_tag|<IETF tag>|template=<template name>}} return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { category_from_tag = category_from_tag, -- frame entry points when this module is #invoke:ed into templates/wikitext lang = lang, -- entry point for {{lang}} langx = langx, -- entry point for {{langx}} lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}} lang_xx_italic = lang_xx_italic, is_ietf_tag = is_ietf_tag, is_ietf_tag_frame = is_ietf_tag_frame, is_lang_name = is_lang_name, tag_from_name = tag_from_name, -- returns IETF tag associated with language name name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates xlit = xlit, -- entry point for {{transliteration}} _category_from_tag = _category_from_tag, -- API entry points when this module is require()d into other modules _lang = _lang, _langx = _langx, _lang_xx_inherit = _lang_xx_inherit, _lang_xx_italic = _lang_xx_italic, _is_ietf_tag = _is_ietf_tag, get_ietf_parts = get_ietf_parts, _tag_from_name = _tag_from_name, _name_from_tag = _name_from_tag, _xlit = _xlit, _translation_make = translation_make, }; 4lchs3y6tbwcup48cwp3ayuhrxmusvw 21389 21388 2026-09-14T15:30:44Z Keresturec 18 1 измена увезена из [[:en:Module:Lang]]: Importing from the English wikipedia 21388 Scribunto text/plain --[=[ Lua support for the {{lang}}, {{langx}}, {{lang-??}}, and {{transliteration}} templates and replacement of various supporting templates. ]=] require('strict'); local getArgs = require ('Module:Arguments').getArgs; local unicode = require ("Module:Unicode data"); -- for is_Latin() and is_rtl() local yesno = require ('Module:Yesno'); local sandbox = (mw.getCurrentFrame():getTitle():match ('/sandbox') or ''); -- when called from a sandbox template or module load sandbox data and sandbox configuration local lang_data = mw.loadData ('Module:Lang/data' .. sandbox); -- language name override and transliteration tool-tip tables local lang_name_table = lang_data.lang_name_table; -- language codes, names, regions, scripts, suppressed scripts local lang_table = lang_data.lang_name_table.lang; local lang_dep_table = lang_data.lang_name_table.lang_dep; local script_table = lang_data.lang_name_table.script; local region_table = lang_data.lang_name_table.region; local variant_table = lang_data.lang_name_table.variant; local suppressed_table = lang_data.lang_name_table.suppressed; local override_table = lang_data.override; local synonym_table = mw.loadData ('Module:Lang/ISO 639 synonyms'); -- ISO 639-2/639-2T code translation to 639-1 code local cfg = mw.loadData ('Module:Lang/configuration' .. sandbox); -- for internationalization local is_latn_data = mw.loadData ('Module:Lang/data/is latn data'); local sizeof_ranges_t = is_latn_data.sizeof_ranges_t; local namespace = mw.title.getCurrentTitle().namespace; -- used for categorization local content_lang = mw.language.getContentLanguage(); local this_wiki_lang_tag = content_lang.code; -- get this wiki's language tag local this_wiki_lang_dir = content_lang:getDir(); -- get this wiki's language direction local initial_style_state; -- set by lang_xx_normal() and lang_xx_italic() local maint_cats = {}; -- maintenance categories go here local maint_msgs = {}; -- and their messages go here --[[--------------------------< M A K E _ E R R O R _ S P A N >-------------------------------------------------- ]] local function make_error_span (template, msg) return table.concat ({'<span style="color:var(--color-error,#d33)">', cfg.misc_text_t.error, ': ', template, msg, '</span>'}) end --[[--------------------------< S U B S T I T U T E >---------------------------------------------------------- Substitutes $1, $2, etc in <message> with data from <data_t>. Returns plain-text substituted string when <data_t> not nil; returns <message> else. ]] local function substitute (message, data_t) return data_t and mw.message.newRawMessage (message, data_t):plain() or message; end --[[--------------------------< M A K E _ E R R O R _ M S G >-------------------------------------------------- Assembles an error message from template name, message text, help link, and error category. ]] local function make_error_msg (msg, args_t, template) local category; local text; -- handle the oddity that is {{langx}} if cfg.templates_t.langxx == template then text = args_t.text or args_t[1]; -- for {{lang-xx}} else text = args_t.text or args_t[2]; -- for {{lang}}, {{langx}}, and {{transliteration}} end if cfg.templates_t.transliteration == template then category = cfg.make_error_msg_t.xlit_err_cat; else category = cfg.make_error_msg_t.lang_err_cat; end local category_link = ((0 == namespace or 10 == namespace) and not args_t.nocat) and substitute ('[[Category:$1]]', {category}) or ''; return substitute ('[$1] <span style="color:var(--color-error,#d33)">$2: &#x7B;{$3}}: $4 ([[:Category:$5|$6]])</span>$7', -- &#x7B; prevents template name from being treated as a template call in certain situations { text or cfg.make_error_msg_t.undefined, cfg.misc_text_t.error, template, msg, category, cfg.misc_text_t.help, category_link }) end --[[--------------------------< P A R A M E T E R _ V A L I D A T E >------------------------------------------ ]] local function parameter_validate (args_t, template) local err_msg = cfg.parameter_validate_t.invalid_param; if cfg.templates_t.lang == template then -- for {{lang}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_t[param] and -- unique {{lang}} parameters not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langx == template then -- for {{langx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_langx_t[param] and -- unique {{langx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end elseif cfg.templates_t.langxx == template then -- for {{lang-xx}} for param, _ in pairs (args_t) do if not cfg.known_params_t.params_lang_xx_t[param] and -- unique {{lang-xx}} parameters not cfg.known_params_t.params_x_t[param] and -- common to {{langx}} and {{lang-xx}} not cfg.known_params_t.common_params_all_t[param] then -- common to all return substitute (err_msg, {param}); -- <param> not found so abandon end end end end --[[--------------------------< I S _ S E T >------------------------------------------------------------------ Returns true if argument is set; false otherwise. Argument is 'set' when it exists (not nil) or when it is not an empty string. ]] local function is_set (var) return not (var == nil or var == ''); end --[[--------------------------< I N V E R T _ I T A L I C S >------------------------------------------------- This function attempts to invert the italic markup a args.text by adding/removing leading/trailing italic markup in args.text. Like |italic=unset, |italic=invert disables automatic italic markup. Individual leading/trailing apostrophes are converted to their HTML numeric entity equivalent so that the new italic markup doesn't become bold markup inadvertently. Leading and trailing wiki markup is extracted from args.text into separate table elements. Addition, removal, replacement of wiki markup is handled by a string.gsub() replacement table operating only on these separate elements. In the string.gsub() matching pattern, '.*' matches empty string as well as the three expected wiki markup patterns. This function expects that markup in args.text is complete and correct; if it is not, oddness may result. ]] local function invert_italics (source) local invert_pattern_table = { -- leading/trailing markup add/remove/replace patterns [""]="\'\'", -- empty string becomes italic markup ["\'\'"]="", -- italic markup becomes empty string ["\'\'\'"]="\'\'\'\'\'", -- bold becomes bold italic ["\'\'\'\'\'"]="\'\'\'", -- bold italic become bold }; local seg = {}; source = source:gsub ("%f[\']\'%f[^\']", '&#39;'); -- protect single quote marks from being interpreted as bold markup seg[1] = source:match ('^(\'\'+%f[^\']).+') or ''; -- get leading markup, if any; ignore single quote seg[3] = source:match ('.+(%f[\']\'\'+)$') or ''; -- get trailing markup, if any; ignore single quote if '' ~= seg[1] and '' ~= seg[3] then -- extract the 'text' seg[2] = source:match ('^\'\'+%f[^\'](.+)%f[\']\'\'+$') -- from between leading and trailing markup elseif '' ~= seg[1] then seg[2] = source:match ('^\'\'+%f[^\'](.+)') -- following leading markup elseif '' ~= seg[3] then seg[2] = source:match ('(.+)%f[\']\'\'+$') -- preceding trailing markup else seg[2] = source -- when there is no markup end seg[1] = invert_pattern_table[seg[1]] or seg[1]; -- replace leading markup according to pattern table seg[3] = invert_pattern_table[seg[3]] or seg[3]; -- replace leading markup according to pattern table return table.concat (seg); -- put it all back together and done end --[[--------------------------< V A L I D A T E _ I T A L I C >------------------------------------------------ Validates |italic= or |italics= assigned values. When |italic= is set and has an acceptable assigned value, return the matching CSS font-style property value or, for the special case 'default', return nil. When |italic= is not set, or has an unacceptable assigned value, return nil and a nil error message. When both |italic= and |italics= are set, returns nil and a 'conflicting' error message. The return value nil causes the calling lang, lang_xx, or xlit function to set args.italic according to the template's defined default ('inherit' for {{lang}}, 'inherit' or 'italic' for {{lang-??}} depending on the individual template's requirements, 'italic' for {{transliteration}}) or to the value appropriate to |script=, if set ({{lang}} and {{lang-??}} only). Accepted values and the values that this function returns are are: nil - when |italic= absent or not set; returns nil default - for completeness, should rarely if ever be used; returns nil yes - force args.text to be rendered in italic font; returns 'italic' no - force args.text to be rendered in normal font; returns 'normal' unset - disables font control so that font-style applied to text is dictated by markup inside or outside the template; returns 'inherit' invert - disables font control so that font-style applied to text is dictated by markup outside or inverted inside the template; returns 'invert' ]] local function validate_italic (args) local properties = {[cfg.keywords_t.affirmative] = 'italic', [cfg.keywords_t.negative] = 'normal', [cfg.keywords_t.unset] = 'inherit', [cfg.keywords_t.invert] = 'invert', [cfg.keywords_t.default] = nil}; local count = 0 for _, arg in pairs {'italic', 'italics', 'i'} do if args[arg] then count = count + 1 end end if count > 1 then -- return nil and an error message if more than one is set return nil, cfg.validate_italic_t.multi_italic; end return properties[args.italic or args.italics or args.i], nil; -- return an appropriate value and a nil error message end --[=[--------------------------< V A L I D A T E _ C A T _ A R G S >---------------------------------------------------------- Default behavior of the {{lang}} and {{lang-??}} templates is to add categorization when the templates are used in main space. This default functionality may be suppressed by setting |nocat=yes or |cat=no. This function selects one of these two parameters to control categorization. Because having two parameters with 'opposite' names and 'opposite' values is confusing, this function accepts only affirmative values for |nocat= and only negative values for |cat=; in both cases the 'other' sense (and non-sense) is not accepted and the parameter is treated as if it were not set in the template. Sets args.nocat to true if categorization is to be turned off; to nil if the default behavior should apply. Accepted values for |nocat= are the text strings: 'yes', 'y', 'true', 't', on, '1' -- [[Module:Yesno]] returns logical true for all of these; false or nil else for |cat= 'no', 'n', 'false', 'f', 'off', '0' -- [[Module:Yesno]] returns logical false for all of these; true or nil else ]=] local function validate_cat_args (args) if not (args.nocat or args.cat) then -- both are nil, so categorize return; end if false == yesno (args.cat) or true == yesno (args.nocat) then args.nocat = true; -- set to true when args.nocat is affirmative; nil else (as if the parameter were not set in the template) else -- args.nocat is the parameter actually used. args.nocat = nil; end end --[[--------------------------< I N _ A R R A Y >-------------------------------------------------------------- Whether needle is in haystack. ]] local function in_array (needle, haystack) if needle == nil then return false; end for n,v in ipairs (haystack) do if v == needle then return n; end end return false; end --[[--------------------------< F O R M A T _ I E T F _ T A G >------------------------------------------------ Prettify IETF tags to use recommended subtag formats: code: lower case script: sentence case region: upper case variant: lower case private: lower case prefixed with -x- ]] local function format_ietf_tag (code, script, region, variant, private) local out = {}; if is_set (private) then return table.concat ({code:lower(), 'x', private:lower()}, '-'); -- if private, all other tags ignored end table.insert (out, code:lower()); if is_set (script) then script = script:lower():gsub ('^%a', string.upper); table.insert (out, script); end if is_set (region) then table.insert (out, region:upper()); end if is_set (variant) then table.insert (out, variant:lower()); end return table.concat (out, '-'); end --[[--------------------------< G E T _ I E T F _ P A R T S >-------------------------------------------------- Extracts and returns IETF language tag parts: primary language subtag (required) - 2 or 3 character IANA language code script subtag - four character IANA script code region subtag - two-letter or three digit IANA region code variant subtag - four digit or 5-8 alnum variant code; only one variant subtag supported private subtag - x- followed by 1-8 alnum private code; only supported with the primary language tag in any one of these forms lang lang-variant lang-script lang-script-variant lang-region lang-region-variant lang-script-region lang-script-region-variant lang-x-private each of lang, script, region, variant, and private, when used, must be valid. Languages with both two- and three-character code synonyms are promoted to the two-character synonym because the IANA registry file omits the synonymous three-character code; we cannot depend on browsers understanding the synonymous three-character codes in the lang= attribute. For {{lang-??}} templates, the parameters |script=, |region=, and |variant= are supported (not supported in {{lang}} because those parameters are superfluous to the IETF subtags in |code=). Returns six values; all lower case. Valid parts are returned as themselves; omitted parts are returned as empty strings, invalid parts are returned as nil; the sixth returned item is an error message (if an error detected) or nil. See http://www.rfc-editor.org/rfc/bcp/bcp47.txt section 2.1. ]] local function get_ietf_parts (source, args_script, args_region, args_variant) local code, script, region, variant, private; -- IETF tag parts if not is_set (source) then return nil, nil, nil, nil, nil, cfg.get_ietf_parts_t.missing_lang_tag; end local pattern = { -- table of tables holding acceptable IETF tag patterns and short names of the IETF part captured by the pattern {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 1 - ll-Ssss-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%d%d%d%d)$', 's', 'r', 'v'}, -- 2 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 3 - ll-Ssss-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'r', 'v'}, -- 4 - ll-Ssss-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d%d)$', 's', 'v'}, -- 5 - ll-Ssss-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%a%a%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 's', 'v'}, -- 6 - ll-Ssss-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a)%-(%d%d%d%d)$', 'r', 'v'}, -- 7 - ll-RR-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%d%d%d)%-(%d%d%d%d)$', 'r', 'v'}, -- 8 - ll-DDD-variant (where region is 3 digits; variant is 4 digits) {'^(%a%a%a?)%-(%a%a)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 9 - ll-RR-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d)%-(%w%w%w%w%w%w?%w?%w?)$', 'r', 'v'}, -- 10 - ll-DDD-variant (where region is 3 digits; variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%d%d%d%d)$', 'v'}, -- 11 - ll-variant (where variant is 4 digits) {'^(%a%a%a?)%-(%w%w%w%w%w%w?%w?%w?)$', 'v'}, -- 12 - ll-variant (where variant is 5-8 alnum characters) {'^(%a%a%a?)%-(%a%a%a%a)%-(%a%a)$', 's', 'r'}, -- 13 - ll-Ssss-RR {'^(%a%a%a?)%-(%a%a%a%a)%-(%d%d%d)$', 's', 'r'}, -- 14 - ll-Ssss-DDD (region is 3 digits) {'^(%a%a%a?)%-(%a%a%a%a)$', 's'}, -- 15 - ll-Ssss {'^(%a%a%a?)%-(%a%a)$', 'r'}, -- 16 - ll-RR {'^(%a%a%a?)%-(%d%d%d)$', 'r'}, -- 17 - ll-DDD (region is 3 digits) {'^(%a%a%a?)$'}, -- 18 - ll {'^(%a%a%a?)%-x%-(%w%w?%w?%w?%w?%w?%w?%w?)$', 'p'}, -- 19 - ll-x-pppppppp (private is 1-8 alnum characters) } local t = {}; -- table of captures; serves as a translator between captured IETF tag parts and named variables for i, v in ipairs (pattern) do -- spin through the pattern table looking for a match local c1, c2, c3, c4; -- captures in the 'pattern' from the pattern table go here c1, c2, c3, c4 = source:match (pattern[i][1]); -- one or more captures set if source matches pattern[i]) if c1 then -- c1 always set on match code = c1; -- first capture is always code t = { [pattern[i][2] or 'x'] = c2, -- fill the table of captures with the rest of the captures [pattern[i][3] or 'x'] = c3, -- take index names from pattern table and assign sequential captures [pattern[i][4] or 'x'] = c4, -- index name may be nil in pattern[i] table so "or 'x'" spoofs a name for this index in this table }; script = t.s or ''; -- translate table contents to named variables; region = t.r or ''; -- absent table entries are nil so set named IETF parts to empty string for concatenation variant= t.v or ''; private = t.p or ''; break; -- and done end end if not code then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_tag, {source}); -- don't know what we got but it is malformed end code = code:lower(); -- ensure that we use and return lower case version of this if not (override_table[code] or lang_table[code] or synonym_table[code] or lang_dep_table[code]) then return nil, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_code, {code}); -- invalid language code, don't know about the others (don't care?) end if synonym_table[code] then -- if 639-2/639-2T code has a 639-1 synonym table.insert (maint_cats, substitute (cfg.get_ietf_parts_t.maint_promo_cat, {code})); table.insert (maint_msgs, substitute (cfg.get_ietf_parts_t.maint_promo_msg, {code, synonym_table[code]})); code = synonym_table[code]; -- use the synonym end if is_set (script) then if is_set (args_script) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_scr; -- both code with script and |script= not allowed end else script = args_script or ''; -- use args.script if provided end if is_set (script) then script = script:lower(); -- ensure that we use and return lower case version of this if not script_table[script] then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_scr_code, {script, code}); -- language code OK, invalid script, don't know about the others (don't care?) end end if suppressed_table[script] then -- ensure that code-script does not use a suppressed script if in_array (code, suppressed_table[script]) then return code, nil, nil, nil, nil, substitute (cfg.get_ietf_parts_t.script_code, {script, code}); -- language code OK, script is suppressed for this code end end if is_set (region) then if is_set (args_region) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_reg; -- both code with region and |region= not allowed end else region = args_region or ''; -- use args.region if provided end if is_set (region) then region = region:lower(); -- ensure that we use and return lower case version of this if not region_table[region] then return code, script, nil, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_reg_code, {region, code}); end end if is_set (variant) then if is_set (args_variant) then return code, nil, nil, nil, nil, cfg.get_ietf_parts_t.redundant_var; -- both code with variant and |variant= not allowed end else variant = args_variant or ''; -- use args.variant if provided end if is_set (variant) then variant = variant:lower(); -- ensure that we use and return lower case version of this if not variant_table[variant] then -- make sure variant is valid return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var, {variant}); end -- does this duplicate/replace tests in lang() and lang_xx()? if is_set (script) then -- if script set it must be part of the 'prefix' if not in_array (table.concat ({code, '-', script}), variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_scr, {variant, code, script}); end elseif is_set (region) then -- if region set, there are some prefixes that require lang code and region (en-CA-newfound) if not in_array (code, variant_table[variant]['prefixes']) then -- first see if lang code is all that's required (en-oxendict though en-GB-oxendict is preferred) if not in_array (table.concat ({code, '-', region}), variant_table[variant]['prefixes']) then -- now try for lang code and region (en-CA-newfound) return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code_reg, {variant, code, region}); end end else -- cheap way to determine if there are prefixes; fonipa and others don't have prefixes; # operator always returns 0 if variant_table[variant]['prefixes'][1] and not in_array (code, variant_table[variant]['prefixes']) then return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_var_code, {variant, code}); end end end if is_set (private) then private = private:lower(); -- ensure that we use and return lower case version of this if not override_table[table.concat ({code, '-x-', private})] then -- make sure private tag is valid; note that index return code, script, region, nil, nil, substitute (cfg.get_ietf_parts_t.unrecog_pri, {private}); end end return code, script, region, variant, private, nil; -- return the good bits; make sure that msg is nil end --[=[-------------------------< M A K E _ W I K I L I N K >---------------------------------------------------- Makes a wikilink; when both link and display text is provided, returns a wikilink in the form [[L|D]]; if only link is provided, returns a wikilink in the form [[L]]; if neither are provided or link is omitted, returns an empty string. ]=] local function make_wikilink (link, display) if is_set (link) then if is_set (display) then return table.concat ({'[[', link, '|', display, ']]'}); else return table.concat ({'[[', link, ']]'}); end else return ''; end end --[[--------------------------< D I V _ M A R K U P _ A D D >-------------------------------------------------- Adds <i> and </i> tags to list-item text or to implied <p>..</p> text. Mixed not supported. ]] local function div_markup_add (text, style) if text:find ('^\n[%*:;#]') then -- look for list markup; list markup must begin at start of text if 'italic' == style then return text:gsub ('(\n[%*:;#]+)([^\n]+)', '%1<i>%2</i>'); -- insert italic markup at each list item else return text; end end if text:find ('\n+') then -- look for any number of \n characters in text text = text:gsub ('([^\n])\n([^\n])', '%1 %2'); -- replace single newline characters with a space character which mimics MediaWiki if 'italic' == style then text = text:gsub('[^\n]+', '<p><i>%1</i></p>'); -- insert p and italic markup tags at each implied p (two or more consecutive '\n\n' sequences) else text = text:gsub ('[^\n]+', '<p>%1</p>'); -- insert p markup at each implied p text = text:gsub ('\n', ''); -- strip newline characters end end return text; end --[[--------------------------< T I T L E _ W R A P P E R _ M A K E >------------------------------------------ Makes a <span title="<title text>"><content_text></span> or <div title="<title text>"><content_text></div> where <title text> is in the tool-tip in the wiki's local language and <content_text> is non-local-language text in HTML markup. This because the lang= attribute applies to the content of its enclosing tag. <tag> holds a string 'div' or 'span' used to choose the correct wrapping tag. ]] local function title_wrapper_make (title_text, content_text, tag) local wrapper_t = {}; table.insert (wrapper_t, table.concat ({'<', tag})); -- open opening wrapper tag table.insert (wrapper_t, ' title=\"'); -- begin title attribute table.insert (wrapper_t, title_text); -- add <title_text> table.insert (wrapper_t, '\">'); -- end title attribute and close opening wrapper tag table.insert (wrapper_t, content_text); -- add <content_text> table.insert (wrapper_t, table.concat ({'</', tag, '>'})); -- add closing wrapper tag return table.concat (wrapper_t); -- make a big string and done end --[[--------------------------< M A K E _ T E X T _ H T M L >-------------------------------------------------- Add the HTML markup to text according to the type of content that it is: <span> or <i> tags for inline content or <div> tags for block content The lang= attribute also applies to the content of the tag where it is placed so this is wrong because 'Spanish language text' is English: <i lang="es" title="Spanish language text">casa</i> should be: <span title="Spanish language text"><i lang="es">casa</i></span> or for <div>...</div>: <div title="Spanish language text"><div lang="es"><spanish-language-text></div></div> ]] local function make_text_html (code, text, tag, rtl, style, size, language) local html_t = {}; local style_added = ''; local wrapper_tag = tag; -- <tag> gets modified so save a copy for use when/if we create a wrapper span or div if text:match ('^%*') then table.insert (html_t, '&#42;'); -- move proto language text prefix outside of italic markup if any; use numeric entity because plain splat confuses MediaWiki text = text:gsub ('^%*', ''); -- remove the splat from the text end if 'span' == tag then -- default HTML tag for inline content if 'italic' == style then -- but if italic tag = 'i'; -- change to <i> tags end else -- must be div so go text = div_markup_add (text, style); -- handle implied <p>, implied <p> with <i>, and list markup (*;:#) with <i> end table.insert (html_t, table.concat ({'<', tag})); -- open the <i>, <span>, or <div> HTML tag code = code:gsub ('%-x%-.*', ''); -- strip private use subtag from code tag because meaningless outside of Wikipedia table.insert (html_t, table.concat ({' lang="', code, '\"'})); -- add language attribute if (rtl or unicode.is_rtl(text)) and ('ltr' == this_wiki_lang_dir) then -- text is right-to-left on a left-to-right wiki table.insert (html_t, ' dir="rtl"'); -- add direction attribute for right-to-left languages elseif not (rtl or unicode.is_rtl(text)) and ('rtl' == this_wiki_lang_dir) then -- text is left-to-right on a right-to-left wiki table.insert (html_t, ' dir="ltr"'); -- add direction attribute for left-to-right languages end if 'normal' == style then -- when |italic=no table.insert (html_t, ' style=\"font-style: normal;'); -- override external markup, if any style_added = '\"'; -- remember that style attribute added and is not yet closed end if is_set (size) then -- when |size=<something> if is_set (style_added) then table.insert (html_t, table.concat ({' font-size: ', size, ';'})); -- add when style attribute already inserted else table.insert (html_t, table.concat ({' style=\"font-size: ', size, ';'})); -- create style attribute style_added = '\"'; -- remember that style attribute added and is not yet closed end end table.insert (html_t, table.concat ({style_added, '>'})); -- close the opening HTML tag table.insert (html_t, text); -- insert the text table.insert (html_t, table.concat ({'</', tag, '>'})); -- close the 'text' <i>, <span>, or <div> HTML tag if is_set (language) then -- create a <title_text> string for the title= attribute in a wrapper span or div local title_text; if 'zxx' == code then -- special case for this tag 'no linguistic content' title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.zxx}); -- not a language so don't use 'language' in title text elseif mw.ustring.find (language, 'languages', 1, true) then title_text = substitute ('$1 $2', {language, cfg.make_text_html_t.collective}); -- for collective languages else title_text = substitute ('$1-$2', {language, cfg.make_text_html_t.individual}); -- for individual languages end return title_wrapper_make (title_text, table.concat (html_t), wrapper_tag); else return table.concat (html_t); end end --[=[-------------------------< M A K E _ C A T E G O R Y >---------------------------------------------------- For individual language, <language>, returns: [[Category:Articles containing <language>-language text]] For English: [[Category:Articles containing explicitly cited English-language text]] For ISO 639-2 collective languages (and for 639-1 bh): [[Category:Articles with text in <language> languages]] ]=] local function make_category (code, language_name, nocat, name_get) if ((0 ~= namespace) or nocat) and not name_get then -- only categorize in article space return ''; -- return empty string for concatenation end if mw.ustring.find (language_name, 'languages', 1, true) then return substitute ('[[$1 $2]]', {cfg.make_category_t.collective_cat, language_name}); end if this_wiki_lang_tag == code then return substitute ('[[$1 $2 $3-$4]]', { -- unique category name for the local language cfg.make_category_t.cat_prefix, cfg.make_category_t.explicit_cat, language_name, cfg.make_category_t.cat_postfix, }); else return substitute ('[[$1 $2-$3]]', { -- category for individual languages cfg.make_category_t.cat_prefix, language_name, cfg.make_category_t.cat_postfix, }); end end --[[--------------------------< M A K E _ T R A N S L I T >---------------------------------------------------- Return translit <i lang=xx-Latn>...</i> where xx is the language code; else return empty string. The value |script= is not used in {{transliteration}} for this purpose; instead it uses |code. Because language scripts are listed in the {{transliteration}} switches they are included in the data tables. The script parameter is introduced at {{Language with name and transliteration}}. If |script= is set, this function uses it in preference to code. To avoid confusion, in this module and the templates that use it, the transliteration script parameter is renamed to be |translit-script= (in this function, tscript). This function is used by both lang_xx() and xlit() lang_xx() always provides code, language_name, and translit; may provide tscript; never provides style xlit() always provides language_name, translit, and one of code or tscript, never both; always provides style For {{transliteration}}, style only applies when a language code is provided. ]] local function make_translit (code, language_name, translit, std, tscript, style, engvar) local title_t = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local title_text = ''; -- tool tip text for title= attribute std = std and std:lower(); -- lower case for table indexing if not is_set (std) and not is_set (tscript) then -- when neither standard nor script specified title_text = language_name; -- write a generic tool tip if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', {title_text, cfg.misc_text_t.language}); -- skip this text (individual and macro languages only) end title_text = substitute ('$1 $2', {title_text, mw.ustring.lower (cfg.engvar_t[engvar]['romanisz_lc'])}); -- finish the tool tip; use romanization when neither script nor standard supplied elseif is_set (std) and is_set (tscript) then -- when both are specified if title_t[std] then -- and if standard is legitimate if title_t[std][tscript] then -- and if script for that standard is legitimate if script_table[tscript] then title_text = substitute ('$1$2 ($3 $4) $5', { -- add the appropriate text to the tool tip title_text, title_t[std][tscript:lower()], script_table[tscript], cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else title_text = title_text .. title_t[std]['default']; -- use the default if script not in std table; TODO: maint cat? error message because script not found for this standard? end else return ''; -- invalid standard, setup for error message end elseif is_set (std) then -- translit-script not set, use language code if not title_t[std] then return ''; end -- invalid standard, setup for error message if title_t[std][code] then -- if language code is in the table (xlit may not provide a language code) local fmt_str = '$1$2 ($3 $4) $5'; -- generic format string for tool tip if language_name:match ('languages') then fmt_str = '$1$2 ($3) $5'; -- format string for collective languages tool tip end title_text = substitute (fmt_str, { -- add the appropriate text to the tool tip title_text, title_t[std][code:lower()], language_name, cfg.misc_text_t.language, cfg.make_translit_t.transliteration, }); else -- code doesn't match title_text = title_text .. title_t[std]['default']; -- so use the standard's default end else -- here if translit-script set but translit-std not set if title_t['no_std'][tscript] then title_text = title_text .. title_t['no_std'][tscript]; -- use translit-script if set elseif title_t['no_std'][code] then title_text = title_text .. title_t['no_std'][code]; -- use language code else if is_set (tscript) then title_text = substitute ('$1$2-$3 $4', { -- write a script tool tip title_text, language_name, cfg.make_translit_t.script, cfg.make_translit_t.transliteration, }); elseif is_set (code) then if not mw.ustring.find (language_name, 'languages', 1, true) then -- collective language names (plural 'languages' is part of the name) title_text = substitute ('$1-$2', { -- skip this text (individual and macro languages only) title_text, cfg.misc_text_t.language, }); end title_text = substitute ('$1 $2', { -- finish the tool tip title_text, cfg.make_translit_t.transliteration, }); else title_text = substitute ('$1 $2', { -- generic tool tip (can we ever get here?) title_text, cfg.make_translit_t.transliteration, }); end end end local tag if is_set (code) then -- when a language code is provided (always with {{lang-??}} templates, not always with {{transliteration}}) code = code:match ('^(%a%a%a?)'); -- strip all subtags leaving only the language subtag if not style then -- nil for the default italic style tag = '<i lang="%s-Latn">%s</i>' else tag = '<span style="font-style: %s" lang="%s-Latn">%s</span>' -- non-standard style, construct a span tag for it tag = string.format(tag, style, "%s", "%s") end tag = string.format(tag, code, "%s") else tag = '<span>%s</span>' -- when no language code: no lang= attribute, not italic ({{transliteration}} only) end tag = string.format(tag, translit) -- add the translit text if '' == title_text then -- when there is no need for a tool-tip return tag; -- done else title_text = cfg.engvar_sel_t.gb == engvar and title_text:gsub ('([Rr]omani)z', '%1s') or title_text; -- gb eng when engvar specifies gb eng; us eng else return title_wrapper_make (title_text, tag, 'span'); -- wrap with a tool-tip span and done end end --[[--------------------------< V A L I D A T E _ T E X T >---------------------------------------------------- This function checks the content of args.text and returns empty string if nothing is amiss else it returns an error message. The tests are for empty or missing text and for improper or disallowed use of apostrophe markup. Italic rendering is controlled by the |italic= template parameter so italic markup should never appear in args.text either as ''itself'' or as '''''bold italic''''' unless |italic=unset or |italic=invert. ]] local function validate_text (template, args) if not is_set (args.text) then return make_error_msg (cfg.validate_text_t.no_text, args, template); end if args.text:find ("%f[\']\'\'\'\'%f[^\']") or args.text:find ("\'\'\'\'\'[\']+") then -- because we're looking, look for 4 appostrophes or 6+ appostrophes return make_error_msg (cfg.validate_text_t.malformed_markup, args, template); end local style = args.italic; if (cfg.keywords_t.unset ~= style) and (cfg.keywords_t.invert ~=style) then if args.text:find ("%f[\']\'\'%f[^\']") or args.text:find ("%f[\']\'\'\'\'\'%f[^\']") then -- italic but not bold, or bold italic return make_error_msg (cfg.validate_text_t.italic_markup, args, template); end end end --[[--------------------------< R E N D E R _ M A I N T >------------------------------------------------------ Render mainenance messages and categories. ]] local function render_maint (nocat) local maint = {}; if 0 < #maint_msgs then -- when there are maintenance messages table.insert (maint, table.concat ({'<span class="lang-comment" style="font-style: normal; display: none; color: #33aa33; margin-left: 0.3em;">'})); -- opening <span> tag for _, msg in ipairs (maint_msgs) do table.insert (maint, table.concat ({msg, ' '})); -- add message strings end table.insert (maint, '</span>'); -- close the span end if (0 < #maint_cats) and (0 == namespace) and not nocat then -- when there are maintenance categories; article namespace only for _, cat in ipairs (maint_cats) do table.insert (maint, table.concat ({'[[Category:', cat, ']]'})); -- format and add the categories end end return table.concat (maint); end --[[--------------------------< P R O T O _ P R E F I X >------------------------------------------------------ For proto languages, text is prefixed with a splat. We do that here as a flag for make_text_html() so that a splat will be rendered outside of italic markup (if used). If the first character in text here is already a splat, we do nothing. proto_param is boolean or nil; true adds splat prefix regardless of language name; false removes and inhibits regardless of language name; nil does nothing; presumes that the value in text is correct but removes extra splac. ]] local function proto_prefix (text, language_name, proto_param) if false == proto_param then -- when forced by |proto=no return text:gsub ('^%**', ''); -- return text without splat prefix regardless of language name or existing splat prefix in text elseif (language_name:find ('^Proto%-') or (true == proto_param)) then -- language is a proto or forced by |proto=yes return text:gsub ('^%**', '*'); -- prefix proto-language text with a splat; also removes duplicate prefixing splats end return text:gsub ('^%*+', '*'); -- return text unmolested except multiple splats reduced to one splat end --[[--------------------------< H A S _ P O E M _ T A G >------------------------------------------------------ Looks for a poem strip marker in text; returns true when found; false else. Auto-italic detection disabled when text has poem stripmarker because it is not possible for this code to know the content that will replace the stripmarker. ]] local function has_poem_tag (text) return text:find ('\127[^\127]*UNIQ%-%-poem%-[%a%d]+%-QINU[^\127]*\127') and true or false; end --[[--------------------------< H T M L _ T A G _ S E L E C T >------------------------------------------------ Inspects content of and selectively trims text. Returns text and the name of an appropriate HTML tag for text. If text contains: \n\n text has implied <p>..</p> tags - trim leading and trailing whitespace and return If text begins with list markup: \n* unordered \n; definition \n: definition \n# ordered trim all leading whitespace except \n and trim all trailing whitespace If text contains <poem>...</poem> stripmarker, return text unmodified and choose <div>..</div> tags because the stripmarker is replaced with text wrapped in <div>..</div> tags. If the text contains any actual <div>...</div> tags, then it's again returned unmodified and <div>...</div> tags are used to wrap it, to prevent div/span inversion. ]] local function html_tag_select (text) local tag; if has_poem_tag (text) then -- contains poem stripmarker (we can't know the content of that) tag = 'div'; -- poem replacement is in div tags so lang must use div tags elseif text:find ('<div') then -- reductive; if the text contains a div tag, we must use div tags tag = 'div'; elseif mw.text.trim (text):find ('\n\n+') then -- contains implied p tags text = mw.text.trim (text); -- trim leading and trailing whitespace characters tag = 'div'; -- must be div because span may not contain p tags (added later by MediaWiki); poem replacement is in div tags elseif text:find ('\n[%*:;%#]') then -- if text has list markup text = text:gsub ('^[\t\r\f ]*', ''):gsub ('%s*$', ''); -- trim all whitespace except leading newline character '\n' tag = 'div'; -- must be div because span may not contain ul, dd, dl, ol tags (added later by MediaWiki) else text = mw.text.trim (text); -- plain text tag = 'span'; -- so span is fine end return text, tag; end --[[--------------------------< V A L I D A T E _ P R O T O >-------------------------------------------------- Validates value assigned to |proto=; permitted values are yes and no; yes returns as true, no returns as false, empty string (or parameter omitted) returns as nil; any other value returns nil with <proto_param> as second return value for use in error message. ]] local function validate_proto (proto_param) if cfg.keywords_t.affirmative == proto_param then return true; elseif cfg.keywords_t.negative == proto_param then return false; elseif is_set (proto_param) then return nil, proto_param; -- |proto= something other than 'yes' or 'no' else return nil; -- missing or empty end end --[[--------------------------< L A N G U A G E _ N A M E _ G E T >-------------------------------------------- Common function to return language name from the data set according to IETF tag. Returns language name if found in data tables; nil else. ]] local function language_name_get (ietf, code, cat) ietf = ietf:lower(); -- ietf:lower() because format_ietf_tag() returns mixed case local name; -- remains nil if not found if override_table[ietf] then -- look for whole IETF tag in override table name = override_table[ietf]; elseif override_table[code] then -- not there so try basic language tag name = override_table[code]; elseif lang_table[code] then -- shift to IANA active tag/name table name = lang_table[code]; elseif lang_dep_table[code] then -- try the IANA deprecated tag/name table name = lang_dep_table[code]; end if lang_dep_table[code] and cat then -- because deprecated code may have been overridden to en.wiki preferred name table.insert (maint_cats, substitute (cfg.language_name_get_t.deprecated_cat, {code})); table.insert (maint_msgs, substitute (cfg.language_name_get_t.deprecated_msg, {code})); end return name; -- name from data tables or nil end --[[--------------------------< T E X T _ S C R I P T _ M A T C H _ T E S T >---------------------------------- IETF script subtag should match the script of the <text>. This module does not attempt to know all scripts and what they look like. It does know what Latn script looks like so when <text> is written using other than the Latn script, the IETF script subtag, if present, should not be Latn. Conversely, when <text> is written using the Latn script, the IETF script subtag, if present, should be Latn. For the purposes of this test, Latf (Fraktur) and Latg (Gaelic) are considered to be equivalent to Latn because unicode treats these two scripts as font-specific variants of Latn. Returns an error message when mismatch detected; nil else. ]] local function text_script_match_test (script, is_latn_text, pos, char) local scripts_t = {['latf'] = true, ['latg'] = true, ['latn'] = true}; -- unicode 'latn' scripts; 'latf' and 'latg' are font variants so there are no Fraktur or Gaelic codepoints if is_set (script) then -- don't bother with the rest of this if <script> is nil or empty string script = script:lower(); -- lower case to index into <scripts_t> if is_latn_text then -- when text is wholly Latn script if not scripts_t[script] then -- but a non-Latn script is specified return cfg.text_script_match_test_t.latn_txt_mismatch; -- emit an error message end else -- when text is not wholly Latn script if scripts_t[script] then -- but a Latn script is specified return substitute (cfg.text_script_match_test_t.latn_scr_mismatch, {pos, char}); -- emit an error message with position of first offending character end end end end --[[--------------------------< B I N A R Y _ S E A R C H >--------------------------------------------------- conducts a binary search of <ranges_t> for a sub-range that holds <target>. returns boolean true if a sub-range holding <target> is found; boolean false else. ]] local function binary_search (target, ranges_t) local idx_bot = 1; -- initialize to index of first key local idx_top = sizeof_ranges_t; -- initialize to index of last key (number of keys) if (target < ranges_t[idx_bot][1]) or (target > ranges_t[idx_top][2]) then -- invalid; target out of range return; -- abandon end local idx_mid; -- calculated index of range midway between top index and bottom index local flag = false; -- flag to tell us when we've evaluated last (highest) range in <ranges_t> while 1 do idx_mid = math.ceil ((idx_bot + idx_top) / 2); -- get the mid-point in the <ranges_t> sequence if (target >= ranges_t[idx_mid][1]) and (target <= ranges_t[idx_mid][2]) then -- indexed range low value <= target <= indexed range high value return true; -- we found the range that holds the <target> character; return true elseif (target > ranges_t[idx_mid][2]) then -- is <target> > indexed range high value? idx_bot = idx_mid; -- adjust <idx_bot> up else -- here when <target> less than indexed range low value idx_top = idx_mid - 1; -- adjust <idx_top> down end if flag then break; -- here when we just evaluated the last range and <target> not found end if not flag and (idx_bot == idx_top) then -- set true just before we evaluate the last (highest) range in <ranges_t> flag = true; end end end --[[--------------------------< I S _ L A T I N >-------------------------------------------------------------- compare <text> as codepoints to lists of known codepoints accepted as Latn script returns boolean true and modified <text> when <text> is wrapped in accept-as-written markup returns boolean true and <text> when codepoint is known returns boolean false, <text>, non-Latn codepoint position in <text> (left to right), and the codepoint character when codepoint is not known TODO: when text has accept-as-written markup, return a non-boolean value to indicate that <text> is not wholly latn script? Use that return value to create non-Latn HTML lang= attribute because <text> isn't really latn so lang=und (undetermined)? or instead, omit the -Latn subtag? (without -Latn need to force |italic=yes) ]] local function is_latin (text, tag) local count; text, count = text:gsub ('^%(%((.+)%)%)$', '%1'); -- remove accept-as-written markup if present if 0 ~= count then return true, text; -- markup present so assume that <text> is Latn-script end local pos = 0; -- position counter for error messaging for codepoint in mw.ustring.gcodepoint (text) do -- fetch each code point pos = pos + 1; -- bump the position counter if not is_latn_data.singles_t[codepoint] and -- codepoint not found in the singles list? not binary_search (codepoint, is_latn_data.ranges_t) and -- codepoint not a member of a listed range? not (tag and is_latn_data.specials_t[codepoint] and is_latn_data.specials_t[codepoint][tag]) then -- not a language-specific codepoint? return false, text, pos, mw.ustring.char (codepoint); -- codepoint not known; return false with codepoint position and character representation end end return true, text; -- is known; return <text> end --[[--------------------------< _ L A N G >-------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function _lang (args) local out = {}; local language_name; -- used to make category names local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, variant, and private local code; -- the language code local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or cfg.templates_t.lang; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; validate_cat_args (args); -- determine if categorization should be suppressed if args[1] and args.code then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'1', cfg.lang_t.conflict_n_param_types.code}), args, template); else args.code = args[1] or args.code; -- prefer args.code end if args[2] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {'2', cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[2] or args.text; -- prefer args.text end msg = validate_text (template, args); -- ensure that |text= is set if is_set (msg) then -- msg is an already-formatted error message return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {msg}), args, template); end code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code); -- |script=, |region=, |variant= not supported because they should be part of args.code ({{{1}}} in {{lang}}) if msg then return make_error_msg (msg, args, template); end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, code); -- make a boolean msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and not has_poem_tag (args.text) and is_latn_text) then -- text not this wiki's language, no script specified and not in poem markup but is wholly latn script (auto-italics) args.italic = 'italic'; -- DEFAULT for {{lang}} templates is upright; but if latn script set for font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end if is_set (subtags.script) then -- if script set, override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if cfg.keywords_t.invert == args.italic and 'span' == tag then -- invert only supported for in-line content args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, language_name)); table.insert (out, make_category (code, language_name, args.nocat)); table.insert (out, render_maint (args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G >---------------------------------------------------------------------- Entry point for {{lang}}. There should be no reason to set parameters in the {{lang}} {{#invoke:}} <includeonly>{{#invoke:lang|lang}}</includeonly> Parameters are received from the template's frame (parent frame). ]] local function lang (frame) local args_t = getArgs (frame, { -- this code so that we can detect and handle wiki list markup in text valueFunc = function (key, value) if 2 == key or 'text' == key then -- the 'text' parameter; do not trim wite space return value; -- return untrimmed 'text' elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); args_t.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang|...}} local msg = parameter_validate (args_t, cfg.templates_t.lang); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args_t, cfg.templates_t.lang); -- when template has unsupported params, abandon with error message end return _lang (args_t); end --[[--------------------------< T R A N S L A T I O N _ M A K E >---------------------------------------------- Stand-alone function to create literal translation of main text. Also used by {{lang-x2}}. ]] local function translation_make (args_t) local translation_t = {', '}; -- initialize output if 'none' ~= args_t.label then -- if we want a label table.insert (translation_t, '<small>'); -- open the <small> HTML tag if cfg.keywords_t.negative == args_t.link then table.insert (translation_t, substitute ('<abbr title="$1">$2</abbr>', {cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr})); -- unlinked form else table.insert (translation_t, make_wikilink (cfg.translation_make_t.lit_xlation, cfg.translation_make_t.lit_abbr)); -- linked form end table.insert (translation_t, "&thinsp;</small>"); -- close the <small> HTML tag end table.insert (translation_t, table.concat ({ -- user styling spans match spand from {{gloss}} '<span class="gloss-quot">\'</span>', -- user styling span for quote marks; use HTML entities to avoid wiki markup confusion '<span class="gloss-text">', -- open user styling span for the translation args_t.translation, -- the translation '</span>', -- close user styling span for the translation '<span class="gloss-quot">\'</span>' -- user styling span for quote marks })); return table.concat (translation_t); -- make a big string and done end --[[--------------------------< _ L A N G _ X X >-------------------------------------------------------------- For the {{lang-??}} templates, the only parameter required to be set in the template is the language code. All other parameters can, usually should, be written in the template call. For {{lang-??}} templates for languages that can have multiple writing systems, it may be appropriate to set |script= as well. For each {{lang-??}} template choose the appropriate entry-point function so that this function knows the default styling that should be applied to text. For normal, upright style: <includeonly>{{#invoke:lang|lang_xx_inherit|code=xx}}</includeonly> For italic style: <includeonly>{{#invoke:lang|lang_xx_italic|code=xx}}</includeonly> All other parameters should be received from the template's frame (parent frame) Supported parameters are: |code = (required) the IANA language code |script = IANA script code; especially for use with languages that use multiple writing systems |region = IANA region code |variant = IANA variant code |text = (required) the displayed text in language specified by code |link = boolean false ('no') does not link code-spcified language name to associated language article |rtl = boolean true ('yes') identifies the language specified by code as a right-to-left language |nocat = boolean true ('yes') inhibits normal categorization; error categories are not affected |cat = boolian false ('no') opposite form of |nocat= |italic = boolean true ('yes') renders displayed text in italic font; boolean false ('no') renders displayed text in normal font; not set renders according to initial_style_state |lit = text that is a literal translation of text |label = 'none' to suppress all labeling (language name, 'translit.', 'lit.') any other text replaces language-name label - automatic wikilinking disabled for those {{lang-??}} templates that support transliteration (those templates where |text= is not entirely latn script): |translit = text that is a transliteration of text |translit-std = the standard that applies to the transliteration |translit-script = ISO 15924 script name; falls back to code For {{lang-??}}, the positional parameters are: {{{1}}} text {{{2}}} transliterated text {{{3}}} literal translation text no other positional parameters are allowed ]] local function _lang_xx (args, base_template) -- base_template will be either of 'langx' or 'lang-xx' local out = {}; local language_name; -- used to make display text, article links local category_name; -- same as language_name except that it retains any parenthetical disambiguators (if any) from the data set local subtags = {}; -- IETF subtags script, region, and variant local code; -- the language code local translit_script_name; -- name associated with IANA (ISO 15924) script code local translit; local msg; -- for error messages local tag = 'span'; -- initial value for make_text_html() local template = args.template or base_template; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; local text_idx = (cfg.templates_t.langx == base_template) and 2 or 1; -- for {{langx}} 'text' positional parameter is '2' local translit_idx = (cfg.templates_t.langx == base_template) and 3 or 2; local xlate_idx = (cfg.templates_t.langx == base_template) and 4 or 3; if args[text_idx] and args.text then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {text_idx, cfg.lang_t.conflict_n_param_types.text}), args, template); else args.text = args[text_idx] or args.text; -- prefer positional 'text' parameter end msg = validate_text (template, args); -- ensure that |text= is set, does not contain italic markup and is protected from improper bolding if is_set (msg) then return msg; end args.text, tag = html_tag_select (args.text); -- inspects text; returns appropriate HTML tag with text trimmed accordingly if args[translit_idx] and args.translit then return make_error_msg (substitute (cfg.lang_t.conflict_n_param, {translit_idx, cfg.lang_t.conflict_n_param_types.translit}), args, template); else args.translit = args[translit_idx] or args.translit -- prefer positional 'translit' parameter end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if args[xlate_idx] and (args.translation or args.lit) then return make_error_msg (substitute (cfg.lang_xx_t.conflict_n_lit, {xlate_idx}), args, template); elseif args.translation and args.lit then return make_error_msg (cfg.lang_xx_t.conflict_lit, args, template); else args.translation = args[xlate_idx] or args.translation or args.lit; -- prefer positional 'translation' parameter end if args.links and args.link then return make_error_msg (cfg.lang_xx_t.conflict_link, args, template); else args.link = args.link or args.links; -- prefer args.link end validate_cat_args (args); -- determine if categorization should be suppressed args.rtl = args.rtl == cfg.keywords_t.affirmative; -- convert to boolean: 'yes' -> true, other values -> false code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (args.code, args.script, args.region, args.variant); -- private omitted because private if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end if args.translit then local latn, pos, char; latn, args.translit, pos, char = is_latin (args.translit, (('' ~= subtags.private) and (code .. '-x-' .. subtags.private)) or code); if not latn then return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); end end local is_latn_text, text, pos, char = is_latin (args.text, code); -- make a boolean args.text = text; -- may have been modified (accept-as-written markup removed) msg = text_script_match_test (subtags.script, is_latn_text, pos, char) if msg then -- if an error detected then there is an error message return make_error_msg (msg, args, template); end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if cfg.templates_t.langx == base_template then -- auto-italics for {{langx}} templates; adapted from {{lang}} (no support for poem tag) if nil == args.italic then -- nil when |italic= absent or not set or |italic=default; args.italic controls if ('latn' == subtags.script) or -- script is latn (this_wiki_lang_tag ~= code and not is_set (subtags.script) and is_latn_text) then -- text is not this wiki's language, no script specified and is wholly latn script (auto-italics) args.italic = 'italic'; -- set font-style:italic else args.italic = 'inherit'; -- italic not set; script not latn; inherit current style end end else -- {{lang-xx}} does not do auto italics; retained for those wikis that don't support {{langx}} if nil == args.italic then -- args.italic controls if is_set (subtags.script) then if 'latn' == subtags.script then args.italic = 'italic'; -- |script=Latn; set for font-style:italic else args.italic = initial_style_state; -- italic not set; script is not latn; set for font-style:<initial_style_state> end else args.italic = initial_style_state; -- here when |italic= and |script= not set; set for font-style:<initial_style_state> end end end if is_set (subtags.script) then -- if script set override rtl setting if in_array (subtags.script, lang_data.rtl_scripts) then args.rtl = true; -- script is an rtl script else args.rtl = false; -- script is not an rtl script end end args.proto, msg = validate_proto (args.proto); -- return boolean, or nil, or nil and error message flag if msg then return make_error_msg (substitute (cfg.lang_t.invalid_proto, {args.proto}), args, template); end args.code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles language_name = language_name_get (args.code, code, true); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = language_name; -- category names retain IANA parenthetical diambiguators (if any) language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them if args.label then if 'none' ~= args.label then table.insert (out, table.concat ({args.label, ': '})); -- custom label end else if cfg.keywords_t.negative == args.link then table.insert (out, language_name); -- language name without wikilink else if mw.ustring.find (language_name, 'languages', 1, true) then table.insert (out, make_wikilink (language_name)); -- collective language name uses simple wikilink elseif lang_data.article_name[args.code:lower()] then -- is IETF tag in article name over ride? table.insert (out, make_wikilink (lang_data.article_name[args.code:lower()], language_name)); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article override table.insert (out, make_wikilink (lang_data.article_name[code], language_name)); -- language name with wikilink from override data else table.insert (out, make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), language_name)); -- language name with wikilink end end table.insert (out, ': '); -- separator end if cfg.keywords_t.invert == args.italic then args.text = invert_italics (args.text) end args.text = proto_prefix (args.text, language_name, args.proto); -- prefix proto-language text with a splat table.insert (out, make_text_html (args.code, args.text, tag, args.rtl, args.italic, args.size, ('none' == args.label) and language_name or nil)) if is_set (args.translit) and not is_latn_text then -- transliteration; not supported when args.text is wholly latn text (this is an imperfect test) table.insert (out, ', '); -- comma to separate text from translit if 'none' ~= args.label then table.insert (out, '<small>'); if script_table[args['translit-script']] then -- when |translit-script= is set, try to use the script's name translit_script_name = script_table[args['translit-script']]; else translit_script_name = language_name; -- fall back on language name end local translit_title_obj = mw.title.makeTitle (0, substitute ('$1 $2',{cfg.lang_xx_t.romanization, translit_script_name})); -- make a title object; no engvar, article titles use US spelling if translit_title_obj.exists and (cfg.keywords_t.negative ~= args.link) then table.insert (out, make_wikilink (substitute ('$1 $2', {cfg.lang_xx_t.romanization, translit_script_name or language_name}), substitute ('$1', {cfg.engvar_t[args.engvar]['romanisz_pt']})) .. ':'); -- make a wikilink if there is an article to link to; engvar the display text else table.insert (out, substitute ('$1:', {cfg.engvar_t[args.engvar]['romanisz_pt']})); -- else plain text per engvar end table.insert (out, '&nbsp;</small>'); -- close the small tag end translit = make_translit (args.code, language_name, args.translit, args['translit-std'], args['translit-script'], nil, args.engvar) if is_set (translit) then table.insert (out, translit); else return make_error_msg (substitute ('$1: $2', {cfg.lang_xx_t.invalid_xlit_std, args['translit-std'] or '[missing]'}), args, template); end elseif is_set (args.translit) and is_latn_text then -- when creating a transliteration of Latn script <text> return make_error_msg (cfg.lang_xx_t.xlit_of_latn, args, template); -- emit error message and abandon end if is_set (args.translation) then -- translation (not supported in {{lang}}) table.insert (out, translation_make (args)); end table.insert (out, make_category (code, category_name, args.nocat)); table.insert (out, render_maint(args.nocat)); -- maintenance messages and categories return table.concat (out); -- put it all together and done end --[[--------------------------< L A N G _ X X _ A R G S _ G E T >---------------------------------------------- Common function to get args table from {{lang-??}} templates. Returns table of args. Text positional parameters are not trimmed here but are selectively trimmed at html_tag_select(). ]] local function lang_xx_args_get (frame, base_template) local args_t = getArgs(frame, { parentFirst= true, -- parameters in the template override parameters set in the {{#invoke:}} valueFunc = function (key, value) if ((cfg.templates_t.langx == base_template) and 2 or 1) == key then -- the 'text' positional parameter; 1 for {{lang-??}}, 2 for {{langx}}; do not trim wite space return value; -- return untrimmed 'text' positional parameter elseif value then -- all other values: if the value is not nil value = mw.text.trim (value); -- trim whitespace if '' ~= value then -- empty string when value was only whitespace return value; end end return nil; -- value was empty or contained only whitespace end -- end of valueFunc }); return args_t; end --[[--------------------------< L A N G _ X X _ I T A L I C >-------------------------------------------------- Entry point for those {{lang-??}} templates that call lang_xx_italic(). Sets the initial style state to italic. ]] local function lang_xx_italic (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_italic|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I T A L I C >------------------------------------------------ Entry point from another module. Sets the initial style state to italic. ]] local function _lang_xx_italic (args) initial_style_state = 'italic'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< L A N G _ X X _ I N H E R I T >------------------------------------------------ Entry point for those {{lang-??}} templates that call lang_xx_inherit(). Sets the initial style state to inherit. ]] local function lang_xx_inherit (frame) local args = lang_xx_args_get (frame, cfg.templates_t.langxx); args.fn = nil; -- unset because not supported but this function might have been called by {{lang|fn=lang_xx_inherit|...}} local msg = parameter_validate (args, cfg.templates_t.langxx); -- verify that all supplied parameters are supported by {{lang-??}} if msg then return make_error_msg (msg, args, cfg.templates_t.langxx); -- when template has unsupported params, abandon with error message end initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx) .. '[[Category:Pages using Lang-xx templates]]'; -- temporary category end --[[--------------------------< _ L A N G _ X X _ I N H E R I T >---------------------------------------------- Entry point from another module. Sets the initial style state to inherit. ]] local function _lang_xx_inherit (args) initial_style_state = 'inherit'; return _lang_xx (args, cfg.templates_t.langxx); end --[[--------------------------< _ L A N G X >------------------------------------------------------------------ Entry point from another module. ]] local function _langx (args_t) local langx_data = mw.loadData ('Module:Lang/langx'); -- get necessary data local rtl_t = langx_data.rtl_t; -- get list of language tags for languages that are rendered right-to-left local link_t = langx_data.link_t; -- get list of language tags for {{lang-??}} templates that set |link=<something> local size_t = langx_data.size_t; -- get list of language tags for {{lang-??}} templates that set |size=<something> local msg = parameter_validate (args_t, cfg.templates_t.langx); if msg then return make_error_msg (msg, args_t, cfg.templates_t.langx); end args_t.code = args_t[1] or args_t.code; -- get the language tag; must be {{{1}}} or |code= if not args_t.code then return make_error_msg (cfg.get_ietf_parts_t.missing_lang_tag, args_t, cfg.templates_t.langx); end args_t.rtl = args_t.rtl or (rtl_t[args_t.code] and cfg.keywords_t.affirmative); -- prefer |rtl= in template call, use rtl_t else args_t.link = args_t.link or link_t[args_t.code]; -- prefer |link= in template call, use link_t felse args_t.size = args_t.size or size_t[args_t.code]; -- prefer |size= in template call, use size_t else args_t[1] = nil; -- unset to mimic {{lang-??}} templates which set |code=xx local lang_subtag = args_t.code; -- use only the base language subtag for unsupported tag test; some args_t.code are modified by |script= etc return _lang_xx (args_t, cfg.templates_t.langx); end --[[--------------------------< L A N G X >-------------------------------------------------------------------- Entry point for {{langx}}. this function calls _lang_xx() to render non-English text. The {{lang-??}} templates have three positional paramters but {{langx}} has four: | 1 | 2 | 3 | 4 {{lang-xx |<text> |<xlit> |<xlat> }} {{langx |<tag> |<text> |<xlit> |<xlat> }} The calls to lang_xx_args_get() and _lang_xx() use 'langx' as a flag for those functions to select the proper positional parameters. {{lang-??}} depends on the calling template to select 'inherit' or 'italic' to establish the default rendering. {{langx}} can't do that. The initial version of {{langx}} relied on a list of language tags (inherit_t in ~/langx) scraped from those {{lang-??}} templates that call lang_xx_inherit() to render text in upright font. langx() now uses auto-italics code adapted from {{lang}} (doesn't support poem tags). ]] local function langx (frame) local args_t = lang_xx_args_get (frame, cfg.templates_t.langx); -- get the arguments; 'langx' is the <base_template> used to decide which positional param is 'text', 'translit', 'lit' return _langx (args_t); end --[[--------------------------< _ I S _ I E T F _ T A G >------------------------------------------------------ Returns true when a language name associated with IETF language tag exists; nil else. IETF language tag must be valid. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _is_ietf_tag (tag) -- entry point when this module is require()d into another local c, s, r, v, p, err; -- code, script, region, variant, private, error message c, s, r, v, p, err = get_ietf_parts (tag); -- disassemble tag into constituent part and validate return ((c and not err) and true) or nil; -- return true when code portion has a value without error message; nil else end --[[--------------------------< I S _ I E T F _ T A G >-------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function is_ietf_tag (frame) return _is_ietf_tag (getArgs (frame)[1]); -- args[1] is the IETF language tag to be tested; also get parent frame end --[[--------------------------< I S _ I E T F _ T A G _ F R A M E >-------------------------------------------- Module entry point from an {{#invoke:}}; same as is_ietf_tag() except does not get parameters from the parent (template) frame. This function not useful when called by {{lang|fn=is_ietf_tag_frame|<tag>}} because <tag> is in the parent frame. ]] local function is_ietf_tag_frame (frame) return _is_ietf_tag (getArgs (frame, {frameOnly = true,})[1]); -- args[1] is the IETF language tag to be tested; do not get parent frame end --[[--------------------------< _ N A M E _ F R O M _ T A G >-------------------------------------------------- Returns language name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Set invoke's |link= parameter to yes to get wikilinked version of the language name. Module entry point from another module. ]] local function _name_from_tag (args) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args['link']; -- make a boolean local label = args.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local language_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args['template'] and table.concat ({'{{', args['template'], '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private language_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant if 'yes' ~= args.raw then language_name = language_name:gsub ('%s+%b()', ''); -- remove IANA parenthetical disambiguators or qualifiers from names that have them end if link then -- when |link=yes, wikilink the language name if mw.ustring.find (language_name, 'languages', 1, true) then language_name = make_wikilink (language_name, label); -- collective language name uses simple wikilink elseif lang_data.article_name[raw_code:lower()] then -- is IETF tag in article name override? language_name = make_wikilink (lang_data.article_name[raw_code:lower()], label or language_name); -- language name with wikilink from override data elseif lang_data.article_name[code] then -- is language tag in article name override? language_name = make_wikilink (lang_data.article_name[code], label or language_name); -- language name with wikilink from override data else language_name = make_wikilink (substitute ('$1 $2', {language_name, cfg.misc_text_t.language}), label or language_name); -- language name with wikilink end end return language_name; end --[[--------------------------< N A M E _ F R O M _ T A G >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function name_from_tag (frame) -- entry point from an {{#invoke:lang|name_from_tag|<IETF tag>|link=<yes>|template=<template name>}} return _name_from_tag (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< _ T A G _ F R O M _ N A M E >-------------------------------------------------- Returns the IETF language tag associated with the language name. Spelling of language name must be correct according to the spelling in the source tables. When a standard language name has a parenthetical disambiguator, that disambiguator must be omitted (they are not present in the data name-to-tag tables). Module entry point from another module. ]] local function _tag_from_name (args) -- entry point from another module local msg; if args[1] and '' ~= args[1] then local data = mw.loadData ('Module:Lang/tag from name'); -- get the reversed data tables TODO: change when going live local lang = args[1]:lower(); -- allow any-case for the language name (speeling must till be correct) local tag = data.rev_override_table[lang] or data.rev_lang_table[lang] or data.rev_lang_dep_table[lang]; -- get the code; look first in the override then in the standard if tag then return tag, true; -- language name found so return tag and done; second return used by is_lang_name() else msg = substitute (cfg.tag_from_name_t.lang_not_found, {args[1]}); -- language name not found, error message end else msg = cfg.tag_from_name_t.missing_lang_name; -- language name not found, error message end local template = ''; if args.template and '' ~= args.template then template = table.concat ({'{{', args['template'], '}}: '}); -- make template name (if provided by the template) end return make_error_span (template, msg); end --[[--------------------------< T A G _ F R O M _ N A M E >---------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function tag_from_name (frame) -- entry point from an {{#invoke:lang|tag_from_name|<language name>|link=<yes>|template=<template name>}} local result, _ = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by is_lang_name() return result; end --[[--------------------------< I S _ L A N G _ N A M E >------------------------------------------------------ Module entry point from an {{#invoke:}}. ]] local function is_lang_name (frame) local _, result = _tag_from_name (getArgs(frame)) -- pass-on the args table, nothing else; getArgs() so we also get parent frame; supress second return used by tag_from_name() return result and true or nil; end --[[--------------------------< _ X L I T >-------------------------------------------------------------------- Module entry point from another module. ]] local function _xlit (args) local title_table = lang_data.translit_title_table; -- table of transliteration standards and the language codes and scripts that apply to those standards local language_name; -- language name that matches language code; used for tool tip local translit; -- transliterated text to display local script; -- IANA script local msg; -- for when called functions return an error message local template = args.template or cfg.templates_t.transliteration; maint_cats = {}; -- initialize because when this module required into another module, these only declared once so only initialzed once maint_msgs = {}; if is_set (args[3]) then -- [3] set when {{transliteration|code|standard|text}} args.text = args[3]; -- get the transliterated text args.translit_std = args[2] and args[2]:lower(); -- get the standard; lower case for table indexing if not title_table[args.translit_std] then return make_error_msg (substitute (cfg.transl_t.unrecog_xlit_std, {args.translit_std}), args, template); end else if is_set (args[2]) then -- [2] set when {{transliteration|code|text}} args.text = args[2]; -- get the transliterated text else if args[1] and (args[1]:match ('^%a%a%a?%a?$') or -- args[2] missing; is args[1] a language or script tag or is it the transliterated text? args[1]:match ('^%a%a%a?%-x%-')) then -- or is args[1] a private-use tag return make_error_msg (cfg.transl_t.no_text, args, template); -- args[1] is a code so we're missing text else args.text = args[1]; -- args[1] is not a code so we're missing that; assign args.text for error message return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); end end end if is_set (args[1]) then -- IANA language code used for HTML lang= attribute; or ISO 15924 script code if args[1]:match ('^%a%a%a?%a?$') or args[1]:match ('^%a%a%a?%-x%-') then -- args[1] has correct form? args.code = args[1]:lower(); -- use the language/script code; only (2, 3, or 4 alpha characters) or private-use; lower case because table indexes are lower case else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args[1]}), args, template); -- invalid language / script code end else return make_error_msg (cfg.transl_t.missing_lang_scr, args, template); -- missing language / script code so quit end local is_latn_text, pos, char; is_latn_text, args.text, pos, char= is_latin (args.text, args.code); -- is latn text? strip accept-as-written markup if not is_latn_text then -- when text is not latn return make_error_msg (substitute (cfg.lang_xx_t.translit_nonlatn, {pos, char}), args, template); -- abandon with error message end args.italic, msg = validate_italic (args); if msg then return make_error_msg (msg, args, template); end if 'italic' == args.italic then -- 'italic' when |italic=yes; because that is same as absent or not set and |italic=default args.italic = nil; -- set to nil; end args.engvar = cfg.engvar_sel_t[args.engvar] or cfg.default_engvar; -- |engvar= when valid; cfg.default_engvar else if override_table[args.code] then -- is code a language code defined in the override table? language_name = override_table[args.code]; args.code = args.code:match ('^%a%a%a?'); -- if private use, strip all but language subtag elseif lang_table[args.code] then -- is code a language code defined in the standard language code tables? language_name = lang_table[args.code]; elseif lang_dep_table[args.code] then -- is code a language code defined in the deprecated language code tables? language_name = lang_dep_table[args.code]; elseif script_table[args.code] then -- if here, code is not a language code; is it a script code? language_name = script_table[args.code]; script = args.code; -- code was an ISO 15924 script so use that instead args.code = ''; -- unset because not a language code else return make_error_msg (substitute (cfg.transl_t.unrecog_lang_scr, {args.code}), args, template); -- invalid language / script code end -- here only when all parameters passed to make_translit() are valid return make_translit (args.code, language_name, args.text, args.translit_std, script, args.italic, args.engvar); end --[[--------------------------< X L I T >---------------------------------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function xlit (frame) return _xlit (getArgs(frame)); end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Returns category name associated with IETF language tag if valid; error message else. All code combinations supported by {{lang}} and the {{lang-??}} templates are supported by this function. Module entry point from another module. ]] local function _category_from_tag (args_t) local subtags = {}; -- IETF subtags script, region, variant, and private local raw_code = args_t[1]; -- save a copy of the input IETF subtag local link = cfg.keywords_t.affirmative == args_t.link; -- make a boolean local label = args_t.label; local code; -- the language code local msg; -- gets an error message if IETF language tag is malformed or invalid local category_name = ''; code, subtags.script, subtags.region, subtags.variant, subtags.private, msg = get_ietf_parts (raw_code); if msg then local template = (args_t.template and table.concat ({'{{', args_t.template, '}}: '})) or ''; -- make template name (if provided by the template) return make_error_span (template, msg); end raw_code = format_ietf_tag (code, subtags.script, subtags.region, subtags.variant, subtags.private); -- format to recommended subtag styles; private omitted because private category_name = language_name_get (raw_code, code); -- get language name; try IETF tag first, then code w/o variant then code w/ variant category_name = make_category (code, category_name, nil, true):gsub ('[%[%]]', ''); if link then return table.concat ({'[[:', category_name, ']]'}); else return category_name; end end --[[--------------------------< C A T E G O R Y _ F R O M _ T A G >-------------------------------------------- Module entry point from an {{#invoke:}}. ]] local function category_from_tag (frame) -- entry point from an {{#invoke:lang|category_from_tag|<IETF tag>|template=<template name>}} return _category_from_tag (getArgs (frame)); -- pass-on the args table, nothing else; getArgs() so we also get parent frame end --[[--------------------------< E X P O R T E D F U N C T I O N S >------------------------------------------ ]] return { category_from_tag = category_from_tag, -- frame entry points when this module is #invoke:ed into templates/wikitext lang = lang, -- entry point for {{lang}} langx = langx, -- entry point for {{langx}} lang_xx_inherit = lang_xx_inherit, -- entry points for {{lang-??}} lang_xx_italic = lang_xx_italic, is_ietf_tag = is_ietf_tag, is_ietf_tag_frame = is_ietf_tag_frame, is_lang_name = is_lang_name, tag_from_name = tag_from_name, -- returns IETF tag associated with language name name_from_tag = name_from_tag, -- used for template documentation; possible use in ISO 639 name from code templates xlit = xlit, -- entry point for {{transliteration}} _category_from_tag = _category_from_tag, -- API entry points when this module is require()d into other modules _lang = _lang, _langx = _langx, _lang_xx_inherit = _lang_xx_inherit, _lang_xx_italic = _lang_xx_italic, _is_ietf_tag = _is_ietf_tag, get_ietf_parts = get_ietf_parts, _tag_from_name = _tag_from_name, _name_from_tag = _name_from_tag, _xlit = _xlit, _translation_make = translation_make, }; 4lchs3y6tbwcup48cwp3ayuhrxmusvw Модул:Unicode data 828 3547 21390 2025-09-16T02:46:49Z Drmccreedy 2744 Add Khitan Small Script (which was omitted so showed as "reserved" in the Unichar template), condense contiguous ranges 21390 Scribunto text/plain local p = {} local floor = math.floor local function errorf(level, ...) if type(level) == "number" then return error(string.format(...), level + 1) else -- level is actually the format string. return error(string.format(level, ...), 2) end end local function binary_range_search(codepoint, ranges) local low, mid, high low, high = 1, ranges.length or require "Module:TableTools".length(ranges) while low <= high do mid = floor((low + high) / 2) local range = ranges[mid] if codepoint < range[1] then high = mid - 1 elseif codepoint <= range[2] then return range, mid else low = mid + 1 end end return nil, mid end p.binary_range_search = binary_range_search --[[ local function linear_range_search(codepoint, ranges) for i, range in ipairs(ranges) do if range[1] <= codepoint and codepoint <= range[2] then return range end end end --]] -- Load a module by indexing "loader" with the name of the module minus the -- "Module:Unicode data/" part. For instance, loader.blocks returns -- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be -- returned. local loader = setmetatable({}, { __index = function (self, key) local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key) if not success then data = false end self[key] = data return data end }) -- For the algorithm used to generate Hangul Syllable names, -- see "Hangul Syllable Name Generation" in section 3.12 of the -- Unicode Specification: -- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf -- binary_range_search assumes these are ordered by codepoint. Do not place them in a random order! local name_hooks = { { 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters { 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters { 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A { 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph { 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables local Hangul_data = loader.Hangul local syllable_index = codepoint - 0xAC00 return ("HANGUL SYLLABLE %s%s%s"):format( Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)], Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count) / Hangul_data.trail_count)], Hangul_data.trails[syllable_index % Hangul_data.trail_count] ) end }, -- High Surrogates, High Private Use Surrogates, Low Surrogates { 0xD800, 0xDFFF, "<surrogate-%04X>" }, { 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use -- CJK Compatibility Ideographs { 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0xFE00, 0xFE0F, function (codepoint) -- Variation Selectors return ("VARIATION SELECTOR-%d"):format(codepoint - 0xFE00 + 1) end}, { 0x13460, 0x143FA, "EGYPTIAN HIEROGLYPH-%04X" }, -- Egyptian Hieroglyphs Extended-A { 0x17000, 0x187FF, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph { 0x18800, 0x18AFF, function (codepoint) return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF) end }, { 0x18B00, 0x18CD5, "KHITAN SMALL SCRIPT CHARACTER-%04X" }, -- Khitan Small Script { 0x18CFF, 0x18CFF, "KHITAN SMALL SCRIPT CHARACTER-%04X" }, -- Khitan Small Script { 0x18D00, 0x18D1E, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement { 0x18D80, 0x18DF2, function (codepoint) return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x18A7F) end }, { 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu { 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B { 0x2A700, 0x2B81D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C, D { 0x2B820, 0x2CEAD, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E { 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F { 0x2EBF0, 0x2EE5D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension I { 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, -- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane) { 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G { 0x31350, 0x33479, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H, J { 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17) end}, { 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use { 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use } name_hooks.length = #name_hooks local name_range_cache local function generate_name(data, codepoint) if type(data) == "string" then return data:format(codepoint) else return data(codepoint) end end --[[ -- Checks that the code point is a number and in range. -- Does not check whether code point is an integer. -- Not used local function check_codepoint(funcName, argIdx, val) require 'libraryUtil'.checkType(funcName, argIdx, val, 'number') if codepoint < 0 or 0x10FFFF < codepoint then errorf("Codepoint %04X out of range", codepoint) end end --]] function p.is_noncharacter(codepoint) -- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned -- (Cn) and specifically noncharacters: -- https://www.unicode.org/faq/private_use.html#nonchar4 return 0xFDD0 <= codepoint and (codepoint <= 0xFDEF or floor(codepoint % 0x10000) >= 0xFFFE) end -- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8 function p.lookup_name(codepoint) if p.is_noncharacter(codepoint) then return ("<noncharacter-%04X>"):format(codepoint) end if name_range_cache -- Check if previously used "name hook" applies to this code point. and codepoint >= name_range_cache[1] and codepoint <= name_range_cache[2] then return generate_name(name_range_cache[3], codepoint) end local range = binary_range_search(codepoint, name_hooks) if range then name_range_cache = range return generate_name(range[3], codepoint) end local data = loader[('names/%03X'):format(codepoint / 0x1000)] if data and data[codepoint] then return data[codepoint] -- Unassigned (Cn) consists of noncharacters and reserved characters. -- The character has been established not to be a noncharacter, -- and if it were assigned, its name would already been retrieved, -- so it must be reserved. else return ("<reserved-%04X>"):format(codepoint) end end function p.lookup_image(codepoint) local data = loader[('images/%03X'):format(codepoint / 0x1000)] if data then return data[codepoint] end end local planes = { [ 0] = "Basic Multilingual Plane"; [ 1] = "Supplementary Multilingual Plane"; [ 2] = "Supplementary Ideographic Plane"; [ 3] = "Tertiary Ideographic Plane"; [14] = "Supplementary Special-purpose Plane"; [15] = "Supplementary Private Use Area-A"; [16] = "Supplementary Private Use Area-B"; } -- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable. local blocks local function block_iter(blocks, i) i = i + 1 local data = blocks[i] if data then -- Unpack doesn't work on tables loaded with mw.loadData. return i, data[1], data[2], data[3] end end -- An ipairs-type iterator generator for the list of blocks. function p.enum_blocks() local blocks = loader.blocks return block_iter, blocks, 0 end function p.lookup_plane(codepoint) local i = floor(codepoint / 0x10000) return planes[i] or ("Plane %u"):format(i) end function p.lookup_block(codepoint) local blocks = loader.blocks local range = binary_range_search(codepoint, blocks) if range then return range[3] else return "No Block" end end function p.get_block_info(name) for i, block in ipairs(loader.blocks) do if block[3] == name then return block end end end function p.is_valid_pagename(pagename) local has_nonws = false for cp in mw.ustring.gcodepoint(pagename) do if (cp == 0x0023) -- # or (cp == 0x005B) -- [ or (cp == 0x005D) -- ] or (cp == 0x007B) -- { or (cp == 0x007C) -- | or (cp == 0x007D) -- } or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block or (cp == 0xFFFD) -- REPLACEMENT CHARACTER then return false end local printable, result = p.is_printable(cp) if not printable then return false end if result ~= "space-separator" then has_nonws = true end end return has_nonws end local function manual_unpack(what, from) if what[from + 1] == nil then return what[from] end local result = {} from = from or 1 for i, item in ipairs(what) do if i >= from then table.insert(result, item) end end return unpack(result) end local function compare_ranges(range1, range2) return range1[1] < range2[1] end -- Creates a function to look up data in a module that contains "singles" (a -- code point-to-data map) and "ranges" (an array containing arrays that contain -- the low and high code points of a range and the data associated with that -- range). -- "loader" loads and returns the "singles" and "ranges" tables. -- "match_func" is passed the code point and either the data or the "dots", and -- generates the final result of the function. -- The varargs ("dots") describes the default data to be returned if there wasn't -- a match. -- In case the function is used more than once, "cache" saves ranges that have -- already been found to match, or a range whose data is the default if there -- was no match. local function memo_lookup(data_module_subpage, match_func, ...) local dots = { ... } local cache = {} local singles, ranges return function (codepoint) if not singles then local data_module = loader[data_module_subpage] singles, ranges = data_module.singles, data_module.ranges end if singles[codepoint] then return match_func(codepoint, singles[codepoint]) end local range = binary_range_search(codepoint, cache) if range then return match_func(codepoint, manual_unpack(range, 3)) end local range, index = binary_range_search(codepoint, ranges) if range then table.insert(cache, range) table.sort(cache, compare_ranges) return match_func(codepoint, manual_unpack(range, 3)) end if ranges[index] then local dots_range if codepoint > ranges[index][2] then dots_range = { ranges[index][2] + 1, ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF, unpack(dots) } else -- codepoint < range[index][1] dots_range = { ranges[index - 1] and ranges[index - 1][2] + 1 or 0, ranges[index][1] - 1, unpack(dots) } end table.sort(cache, compare_ranges) end return match_func(codepoint) end end -- Get a code point's combining class value in [[Module:Unicode data/combining]], -- and return whether this value is not zero. Zero is assigned as the default -- if the combining class value is not found in this data module. -- That is, return true if character is combining, or false if it is not. -- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for -- more information. p.is_combining = memo_lookup( "combining", function (codepoint, combining_class) return combining_class and combining_class ~= 0 or false end, 0) function p.add_dotted_circle(str) return (mw.ustring.gsub(str, ".", function(char) if p.is_combining(mw.ustring.codepoint(char)) then return '◌' .. char end end)) end local lookup_control = memo_lookup( "control", function (codepoint, ccc) return ccc or "assigned" end, "assigned") p.lookup_control = lookup_control function p.is_assigned(codepoint) return lookup_control(codepoint) ~= "unassigned" end function p.is_printable(codepoint) local result = lookup_control(codepoint) return (result == "assigned") or (result == "space-separator"), result end function p.is_whitespace(codepoint) local result = lookup_control(codepoint) return (result == "space-separator"), result end p.lookup_category = memo_lookup( "category", function (codepoint, category) return category end, "Cn") local lookup_script = memo_lookup( "scripts", function (codepoint, script_code) return script_code or 'Zzzz' end, "Zzzz") p.lookup_script = lookup_script function p.get_best_script(str) -- Check type of argument, because mw.text.decode coerces numbers to strings! require "libraryUtil".checkType("get_best_script", 1, str, "string") -- Convert HTML character references (including named character references, -- or character entities) to characters. str = mw.text.decode(str, true) local scripts = {} for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) -- Ignore "Inherited", "Undetermined", or "Uncoded" scripts. if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then scripts[script] = true end end -- If scripts does not contain two or more keys, -- return first and only key (script code) in table. if not next(scripts, next(scripts)) then return next(scripts) end -- else return majority script, or else "Zzzz"? end function p.is_Latin(str) require "libraryUtil".checkType("get_best_script", 1, str, "string") str = mw.text.decode(str, true) -- Search for the leading bytes that introduce the UTF-8 encoding of the -- code points U+0340-U+10FFFF. If they are not found and there is at least -- one Latin-script character, the string counts as Latin, because the rest -- of the characters can only be Zyyy, Zinh, and Zzzz. -- The only scripts found below U+0370 (the first code point of the Greek -- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz. -- See the codepage in the [[UTF-8]] article. if not str:find "[\205-\244]" then for codepoint in mw.ustring.gcodepoint(str) do if lookup_script(codepoint) == "Latn" then return true end end end local Latn = false local i = 0; -- indexer for use in error messages for codepoint in mw.ustring.gcodepoint(str) do i = i + 1; -- bump the indexer local script = lookup_script(codepoint) if script == "Latn" then Latn = true elseif not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then return false, i -- abandon as not Latn; identify the offending character's position end end return Latn, (not Latn and i) or nil -- when <Latn> false, return offending charactor's position as second return value; nil else end -- Checks that a string contains only characters belonging to right-to-left -- scripts, or characters of ignorable scripts. function p.is_rtl(str) require "libraryUtil".checkType("get_best_script", 1, str, "string") str = mw.text.decode(str, true) -- Search for the leading bytes that introduce the UTF-8 encoding of the -- code points U+0580-U+10FFFF. If they are not found, the string can only -- have characters from a left-to-right script, because the first code point -- in a right-to-left script is U+0591, in the Hebrew block. if not str:find "[\214-\244]" then return false end local result = false local rtl = loader.scripts.rtl for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) if rtl[script] then result = true elseif not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then return false end end return result end --[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------ external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text has <br /> tags. ]] function p.is_rtl_frame (frame) local str = frame.args[1]; -- get the string from the {{#invoke:}} frame str = str:gsub ('%b<>', ''); -- strip any html and html-like tags return p.is_rtl (str); -- return if whatever remains rtl; false else end local function get_codepoint(args, arg) local codepoint_string = args[arg] or errorf(2, "Parameter %s is required", tostring(arg)) local codepoint = tonumber(codepoint_string, 16) or errorf(2, "Parameter %s is not a code point in hexadecimal base", tostring(arg)) if not (0 <= codepoint and codepoint <= 0x10FFFF) then errorf(2, "code point in parameter %s out of range", tostring(arg)) end return codepoint end local function get_func(args, arg, prefix) local suffix = args[arg] or errorf(2, "Parameter %s is required", tostring(arg)) suffix = mw.text.trim(suffix) local func_name = prefix .. suffix local func = p[func_name] or errorf(2, "There is no function '%s'", func_name) return func end -- This function allows any of the "lookup" functions to be invoked. The first -- parameter is the word after "lookup_"; the second parameter is the code point -- in hexadecimal base. function p.lookup(frame) local func = get_func(frame.args, 1, "lookup_") local codepoint = get_codepoint(frame.args, 2) local result = func(codepoint) if func == p.lookup_name then -- Prevent code point labels such as <control-0000> from being -- interpreted as HTML tags. result = result:gsub("<", "&lt;") end return result end function p.is(frame) local func = get_func(frame.args, 1, "is_") -- is_Latin and is_valid_pagename take strings. if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then return (func(frame.args[2])) else -- The rest take code points. local codepoint = get_codepoint(frame.args, 2) return (func(codepoint)) -- Adjust to one result. end end function p.lookup_kCantonese(codepoint) local data = loader[('Unihan/kCantonese/%02X'):format(floor(codepoint / 0x1000))] if data then return data[codepoint] end end return p lpch26b2gp1fn7mckdrno7qed9ofzvn 21391 21390 2026-09-14T15:30:44Z Keresturec 18 1 измена увезена из [[:en:Module:Unicode_data]]: Importing from the English wikipedia 21390 Scribunto text/plain local p = {} local floor = math.floor local function errorf(level, ...) if type(level) == "number" then return error(string.format(...), level + 1) else -- level is actually the format string. return error(string.format(level, ...), 2) end end local function binary_range_search(codepoint, ranges) local low, mid, high low, high = 1, ranges.length or require "Module:TableTools".length(ranges) while low <= high do mid = floor((low + high) / 2) local range = ranges[mid] if codepoint < range[1] then high = mid - 1 elseif codepoint <= range[2] then return range, mid else low = mid + 1 end end return nil, mid end p.binary_range_search = binary_range_search --[[ local function linear_range_search(codepoint, ranges) for i, range in ipairs(ranges) do if range[1] <= codepoint and codepoint <= range[2] then return range end end end --]] -- Load a module by indexing "loader" with the name of the module minus the -- "Module:Unicode data/" part. For instance, loader.blocks returns -- [[Module:Unicode data/blocks]]. If a module cannot be loaded, false will be -- returned. local loader = setmetatable({}, { __index = function (self, key) local success, data = pcall(mw.loadData, "Module:Unicode data/" .. key) if not success then data = false end self[key] = data return data end }) -- For the algorithm used to generate Hangul Syllable names, -- see "Hangul Syllable Name Generation" in section 3.12 of the -- Unicode Specification: -- https://www.unicode.org/versions/Unicode11.0.0/ch03.pdf -- binary_range_search assumes these are ordered by codepoint. Do not place them in a random order! local name_hooks = { { 0x00, 0x1F, "<control-%04X>" }, -- C0 control characters { 0x7F, 0x9F, "<control-%04X>" }, -- DEL and C1 control characters { 0x3400, 0x4DBF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension A { 0x4E00, 0x9FFF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph { 0xAC00, 0xD7A3, function (codepoint) -- Hangul Syllables local Hangul_data = loader.Hangul local syllable_index = codepoint - 0xAC00 return ("HANGUL SYLLABLE %s%s%s"):format( Hangul_data.leads[floor(syllable_index / Hangul_data.final_count)], Hangul_data.vowels[floor((syllable_index % Hangul_data.final_count) / Hangul_data.trail_count)], Hangul_data.trails[syllable_index % Hangul_data.trail_count] ) end }, -- High Surrogates, High Private Use Surrogates, Low Surrogates { 0xD800, 0xDFFF, "<surrogate-%04X>" }, { 0xE000, 0xF8FF, "<private-use-%04X>" }, -- Private Use -- CJK Compatibility Ideographs { 0xF900, 0xFA6D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0xFA70, 0xFAD9, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, { 0xFE00, 0xFE0F, function (codepoint) -- Variation Selectors return ("VARIATION SELECTOR-%d"):format(codepoint - 0xFE00 + 1) end}, { 0x13460, 0x143FA, "EGYPTIAN HIEROGLYPH-%04X" }, -- Egyptian Hieroglyphs Extended-A { 0x17000, 0x187FF, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph { 0x18800, 0x18AFF, function (codepoint) return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x187FF) end }, { 0x18B00, 0x18CD5, "KHITAN SMALL SCRIPT CHARACTER-%04X" }, -- Khitan Small Script { 0x18CFF, 0x18CFF, "KHITAN SMALL SCRIPT CHARACTER-%04X" }, -- Khitan Small Script { 0x18D00, 0x18D1E, "TANGUT IDEOGRAPH-%04X" }, -- Tangut Ideograph Supplement { 0x18D80, 0x18DF2, function (codepoint) return ("TANGUT COMPONENT-%03d"):format(codepoint - 0x18A7F) end }, { 0x1B170, 0x1B2FB, "NUSHU CHARACTER-%04X" }, -- Nushu { 0x20000, 0x2A6DF, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension B { 0x2A700, 0x2B81D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension C, D { 0x2B820, 0x2CEAD, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension E { 0x2CEB0, 0x2EBE0, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension F { 0x2EBF0, 0x2EE5D, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension I { 0x2F800, 0x2FA1D, "CJK COMPATIBILITY IDEOGRAPH-%04X" }, -- CJK Compatibility Ideographs Supplement (Supplementary Ideographic Plane) { 0x30000, 0x3134A, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension G { 0x31350, 0x33479, "CJK UNIFIED IDEOGRAPH-%04X" }, -- CJK Ideograph Extension H, J { 0xE0100, 0xE01EF, function (codepoint) -- Variation Selectors Supplement return ("VARIATION SELECTOR-%d"):format(codepoint - 0xE0100 + 17) end}, { 0xF0000, 0xFFFFD, "<private-use-%04X>" }, -- Plane 15 Private Use { 0x100000, 0x10FFFD, "<private-use-%04X>" } -- Plane 16 Private Use } name_hooks.length = #name_hooks local name_range_cache local function generate_name(data, codepoint) if type(data) == "string" then return data:format(codepoint) else return data(codepoint) end end --[[ -- Checks that the code point is a number and in range. -- Does not check whether code point is an integer. -- Not used local function check_codepoint(funcName, argIdx, val) require 'libraryUtil'.checkType(funcName, argIdx, val, 'number') if codepoint < 0 or 0x10FFFF < codepoint then errorf("Codepoint %04X out of range", codepoint) end end --]] function p.is_noncharacter(codepoint) -- U+FDD0-U+FDEF and all code points ending in FFFE or FFFF are Unassigned -- (Cn) and specifically noncharacters: -- https://www.unicode.org/faq/private_use.html#nonchar4 return 0xFDD0 <= codepoint and (codepoint <= 0xFDEF or floor(codepoint % 0x10000) >= 0xFFFE) end -- https://www.unicode.org/versions/Unicode11.0.0/ch04.pdf, section 4.8 function p.lookup_name(codepoint) if p.is_noncharacter(codepoint) then return ("<noncharacter-%04X>"):format(codepoint) end if name_range_cache -- Check if previously used "name hook" applies to this code point. and codepoint >= name_range_cache[1] and codepoint <= name_range_cache[2] then return generate_name(name_range_cache[3], codepoint) end local range = binary_range_search(codepoint, name_hooks) if range then name_range_cache = range return generate_name(range[3], codepoint) end local data = loader[('names/%03X'):format(codepoint / 0x1000)] if data and data[codepoint] then return data[codepoint] -- Unassigned (Cn) consists of noncharacters and reserved characters. -- The character has been established not to be a noncharacter, -- and if it were assigned, its name would already been retrieved, -- so it must be reserved. else return ("<reserved-%04X>"):format(codepoint) end end function p.lookup_image(codepoint) local data = loader[('images/%03X'):format(codepoint / 0x1000)] if data then return data[codepoint] end end local planes = { [ 0] = "Basic Multilingual Plane"; [ 1] = "Supplementary Multilingual Plane"; [ 2] = "Supplementary Ideographic Plane"; [ 3] = "Tertiary Ideographic Plane"; [14] = "Supplementary Special-purpose Plane"; [15] = "Supplementary Private Use Area-A"; [16] = "Supplementary Private Use Area-B"; } -- Load [[Module:Unicode data/blocks]] if needed and assign it to this variable. local blocks local function block_iter(blocks, i) i = i + 1 local data = blocks[i] if data then -- Unpack doesn't work on tables loaded with mw.loadData. return i, data[1], data[2], data[3] end end -- An ipairs-type iterator generator for the list of blocks. function p.enum_blocks() local blocks = loader.blocks return block_iter, blocks, 0 end function p.lookup_plane(codepoint) local i = floor(codepoint / 0x10000) return planes[i] or ("Plane %u"):format(i) end function p.lookup_block(codepoint) local blocks = loader.blocks local range = binary_range_search(codepoint, blocks) if range then return range[3] else return "No Block" end end function p.get_block_info(name) for i, block in ipairs(loader.blocks) do if block[3] == name then return block end end end function p.is_valid_pagename(pagename) local has_nonws = false for cp in mw.ustring.gcodepoint(pagename) do if (cp == 0x0023) -- # or (cp == 0x005B) -- [ or (cp == 0x005D) -- ] or (cp == 0x007B) -- { or (cp == 0x007C) -- | or (cp == 0x007D) -- } or (cp == 0x180E) -- MONGOLIAN VOWEL SEPARATOR or ((cp >= 0x2000) and (cp <= 0x200A)) -- spaces in General Punctuation block or (cp == 0xFFFD) -- REPLACEMENT CHARACTER then return false end local printable, result = p.is_printable(cp) if not printable then return false end if result ~= "space-separator" then has_nonws = true end end return has_nonws end local function manual_unpack(what, from) if what[from + 1] == nil then return what[from] end local result = {} from = from or 1 for i, item in ipairs(what) do if i >= from then table.insert(result, item) end end return unpack(result) end local function compare_ranges(range1, range2) return range1[1] < range2[1] end -- Creates a function to look up data in a module that contains "singles" (a -- code point-to-data map) and "ranges" (an array containing arrays that contain -- the low and high code points of a range and the data associated with that -- range). -- "loader" loads and returns the "singles" and "ranges" tables. -- "match_func" is passed the code point and either the data or the "dots", and -- generates the final result of the function. -- The varargs ("dots") describes the default data to be returned if there wasn't -- a match. -- In case the function is used more than once, "cache" saves ranges that have -- already been found to match, or a range whose data is the default if there -- was no match. local function memo_lookup(data_module_subpage, match_func, ...) local dots = { ... } local cache = {} local singles, ranges return function (codepoint) if not singles then local data_module = loader[data_module_subpage] singles, ranges = data_module.singles, data_module.ranges end if singles[codepoint] then return match_func(codepoint, singles[codepoint]) end local range = binary_range_search(codepoint, cache) if range then return match_func(codepoint, manual_unpack(range, 3)) end local range, index = binary_range_search(codepoint, ranges) if range then table.insert(cache, range) table.sort(cache, compare_ranges) return match_func(codepoint, manual_unpack(range, 3)) end if ranges[index] then local dots_range if codepoint > ranges[index][2] then dots_range = { ranges[index][2] + 1, ranges[index + 1] and ranges[index + 1][1] - 1 or 0x10FFFF, unpack(dots) } else -- codepoint < range[index][1] dots_range = { ranges[index - 1] and ranges[index - 1][2] + 1 or 0, ranges[index][1] - 1, unpack(dots) } end table.sort(cache, compare_ranges) end return match_func(codepoint) end end -- Get a code point's combining class value in [[Module:Unicode data/combining]], -- and return whether this value is not zero. Zero is assigned as the default -- if the combining class value is not found in this data module. -- That is, return true if character is combining, or false if it is not. -- See https://www.unicode.org/reports/tr44/#Canonical_Combining_Class_Values for -- more information. p.is_combining = memo_lookup( "combining", function (codepoint, combining_class) return combining_class and combining_class ~= 0 or false end, 0) function p.add_dotted_circle(str) return (mw.ustring.gsub(str, ".", function(char) if p.is_combining(mw.ustring.codepoint(char)) then return '◌' .. char end end)) end local lookup_control = memo_lookup( "control", function (codepoint, ccc) return ccc or "assigned" end, "assigned") p.lookup_control = lookup_control function p.is_assigned(codepoint) return lookup_control(codepoint) ~= "unassigned" end function p.is_printable(codepoint) local result = lookup_control(codepoint) return (result == "assigned") or (result == "space-separator"), result end function p.is_whitespace(codepoint) local result = lookup_control(codepoint) return (result == "space-separator"), result end p.lookup_category = memo_lookup( "category", function (codepoint, category) return category end, "Cn") local lookup_script = memo_lookup( "scripts", function (codepoint, script_code) return script_code or 'Zzzz' end, "Zzzz") p.lookup_script = lookup_script function p.get_best_script(str) -- Check type of argument, because mw.text.decode coerces numbers to strings! require "libraryUtil".checkType("get_best_script", 1, str, "string") -- Convert HTML character references (including named character references, -- or character entities) to characters. str = mw.text.decode(str, true) local scripts = {} for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) -- Ignore "Inherited", "Undetermined", or "Uncoded" scripts. if not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then scripts[script] = true end end -- If scripts does not contain two or more keys, -- return first and only key (script code) in table. if not next(scripts, next(scripts)) then return next(scripts) end -- else return majority script, or else "Zzzz"? end function p.is_Latin(str) require "libraryUtil".checkType("get_best_script", 1, str, "string") str = mw.text.decode(str, true) -- Search for the leading bytes that introduce the UTF-8 encoding of the -- code points U+0340-U+10FFFF. If they are not found and there is at least -- one Latin-script character, the string counts as Latin, because the rest -- of the characters can only be Zyyy, Zinh, and Zzzz. -- The only scripts found below U+0370 (the first code point of the Greek -- and Coptic block) are Latn, Zyyy, Zinh, and Zzzz. -- See the codepage in the [[UTF-8]] article. if not str:find "[\205-\244]" then for codepoint in mw.ustring.gcodepoint(str) do if lookup_script(codepoint) == "Latn" then return true end end end local Latn = false local i = 0; -- indexer for use in error messages for codepoint in mw.ustring.gcodepoint(str) do i = i + 1; -- bump the indexer local script = lookup_script(codepoint) if script == "Latn" then Latn = true elseif not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then return false, i -- abandon as not Latn; identify the offending character's position end end return Latn, (not Latn and i) or nil -- when <Latn> false, return offending charactor's position as second return value; nil else end -- Checks that a string contains only characters belonging to right-to-left -- scripts, or characters of ignorable scripts. function p.is_rtl(str) require "libraryUtil".checkType("get_best_script", 1, str, "string") str = mw.text.decode(str, true) -- Search for the leading bytes that introduce the UTF-8 encoding of the -- code points U+0580-U+10FFFF. If they are not found, the string can only -- have characters from a left-to-right script, because the first code point -- in a right-to-left script is U+0591, in the Hebrew block. if not str:find "[\214-\244]" then return false end local result = false local rtl = loader.scripts.rtl for codepoint in mw.ustring.gcodepoint(str) do local script = lookup_script(codepoint) if rtl[script] then result = true elseif not (script == "Zyyy" or script == "Zinh" or script == "Zzzz") then return false end end return result end --[[--------------------------< I S _ R T L _ F R A M E >------------------------------------------------------ external entry from an {{#invoke:}} to determine if a string of text is rtl. Strips html and html-like tags so that those tags don't corrupt the is-rtl-is-not-rtl determination; this added for the cases where the rtl text has <br /> tags. ]] function p.is_rtl_frame (frame) local str = frame.args[1]; -- get the string from the {{#invoke:}} frame str = str:gsub ('%b<>', ''); -- strip any html and html-like tags return p.is_rtl (str); -- return if whatever remains rtl; false else end local function get_codepoint(args, arg) local codepoint_string = args[arg] or errorf(2, "Parameter %s is required", tostring(arg)) local codepoint = tonumber(codepoint_string, 16) or errorf(2, "Parameter %s is not a code point in hexadecimal base", tostring(arg)) if not (0 <= codepoint and codepoint <= 0x10FFFF) then errorf(2, "code point in parameter %s out of range", tostring(arg)) end return codepoint end local function get_func(args, arg, prefix) local suffix = args[arg] or errorf(2, "Parameter %s is required", tostring(arg)) suffix = mw.text.trim(suffix) local func_name = prefix .. suffix local func = p[func_name] or errorf(2, "There is no function '%s'", func_name) return func end -- This function allows any of the "lookup" functions to be invoked. The first -- parameter is the word after "lookup_"; the second parameter is the code point -- in hexadecimal base. function p.lookup(frame) local func = get_func(frame.args, 1, "lookup_") local codepoint = get_codepoint(frame.args, 2) local result = func(codepoint) if func == p.lookup_name then -- Prevent code point labels such as <control-0000> from being -- interpreted as HTML tags. result = result:gsub("<", "&lt;") end return result end function p.is(frame) local func = get_func(frame.args, 1, "is_") -- is_Latin and is_valid_pagename take strings. if func == p.is_Latin or func == p.is_valid_pagename or func == p.is_rtl then return (func(frame.args[2])) else -- The rest take code points. local codepoint = get_codepoint(frame.args, 2) return (func(codepoint)) -- Adjust to one result. end end function p.lookup_kCantonese(codepoint) local data = loader[('Unihan/kCantonese/%02X'):format(floor(codepoint / 0x1000))] if data then return data[codepoint] end end return p lpch26b2gp1fn7mckdrno7qed9ofzvn Модул:Lang/data 828 3548 21392 2026-09-14T11:31:26Z Trappist the monk 2745 +tet; 21392 Scribunto text/plain local lang_obj = mw.language.getContentLanguage(); local this_wiki_lang_tag = lang_obj.code; -- get this wiki's language tag --[[--------------------------< L A N G _ N A M E _ T A B L E >------------------------------------------------ primary table of tables that decode: lang -> language tags and names script -> ISO 15924 script tags region -> ISO 3166 region tags variant -> IANA registered variant tags suppressed -> map of scripts tags and their associated language tags all of these data come from separate modules that are derived from the IANA language-subtag-registry file key_to_lower() avoids the metatable trap and sets all keys in the subtables to lowercase. Many language codes have multiple associated names; Module:lang is only concerned with the first name so key_to_lower() only fetches the first name. ]] local function key_to_lower (module, src_type) local out = {}; local source_t = (('var_sup' == src_type) and require (module)) or mw.loadData (module); -- fetch data from this module; require() avoids metatable trap for variant data if 'var_sup' == src_type then for k, v in pairs (source_t) do out[k:lower()] = v; -- for variant and suppressed everything is needed end elseif 'lang' == src_type and source_t.active then -- for ~/iana_languages (active) for k, v in pairs (source_t.active) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end elseif 'lang_dep' == src_type and source_t.deprecated then -- for ~/iana_languages (deprecated) for k, v in pairs (source_t.deprecated) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end else -- here for all other sources for k, v in pairs (source_t) do out[k:lower()] = v[1]; -- ignore multiple names; take first name only end end return out; end local lang_name_table_t = { lang = key_to_lower ('Module:Lang/data/iana languages', 'lang'), lang_dep = key_to_lower ('Module:Lang/data/iana languages', 'lang_dep'), script = key_to_lower ('Module:Lang/data/iana scripts'), -- script keys are capitalized; set to lower region = key_to_lower ('Module:Lang/data/iana regions'), -- region keys are uppercase; set to lower variant = key_to_lower ('Module:Lang/data/iana variants', 'var_sup'), suppressed = key_to_lower ('Module:Lang/data/iana suppressed scripts', 'var_sup'), -- script keys are capitalized; set to lower } --[[--------------------------< I 1 8 N M E D I A W I K I O V E R R I D E >-------------------------------- For internationalization; not used at en.wiki The language names taken from the IANA language-subtag-registry file are given in English. That may not be ideal. Translating ~8,000 language names is also not ideal. MediaWiki maintains (much) shorter lists of language names in most languages for which there is a Wikipedia edition. When desired, Module:Lang can use the MediaWiki language list for the local language. Caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all. When incomplete, MediaWiki's list will 'fall back' to another language (typically English). When that happens add an appropriate entry to the override table below. Caveat lector: the list of MediaWiki language names for your language may not be correct. At en.wiki, the MediaWiki language names do not agree with the IANA language names for these ISO 639-1 tags. Often it is simply spelling differences: bh: IANA: Bihari languages MW: Bhojpuri – the ISO 639-3 tag for Bhojpuri is bho bn: IANA: Bengali MW: Bangla – Bengali is the exonym, Bangla is the endonym dv: IANA: Dhivehi MW: Divehi el: IANA: Modern Greek MW: Greek ht: IANA: Haitian MW: Haitian Creole ky: IANA: Kirghiz MW: Kyrgyz li: IANA: Limburgan MW: Limburgish or: IANA: Oriya MW: Odia os: IANA: Ossetian MW: Ossetic "pa: IANA: Panjabi MW: Punjabi "ps: IANA: Pushto MW: Pashto "to: IANA: Tonga MW: Tongan "ug: IANA: Uighur MW: Uyghur use the override table to override language names that are incorrect for your project To see the list of names that MediaWiki has for your language, enter this in the Debug console: =mw.dumpObject (mw.language.fetchLanguageNames ('<tag>', 'all')) (replacing <tag> with the language tag for your language) Use of the MediaWiki language names lists is enabled when media_wiki_override_enable is set to boolean true. ]] local media_wiki_override_enable = false; -- set to true to override IANA names with MediaWiki names; always false at en.wiki -- caveat lector: the list of MediaWiki language names for your language may not be complete or may not exist at all if true == media_wiki_override_enable then local mw_languages_by_tag_t = mw.language.fetchLanguageNames (this_wiki_lang_tag, 'all'); -- get a table of language tag/name pairs known to MediaWiki for tag, name in pairs (mw_languages_by_tag_t) do -- loop through each tag/name pair in the MediaWiki list if lang_name_table_t.lang[tag] then -- if the tag is in the main list lang_name_table_t.lang[tag] = name; -- overwrite existing name with the name from MediaWiki end end end --[[--------------------------< O V E R R I D E >-------------------------------------------------------------- Language codes and names in this table override the BCP47 names in lang_name_table. indexes in this table shall always be lower case ]] local override = { ------------------------------< I S O _ 6 3 9 - 1 >------------------------------------------------------------ ["ab"] = "Abkhaz", -- to match en.wiki article name ["ca-valencia"] = "Valencian", ["cu"] = "Church Slavonic", -- 2nd IANA name; ["de-at"] = "Austrian German", -- these code-region and code-variant tags to match en.wiki article names ["de-ch"] = "Swiss Standard German", ["en-au"] = "Australian English", ["en-ca"] = "Canadian English", ["en-emodeng"] = "Early Modern English", ["en-gb"] = "British English", ["en-ie"] = "Irish English", ["en-in"] = "Indian English", ["en-nz"] = "New Zealand English", ["en-us"] = "American English", ["en-za"] = "South African English", ["fr-ca"] = "Canadian French", ["fr-gallo"] = "Gallo", ["fy"] = "West Frisian", -- Western Frisian ["mo"] = "Moldovan", -- Moldavian (deprecated code); to match en.wiki article title ["nl-be"] = "Flemish", -- match MediaWiki ["oc-gascon"] = "Gascon", ["oc-provenc"] = "Provençal", ["ps"] = "Pashto", -- Pushto ["pt-br"] = "Brazilian Portuguese", -- match MediaWiki ["ro-md"] = "Moldovan", -- 'not deprecated' form ["ro-cyrl-md"] = "Moldovan", -- 'not deprecated' form ["tw-asante"] = "Asante Twi", ["ug"] = "Uyghur", -- 2nd IANA name; to match en.wiki article name -- these ISO 639-1 language-name overrides imported from Module:Language/data/wp_languages (since deleted) --<begin do-not-edit except to comment out>-- ["av"] = "Avar", -- Avaric ["bo"] = "Standard Tibetan", -- Tibetan ["el"] = "Greek", -- Modern Greek -- ["en-SA"] = "South African English", -- English; no; SA is not South Africa it Saudi Arabia; ZA is South Africa ["ff"] = "Fula", -- Fulah ["ht"] = "Haitian Creole", -- Haitian ["hz"] = "Otjiherero", -- Herero ["ii"] = "Yi", -- Sichuan Yi ["ki"] = "Gikuyu", -- Kikuyu ["kl"] = "Greenlandic", -- Kalaallisut ["ky"] = "Kyrgyz", -- Kirghiz ["lg"] = "Luganda", -- Ganda ["li"] = "Limburgish", -- Limburgan ["mi"] = "Māori", -- Maori ["na"] = "Nauruan", -- Nauru ["nb"] = "Bokmål", -- Norwegian Bokmål ["nd"] = "Northern Ndebele", -- North Ndebele ["nn"] = "Nynorsk", -- Norwegian Nynorsk ["nr"] = "Southern Ndebele", -- South Ndebele ["ny"] = "Chichewa", -- Nyanja ["oj"] = "Ojibwe", -- Ojibwa ["or"] = "Odia", -- Oriya ["pa"] = "Punjabi", -- Panjabi ["rn"] = "Kirundi", -- Rundi ["sl"] = "Slovene", -- Slovenian ["ss"] = "Swazi", -- Swati ["st"] = "Sotho", -- Southern Sotho ["to"] = "Tongan", -- Tonga --<end do-not-edit except to comment out>-- ------------------------------< I S O _ 6 3 9 - 2, - 3, - 5 >---------------------------------------------- ["alv"] = "Atlantic–Congo languages", -- to match en.wiki article title (endash) ["arc"] = "Imperial Aramaic (700-300 BCE)", -- Official Aramaic (700-300 BCE), Imperial Aramaic (700-300 BCE); to match en.wiki article title uses ISO639-2 'preferred' name ["art"] = "constructed", -- to match en.wiki article; lowercase for category name ["arx"] = "Aruá (Rondonia State)", -- Aruá (Rodonia State); to match en.wiki article ["ast-es"] = "Leonese", -- ast in IANA is Asturian; Leonese is a dialect ["bea"] = "Dane-zaa", -- Beaver; to match en.wiki article title ["bha"] = "Bhariati", -- Bharia; to match en.wiki article title ["bhd"] = "Bhadarwahi", -- Bhadrawahi; to match en.wiki article title ["bla"] = "Blackfoot", -- Siksika; to match en.wiki article title ["blc"] = "Nuxalk", -- Bella Coola; to match en.wiki article title ["bua"] = "Buryat", -- Buriat; this is a macro language; these four use wp preferred transliteration; ["bxm"] = "Mongolian Buryat", -- Mongolia Buriat; these three all redirect to Buryat ["bxr"] = "Russian Buryat", -- Russia Buriat; ["bxu"] = "Chinese Buryat", -- China Buriat; ["byr"] = "Yipma", -- Baruya, Yipma ["clm"] = "Klallam", -- Clallam; to match en.wiki article title ["crb"] = "Kalinago", -- Island Carib; to match en.wiki article ["egy"] = "Ancient Egyptian", -- Egyptian (Ancient); distinguish from contemporary arz: Egyptian Arabic ["ems"] = "Alutiiq", -- Pacific Gulf Yupik; to match en.wiki article title ["esx"] = "Eskimo–Aleut languages", -- to match en.wiki article title (endash) ["frr"] = "North Frisian", -- Northern Frisian ["frs"] = "East Frisian Low Saxon", -- Eastern Frisian ["gsw-fr"] = "Alsatian", -- match MediaWiki ["haa"] = "Hän", -- Han; to match en.wiki article title ["hei"] = "Heiltsuk–Oowekyala", -- Heiltsuk; to match en.wiki article title ["hmx"] = "Hmong–Mien languages", -- to match en.wiki article title (endash) ["ilo"] = "Ilocano", -- Iloko; to match en.wiki article title ["jam"] = "Jamaican Patois", -- Jamaican Creole English ["lij-mc"] = "Monégasque", -- Ligurian as spoken in Monaco; this one for proper tool tip; also in <article_name> table ["luo"] = "Dholuo", -- IANA (primary) /ISO 639-3: Luo (Kenya and Tanzania); IANA (secondary): Dholuo ["mhr"] = "Meadow Mari", -- Eastern Mari ["mid"] = "Modern Mandaic", -- Mandaic ['mis'] = "uncoded", -- Uncoded languages; capitalization; special scope, not collective scope; ["mkh"] = "Mon–Khmer languages", -- to match en.wiki article title (endash) ["mla"] = "Tamambo", -- Malo ['mte'] = "Mono-Alu", -- Mono (Solomon Islands) ['mul'] = "multiple", -- Multiple languages; capitalization; special scope, not collective scope; ["nan-tw"] = "Taiwanese Hokkien", -- make room for IANA / 639-3 nan Min Nan Chinese; match en.wiki article title ["new"] = "Newar", -- Newari, Nepal Bhasa; to match en,wiki article title ["ngf"] = "Trans–New Guinea languages", -- to match en.wiki article title (endash) ["nic"] = "Niger–Congo languages", -- Niger-Kordofanian languages; to match en,wiki article title ["nrf"] = "Norman", -- not quite a collective - IANA name: Jèrriais + Guernésiais; categorizes to Norman-language text ["nrf-gg"] = "Guernésiais", -- match MediaWiki ["nrf-je"] = "Jèrriais", -- match MediaWiki ["nzi"] = "Nzema", -- Nzima; to match en.wiki article title ["oma"] = "Omaha–Ponca", -- to match en.wiki article title (endash) ["orv"] = "Old East Slavic", -- Old Russian ["pfl"] = "Palatine German", -- Pfaelzisch; to match en.wiki article ["pie"] = "Piro Pueblo", -- Piro; to match en.wiki article ["pms"] = "Piedmontese", -- Piemontese; to match en.wiki article title ["pnb"] = "Punjabi (Western)", -- Western Panjabi; dab added to override import from ~/wp languages and distinguish pnb from pa in reverse look up tag_from_name() ['qwm'] = "Cuman", -- Kuman (Russia); to match en.wiki article name ["rop"] = "Australian Kriol", -- Kriol; en.wiki article is a dab; point to correct en.wiki article ["rsk"] = "Pannonian Rusyn", -- Ruthenian; en.wiki preferred name ["sco-ulster"] = "Ulster Scots", ["sdo"] = "Bukar–Sadong", -- Bukar-Sadung Bidayuh; to match en.wiki article title ["smp"] = "Samaritan Hebrew", -- to match en.wiki article title ["stq"] = "Saterland Frisian", -- Saterfriesisch ["tet"] = "Tetun", -- to match en.wiki article title ["tfn"] = "Denaʼina", -- to match en.wiki article title ["und"] = "undetermined", -- capitalization to match existing category ["wrg"] = "Warrongo", -- Warungu ["xal-ru"] = "Kalmyk", -- to match en.wiki article title ["xgf"] = "Tongva", -- ISO 639-3 is Gabrielino-Fernandeño ["yuf"] = "Havasupai–Hualapai", -- Havasupai-Walapai-Yavapai; to match en.wiki article title ["zkh"] = "Khorezmian Turkic", -- Khorezmian; to match en.wiki article title, avoiding the dab ["zkt"] = "Khitan", -- Kitan; to match en.wiki article title ["zxx"] = "no linguistic content", -- capitalization -- these ISO 639-2, -3 language-name overrides imported from Module:Language/data/wp_languages (since deleted) --<begin do-not-edit except to comment out>-- ["ace"] = "Acehnese", -- Achinese ["aec"] = "Sa'idi Arabic", -- Saidi Arabic ["akl"] = "Aklan", -- Aklanon ["alt"] = "Altay", -- Southern Altai ["apm"] = "Mescalero-Chiricahua", -- Mescalero-Chiricahua Apache ["bal"] = "Balochi", -- Baluchi -- ["bcl"] = "Central Bicolano", -- Central Bikol ["bin"] = "Edo", -- Bini ["bpy"] = "Bishnupriya Manipuri", -- Bishnupriya ["chg"] = "Chagatay", -- Chagatai ["ckb"] = "Sorani Kurdish", -- Central Kurdish ["cnu"] = "Shenwa", -- Chenoua ["coc"] = "Cocopah", -- Cocopa ["diq"] = "Zazaki", -- Dimli ["fit"] = "Meänkieli", -- Tornedalen Finnish ["fkv"] = "Kven", -- Kven Finnish ["frk"] = "Old Frankish", -- Frankish ["gez"] = "Ge'ez", -- Geez ["gju"] = "Gujari", -- Gujari ["gsw"] = "Alemannic German", -- Swiss German ["gul"] = "Gullah", -- Sea Island Creole English ["hak"] = "Hakka", -- Hakka Chinese ["hbo"] = "Biblical Hebrew", -- Ancient Hebrew ["hnd"] = "Hindko", -- Southern Hindko -- ["ikt"] = "Inuvialuk", -- Inuinnaqtun ["kaa"] = "Karakalpak", -- Kara-Kalpak ["khb"] = "Tai Lü", -- Lü ["kmr"] = "Kurmanji Kurdish", -- Northern Kurdish ["kpo"] = "Kposo", -- Ikposo ["krj"] = "Kinaray-a", -- Kinaray-A -- ["ktz"] = "Juǀ'hoan", -- Juǀʼhoan ["lez"] = "Lezgian", -- Lezghian ["liv"] = "Livonian", -- Liv ["lng"] = "Lombardic", -- Langobardic ["mia"] = "Miami-Illinois", -- Miami ["miq"] = "Miskito", -- Mískito ["mix"] = "Mixtec", -- Mixtepec Mixtec ["mni"] = "Meitei", -- Manipuri ["mrj"] = "Hill Mari", -- Western Mari ["mww"] = "White Hmong", -- Hmong Daw ["nds-nl"] = "Dutch Low Saxon", -- Low German -- ["new"] = "Nepal Bhasa", -- Newari ["nso"] = "Northern Sotho", -- Pedi -- ["nwc"] = "Classical Nepal Bhasa", -- Classical Newari, Classical Nepal Bhasa, Old Newari ["ood"] = "O'odham", -- Tohono O'odham ["otk"] = "Old Turkic", -- Old Turkish ["pal"] = "Middle Persian", -- Pahlavi ["pam"] = "Kapampangan", -- Pampanga ["phr"] = "Potwari", -- Pahari-Potwari ["pka"] = "Jain Prakrit", -- Ardhamāgadhī Prākrit -- ["pnb"] = "Punjabi", -- Western Panjabi ["psu"] = "Shauraseni", -- Sauraseni Prākrit ["rap"] = "Rapa Nui", -- Rapanui ["rar"] = "Cook Islands Māori", -- Rarotongan ["rmu"] = "Scandoromani", -- Tavringer Romani ["rom"] = "Romani", -- Romany ["rup"] = "Aromanian", -- Macedo-Romanian ["ryu"] = "Okinawan", -- Central Okinawan ["sdc"] = "Sassarese", -- Sassarese Sardinian ["sdn"] = "Gallurese", -- Gallurese Sardinian ["shp"] = "Shipibo", -- Shipibo-Conibo ["src"] = "Logudorese", -- Logudorese Sardinian ["sro"] = "Campidanese", -- Campidanese Sardinian ["tkl"] = "Tokelauan", -- Tokelau ["tvl"] = "Tuvaluan", -- Tuvalu ["tyv"] = "Tuvan", -- Tuvinian ["vls"] = "West Flemish", -- Vlaams ["wep"] = "Westphalian", -- Westphalien ["xal"] = "Oirat", -- Kalmyk ["xcl"] = "Old Armenian", -- Classical Armenian ["yua"] = "Yucatec Maya", -- Yucateco --<end do-not-edit except to comment out>-- ------------------------------< P R I V A T E _ U S E _ T A G S >---------------------------------------------- ["akk-x-latbabyl"] = "Late Babylonian Akkadian", ["akk-x-midassyr"] = "Middle Assyrian Akkadian", ["akk-x-midbabyl"] = "Middle Babylonian Akkadian", ["akk-x-neoassyr"] = "Neo-Assyrian Akkadian", ["akk-x-neobabyl"] = "Neo-Babylonian Akkadian", ["akk-x-old"] = "Old Akkadian", ["akk-x-oldassyr"] = "Old Assyrian Akkadian", ["akk-x-oldbabyl"] = "Old Babylonian Akkadian", ["alg-x-proto"] = "Proto-Algonquian", -- alg in IANA is Algonquian languages ["ar-x-classic"] = "Classical Arabic", ["ar-x-nabat"] = "Nabataean Arabic", ["ar-x-safaitic"] = "Safaitic", ["art-x-uropi"] = "Uropi", -- art in IANA is Artificial languages ["ast-x-west"] = "Western Asturian", ["ca-x-old"] = "Old Catalan", ["cel-x-combrit"] = "Common Brittonic", -- cel in IANA is Celtic languages ["cel-x-proto"] = "Proto-Celtic", ["ccs-x-proto"] = "Proto-Kartvelian", -- ccs in IANA is Kartvelian languages ["egy-x-demotic"] = "Demotic Egyptian", ["egy-x-late"] = "Late Egyptian", ["egy-x-middle"] = "Middle Egyptian", ["egy-x-old"] = "Old Egyptian", ["et-x-seto"] = "Seto", -- to replace {{Lang-est-sea}} ["fa-x-classic"] = "Classical Persian", ["fiu-x-proto"] = "Proto-Finno-Ugric", -- fiu in IANA is Finno-Ugric languages ["fr-x-frainc"] = "Franc-Comtois", -- to replace {{Lang-fra-frc}} ["fr-x-quebec"] = "Quebec French", ["gem-x-proto"] = "Proto-Germanic", -- gem in IANA is Germanic languages ["gmq-x-proto"] = "Proto-Norse", ["gmw-x-ecg"] = "East Central German", ["gmw-x-proto"] = "Proto-West Germanic", ["grc-x-aeolic"] = "Aeolic Greek", -- these grc-x-... codes are preferred alternates to the non-standard catchall code grc-gre ["grc-x-arcadcyp"] = "Arcadocypriot Greek", ["grc-x-attic"] = "Attic Greek", ["grc-x-biblical"] = "Biblical Greek", ["grc-x-byzant"] = "Byzantine Greek", ["grc-x-classic"] = "Classical Greek", ["grc-x-doric"] = "Doric Greek", ["grc-x-hellen"] = "Hellenistic Greek", ["grc-x-ionic"] = "Ionic Greek", ["grc-x-koine"] = "Koine Greek", ["grc-x-medieval"] = "Medieval Greek", ["grc-x-pamph"] = "Pamphylian Greek", ["grc-x-patris"] = "Patristic Greek", ["grk-x-proto"] = "Proto-Greek", -- grk in IANA is Greek languages ["iir-x-proto"] = "Proto-Indo-Iranian", -- iir in IANA is Indo-Iranian Languages ["inc-x-mitanni"] = "Mitanni-Aryan", -- inc in IANA is Indic languages ["inc-x-proto"] = "Proto-Indo-Aryan", ["ine-x-anatolia"] = "Anatolian languages", ["ine-x-proto"] = "Proto-Indo-European", ["ira-x-proto"] = "Proto-Iranian", -- ira in IANA is Iranian languages ["itc-x-proto"] = "Proto-Italic", -- itc in IANA is Italic languages ["ksh-x-colog"] = "Colognian", -- en.wiki article is Colognian; ksh (Kölsch) redirects there ["la-x-church"] = "Ecclesiastical Latin", ["la-x-classic"] = "Classical Latin", ["la-x-late"] = "Late Latin", ["la-x-medieval"] = "Medieval Latin", ["la-x-new"] = "New Latin", ["la-x-old"] = "Old Latin", ["la-x-ren"] = "Renaissance Latin", ["la-x-vulgar"] = "Vulgar Latin", ["lmo-x-berg"] = "Bergamasque", -- lmo in IANA is Lombard; Bergamasque is a dialect ["lmo-x-cremish"] = "Cremish", -- lmo in IANA is Lombard; Cremish is a dialect ["lmo-x-milanese"] = "Milanese", -- lmo in IANA is Lombard; Milanese is a dialect ["mis-x-ripuar"] = "Ripuarian", -- replaces improper use of ksh in wp_languages ["prg-x-old"] = "Old Prussian", ["roa-x-proto"] = "Proto-Romance", ["sem-x-ammonite"] = "Ammonite", ["sem-x-aramaic"] = "Aramaic", ["sem-x-canaan"] = "Canaanite languages", ["sem-x-dadanit"] = "Dadanitic", ["sem-x-dumaitic"] = "Dumaitic", ["sem-x-egurage"] = "Eastern Gurage", ["sem-x-hasaitic"] = "Hasaitic", ["sem-x-hatran"] = "Hatran Aramaic", ["sem-x-hismaic"] = "Hismaic", ["sem-x-nabat"] = "Nabataean Aramaic", ["sem-x-oldsoara"] = "Old South Arabian", ["sem-x-palmyren"] = "Palmyrene Aramaic", ["sem-x-proto"] = "Proto-Semitic", ["sem-x-taymanit"] = "Taymanitic", ["smi-x-proto"] = "Proto-Samic", -- smi in IANA is Samic languages ["sla-x-proto"] = "Proto-Slavic", -- sla in IANA is Slavic languages ["sq-x-proto"] = "Proto-Albanian", ["trk-x-oldanat"] = "Old Anatolian Turkish", -- to replace {{Lang-1ca}} ["urj-x-proto"] = "Proto-Uralic", -- urj in IANA is Uralic languages ["yuf-x-hav"] = "Havasupai", -- IANA name for these three is Havasupai-Walapai-Yavapai ["yuf-x-wal"] = "Walapai", ["yuf-x-yav"] = "Yavapai", ["xsa-x-himyarit"] = "Himyaritic", ["xsc-x-pontic"] = "Pontic Scythian", -- xsc in IANA is Scythian ["xsc-x-saka"] = "Saka", ["xsc-x-sarmat"] = "Sarmatian", ["zle-x-ruthenia"] = "Ruthenian", -- zle in IANA is East Slavic languages collective; moved to allow rsk for Pannonian Rusyn } --[[--------------------------< A R T I C L E _ L I N K >------------------------------------------------------ for those rare occasions when article titles don't fit with the normal '<language name> language', this table maps language code to article title. Use of this table should be avoided and the use of redirects preferred as that is the long-standing method of handling article names that don't fit with the normal pattern ]] local article_name = { ['aru'] = "Arawá language", -- Aruá (Amazonas State); to avoid Aruá dab page ['arx'] = "Aruá language (Rondônia)", -- Aruá (Rodonia State) overridden to Aruá (Rondonia State); to avoid Aruá dab page ['kue'] = "Kuman language (New Guinea)", -- Kuman (Papua New Guinea); to avoid Kuman dab page ["lij-mc"] = "Monégasque dialect", -- Ligurian as spoken in Monaco ['mbo'] = "Mbo language (Cameroon)", -- Mbo (Cameroon) ['mnh'] = "Mono language (Congo)", -- Mono (Democratic Republic of Congo); see Template_talk:Lang#Mono_languages ['mnr'] = "Mono language (California)", -- Mono (USA) ['mru'] = "Mono language (Cameroon)", -- Mono (Cameroon) ["snq"] = "Sangu language (Gabon)", -- Sangu (Gabon) ["toi"] = "Tonga language (Zambia and Zimbabwe)", -- Tonga (Zambia and Zimbabwe); to avoid Tonga language dab page ["vwa"] = "Awa language (China)", -- Awa (China); to avoid Awa dab page ["xlg"] = "Ligurian language (ancient)", -- see Template_talk:Lang#Ligurian_dab ["zmw"] = "Mbo language (Congo)", -- Mbo (Democratic Republic of Congo) } --[=[-------------------------< R T L _ S C R I P T S >-------------------------------------------------------- ISO 15924 scripts that are written right-to-left. Data in this table taken from [[ISO 15924#List of codes]] last update to this list: 2017-12-24 ]=] local rtl_scripts = { 'adlm', 'arab', 'aran', 'armi', 'avst', 'cprt', 'egyd', 'egyh', 'hatr', 'hebr', 'hung', 'inds', 'khar', 'lydi', 'mand', 'mani', 'mend', 'merc', 'mero', 'narb', 'nbat', 'nkoo', 'orkh', 'palm', 'phli', 'phlp', 'phlv', 'phnx', 'prti', 'rohg', 'samr', 'sarb', 'sogd', 'sogo', 'syrc', 'syre', 'syrj', 'syrn', 'thaa', 'wole', }; --[[--------------------------< T R A N S L I T _ T I T L E S >------------------------------------------------ This is a table of tables of transliteration standards and the language codes or language scripts that apply to those standards. This table is used to create the tool-tip text associated with the transliterated text displayed by some of the {{lang-??}} templates. These tables are more-or-less copied directly from {{special|PermaLink/680078354}}. The standard 'NO_STD' is a construct to allow for the cases when no |std= parameter value is provided. ]] local translit_title_table = { ['abkai'] = { -- Manchu romanization ['default'] = 'Abkai system of romanization', }, ['ahl'] = { ['default'] = 'Academy of the Hebrew Language transliteration', }, ['ala'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['ala-lc'] = { ['default'] = 'American Library Association – Library of Congress transliteration', }, ['batr'] = { ['default'] = 'Bikdash Arabic Transliteration Rules', }, ['bgn/pcgn'] = { ['default'] = 'Board on Geographic Names / Permanent Committee on Geographical Names transliteration', }, ['din'] = { ['ar'] = 'DIN 31635 Arabic', ['fa'] = 'DIN 31635 Arabic', ['ku'] = 'DIN 31635 Arabic', ['ps'] = 'DIN 31635 Arabic', ['tg'] = 'DIN 31635 Arabic', ['ug'] = 'DIN 31635 Arabic', ['ur'] = 'DIN 31635 Arabic', ['arab'] = 'DIN 31635 Arabic', ['default'] = 'DIN transliteration', }, ['eae'] = { ['default'] = 'Encyclopaedia Aethiopica transliteration', }, ['hepburn'] = { ['default'] = 'Hepburn transliteration', }, ['hu'] = { -- Manchu romanization ['default'] = 'Hu system of romanization', }, ['hunterian'] = { ['default'] = 'Hunterian transliteration', }, ['iast'] = { ['default'] = 'International Alphabet of Sanskrit transliteration', }, ['iso'] = { -- when a transliteration standard is supplied ['ab'] = 'ISO 9 Cyrillic', ['ba'] = 'ISO 9 Cyrillic', ['be'] = 'ISO 9 Cyrillic', ['bg'] = 'ISO 9 Cyrillic', ['kk'] = 'ISO 9 Cyrillic', ['ky'] = 'ISO 9 Cyrillic', ['mn'] = 'ISO 9 Cyrillic', ['ru'] = 'ISO 9 Cyrillic', ['tg'] = 'ISO 9 Cyrillic', ['uk'] = 'ISO 9 Cyrillic', ['bua'] = 'ISO 9 Cyrillic', ['sah'] = 'ISO 9 Cyrillic', ['tut'] = 'ISO 9 Cyrillic', ['xal'] = 'ISO 9 Cyrillic', ['cyrl'] = 'ISO 9 Cyrillic', ['cyrs'] = 'ISO 9 Cyrillic', ['ar'] = 'ISO 233 Arabic', ['ku'] = 'ISO 233 Arabic', ['ps'] = 'ISO 233 Arabic', ['ug'] = 'ISO 233 Arabic', ['ur'] = 'ISO 233 Arabic', ['arab'] = 'ISO 233 Arabic', ['he'] = 'ISO 259 Hebrew', ['yi'] = 'ISO 259 Hebrew', ['hebr'] = 'ISO 259 Hebrew', ['el'] = 'ISO 843 Greek', ['grc'] = 'ISO 843 Greek', ['ja'] = 'ISO 3602 Japanese', ['hira'] = 'ISO 3602 Japanese', ['hrkt'] = 'ISO 3602 Japanese', ['jpan'] = 'ISO 3602 Japanese', ['kana'] = 'ISO 3602 Japanese', ['zh'] = 'ISO 7098 Chinese', ['chi'] = 'ISO 7098 Chinese', ['cmn'] = 'ISO 7098 Chinese', ['zho'] = 'ISO 7098 Chinese', -- ['han'] = 'ISO 7098 Chinese', -- unicode alias of Hani? doesn't belong here? should be Hani? ['hans'] = 'ISO 7098 Chinese', ['hant'] = 'ISO 7098 Chinese', ['ka'] = 'ISO 9984 Georgian', ['kat'] = 'ISO 9984 Georgian', ['arm'] = 'ISO 9985 Armenian', ['hy'] = 'ISO 9985 Armenian', ['th'] = 'ISO 11940 Thai', ['tha'] = 'ISO 11940 Thai', ['ko'] = 'ISO 11941 Korean', ['kor'] = 'ISO 11941 Korean', ['awa'] = 'ISO 15919 Indic', ['bho'] = 'ISO 15919 Indic', ['bn'] = 'ISO 15919 Indic', ['bra'] = 'ISO 15919 Indic', ['doi'] = 'ISO 15919 Indic', ['dra'] = 'ISO 15919 Indic', ['gon'] = 'ISO 15919 Indic', ['gu'] = 'ISO 15919 Indic', ['hi'] = 'ISO 15919 Indic', ['hno'] = 'ISO 15919 Indic', ['inc'] = 'ISO 15919 Indic', ['kn'] = 'ISO 15919 Indic', ['kok'] = 'ISO 15919 Indic', ['ks'] = 'ISO 15919 Indic', ['mag'] = 'ISO 15919 Indic', ['mai'] = 'ISO 15919 Indic', ['ml'] = 'ISO 15919 Indic', ['mr'] = 'ISO 15919 Indic', ['ne'] = 'ISO 15919 Indic', ['new'] = 'ISO 15919 Indic', ['or'] = 'ISO 15919 Indic', ['pa'] = 'ISO 15919 Indic', ['pnb'] = 'ISO 15919 Indic', ['raj'] = 'ISO 15919 Indic', ['sa'] = 'ISO 15919 Indic', ['sat'] = 'ISO 15919 Indic', ['sd'] = 'ISO 15919 Indic', ['si'] = 'ISO 15919 Indic', ['skr'] = 'ISO 15919 Indic', ['ta'] = 'ISO 15919 Indic', ['tcy'] = 'ISO 15919 Indic', ['te'] = 'ISO 15919 Indic', ['beng'] = 'ISO 15919 Indic', ['brah'] = 'ISO 15919 Indic', ['deva'] = 'ISO 15919 Indic', ['gujr'] = 'ISO 15919 Indic', ['guru'] = 'ISO 15919 Indic', ['knda'] = 'ISO 15919 Indic', ['mlym'] = 'ISO 15919 Indic', ['orya'] = 'ISO 15919 Indic', ['sinh'] = 'ISO 15919 Indic', ['taml'] = 'ISO 15919 Indic', ['telu'] = 'ISO 15919 Indic', ['default'] = 'ISO transliteration', }, ['jyutping'] = { ['default'] = 'Jyutping transliteration', }, ['mdorff'] = { -- Manchu romanization ['default'] = 'Möllendorff system of romanization', }, ['mlcts'] = { ['default'] = 'Myanmar Language Commission Transcription System', }, ['mr'] = { ['default'] = 'McCune–Reischauer transliteration', }, ['nihon-shiki'] = { ['default'] = 'Nihon-shiki transliteration', }, ['no_std'] = { -- when no transliteration standard is supplied ['akk'] = 'Semitic transliteration', ['sem'] = 'Semitic transliteration', ['phnx'] = 'Semitic transliteration', ['xsux'] = 'Cuneiform transliteration', }, ['pinyin'] = { ['default'] = 'Pinyin transliteration', }, ['rr'] = { ['default'] = 'Revised Romanization of Korean transliteration', }, ['rtgs'] = { ['default'] = 'Royal Thai General System of Transcription', }, ['satts'] = { ['default'] = 'Standard Arabic Technical Transliteration System transliteration', }, ['scientific'] = { ['default'] = 'scientific transliteration', }, ['thdl'] = { ['default'] = 'THL Simplified Phonetic Transcription', }, ['ukrainian'] = { ['default'] = 'Ukrainian National system of romanization', }, ['ungegn'] = { ['default'] = 'United Nations Group of Experts on Geographical Names transliteration', }, ['wadegile'] = { ['default'] = 'Wade–Giles transliteration', }, ['wehr'] = { ['default'] = 'Hans Wehr transliteration', }, ['wylie'] = { ['default'] = 'Wylie transliteration', }, ['yaleko'] = { ['default'] = 'Yale romanization of Korean', }, ['zwpy'] = { ['default'] = 'Tibetan pinyin' }, }; --[[--------------------------< E N G _ V A R >---------------------------------------------------------------- Used at en.wiki so that spelling of 'romanized' (US, default) can be changed to 'romanised' to match the envar specified by a {{Use xxx English}}. This is accomplished by setting |engvar=gb; can, should be omitted in articles that use American English; no need for the clutter. ]] local engvar_sel_t = { -- select either UK English or US English ['au'] = 'gb_t', -- these match IANA region codes (except in lower case) ['ca'] = 'us_t', ['gb'] = 'gb_t', ['ie'] = 'gb_t', ['in'] = 'gb_t', ['nz'] = 'gb_t', ['us'] = 'us_t', -- default engvar ['za'] = 'gb_t' }; local engvar_t = { ['gb_t'] = { ['romanisz_lc'] = 'romanisation', -- lower case ['romanisz_uc'] = 'Romanisation', -- upper case ['romanisz_pt'] = 'romanised', -- past tense }, ['us_t'] = { -- default engvar ['romanisz_lc'] = 'romanization', -- lower case ['romanisz_uc'] = 'Romanization', -- upper case ['romanisz_pt'] = 'romanized', -- past tense } } --[[--------------------------< E X P O R T S >---------------------------------------------------------------- ]] return { this_wiki_lang_tag = this_wiki_lang_tag, this_wiki_lang_dir = lang_obj:getDir(), -- wiki's language direction article_name = article_name, engvar_t = engvar_t, engvar_sel_t = engvar_sel_t, lang_name_table = lang_name_table_t, override = override, rtl_scripts = rtl_scripts, special_tags_table = special_tags_table, translit_title_table = translit_title_table, }; knv71kafthtccnqs78cm6g502iqh9qu