ویکیپدیا
mznwiki
https://mzn.wikipedia.org/wiki/%DA%AF%D8%AA_%D8%B5%D9%81%D8%AD%D9%87
MediaWiki 1.47.0-wmf.10
first-letter
مدیا
شا
گپ
کارور
کارور گپ
ویکیپدیا
ویکیپدیا گپ
پرونده
پرونده گپ
مدیاویکی
مدیاویکی گپ
شابلون
شابلون گپ
رانما
رانما گپ
رج
رج گپ
پورتال
پورتال گپ
پروژه
پروژه گپ
TimedText
TimedText talk
ماژول
ماژول گپ
Event
Event talk
انگوس هاکردن
0
8683
389790
278356
2026-07-09T21:27:00Z
~2026-38991-26
46000
/* انگوس هاکردن مقعد دله */
389790
wikitext
text/x-wiki
[[پرونده:Wiki-fingering.png|350px|thumb|اتا [[ریکا]] که دره شه زنا ره انگولک کانده]]
'''انگوس'''، '''انگول''' یا '''انگولک''' هاکردن نوعی [[بگائستن|رابطهٔ جنسی]] هسته که با ور بوردن دستی [[چوچوله]]، [[کوس]]، [[مهبل]] و [[مقعد]] به منظور برانگیختگی و تحریک جنسی انجام وانه. انگولک هاکردن ممکن هسته به تنهایی ات رابطهٔ جنسی ره تشکیل هاده با بخشی از خودارضایی دوِجانبه، لاس بیتن و یا دیگر فعالیتهای جنسی باشد که در این صورت با [[سکس دستی]] یعنی تحریک [[آلت تناسلی مردانه]] با دست شباهت پیدا کانده. این فعالیتها تولید [[لذت جنسی]] کانّه، چه رابطهٔ جنسی کامل ممکن یا دلخاه بائه و چه نواشه.
== انگوس هاکردن خید دله ==
[[انگوس هاکردن]] [[مقعد|خید]] دله، محیطی اعصاب پایانهکون وسه، ونه وری سر بتونده لذتبخش بوئه. همچنین هِرِه اسفنکتر ماهیچهکون انبساط، خید فرو بَوردن گِدِر بتونده مضاعف لذت بساجه.
== اسلام دله==
بر اساس استفتائاتی که از علی سیستانی، علی خامنهای، ناصر مکارم شیرازی و مهدی هادوی تهرانی، شیعه ملائون بَیییه، انگوس هاکردن زن مقعد شوهر دله مالش پروستات وسّه از نظر شرعی جایز هسته.<ref>[https://web.archive.org/web/20100323030427/http://farsi.islamquest.net/QuestionArchive/6130.aspx سئوال ۶۱۳۰] اسلام کوئست</ref>
<gallery>
پرونده:Utamaro B.jpg|اثر کیتاگاوا اوتامارو نقاش ژاپنی، ۱۷۹۹
پرونده:Urethral Fingering.jpg|اتا زنا که مردی [[دول]] ره انگوس کانده
پرونده:Fingering vagina.jpg
</gallery>
== منابع ==
{{پانویس}}
{{چپچین}}
* Wikipedia contributors, "Fingering (sexual act)," Wikipedia, The Free Encyclopedia, https://secure.wikimedia.org/wikipedia/en/w/index.php?title=Fingering_(sexual_act)&oldid=386005618 (accessed September 21, 2010).
{{پایان چپچین}}
{{بگائستن}}
==پیوند به بیرون==
{{انبار-رده|Fingering (sex)}}
[[رده:بگائستن]]
s424pbc42zu87v4cktnbw0b7kt9rv9z
موبایل اپ
0
26313
389787
132777
2026-07-09T18:03:41Z
HenryThe
27142
389787
wikitext
text/x-wiki
[[پرونده:Smart_phone.jpg|بندانگشتی|چپ|اپ ره دچیین]]
'''موبایل ِاَپ''' ([[اینگلیسی زوون|اینگلیسی]] جه: ''Mobile app'') ات جور برنومه هسته که [[موبایل]]ون وسّه سازنه و توسعه دِنّه. این برنومهها ممکن هسته که شکل [[پیش نصب|پیش نصببَیی]] بائِن یا کارور وشون ره نصب هاکنه.
== محیط اجرا ==
[[اندروید]]، [[آیاواس]]، [[بلکبری]]، [[سیمبیان]]، [[بادا]] و [[ویندوز فون]] سیستمعاملونی هستنه که موبایل دله جه بتونّه اَپی ره پخش هاکنن که کد جه بنویشته بائه.
== محیط توسعهی کاتیها==
{| class="wikitable sortable" style="width:100%;"
|
! برنومهنویسی ِزوون
! [[خطایاب]]
! [[برابرساز]]
! محیط یکپارچه توسعه
! چنکاتی توسعه
! گزینه بستهبندی نصبساز
! هزینه ابزار توسعه
|-
! [[ادوبی ایر]]
| [[اکشن اسکریپت]]، [[اچتیامال]]، [[سیاساس]]، [[جاوا اسکریپت]]
| {{بله}}
| {{بله}}
|| [[فلش بیلدر]]، [[فلش پروفشنال]]، [[اینتلجی آیدیاییای(ایده)]]
|| آیاواس (آیفون، آیپد، آیپاد لمسی)، آندروید، بلکبری
|| بومی کد
|| [[فلش بیلدر]]، [[فلش پروفشنال]]، [[اینتلجی آیدیاییای(ایده)]] - تجاری اجازهنومه جه [http://www.adobe.com/products/air/sdk/ آدوبی ایرک. ت. ن (ابزار مبتنی بر خط فرمان)] - مفتکی
|-
! [[ایرپلی ک. ت. م]] (مارمالاد فعلی) {{نشان|ک. ت. م}}
| [[سی (زبان برنامهنویسی)|سی]]، [[سی++]]
| {{بله}}
| {{بله}}
|| [[ویژوال استادیو]]، [[اکسکد]]
|| همه بومی هستنه: آندروید، بلکبری، بِرو، آیاواس (آیفون)، مایمو، پالم/وباواس، بادا از سامسونگ، سیمبیان، ویندوز موبایل ۶ به بعد و دسکتاپ، اواساکس
||کد بومی برای هر دستگاه
|| تجاری اجازهنومه جه
|-
! [[کدنیم وان]] (اسمِرمزِ یک)
| [[جاوا (زبان برنامهنویسی)|جاوا]]
| {{بله}}
| {{بله}}
|| [[نتبینز]]، [[اکلیپس]]
|| آیاواس (آیفون، آیپد، آیپاد لمسی)، آندروید، بلکبری، ویندوز۷، جاوا نسخه میکرو
||بومی کد دارنه
|| مفتکی و اُپنسورس + خدمات ابری پولی
|-
! [[آلچهمو]]
| [[جاوا (زبان برنامهنویسی)|جاوا]]
|| خطایاب مجتمع در محیط ویژوال استادیو، اکلیپس یا اکسکد
|| برای هر م. ی. ت {{نشان|م. ی. ت}} خطایاب موجود است.
|| [[ویژوال استادیو]]، [[اکلیپس]]، [[اکسکد]]
|| آندروید، بِرو، آیاواس (آیفون)، ویندوز موبایل
||بومی کد دارنه
|| تجاری اجازهنومه جه
|-
! [[آندروید]]
| [[جاوا (زبان برنامهنویسی)|جاوا]] ولی بخشی از کد [[سی (زبان برنامهنویسی)|سی]]، [[سی++]] جه هسته
|| خطایاب خطایاب مجتمع و سِواسِوا
| {{بله}}
|| [[اکلیپس]]، [[اینتلجی آیدیاییای(ایده)]]، کنای آندروید، [[نتبینز]]
|| فقط آندروید، دالویک مجازی ماشین سه، مارس ۲۰۰۹
|| اپک
|| مفتکی، [[اینتلجی آیدیاییای(ایده)|اینتلجی آیدیایای]]
|-
! [[اپفیورانس]]
| [[جاوا اسکریپت]]
| {{بله}}
| {{بله}}، برابرساز با م. ت. م و آزمون همزمان بر روی دستگاه.
|| م. ت. ی مبتنی بر ابر
|| آندروید و آیاواس
||بومی کد دارنه
|| مفتکی
|-
! [[اپلیکیشن کرافت]]
| [[جاوا اسکریپت]]، [[اچتیامال۵]]، [[سیاساس]]
| {{بله}}
| {{بله}}، برابرسازی استفاده شده در ریپل
|| م. ت. ی مبتنی بر ابر
|| تمام سکوها: آندروید، آیاواس، بلکبری، ویندوز موبایل، بادا، وباواس، سیمبیان. موبایل، دسکتاپ و تبلت
|| مبتنی بر سامانهی ابری/ مرورگری
|| مفتکی و اُپنسورس
|-
! [[اپسلیتور]]
| [[جاوا اسکریپت]]
|| بله در استودیو تیتانیوم، در مرحله بتاست.
|| برابرساز از طریق توسعهگر ثالت در دسترس است
|| ک. ت. ن داخلی
|| آندروید، آیفون; بلکبری (در آینده)
||بومی کد دارنه
||آپاچی ۲٫۰ اجازهنومه ، تجاری اجازهنومه جه
|-
! [[اپسپشن]]
| [[اچتیامال۵]]، [[سیاساس]]، [[جاوا اسکریپت]]
| {{بله}}
| {{بله}}
|| م. ت. ی ابری
|| آندروید، آیاواس
||بومی کد دارنه
|| مفتکی و تجاری اجازهنومه جه
|-
! [[اپموبی]]
| [[اچتیامال۵]] ([[جاوا اسکریپت]]، [[سیاساس۳]]، [[اچتیامال۵]])
|| بله، اکسدیکی (فروشگاه برنامه گوگل کروم)
|| بله، در اکسدیکی
|| یکپارچه با ابزار مورد علاقه توسعهگر (و. ا{{نشان|و. ا}}، نوتپد++، ویآی)
|| آیاواس، آندروید، برنامههای وب اچتیامال۵، برنامههای ترکیبی(هیبرید) اچتیامال۵
||بومی کد دارنه
|| مفتکی
|-
! [[آکوآ (واسط کاربری)آگوآ]]
| [[سی (زبان برنامهنویسی)|سی]]، [[سی++]]، [[جاوا اسکریپت]]
| {{بله}}
| {{بله}}
|| [[ویژوال استادیو]]، [[اکسکد]]، [[اکلیپس]]
|| آندروید، بلکبری پلیبوک، آیاواس، پالم/وباواس، بادا از سامسونگ، ویندوز موبایل۶ به بعد، ویندوز دسکتاپ
||بومی کد دارنه
|| مفتکی و تجاری اجازهنومه جه
|-
! [[آندرویدبیسیک۴]]
| [[ویژوال بیسیک]]
| {{بله}}
| {{بله}}
|| اره
|| آندروید
||
|| تجاری اجازهنومه جه
|-
! [[باتریتک]]
| [[سی (زبان برنامهنویسی)|سی]]، [[سی++]]
| {{بله}}
|| با برابرسازهای بومی (آیاواس، آندروید...)
|| [[اکلیپس]]، [[ویژوال استادیو]]، [[اکسکد]]
|| آندروید، آیاواس (آیفون)، ویندوز، اواساکس
||بومی کد دارنه
|| تجاری اجازهنومه جه
|-
! [[بلکبری]]
| [[جاوا (زبان برنامهنویسی)|جاوا]]
|| خطایاب مجتمع در م. ت. ی
| {{بله}}
|| [[اکلیپس]]
|| فقط بلکبری، واسط برنومهنویسی آرآیام وسّه
|| الکس، کاد
|| مفتکی
|-
! [[بلوپرینت (زبان برنامهنویس)|بلوپرینت]]
| [[اکسامال]] از طریق سرورهای [[یاهو موبایل]] و قابل نمایش در تمام مروگرهای بومی
|| بیش از یک بررسی کننده شما نیست
| بدون نیاز به مترجم برای وب یا دستگاه
| بدون ترجیح، هر ویرایشگر اکسامال
| بدون ترجیح، هر مجری اکسمال
|| با پیش-پیکربندی بارگذاری شده در یاهو
|| هر ویرایشگر کد اکسامال
|-
! [[کوالکام بِرو|بِرو]]
| [[سی (زبان برنامهنویسی)|سی]]; واسط م. ت. ی برنامه کاربردی به زبان سی به همراه واسطی از سی++
|| خطایاب برای ایآرام بومی پشتیبانی شده. قابلیت استفاده با ویژوال استادیو برای آزمایش کدهای اکس-۸۶(پردازندههای دسکتاپ) را نیز داراست
|| هیچ برابر سازی برای کدهای هدف برای ایآرام وجود ندارد. دارای برابرساز برای معماری اکس-۸۶.
|| ویژوال استادیو ۶٫۰،. نت ویژوال استادیو ۲۰۰۳،. نت ویژوال استادیو ۲۰۰۵
|| کامپایل برای بِرو
|| [[اوردایر پروگرامینگ]] (برنامهنویس روی هوا)
|| توسعه دارای هزینههایی است
|-
! [[سلسیوس]]
| [[جاوا (زبان برنامهنویسی)|جاوا]]
| {{بله}}
| {{بله}}
|| [[اکلیپس]]
|| جاوا نسخه میکرو، آندروید، بلکبری، آیفون، سیمبیان، ویندوز موبایل
||کد بومی برای هر دستگاهِ مبتنی بر جاوا به شکل باینری
|| با اجازهنامه تجاری
|-
! [[م. ت. ی موبایل]]
| [[لوآ (زبان برنامهنویس)|لوآ]]
|| خیر
| {{بله}}
|| م. ت. ی با مالیکیت خصوصی
|| [[آیفون]]، [[آیپد]]، [[آیپاد لمسی]]، [[آندروید]]
||کد بومی برای هر دستگاه
|| مفتکی و تجاری اجازهنومه جه
|-
! [[انامایی (چارچوب)|انامایی]]
| [[هاکسه]] (شبیه به اکشن اسکریپت و جاوا)
| {{بله}}
| {{بله}}
|| [[اینتلجی آیدیاییای(ایده)|اینتلجی آیدیاییای]]، [[فلشدولوپ]]
|| آیاواس (آیفون، آیپد، آیپاد لمسی)، آندروید، بلکبری پلیبوک، وباواس، اچتیامال۵، فلش، ویندوز (فایل اجرایی)، لینوکس
||کد بومی برای هر دستگاه
|| رایگان
|-
! [[ک. ت. ن آیاواس]]
| [[آبجکتیو-سی]]
|| خطایاب مجتمع در اکسکد م. ت. ی
|| محدود به آبجکتیو-سی آیفون و اکسکد م. ت. ی
|| [[اکسکد]]، [[اپکد]]
|| [[آیفون]]، [[آیپد]]، [[آیپاد لمسی]]
|| تنها از طریق [[فروشگاه برنامه (آیاواس)|فروشگاه برنامه]]، نیازمند ارزیابی وتایید از سوی [[اپل]]
|| ابزاهای توسعهٔ اپل برای سیتمهای مکینتاشِ مبتنی بر اینتل رایگان هستند. برابرساز نیز رایگان است اما نصب بر روی دستگاه برای توسعهگر نیازمند کلید امضا برای وی است. اپکد- با اجازهنامه تجاری.
|-
! [[جاوا نسخه میکرو]] (جاوا ام. ایی)
| [[جاوا (زبان برنامهنویسی)|جاوا]]
| {{بله}}
|| برابرساز رایگان، [http://java.sun.com/products/sjwtoolkit/ ابزار توسعه موبایل سان]
|| [[اکلیپس]]، بسته همراه الامآ از سوی [[نتبینز]]
|| بله از طریق ماشین مجازی مخصوص دستگاه
|| بستهبندی در قالب [[جاد (فرمت فایل)|جاد]]/[[جار (فرمت فایل)|جار]] و نیز فایل پیآرسی برای پالم اواس
|| مفتکی
|-
! [[جیامبی]]
| اچتیامال، سیاساس، جاوا اسکریپت
| {{بله}}
|| خطایاب برنامه. هیچ برابرسازی وجود ندارد. تنها باید آن را اجرا نمود تا آزموده شود. /
|| نا
|| آیاواس، آندروید (تا مارس ۲۰۱۲)
||کد بومی برای هر دستگاه
|| نا
|-
! [[جیمانگ.]]
| [[جیمانگو]]
| نامعلوم
| نامعلوم
|| م. ت. ی جیمانگوفلش
|| جاوا سکو میکرو، آندروید، بادا، بلکبری، آیفون، ویندوز موبایل۶، ویندوز فون ۷
||کد بومی برای هر دستگاه
|| مفتکی
|-
|}
== منابع ==
{{پانویس}}
[[رج:موبایل]]
[[رج:برنومهنویسی]]
bk8tt1vu1e3m8k3rjkhypqsn4306cb1
گلادیاتور (فیلم)
0
30776
389853
136222
2026-07-10T10:39:08Z
محک
1023
[[رج:۲۰۰۰ فیلمون]] اضافه شد با استفاده از [[ویکیپدیا:رجساز]]
389853
wikitext
text/x-wiki
{{جعبه فیلم
| عنوان= گلادیاتور {{بر}} Gladiator
| تصویر= Gladiator_film.jpg
|عرض تصویر= 200px
| زیرنویس=
| کارگردان= [[ریدلی اسکات]]
| تهیهکننده= [[داگلاس ویک]] {{بر}} [[دیوید فرانزونی]] {{بر}} [[فرانکو لاستیگ]]
| نویسنده= [[دیوید فرانزونی]] {{بر}} [[جان لوگان]] {{بر}} [[ویلیام نیکلسون]]
| بازیگران= [[راسل کرو]] {{بر}} [[واکین فینیکس]] {{بر}} [[کانی نیلسن]] {{بر}} [[الیور رید]] {{بر}} [[ریچارد هریس]] {{بر}} [[درک جاکوبی]]
| موسیقی= [[هانس زیمر]] {{بر}} [[لیزا جرارد]]
| فیلمبرداری= جان متیسون
| تدوین= [[پیترو اسکالیا]]
| توزیعکننده= [[دریمورکس]] و [[یونیورسال استودیوز]]
| انتشار=
| اکران= ۵ مه ۲۰۰۰
| مدت= ۱۵۴ دقیقه {{بر}} نسخه کامل ۱۷۱ دقیقه
| زبان= [[انگلیسی]]
| کشور= {{USA}} {{بر}} {{UK}}
| بودجه= ۱۰۳٬۰۰۰٬۰۰۰ [[دلار]]
| فروش= ۴۵۷٬۶۴۰٬۴۲۷ [[دلار]]
| پس_از=
| پیش_از=
| درجه فیلم=
| imdb_id = 0172495
| soure_id =
| amg_id = 1:184587
| پانویس=
}}
'''''گلادیاتور''''' {{انگلیسی جه|Gladiator}} اتا فیلمِ نوم بییه که [[ریدلی اسکات]] ونه کارگردان و نقش اول بییه. این فیلم سال ۲۰۰۰ بساته بیّه. این فیلمِ موسیقی ره [[هانس زیمر]] بساته و بتترین فیلم ِموسیقیون جه هسته. راسل کرو این فیلمِ سَره [[اوسکار جایزه ]] ره نقشاولی وسر بَییته. این فیلم پنجتا اوسکار داشته.
فیلم اتا [[گلادیاتور]] ِزندگی هسته. این مَردی اول [[روم]] ِارتش دله دَیّه و فرمانده بییه. وقتی ولیعهد امپراتور ره بَکاشته، وه ره [[برده]] بَییتنه و ونه خانواده ره بَکاشتنه. وه آخرسر اَنده گلادیاتوری جنگ کانده تا اینکه شه ره جدیدِ امپراتور جه رِسِنِنده و ونجه انتقام گیرنه.
== منابع ==
{{پانویس}}
* {{یادکرد-ویکی
|پیوند = https://en.wikipedia.org/w/index.php?title=Gladiator_(2000_film)&oldid=634506398
|عنوان = (Gladiator (2000 film
|زبان = انگلیسی
|بازیابی = ۱۹ نوامبر ۲۰۱۴
}}
[[رج:گلادیاتور]]
[[رج:انگلیسی فیلمون]]
[[رج:بریتانیایی فیلمون]]
[[رج:آمریکایی فیلمون]]
[[رج:حماسهای فیلمون]]
[[رج: تاریخی فیلمون]]
[[رج:روم دله فیلمون]]
[[رج:۲۰۰۰ فیلمون]]
er02zsy82vkm1gjsgg28gp2kz83zxxi
جنیفر لارنس
0
35864
389819
188304
2026-07-10T09:40:09Z
محک
1023
389819
wikitext
text/x-wiki
{{Infobox person
| name = جنیفر لورنس
| image = Jennifer Lawrence SDCC 2015 X-Men.jpg
| alt =
| caption = لورنس عکس که سال ۲۰۱۵ شنه
| birth_name = جنیفر شریدر لورنس
| birth_date = {{Birth date and age|1990|8|15}}
| birth_place = [[ایندین هیل]]، [[کنتاکی]]، [[متحده ایالات]]
| occupation = بازیگر
| years_active = ۲۰۰۶–تاسا
| spouse = کوک مارونی (۲۰۱۹)
}}
'''جنیفر لورنس''' {{Lang-en|Jennifer Shrader Lawrence}}؛ بزائهی ۱۵ اوت ۱۹۹۰) آمریکایی بازیگر هسته. لارنس سالهای ۲۰۱۵ و ۲۰۱۶ بیشترین مزد ره بازیگر زنان دله گیته و ونه فیلمها سرجمع تا اسا بیش از ۶ میلیارد دلار فروش داشتنه.
لورنس وچگی جه کلیسا و مدرسه دله اجرا کارده. وه ۱۴ سالگی تعطیلات شه خانواده همراهی بورده [[نیویورک]] و اتا استعدادیاب وه ره اونجه پیدا هاکرده. بعدته لورنس بورده [[لوس آنجلس]] و بعضی فیلمون دله سیولشکری نقش کا کارده. اولین اصلی نقش ره ''[[بیل انگوال شو]]'' (۲۰۰۷–۲۰۰۹) دله بدست بیارده. لورنس شه حرفهای کار ره ''[[گاردن پارتی]]'' (۲۰۰۸) جه شروع هاکرده و این درام دله مکمل نقش داشته. ونه دومین کار ''[[وینترز بون]]'' (۲۰۱۰) بییه که ونه نوم ره تِکسر بیارده. اینتی بیّه که وه ره بتتر فیلمها دله هم نقش هدانه و اتا [[سوپر هیرو]] نقش ره ''[[ایکس من]]'' (۲۰۱۱–۲۰۱۹) دله بدست بیارده و [[هانگر گیمز]] (۲۰۱۲–۲۰۱۵) دله هم اصلی نقش ره داشته. وه هانگر گیمز دله جوایز و رکوردهایی داشته.
وه ''[[سیلور لاینینگز]]'' (۲۰۱۲) دله اتا بیشی زنا نقش ره، شه ۲۲ سالگی گادر، کا هاکرده که [[اوسکار جایزه]] ره ونه وسّه بیته. وه ''[[امریکن هاستلر]]'' (۲۰۱۳) فیلم دله اتا سلیطه زنای نقش ره کا هاکرده و ونسه [[بفتای جایزه]] ره بیته. لارنس سهبار [[گولدن گلوب]] هم بیته که جز دِتا فیلم قبلی، سومی ''[[جوی (فیلم)|جوی]]'' (۲۰۱۵) وسّه بییه. بجز اینان فیلمها که بائوته بیّه، وه ''[[پسنجرز (۲۰۱۶)|پسنجرز]]'' (۲۰۱۶) علمی-تخیلی، ''[[مادر!]]'' (۲۰۱۷) ترسناک تریلر، و ''[[رد اسپارو]]'' (۲۰۱۸) جاسوسی، ''[[دونت لوک آپ]]'' (۲۰۲۱)، ''[[نو هارد فیلینگز]]'' (۲۰۲۳) سیو-کمدی و ''[[دای مای لاو ]]'' (۲۰۲۵) فیلمها دله هم بازی هاکرده.
== منابع ==
{{پانویس|چپچین=بله|۲}}
* انگلیسی ویکیپدیا
[[رج:امریکا بازیگرون]]
[[رج:زننه آدمون]]
[[رج:اوسکار بیتهئون]]
[[رج:گولدن گلوب بیتهئون]]
[[رج:بفتا بیتهئون]]
m7mo0c8bggibc3h17gessbdry0txj2b
کارور گپ:محک
3
36491
389789
372341
2026-07-09T21:12:52Z
Urmazdaa
38347
/* محمدعلی رجایی */ جواب
389789
wikitext
text/x-wiki
{{کارور گپ:محک/گپ پیغوم}}
{{کارور گپ:محک/تلمبار}}
{{کارور:محک/سرصفحه}}
</div>
<!--------ترنه پیغومون--------------->
== الفبای طبری ==
اسکت برار ، ته خش آمدگویی جا الندارمه.
طبری نویسی ر ونه دگش هادین و اتا گت کار هاکنین و طبری ر پیشرفت هادین .من تومبه با اطلاعاتی کا این چن سالی کسب هاکردمه هم طبری نویسی ر گسترش هادم و هم راحت نویسی هاکنم البته اوایل تا جا دکتن گدر خله سخته امبا عادیه .اما شه وچه بیمی مگه فارسی الفبا امسه راحت بیه؟ نا.تمرین هاکردمی امسه رات بیه.
[[کارور:Kahu.mirka|Kahu.mirka]] ([[کارور گپ:Kahu.mirka|گپ]]) ۵ فوریه ۲۰۲۳، ساعت ۱۶:۴۰ (UTC)
:@[[کارور:Kahu.mirka|Kahu.mirka]]: شوم به خدا. خله خش تشریف بیاردنی.
:امه مازرونی ویکیپدیا اولین جایی هسته که ١۵ سال پیش تاسا این زوون جه نویسنه. امه هدف این هسته که مازرونی زوون ره اتی بنویسیم و تمرین هاکنیم که هرکس وه ره خوندنه، راحت دربَوره که چچی بنویشتوئه چون زوون، ارتباط ِوسیله هسته و زوونی که شه گپ ره حالی نکنه، بدردی نییه.
:هرکس که بخائه مازرونی زوون جه بنویسه و بخونده جه، اینجه استقبال کمبی. ایشالله شما هم این ویکی دله خار خار وقت بگذرندین. هر گدر کومِکی مه دس بر انه، شمه خدمت درمه. شو خش! <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۵ فوریه ۲۰۲۳، ساعت ۱۷:۳۲ (UTC)
::اسکت برار، ته سوا خش،گومبه کا چتی ونه سر تیتر صفحات مقاله تغییر هادیم؟ [[کارور:Kahu.mirka|Kahu.mirka]] ([[کارور گپ:Kahu.mirka|گپ]]) ۶ فوریه ۲۰۲۳، ساعت ۰۵:۲۵ (UTC)
:::دسکتاپ حالت دله اتا دکمه بالا دیار وونه که بنویشتوئه «دکش هاکردن» ونه سر بزنی، اتی صفحه مین وانه که ونه دله صفحه اسم ره وونه تغییر هدائن. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۶ فوریه ۲۰۲۳، ساعت ۱۲:۱۵ (UTC)
::::اصلا همچین دکمه ای ر ندیمه،دقیقا کجه دره [[کارور:Kahu.mirka|Kahu.mirka]] ([[کارور گپ:Kahu.mirka|گپ]]) ۶ فوریه ۲۰۲۳، ساعت ۱۴:۱۸ (UTC)
:::::موبایل جه اگه استفاده کنی، ونه دستی حالت ره دسکتاپ/رایانه سر بییلین وگهنا این دکمه ره سراق ندنه.
::::: «بخوندستن»، «دچیین» و «تاریخچه» پلی، «دکش هاکردن» هم دره. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۶ فوریه ۲۰۲۳، ساعت ۱۵:۵۲ (UTC)
::::::مه وسه اصلا دنیه [[کارور:Kahu.mirka|Kahu.mirka]] ([[کارور گپ:Kahu.mirka|گپ]]) ۶ فوریه ۲۰۲۳، ساعت ۱۶:۰۱ (UTC)
:::::::بررسی هاکردمه؛ شمه حساب هنتا تایید نیه. شاید چند روز بکشه تا سیستم شمه کاروری حساب ره برسمیت بشناسه و تایید هاکنه. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۶ فوریه ۲۰۲۳، ساعت ۱۶:۰۴ (UTC)
::::::::الندارمه برار [[کارور:Kahu.mirka|Kahu.mirka]] ([[کارور گپ:Kahu.mirka|گپ]]) ۶ فوریه ۲۰۲۳، ساعت ۱۶:۰۸ (UTC)
::::::::اسکت بار،چتی تومبه مقالخه ای ر بنویشتمه ر ،بین زوونای دیگه جا هادم،مثلا بهاییت ،هرکی اینتا مقاله ر تو هر زوونی بورده،قسمت ززونای دیئر ر بزو ،مازرونی رم نمایش هاده [[کارور:Kahu.mirka|Kahu.mirka]] ([[کارور گپ:Kahu.mirka|گپ]]) ۷ فوریه ۲۰۲۳، ساعت ۰۹:۲۵ (UTC)
:::::::::دسکتاپ دله، سمت راست ِنوار دله اتا گزینه دارنه «افزودن پیوندهای بینزبانی» که ونه سر کلیک هاکنی، اتا کادر وا وونه که اتی زوون نوم و مقالهی معادل ره بنویسی و ذخیره ره بزنی.
:::::::::اولین صوه خانی این کار ره هاکنی، شاید لازم بوو ویکیدیتا دله لاگین هاکنی. (https://wikidata.org) <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۷ فوریه ۲۰۲۳، ساعت ۱۷:۳۴ (UTC)
== متین دو حنجره ==
سلام عید مبارک . چرا صفحه متین دو حنحره پاک شد؟ از شما میخوام صفحه رو برگدونید یا حداقل اخرین نسخشو به صفحه تمرینم انتقال بدین. خیلی روش زحمت کشیدم. [[کارور:Tirjc2|Tirjc2]] ([[کارور گپ:Tirjc2|گپ]]) ۲۱ مـارس ۲۰۲۳، ساعت ۱۹:۳۵ (UTC)
:سلام [[کارور:Tirjc2|Tirjc2]]. یحتمل واسه سرشناسی و نداشتن منبع یه ویکی بد (مدیر بالادستی بنیاد) حذفش کرده. سعی میکنم تا چن روز دیگه برش گردونم. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۱ مـارس ۲۰۲۳، ساعت ۱۹:۴۷ (UTC)
::والا هر منبع معتبری که داشت من اضافه کردم تازه این صفحه رفته بود گوگل و داشت جا می افتاد. به نظر من که بودنش نسبت به بقیه صفحه های خواننده های ویکی مازنی سرشناس تر و کامل تره.بازم هرچی صلاحه ویکی مازنی هست.فقط اگر حذف شد اخرین نسخشو به صفحه تمرینم انتقال بدین [[کارور:Tirjc2|Tirjc2]] ([[کارور گپ:Tirjc2|گپ]]) ۲۱ مـارس ۲۰۲۳، ساعت ۱۹:۵۹ (UTC)
:::متأسفانه درباره خوانندگان ایرانی در وب هیچ منبع معتبری وجود ندارد و مطالب معتبری درباره این موضوع نداریم. به همین خاطر اکثر خوانندگان ایرانی نمیتوانند در ویکیپدیا مقاله داشته باشند. مشکل از این مقاله بخصوص که شما در آن مشارکت کردید، نیست. الان فلان خواننده امریکایی یک ویدیو چند ثانیهای از خودش در شبکههای اجتماعی بگذارد، انقدر منابع انگلیسی زبان هستند که دربارهاش بنویسند و نقد و تحلیلش کنند که میشود سریع برایش مقاله ساخت ولی در فارسی چنین منابعی وجود ندارد. حتی برای بهترین خوانندگان ایرانی هم نمیشود تمام تکآهنگها و آثارشان را در ویکی مقاله کرد. در ویکیمازنی سعی داریم با اتکا بر [[:fa:ویکیپدیا:سوگیری ذاتی سامانه]] این خلاء را پر کنیم ولی بنیاد ویکیمدیا چندان راضی نیست. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۱ مـارس ۲۰۲۳، ساعت ۲۰:۱۵ (UTC)
::::حرفتون کاملا درسته. موفق باشید [[کارور:Tirjc2|Tirjc2]] ([[کارور گپ:Tirjc2|گپ]]) ۲۲ مـارس ۲۰۲۳، ساعت ۰۵:۵۳ (UTC)
::::حتی اگه دقت کنین در ۳۰ روز گذشته بازدید این صفحه نسبتا خوب بوده و نسبت به خوانندگانی مثل تتلو که منابع و مقاله های زیادی در سایت ها دارد بیشتر بوده
::::تنها خواننده ای که مانند هنرمندان خارجی هر حرکتش موجب ایجاد یک خبر در سایت ها میشود بنظرم فقط تتلو است و بس [[کارور:Tirjc2|Tirjc2]] ([[کارور گپ:Tirjc2|گپ]]) ۲۲ مـارس ۲۰۲۳، ساعت ۱۱:۵۷ (UTC)
:{{بیه}} <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱ آوریـل ۲۰۲۳، ساعت ۱۹:۴۱ (UTC)
::سلام متاسفانه صفحه ویکی دیتا متین دو حنجره هنوز برنگشته و با ساختنش هم مخالفت شده.اگر امکان داره اون رو هم برگردونید [[کارور:Tirjc2|Tirjc2]] ([[کارور گپ:Tirjc2|گپ]]) ۹ آوریـل ۲۰۲۳، ساعت ۱۹:۵۹ (UTC)
:::در ویکی دیتا از دست من کاری بر نمیاد. هر ویکی استقلال داره و من فقط در ویکیمازنی مدیرم. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۰ آوریـل ۲۰۲۳، ساعت ۰۵:۱۵ (UTC)
== حذف صفحه ==
سلام سال نو مبارک شما صفحه تنیلر و متین دو حنجره رو پاک میکنید هر باری که ساخته میشود میخواستم علت را بدونم من خیلی بابت مقاله ها وقت میذارم اگر کلا سیستم اینجوریه فعالیت نداشته باشم [[کارور:Hamidyff|Hamidyff]] ([[کارور گپ:Hamidyff|گپ]]) ۱ آوریـل ۲۰۲۳، ساعت ۲۲:۵۹ (UTC)
:ونه ثابت بوو که این هنرمندون جادکت آدم هستنه. من تنیلر نوم ره گوگل چرخهتو هاکردمه که نتایج خله کم بینه. من راقاضی نیمه که جادکت هسته. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲ آوریـل ۲۰۲۳، ساعت ۰۸:۱۰ (UTC)
::خیلی ممنون برار🫡❤️
::دیگه این مقاله را نسازم یعنی؟ [[کارور:Hamidyff|Hamidyff]] ([[کارور گپ:Hamidyff|گپ]]) ۲ آوریـل ۲۰۲۳، ساعت ۱۰:۳۰ (UTC)
:::نا. خنابدون! <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲ آوریـل ۲۰۲۳، ساعت ۱۰:۴۰ (UTC)
::::🙏🏻 [[کارور:Hamidyff|Hamidyff]] ([[کارور گپ:Hamidyff|گپ]]) ۲ آوریـل ۲۰۲۳، ساعت ۱۰:۴۶ (UTC)
:دقیقآ همینطوره ایشون متاسفانه مسئول حذف کردن صفحاتی هستند که کاربران بخاطر ایجاد کردنش کلی زحمت میکشند من به این نتیجه رسیدم که کل ویکی پدیا دارای یه مجموعه مافیایی هست که برای بعضیها منبع درآمد شده کافیه تو پیامرسانها و یا گوگل سرچ کنید ویکی نویس و برید یه مبلغی رو غیر مستقیم بهشون پرداخت کنید اونوقت مقاله تون رو خودشون میان میزارن ازش هم محافظت هم میکنن از گوشت سگ نجس تر و حروم تره این جور نون خوردن واقعا متاسفم براشون[[شا:مشارکتها/5.74.211.132|5.74.211.132]] ۱۴ آوریـل ۲۰۲۳، ساعت ۱۳:۲۰ (UTC)
== جواد نظری ==
سلام دلیل چی چی بوده نوشته رو حذف هکردی [[کارور:Rahai136|Rahai136]] ([[کارور گپ:Rahai136|گپ]]) ۱۴ آوریـل ۲۰۲۳، ساعت ۱۳:۰۴ (UTC)
:دلیلش عدم پرداخت پول بوده اگر برید تو پیام رسانها و شبکه های اجتماعی یه مبلغی که خودشون تعیین میکنن رو پرداخت کنید مقاله رو خودشون با اسامی مختلف میان منتشر میکنن و ازش هم محافظت میشه درد دردِ پوله شما فکر میکنید کسی تو این زمونه میاد رایگان بصورت شبانه روزی تو ویکی پدیا کشیک میده مگه[[شا:مشارکتها/5.74.211.132|5.74.211.132]] ۱۴ آوریـل ۲۰۲۳، ساعت ۱۳:۲۶ (UTC)
::[[کارور:Rahai136|Rahai136]]: [[ویکیپدیا:جادکت بیین|جادکت نیه]].
::بله؛ چنین آدمهایی هم هستن که رایگان شبانه روز کشیک میدن و تازه چنین تهمتهایی رو هم تحمل میکنن! <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۴ آوریـل ۲۰۲۳، ساعت ۱۳:۵۱ (UTC)
== انتقاد ==
سلام برای چی ویکی پدیا افراد را خوب تایپ نمیکنی
برو یاد بگیر چطوری از کیبورد استفاده کنی [[شا:مشارکتها/95.81.102.172|95.81.102.172]] ۲۱ مه ۲۰۲۳، ساعت ۱۰:۲۷ (UTC)
:این وبگاه فارسی نیست عزیزم. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۲ ژانویه ۲۰۲۴، ساعت ۲۲:۲۹ (UTC)
== سلام ==
سلام شما میتونی یه مقاله ایجاد کنی [[شا:مشارکتها/2.147.144.56|2.147.144.56]] ۱۶ اکتبر ۲۰۲۳، ساعت ۲۳:۵۸ (UTC)
:چچی مقاله؟--<small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۷ اکتبر ۲۰۲۳، ساعت ۰۵:۳۷ (UTC)
== محک گرامی ==
سلام جناب محک [[کارور:Arbanoos|Arbanoos]] ([[کارور گپ:Arbanoos|گپ]]) ۱۵ نوامبر ۲۰۲۳، ساعت ۰۷:۰۸ (UTC)
:سلام. شرمنده پیغامتان را تازه دیدم. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۲ ژانویه ۲۰۲۴، ساعت ۲۲:۲۰ (UTC)
::سپاس بۆ تۆ. زۆرم پێ خۆشه ئێوە لە ویکی فارسی هەن.
::.Sipa bo te ,zorim pê xoşe êywe lêre hene
::سپاس از شما.خوشحالم کسی همچون شما تو ویکی فارسی هستن. [[کارور:Arbanoos|Arbanoos]] ([[کارور گپ:Arbanoos|گپ]]) ۲۳ ژانویه ۲۰۲۴، ساعت ۰۶:۰۸ (UTC)
:::سپاسگزارم ، لطف دارید 💚 <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۳ ژانویه ۲۰۲۴، ساعت ۱۱:۳۰ (UTC)
== سلام ==
سلام, می که ویریاییش کردنی ,آدمین ویکیپدیای تالشی ره مساژ (پیام) تبریک شما دِ, ویکیپدیای زوان تالشی ده. شما چیچی حال دره, همه چیچی وَشه؟ [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۲۲ ژانویه ۲۰۲۴، ساعت ۱۹:۴۱ (UTC)
:[[کارور:Vuzorg|Vuzorg]]. سلام. از تأسیس ویکیپدیای تالشی خیلی خوشحال شدم و هر کمکی از دستم برآید، برایش انجام میدهم. معنی جمله آخرتان را متأسفانه نفهمیدم. زبانهایمان نزدیک است ولی با این حال درک متقابل نوشتهها سخت است. بهترست انگلیسی یا فارسی مکاتبه کنیم. (متأسفانه ترکی بنده هم خیلی ضعیف است)
{{چپچین}}
:Hello. I was very happy when I saw that Talishy Wikipedia was established. I will do whatever I can to help it. Unfortunately, I didn't understand the meaning of your last sentence. Our languages are related, but it is difficult to understand each other's texts. It is better to communicate in English or Farsi (Unfortunately, my Turkish is also very weak)
{{پایان چپچین}}
:<small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۲ ژانویه ۲۰۲۴، ساعت ۲۲:۲۷ (UTC)
::فارسی یکم بلدم, ولی یک تلاش بکنم واژه به واژه بنویسم. من ویرایش میکردم، به آدمین ویکیپیدیای تالشی یپام شما دیدم، در ویکیپیدیای زبان تالشی. شما در چی حال هستید، همه چی خوبه؟ [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۲۲ ژانویه ۲۰۲۴، ساعت ۲۲:۵۳ (UTC)
:::متشکرم. هم من و هم ویکیپدیای مازندرانی با ثبات و آرام راه را ادامه میدهیم. اخیراً آپدیت الگوهای متصل به ویکیدیتا کمک بزرگی به ویکیپدیاهای کوچک میکند و تلاش میکنم الگوهای بیشتری را ترجمه و بومیسازی کنم. شما در ویکی زازاکی چه میکنید؟ --<small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۲ ژانویه ۲۰۲۴، ساعت ۲۳:۰۹ (UTC)
::::سلام، متشکرم، ،من خودم زیادتر در ویکیپدیای ترکی مشارکت میکنم.از یک سال بیشتر بود مشارکت در ویکیپدیای زازاکی نکردم.متأسّفانه شمار کاربران ویکی زازاکی زیاد نیست. [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۲۳ ژانویه ۲۰۲۴، ساعت ۰۸:۴۴ (UTC)
:::::اتفاقاً من هم در ویکیپدیای فارسی بسیار فعال هستم ولی ویکیپدیا فرصت خوب و مفیدی برای زبانهای کوچک ماست، چون رسانه جمعی دیگری نداریم. اینجا هم کاربر کمی دارد ولی بقای ویکیپدیای مازندرانی که تنها تجربه پایدار و طولانیمدت نوشتن به این زبان است، بسیار ارزشمند است. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۳ ژانویه ۲۰۲۴، ساعت ۱۱:۲۳ (UTC)
::::::چی خوبه، تبریک میگویم. من در ویکی ترکی بیشتر نوشتارها در مورد زازاکی/زازایان و دیگر زبانهای کوچکی ایرانی مینویسم. مردم و زبانهای ایرانی در ترکیه معروف نيستند. در ویکی فارسی هم بعضی ویرایشها در مورد زازاکی کردم ولی کاربران کردی معمولا تلاش کردند مانع من شوند. معمولا سعی میکنند پیوند زازاکی را با زبان های خزری نادیده گرفته، قطع کنند و آن را به عنوان گویش کردی معرفی کنند. گيرانترین خسارت را به زازاکی وارد میکنند :/. [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۲۳ ژانویه ۲۰۲۴، ساعت ۱۲:۱۲ (UTC)
:::::::@[[کارور:Vuzorg|Vuzorg]] بنده حتما شمارا پیگیری خواهمکرد، مطالب ایرانی بودن زبان زازاکی به بنده ربطی ندارد و کاری باهاش ندارم، اما شما حق پاک کردن مطالبی که نشان میدهد زازاها کورد هستند را ندارید، حتما حتما بهزودی در وپ:تاح و منابعی که افزودید را در وپ:تامم مطرح خواهمکرد، درصورت انکار و مخالفت در وپ:تام گزارش خواهمکرد. باسپاس [[کارور:Sina Khezrii|Sina Khezrii]] ([[کارور گپ:Sina Khezrii|گپ]]) ۲۹ فوریه ۲۰۲۴، ساعت ۰۷:۵۹ (UTC)
::::::::[[کارور:Sina Khezrii|Sina Khezrii]]: دعوای جای دیگهتون رو به ویکی ما نیارید و در همون ویکی بحث کنید. در صورت تکرار، دفعه بعد با شما برخورد خواهم کرد. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱ مـارس ۲۰۲۴، ساعت ۰۸:۳۳ (UTC)
:::::::::بنده احترام ویژهای برای شما قائل هستم بخاطر برخورد خوب و ارزندهتان با کاربران کورد، درست است هیچوقت با شما گفتوگویی نداشتهام، اما به هرحال انتظار همچین لحن و طرز حرف زدن را از شما نداشتم. باسپاس [[کارور:Sina Khezrii|Sina Khezrii]] ([[کارور گپ:Sina Khezrii|گپ]]) ۱ مـارس ۲۰۲۴، ساعت ۲۱:۱۱ (UTC)
::::::::::من خودم زخم خورده این حرکتم؛ یه یارویی از حذف مقاله چرندش ناراحت بود، رفت توی بیست تا ویکی مختلف و جاهای عجیب و غریب بهم فحش میداد. به همین خاطر با این مسأله که دعوای جای دیگه رو اینجا بیارید ، هر کسی که میخواد باشه، سخت برخورد میکنم و تعارف هم ندارم. پوزش اگه باعث ناراحتی شما شدم. مسأله شخصی با شما نیست. 💚 <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲ مـارس ۲۰۲۴، ساعت ۰۹:۲۶ (UTC)
== ترجمه ==
سلام، میشه لطفا این جمله فارسی را به مازندرانی برگردانی؟ «یک روش ساخت دیوار هست که از چیدن سنگها بدون استفاده از ملات دیوار ساخته می شود.» [[کارور:Irman|Irman]] ([[کارور گپ:Irman|گپ]]) ۱۸ فوریه ۲۰۲۴، ساعت ۱۶:۱۴ (UTC)
:سلام [[کارور:Irman|Irman]]، «اتا دیفار بساتن روش دره که ونه دله سنگ ره سر-سر-بن یلنه و ونه میونه ملات نشننّه.» <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۸ فوریه ۲۰۲۴، ساعت ۱۶:۱۵ (UTC)
:: شمه خنهبدون. ولی اما نومی ونه گمی وه!--[[کارور:Irman|Irman]] ([[کارور گپ:Irman|گپ]]) ۱۸ فوریه ۲۰۲۴، ساعت ۱۶:۱۸ (UTC)
این هم میشه ترجمه کنید: «هنر دیوارکشی با سنگ خشک در سال 2018 در فهرست نمایندگی یونسکو از میراث فرهنگی ناملموس بشریت، برای دیوارهای سنگی در کشورهایی مانند فرانسه، یونان، ایتالیا، اسلوونی، کرواسی، سوئیس و اسپانیا به ثبت رسید»--[[کارور:Irman|Irman]] ([[کارور گپ:Irman|گپ]]) ۱۸ فوریه ۲۰۲۴، ساعت ۱۶:۲۹ (UTC)
:اختلاف لهجه بهرحال وجود دارنه. هرکس تونده شه لهجه جا بنویسه. البته ساروی لهجه دله اِما گمبی «وِن» ولی من سعی کمبه اتی بنویسم که ونه بخوندستن همه لهجهئون وسّه راحتته بوئه. همینسه «ونه» ره بتتر دومبه چون شکل کاملتری دارنه.
:دومین جمله: «خشکِ سنگ جه دیفار هکشیینِ هنر ره سال 2018 یونسکویِ فرهنگی آثار لیست که غیرمادی/ناملموس هستنه دله بییشتنه که فرانسه، یونان، ایتالیا، اسلوونی، کرواسی، سوئیس و اسپانیا دستوری کشورون نوم ثبت بیّه.» <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۸ فوریه ۲۰۲۴، ساعت ۱۶:۴۵ (UTC)
متوجه هسمه. خله ممنون.--[[کارور:Irman|Irman]] ([[کارور گپ:Irman|گپ]]) ۱۸ فوریه ۲۰۲۴، ساعت ۱۷:۰۵ (UTC)
راستی [[کارور:محک|محک]] جان، من مازندرانی خیلی بلد نیستم شما اگر اشکالی دیدید خودتون برطرف کنید. --[[کارور:Irman|Irman]] ([[کارور گپ:Irman|گپ]]) ۱۸ فوریه ۲۰۲۴، ساعت ۲۰:۴۱ (UTC)
== کمک در نبح ==
سلام جناب محک، ضمن تبریک نوروز به شما درخواست کمک برای ماندن یک صفحه در ویکیفا را دارم. صفحه [[پوتک]] را شما در ویکیپدیای مازندرانی ساختهاید، گمان کنم شما بتوانید با توجه به تجربه خود در [https://fa.m.wikipedia.org/wiki/%D9%88%DB%8C%DA%A9%DB%8C%E2%80%8C%D9%BE%D8%AF%DB%8C%D8%A7:%D9%86%D8%B8%D8%B1%D8%AE%D9%88%D8%A7%D9%87%DB%8C_%D8%A8%D8%B1%D8%A7%DB%8C_%D8%AD%D8%B0%D9%81/%D9%BE%D9%88%D8%AA%DA%A9_(%D8%AF%D9%88%D9%85%DB%8C%D9%86_%D9%86%D8%A7%D9%85%D8%B2%D8%AF%DB%8C) نبحی] که ویکیفا وجود دارد برای ماندن این مقاله به بنده کمک کنید. ارادتمند شما [[کارور:Harold Krabs|Harold Krabs]] ([[کارور گپ:Harold Krabs|گپ]]) ۲۱ مـارس ۲۰۲۴، ساعت ۱۶:۳۵ (UTC)
:@[[کارور:Harold Krabs|Harold Krabs]] سلام. عید شما مبارک. لطفاً مباحث مربوط به ویکیپدیا فارسی را در همان ویکی مطرح کنید. ویکیهای فارسی و مازندرانی در برخی موارد ممکن است قوانین محلی متفاوتی داشته باشند. احراز سرشناسی در ویکیپدیای فارسی رویه متفاوتی دارد و ممکن است این فرد بخصوص توسط کاربران آن ویکی سرشناس در نظر گرفته نشوند. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۱ مـارس ۲۰۲۴، ساعت ۱۹:۲۸ (UTC)
::اها پس برای همینه که شما خیلی از مقالات را توانستهاید در ویکیپدیای مازندرانی بسازید! فهمیدم. ممنون از توجه شما [[کارور:Harold Krabs|Harold Krabs]] ([[کارور گپ:Harold Krabs|گپ]]) ۲۱ مـارس ۲۰۲۴، ساعت ۲۰:۰۳ (UTC)
== گنجور ==
سلام. ضمن تبریک عید، آقا، ته هم ندنستی گنجور امیر پازواری ره [https://ganjoor.net/pazevari/divan اضافه هاکارده] یا فقط من مخبر نیمه؟ :) [[User:Hashter|<font style="color:#000;" face="Segoe print" size="4"><span style="color:#0C0">Ha</span><span style="color:#0C0">sh</span><span style="color:#0C0">t</span><span style="color:#0C0">er</span></font>]] ۳۱ مـارس ۲۰۲۴، ساعت ۰۸:۲۷ (UTC)
:@[[کارور:Hashter|Hashter]] سلام. شمه نو سال هم موارک. نا، من هم ندیبیمه! اتفاقا گنجور سایت دله هم خله شومبه، سر زمبه ولی نندستمه اینتیچی هم دارنه. 💚 <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۳۱ مـارس ۲۰۲۴، ساعت ۱۳:۱۳ (UTC)
== <span lang="fa" dir="rtl" class="mw-content-rtl">یادآوری برای رای دادن به انتخاب اعضای اولین U4C</span> ==
<div lang="fa" dir="rtl" class="mw-content-rtl">
<section begin="announcement-content" />
:''[[m:Special:MyLanguage/Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – vote reminder|شما می توانید این پیام را در Meta-wiki به زبان های اضافی ترجمه کنید.]] [https://meta.wikimedia.org/w/index.php?title=Special:Translate&group=page-{{urlencode:Universal Code of Conduct/Coordinating Committee/Election/2024/Announcement – vote reminder}}&language=&action=page&filter= {{int:please-translate}}]''
کاربران عزیز ویکیمدیا،
<div lang="en" dir="ltr" class="mw-content-ltr">
You are receiving this message because you previously participated in the UCoC process.
</div>
<div class="mw-translate-fuzzy">
این یادآوری است که دوره رایگیری برای کمیته هماهنگی آییننامه فراگیر رفتاری (U4C) در 30 آوریل 2024 به پایان میرسد. اطلاعات را در صفحه رأیگیری [[آییننامه فراگیر رفتاری/کمیته هماهنگی/Election/2024|در Meta- بخوانید. wiki]] برای کسب اطلاعات بیشتر در مورد رأی دادن و واجد شرایط بودن رأی دهندگان.
</div>
کمیته هماهنگی آییننامه فراگیر رفتاری (U4C) یک گروه جهانی است که به ارائه اجرای عادلانه و منسجم UCoC اختصاص دارد. از اعضای انجمن دعوت شد تا درخواست های خود را برای U4C ارسال کنند. برای اطلاعات بیشتر و مسئولیتهای U4C، لطفاً [[آییننامه فراگیر رفتاری/کمیته هماهنگی/منشور|منشور U4C را بررسی کنید]].
لطفا این پیام را با اعضای جامعه تان به اشتراک بگذارید تا آنها هم بتوانند در این کار شرکت کنند.
از طرف تیم پروژه UCoC،<section end="announcement-content" />
</div>
[[m:User:RamzyM (WMF)|RamzyM (WMF)]] ۲ مه ۲۰۲۴، ساعت ۲۲:۵۳ (UTC)
<!-- پیام توسط کاربر:RamzyM (WMF)@metawiki با استفاده از فهرست در https://meta.wikimedia.org/w/index.php?title=Universal_Code_of_Conduct/Coordinating_Committee/Election/2024/Previous_voters_list_3&oldid=26721208 ارسال شده است -->
== منبع پرچم سه رنگ ==
سلام برار محک، خاری، قبلا یتا بحث تی جا هشامه که سه رنگ کهو و سوز و سرخ پرچم وسه یتا منبع هدا بی، بنوم تاریخ ملک آرا، ونه صفحه رج رم گونی؟ [[کارور:Saeedmallahh|Saeedmallahh]] ([[کارور گپ:Saeedmallahh|گپ]]) ۱۹ ژوئن ۲۰۲۴، ساعت ۱۱:۳۱ (UTC)
:[[کارور:Saeedmallahh|Saeedmallahh]] سلام. من دکال این کتاب ره هنتا نخوندستمه! دقیقاً کجه این منبع خَوری، چنین ادعایی هاکردمه؟ <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۹ ژوئن ۲۰۲۴، ساعت ۱۱:۳۵ (UTC)
::تازه بوردمه ایی هشامه، ته نی بی [[کارور:Saeedmallahh|Saeedmallahh]] ([[کارور گپ:Saeedmallahh|گپ]]) ۱۹ ژوئن ۲۰۲۴، ساعت ۱۱:۳۶ (UTC)
==[[شابلون:غیررسمی ملتون و اقلیتون سازمان]]==
این کارور مازرونی/گِلِکی جه هِچّی نَفِهمِنه (یا خله سخت فَهمِنه).
[[شابلون:غیررسمی ملتون و اقلیتون سازمان]]: [[:File:Flag of Southern Cameroons.PNG]] -> [[:File:Flag of The Federal Republic of Southern Cameroons.svg]] [[کارور:Koavf|Koavf]] ([[کارور گپ:Koavf|گپ]]) ۹ ژوئیه ۲۰۲۴، ساعت ۰۶:۱۳ (UTC)
:I open it <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۹ ژوئیه ۲۰۲۴، ساعت ۰۶:۴۷ (UTC)
::3> [[کارور:Koavf|Koavf]] ([[کارور گپ:Koavf|گپ]]) ۹ ژوئیه ۲۰۲۴، ساعت ۰۶:۵۹ (UTC)
== الگو جعبه اطلاعات هنرمند موسیقی ==
این )الگو حذف بیه من نتونستمه [[فرساد (خواننده)]] سه درست هاکنم اگه امکان دارنه صفحه ره دگاردن یا مره بار که چه تی درست هاکنم [[کارور:Farsadx|Farsadx]] ([[کارور گپ:Farsadx|گپ]]) ۶ آگوست ۲۰۲۴، ساعت ۰۸:۰۵ (UTC)
:[[ویکیپدیا:جادکت بیین]] ونه رعایت بوو. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۶ آگوست ۲۰۲۴، ساعت ۰۸:۰۶ (UTC)
== خیله واجب! ==
سلام برار
گمه که، برو دست هادیم و این شابلونها ره خار هکنیم! ون اوضا خیله خرابه! هرکس وه خامبه اتی صفحه بسازم ماجرا و گرفتاری دارمه ولا!
مه نظر template:infobox جا شروع هکنیم، هر کار مه دست جا بر بیه دریغ نکمبه
ته بلاره [[کارور:Behshahri|Behshahri]] ([[کارور گپ:Behshahri|گپ]]) ۱۰ آگوست ۲۰۲۴، ساعت ۲۳:۳۳ (UTC)
:سلام @[[کارور:Behshahri|Behshahri]] خش بمویی. لطفاً باوین کمینتا مقاله سر مشکل دارنه؟ و چه مشکلی؟ حکماً درست کمبه.
:اتفاقاً امه مازرونی ویکی ِصندخ (اینفوباکس) خله جدید و پیشرفته هسه و فارسی ویکی جه پیش درمی؛ ندومبه دقیقاً کجه مشکل دارنی که کومِک هاکنم؟ <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۱ آگوست ۲۰۲۴، ساعت ۰۲:۲۹ (UTC)
::علک سلام برار @[[کارور:محک|محک]].
::ندومبه ولا! شاید من وارد نیمه اینتی وونه! اشون خواستمه [[علی مهدیان]] ره خار هکنم، نتونسمه ویکی ِصندخ خار هکنم!
::من با سیستم فارسی ویکی خواستمه وره خار هکنم!
::یعنی ته گونی ای ونه مره آموزش هادین؟ [[کارور:Behshahri|Behshahri]] ([[کارور گپ:Behshahri|گپ]]) ۱۱ آگوست ۲۰۲۴، ساعت ۱۷:۴۹ (UTC)
:::[[کارور:Behshahri|Behshahri]] امه نسخه خله-خله فارسی توم راحتتر هسته. مقالاتی که ویکیدیتا جه وصل هستنه (دیگر زوونها لینک وشون سر وصل هسته) فقط اتا تکخطی کُد لازم دارنه که اتوماتیک صندخ دیار بوو. فیالمثل افراد وسّه، فقط اولین خط بنویسی '''<nowiki>{{صندخ/شخص}}</nowiki>''' کفایت کنده.
:::همین شیوه اماکن وسّه ''<nowiki>{{صندخ/بنا}}</nowiki>''، جونورون و گیاهون وسه ''<nowiki>{{صندخ/موجود}}</nowiki>''، شهر و استان وسه ''<nowiki>{{صندخ/شهر}}</nowiki>''، فیلم و سریال وسه ''<nowiki>{{صندخ/فیلم}}</nowiki>''، روخنه وسّه ''<nowiki>{{صندخ/رود}}</nowiki>'' و... هسته.
:::البته اینجه هم تومبی سابق واری (اونتی که هنتا فارسی ویکی دله استفاده کانّه) این صندخ ره پر هاکنیم. ولی امه روش شمه زحمت ره کم کانده. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۱ آگوست ۲۰۲۴، ساعت ۱۷:۵۷ (UTC)
::::اسا خار بیه! مه حواس کلاً دنی بیه! اینطی خیله منظم وونه
::::یعنی ات دفه ویکیدیتا ره خار کندی، همهجا بتوندی کار بزنی
::::ته فدا [[کارور:Behshahri|Behshahri]] ([[کارور گپ:Behshahri|گپ]]) ۱۱ آگوست ۲۰۲۴، ساعت ۱۸:۴۲ (UTC)
::::[[علی مهدیان]] صفحه ره خار هکردمه!
::::اسا یک زحمت تره هادم! [[جهانگیر نصر اشرفی]] نوم جهانگیر نصری اشرفی هسته! یعنی «نصر» ون بواشه «نصری»
::::ته بلاره [[کارور:Behshahri|Behshahri]] ([[کارور گپ:Behshahri|گپ]]) ۱۱ آگوست ۲۰۲۴، ساعت ۱۹:۳۲ (UTC)
:::::{{بیه}} <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۲ آگوست ۲۰۲۴، ساعت ۰۸:۰۵ (UTC)
== مقاله جدید ==
درود بر شما خداقوت
یه مقاله میخواهم بنویسید برای یه روزنامه نگار سیاسی و اقتصادی منابع هم کلی دارم ازش ولی زبان مازنی بلد نیستم یه راه ارتباطی به غیر از ویکی پدیا به من بدهید تا برای شما اطلاعات را بفرستم...
با تشکر [[کارور:Mobinkhojasteboroumand|Mobinkhojasteboroumand]] ([[کارور گپ:Mobinkhojasteboroumand|گپ]]) ۱۲ آگوست ۲۰۲۴، ساعت ۱۴:۴۰ (UTC)
:[[کارور:Mobinkhojasteboroumand|Mobinkhojasteboroumand]] سلام. خب چرا در ویکی فارسی نمیسازید؟ اینجا کسی سفارش قبول نمیکند. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۲ آگوست ۲۰۲۴، ساعت ۱۵:۱۰ (UTC)
::@[[کارور:محک|محک]]
::متاسفانه اونجا دست کاری زیاد میشه ولی تصمیم گرفتم اینجا ساخته بشه...
::منابع زیاده از bbc گرفته تا ایران اینترنشنال و منوتو و خبرگزاری های خارجی مقاله خوبی هست ولی اگر کمک کنید ساخته بشه اینجا قطعا مورد توجه قرار میگیره...
::خواستید اطلاعات را اینجا میفرستم [[کارور:Mobinkhojasteboroumand|Mobinkhojasteboroumand]] ([[کارور گپ:Mobinkhojasteboroumand|گپ]]) ۱۲ آگوست ۲۰۲۴، ساعت ۱۵:۳۱ (UTC)
::@[[کارور:محک|محک]]
::من اگر بخوام خودم مقاله را درست کنم چگونه میتوانم فارسی را به مازنی ترجمه کنم میشه ابزاری یا سایتی بهم معرفی کنید؟
::با تشکر خیلی فراوان [[کارور:Mobinkhojasteboroumand|Mobinkhojasteboroumand]] ([[کارور گپ:Mobinkhojasteboroumand|گپ]]) ۱۲ آگوست ۲۰۲۴، ساعت ۱۸:۱۶ (UTC)
== درخواست ایجاد مقاله برای آکادمی آمارو ==
سلام وقت بخیر آیا این عنوان شرایط ایجاد مقاله در ویکی پدیا مازندارنی داره ؟ [[کارور:Wi2030|Wi2030]] ([[کارور گپ:Wi2030|گپ]]) ۱ سپتامبر ۲۰۲۴، ساعت ۰۹:۱۰ (UTC)
:نا <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱ سپتامبر ۲۰۲۴، ساعت ۰۹:۲۲ (UTC)
== علت حذف صفحه علیرضا جدیدی ==
سلتم علت حذف صفحه علیرضا جدیدی چنه؟ سیچه حذفس کردی؟؟ [[کارور:Moretv33|Moretv33]] ([[کارور گپ:Moretv33|گپ]]) ۲ سپتامبر ۲۰۲۴، ساعت ۱۱:۲۸ (UTC)
== علت حذف صفحه علیرضا جدیدی ==
سلتم مقاله علیرضا جدیدی رو چند ساعت پیش حذف کردید ، علتش چیه؟من خیلی از مقاله ها رو دیدم که منابع کمتری دارن و ویرایش ضعیفی دارن اما حذف نمیشن اما چرا این مقاله حذف شد؟؟
نمیشه براساس سلیقه مقاله حذف کرد بدون دلیل [[کارور:Jackcamera286|Jackcamera286]] ([[کارور گپ:Jackcamera286|گپ]]) ۲ سپتامبر ۲۰۲۴، ساعت ۱۱:۳۲ (UTC)
== علیرضا جدیدی ==
سلام خودتون میشه این مقاله علیرضا جدیدی رو ویرایش و منتشر کنید؟ [[کارور:Jackcamera286|Jackcamera286]] ([[کارور گپ:Jackcamera286|گپ]]) ۲ سپتامبر ۲۰۲۴، ساعت ۱۱:۴۱ (UTC)
== محمد نویری ==
سلام. زندهیاد [[محمد نویری]] (با نام کامل محمدرسول ساکن نویری)، آموزگار ادبیات دبیرستان من در تهران بودند (۱۳۸۸-۱۳۸۹) و گویا در ۱۳۹۵ مردهاند (در بهشت زهرا تهران دفن هستند). لطفاً مقاله ایشان را به زبان مازرونی بهروز بفرمایید.[[کارور:The.shahab|The.shahab]] ([[کارور گپ:The.shahab|گپ]]) ۲۶ سپتامبر ۲۰۲۴، ساعت ۲۲:۳۵ (UTC)
:{{بیه}} <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۷ سپتامبر ۲۰۲۴، ساعت ۰۹:۲۳ (UTC)
== علیرضا جدیدی ==
سلام علت حذف علیرضا جدیدی چیست؟ [[کارور:Everythingtv|Everythingtv]] ([[کارور گپ:Everythingtv|گپ]]) ۶ نوامبر ۲۰۲۴، ساعت ۱۹:۱۱ (UTC)
:[[ویکیپدیا:جادکت بیین]]. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۶ نوامبر ۲۰۲۴، ساعت ۱۹:۱۴ (UTC)
::این مقاله معتبر بود، از خیلی از مقاله های موجود بهتر بود [[کارور:Everythingtv|Everythingtv]] ([[کارور گپ:Everythingtv|گپ]]) ۶ نوامبر ۲۰۲۴، ساعت ۱۹:۱۶ (UTC)
== Translation request ==
Hello, محک.
Can you translate and upload the article about the prominent Turkish economist [[:fa:دانی رادریک]] in Mazanderani Wikipedia?
Yours sincerely, [[کارور:Moroike|Moroike]] ([[کارور گپ:Moroike|گپ]]) ۱۲ دسامبر ۲۰۲۴، ساعت ۰۶:۴۷ (UTC)
:{{Done}} <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۱۲ دسامبر ۲۰۲۴، ساعت ۱۹:۵۱ (UTC)
::Thank you very much for the new article. [[کارور:Moroike|Moroike]] ([[کارور گپ:Moroike|گپ]]) ۱۲ دسامبر ۲۰۲۴، ساعت ۱۹:۵۵ (UTC)
== ایندرا ==
چرا ایندرا صفحه ره کامل نکنین؟ [[کارور:Rig6veda12|Rig6veda12]] ([[کارور گپ:Rig6veda12|گپ]]) ۲۶ ژانویه ۲۰۲۵، ساعت ۱۸:۰۳ (UTC)
== علیرضا جدیدی ==
سلام آیا مقاله علیرضا جدیدی که ساخته ام مناسبه؟؟ یکی از منابع آن صفه او در مرجع بیپ تونز است و دیگری بیوگرافی او در یک سایت بین المللی است، [[شا:مشارکتها/178.131.144.62|178.131.144.62]] ۱۰ فوریه ۲۰۲۵، ساعت ۱۳:۳۴ (UTC)
== امیر بنگارد ==
با سلام،مقاله هایی دیده شده که حتی هیچ منبعی ندارند؛مقاله امیر بنگارد با وجود حداقل ۴ منبع خبری را حذف میکنید،به نظر میرسد شما درحال تداخل دادن شخصی گری و سلیقه خودتون با ویکی نویس ها هستید! [[کارور:Tajangi|Tajangi]] ([[کارور گپ:Tajangi|گپ]]) ۵ مارس ۲۰۲۵، ساعت ۱۵:۰۵ (UTC)
== پیئر ==
راهنمایی هاکن [[کارور:Rig6veda12|Rig6veda12]] ([[کارور گپ:Rig6veda12|گپ]]) ۶ مارس ۲۰۲۵، ساعت ۲۲:۰۱ (UTC)
:@[[کارور:Rig6veda12|Rig6veda12]] I can't understand what do you want?! <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۸ مارس ۲۰۲۵، ساعت ۰۷:۲۵ (UTC)
::Why don't you complete the page about Indra? [[کارور:Rig6veda12|Rig6veda12]] ([[کارور گپ:Rig6veda12|گپ]]) ۱۱ مارس ۲۰۲۵، ساعت ۰۹:۰۱ (UTC)
:::{{بیه}} <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۳ مارس ۲۰۲۵، ساعت ۱۹:۴۴ (UTC)
::::What about his wifes?? [[کارور:Rig6veda12|Rig6veda12]] ([[کارور گپ:Rig6veda12|گپ]]) ۲۷ مارس ۲۰۲۵، ساعت ۲۰:۱۵ (UTC)
:::::Later, maybe. I haven't enough time for all of humens knowledge :) <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ بزوئن]]</sup> ۲۷ مارس ۲۰۲۵، ساعت ۲۰:۲۹ (UTC)
::::::What about Lord Shiva????? [[کارور:Rig6veda12|Rig6veda12]] ([[کارور گپ:Rig6veda12|گپ]]) ۱۱ آوریل ۲۰۲۵، ساعت ۲۱:۳۰ (UTC)
== ==
سلام برار چتی هسی؟
شه صفحه اینجه کامل هاکردمه، اته کم رابط کاربری اینجه فرق دارنه با ویکیپدیا فارسی، جعبه اطلاعات ظریف کامل هاکردمه ، بهروز هاکردمه، ولی وره نشون نداهه صفحه اصلی دله
ونه دلیل چی هسته؟ [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۱۲ مه ۲۰۲۵، ساعت ۱۹:۵۶ (UTC)
:@[[کارور:Urmazdaa|Urmazdaa]]: سلام. مازرونی ویکیپدیا ره خش بمویی!
:اینجه صندخ (جعبه اطلاعات) اتی جدیدِ نسل هستنه ولی فارسی ویکیپدیایِ صندخ نسل قدیم شنه. أمه صندخ اتوماتیک شه [[ویکیدیتا]] اطلاعات سر جه آپدیت وونه و دستی لازم نییه وه ره اتا-اتا پر هاکنیم. (فقط اتا جزئی مشکل دارمی که تاریخ حکماً ونه میلادی تقویم جه بوئه.)
:البته تومبی مازرونی ویکی دله هم فارسی دسوری نسل قدیم صندخ ره دینگنیم.
:{{شد}} [[محمدجواد ظریف]] مقاله ره ویکیدیتا دله آپدیت هاکردمه. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۱۲ مه ۲۰۲۵، ساعت ۲۰:۱۱ (UTC)
::چتی تومی ویکیمدیا دله وره آپدیت هکنیم؟ [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۱۲ مه ۲۰۲۵، ساعت ۲۰:۱۵ (UTC)
:::@[[کارور:Urmazdaa|Urmazdaa]]: ویکیپدیائون هئی جه [https://www.wikidata.org/wiki/Wikidata:Main_Page ویکیدیتا] دله وصل هستنه. '''[[رانما:میونویکی]] '''صفحه دله خار-خار توضیح هدامه که چتی اتا مقاله ره تومبی ویکیدیتا تن وصل هکنیم.
:::ویکیدیتای صفحات (مثلاً [https://www.wikidata.org/wiki/Q10296812?uselang=mzn وه]) ره هم دسکتاپ حالت هارشی، ساده فورم دارنه و ونه کاربری رابط ره آدم ره شه حالی وونه.
:::[https://upload.wikimedia.org/wikipedia/commons/d/d0/InterWiki%2C_mznwp%2C_9.png این عکس] سر هم اتکه توضیح بنویشتمه که شاید کومِک هاکنه. شه هارش؛ أی سؤال داشتی، مه جه خَور های. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۱۲ مه ۲۰۲۵، ساعت ۲۰:۲۵ (UTC)
::::ممنونم❤️ [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۱۲ مه ۲۰۲۵، ساعت ۲۰:۳۱ (UTC)
== صندخ ==
سلام برار چتی هسی؟ اتا توضیح هده این صندخ جدیدارِ مه وسه، نفهمسه چتی کار کننه
دومه ویکیدیتا ر آپدیت هاکنیم صندخ آپدیت بونه، اما ندومه کد صندخ چی هسه، خوامه اتا مقاله بنویسم. [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۱۸ مه ۲۰۲۵، ساعت ۱۷:۰۴ (UTC)
:@[[کارور:Urmazdaa|Urmazdaa]] سلام. [[:رج:شابلون:صندخ|اینجه]] صندخهای نوم کته. هر موضوعی اتجور صندخ دارنه. مثلاً حیوون و دار وسه [[شابلون:صندخ/موجود]] دره و آدمون وسه [[شابلون:صندخ/شخص]] دره. پس اولین مرحله این هسته که طبق موضوعی که دارنی، اتا صندخ ره هوجینی.
:دومین مرحله، بور مقالهی اولین خط دله و اونجه صندخ نوم ره '''{{}}''' دله بنویس. مثلاً: '''<nowiki>{{صندخ/شخص}}</nowiki>'''
:سومین مرحله هم این هسته که اگه مقاله ویکیدیتا جه وصل نییه، وه ره طبق ''[[رانما:میونویکی]]''، شناسا هادی.
:[البته من کُد دچیین جه إستٮفاده کمبه و هارشیینی دچیین (ویرایشگر دیداری) ره خله ندومبه چتی هسته ولی اگه هارشیینی ره هم کار زندی، اونجه هم همین اتا خط ره بنویسی، ونه جواب هاده.] <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۱۸ مه ۲۰۲۵، ساعت ۱۷:۱۴ (UTC)
::ممنون پاسخ هدایی، کومک هکن اگر تونی بوریم خش بیمونی صفحه ر ترجمه هاکنیم. [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۱۸ مه ۲۰۲۵، ساعت ۱۷:۲۳ (UTC)
:::مه نظر، ونه جا اگه '''[https://www.mediawiki.org/wiki/Help:Contents/mzn این اتا]''' ره دگاردنیم، خله مفید و کاملته هسته. ولی ونه ترجمه خله کار ورنه. مه قد نکشییه. 😅 <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۱۸ مه ۲۰۲۵، ساعت ۱۷:۳۳ (UTC)
::::😁😁، دیگر مدیرون ونه باویم بین امره کنم هاکنن، فکر کمه فقط مه و تو فعال هسمی اینجه دله.😂 [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۱۸ مه ۲۰۲۵، ساعت ۱۷:۳۷ (UTC)
:::::@[[کارور:Urmazdaa|Urmazdaa]]: أره. اینجه طبیعتاً فارسی ویکیپدیا جه خلوتته هسته. البته دیگه کارورون هم درنه که فعال هستنه. TheHenry یا P834675676 دسوری. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۱۸ مه ۲۰۲۵، ساعت ۱۷:۴۲ (UTC)
::::::راستی فارسی دله مه رد درخواسته بزویی؟ [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۱۸ مه ۲۰۲۵، ساعت ۱۷:۴۸ (UTC)
:::::::اره. خدکار گشت مهم نییه. کارور کار سر تأثیری ندارنه. فقط کاروری که دونه ویکی غلق ره بییته ره دمبی که گشتزنون کار کمته بوه.
:::::::مه ره یاد ننه هیچگدر گشت وسه درخاست هدا بوئم. مدیرون شه تونه هارشن و کاروری که حس کنه یاد بیته ره خدکار گشت هاکنن.<small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۱۸ مه ۲۰۲۵، ساعت ۱۸:۵۶ (UTC)
::::::::وره ندونسمه، چون ونه درخواست بیه باتمه درخواست هادم چون چندتا خار مقاله بنویشت بیمه، خار بیه باتی مره، اته کم ونه باوم اتا مدیر بوینه مه سابقه ر، خاسمه اول ته جا مطرح هاکنم فکر کردمه مدیر نیی ، مدیران غیرفعال ر با مدیران پیشین اشتباه بیتمه فکر هکردمه استعفا هدایی ونه وسه بوردمه شه درخواست هدامه، امروز بدیمه لیست مدیران دله دری شه خادر باتمه سریع تره باوم چون تازه درخواست هدا بیمه [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۱۸ مه ۲۰۲۵، ساعت ۱۹:۵۰ (UTC)
== Hi ==
Hi,
it's been a long time, I hope you are doing well. Do you know an online Mazandarani dictionary? [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۵ ژوئیه ۲۰۲۵، ساعت ۲۱:۵۴ (UTC)
:Hi @[[کارور:Vuzorg|Vuzorg]],
:Nice to talk to you. Unfortunately, the only online dictionary is blocked by the book publishers.
:There are some independent and collaborative efforts, none of which are perfect. One of these is the [https://en.wiktionary.org/wiki/Category:Mazanderani_language English Wiktionary], where we put the basic words, but it is very small. [https://abadis.ir/idiom/mazani/ Abadis], which is a multilingual site and completed by audience volunteers. And [http://tabari-dic.ir/ this] new effort that already started. --<small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۶ ژوئیه ۲۰۲۵، ساعت ۱۷:۳۷ (UTC)
::I see. به دلیل تفاوت در رسمالخط، قرار دادن لینک وبسایتها در اینجا دشوار است. من با ترجمه به فارسی ادامه خواهم داد. [https://incubator.wikimedia.org/wiki/Wt/mzn/%D8%AA%D9%84%D8%A7] و [https://incubator.wikimedia.org/wiki/Wt/mzn/%DA%A9%D8%B1%DA%AF]. من خودم دو ماده در ویکیواژه mzn ایجاد کردم. خودم در اینجا [https://tr.wiktionary.org/wiki/Kategori:Zazaca_s%C3%B6zc%C3%BCkler] در ویکیواژه بیش از ۸۰۰۰ ماده کلمه (فعل، اسم و غیره) به زبان زازاکی ایجاد کردم. خودم میخواهم ویکیواژه mzn هم بهبود پیدا کند. اما هیچ دیکشنری پیدا نکرد بودم. من یک صفحه اصلی و این صفحات را در ویکیواژه تالشی ایجاد کردم: [https://incubator.wikimedia.org/wiki/Special:PrefixIndex/Wt/tly] اینجا. اما کاربران تالشی نسبت به این پروژه بی علاقه به نظر میرسند. نمیدونم چرا. برای ویکیپدیای تالشی یه الفبای خیلی سختی لاتین بکار میگیرد.کاملاً با الفبای لاتین زازا و آذربایجانی متفاوته. مراقب خودت باش, ببینمت. [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۶ ژوئیه ۲۰۲۵، ساعت ۲۰:۵۱ (UTC)
:::سپاس 💚👍 <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۷ ژوئیه ۲۰۲۵، ساعت ۱۶:۵۳ (UTC)
::::راستی، @[[کارور:Vuzorg|Vuzorg]] ما یک «گروه کاربری ویکیمدیای ایران» داریم به آدرس https://t.me/iranwikimedia اگر دوست داشتی، در تلگرام به ما ملحق شو. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۷ ژوئیه ۲۰۲۵، ساعت ۱۶:۵۷ (UTC)
:::::@[[کارور:محک|محک]] باز کردم، آستفاده کردن از آن اپلیکشن یکم سختییه. بخشهای عمومی، مسباقات، اطلاع رسانی را دیدم. چطور میتونم اونجا با تو ارتباط برقرار کنم؟ [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۷ ژوئیه ۲۰۲۵، ساعت ۱۷:۴۲ (UTC)
== بایگانی ==
سلام، اینجا نمیتونیم صفحه بایگانی درست بکنیم؟ یا دستی فکر کنم باید درست کنیم اگر بشه.
اگر جعبه هست براش بدید ممنون میشم [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۲۳ آگوست ۲۰۲۵، ساعت ۰۷:۵۴ (UTC)
:Hello, I can't speak Persian :)
:فقط دستی دارمی. خله سخت نییه. «دکش» صفحه ره یارنی و اسم دمباله اتا «/تلمبار ۱»... نویسنی و ذخیره. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۳ آگوست ۲۰۲۵، ساعت ۰۸:۳۶ (UTC)
::تیخنابدون😁 [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۲۳ آگوست ۲۰۲۵، ساعت ۰۸:۳۷ (UTC)
== نوشتار ==
سلام اگه تونی [[سید رضا صالحی امیری]] اتا بررسی هکن مشکلی داشته درست هکن، اگه تونی اتا ونه ویکیداده ر آپدیت هکن ونه صندخ درست باوه. [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۲۳ آگوست ۲۰۲۵، ساعت ۰۸:۲۹ (UTC)
:{{بیه}} ونه نو مقوم ره بشتمه. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۳ آگوست ۲۰۲۵، ساعت ۰۸:۴۰ (UTC)
== پیشنهاد ==
اتا پیشنهاد دارمه، مه نَظِر اتا ویکیپروژه اینجه دله تشکیل هدیم، سعی هکنیم هر هفته اته کم مقاله به مازرونی ترجمه هکنیم، انّه فارسی دله ویراش هکردمه مه حوصله دیگه در بورده😄 [[کارور:Urmazdaa|Urmazdaa]] ([[کارور گپ:Urmazdaa|گپ]]) ۲۳ آگوست ۲۰۲۵، ساعت ۰۸:۴۲ (UTC)
:👍 شه دلوس پروژه بساز؛ من هم عضو وومه.
:(اینان جه توندی الگو بیری: [[پروژه:فلسفه]] یا [[پروژه:جوغرافی]] دسوری) <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۳ آگوست ۲۰۲۵، ساعت ۰۹:۴۷ (UTC)
== ایران رییس جومورون فهرست ==
سلام مه بوردمه وشون فهرست تا خامنهای ترجمه هکردمه اگه تونی اتا نگاهکن اگه ترجمه مشکلی هداشته درست هکن [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲۴ آگوست ۲۰۲۵، ساعت ۱۱:۵۱ (UTC)
:👍 @[[کارور:Urmazdaa|Urmazdaa]] اتکه گرامر و قواعد ره حلا یاد کندی که تمرین جه، کمکم بتتر وونه. اتا صفت و اضافه و اتا دیئر اضافی حروف هسته که ویشته دقت هکنی، خله خاره.
:اضافه و صفت که دوندی ونه فارسی جه برعکس بوئه. همین ''زنانِ شاعر'' ← ''شاعر زنان''
:اضافی حروف هم فارسی جه فرق کنده. إما «در»، «از»، «با»، «برای» و ویشته گدر «به» ندارمی. مثلاً «در ایران» ← «ایران دله». یا «از/با زهرا» ← «زهرا جه/جا»، «به آنها» ← «وشون ره»... <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۴ آگوست ۲۰۲۵، ساعت ۱۴:۰۵ (UTC)
::پ.ن) [[وپ:مازرونی ]] دله ویشته توضیح هدامه.--<small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۴ آگوست ۲۰۲۵، ساعت ۱۴:۰۷ (UTC)
::بزرگترین مشکلی که امه دارمبی این هسه کا لهجه واحد ندارمی هرکی پیش فرض ناخواسته انه شی لهجه ر وارد کنه مقاله دله. امه هم نوشتاری زیاد نتومبی بیشتر همین گفتاری جا راحت تر هسمی اینم مشکل ایجاد کنه حالا چند وقت بواشیم اینجه فکر کمه درست باوه [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲۴ آگوست ۲۰۲۵، ساعت ۱۴:۳۲ (UTC)
:::👍 هر زوونِ پایه و اساس ونه گرامر هسته. گرامر که رعایت بوه، لهجه و کلمات و... کمکم شه درست وونه. البته که درست فرمایش کندی و مازرونی زوون ره بنویشتنی هکردن اتکه کشنه تا آدم ره چم بوو. ولی مه نظر راه دکفیم، لهجهئون فرق-فصل تونده زوون ره غنیته هم هاکنه. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۴ آگوست ۲۰۲۵، ساعت ۱۵:۲۴ (UTC)
== ایران ریاست جمهوری انتخابات(۱۳۵۸) ==
مقاله ر بساتمه، ولی شابلون کار نکنده. چتی کار کنده؟ [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲۴ آگوست ۲۰۲۵، ساعت ۱۴:۵۵ (UTC)
:@[[کارور:Urmazdaa|Urmazdaa]] متوجه نیمه کمینتا شابلون (الگو) ره خانی؟ فارسی ویکی جه خانی اینجه دکش هاکنی؟ <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۴ آگوست ۲۰۲۵، ساعت ۱۵:۱۸ (UTC)
::شابلون انتخابات ر خامه، ویکی فارسی که کلا ونه شابلون و صندخ اینجهجا فرق کنده، نتومبی وره دکش هاکنیم اینجه [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲۴ آگوست ۲۰۲۵، ساعت ۱۵:۳۵ (UTC)
:::{{بیه}} چتییه؟ انتخابات شابلون ره دکش هاکردمه ولی ترجمه لازم داینه. دووشه أی فرصت هکردمه، اتکه تغییر دمبه. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۴ آگوست ۲۰۲۵، ساعت ۱۵:۴۶ (UTC)
== سیاستون ==
سلام، مه نظر ات کم روی سیاستون هم مانور هدیم بیتر هسه، اتا نگاه هکردمه مقدار خیلی کمی از سیاستونِ امه ترجمه هکردمی، وشونه هم می نظر ات کم ترجمه ر ادامه هدیم [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۳۰ آگوست ۲۰۲۵، ساعت ۲۱:۳۱ (UTC)
:اصل [[ویکیپدیا:۵]] هسته. الباقی ره هر ویکی و زوونی شهسر چاره کنده. پس تا زمونی که مشکلی ندارمی، قانون و توافق هم لازم ندارمی. هرگدر مشکل ور بخردمی، ونه سر گپ زمبی و قانون إلمی. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۳۱ آگوست ۲۰۲۵، ساعت ۰۴:۴۲ (UTC)
== شابلون:آری ==
سلام برار، اتا شابلون بیاردمه از فارسی ویکیپدیا، همون اَره و نا هسه منتهی هنوز نا حاضر نَیّه، باز اگر وقت هکردی نا هم درست هکن.[[شابلون:آری]] [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۳۱ آگوست ۲۰۲۵، ساعت ۰۹:۰۱ (UTC)
:[[شابلون:اره]] و [[شابلون:No]] و [[شابلون:اره-نا]] دئینه کا <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۳۱ آگوست ۲۰۲۵، ساعت ۱۴:۲۸ (UTC)
::👍، بدیمه وشونه ولی ات کم مشکل داشتنه، موقتا همینِ استفاده کمی، البته اگه توندی وشونه منتقل هکن شابلون:آری وسه، ات کم معمول تر هسه.
::یا اینکه شابلون آری رِ منتقل هکنیم وشون دله، ولی سر نمایندهئون لیست ات کم اذیت بومی. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۳۱ آگوست ۲۰۲۵، ساعت ۲۲:۳۲ (UTC)
== مسعود پزشکیانِ انتخاباتیِ سابقه ==
سلام ات صفحه بساتمه [[مسعود پزشکیانِ انتخاباتیِ سابقه]]، ونه لیست شابلون برد و باخته استفاده کنه اگه تونی وشونه منتقل هکن تا درست باوه. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۱ سپتامبر ۲۰۲۵، ساعت ۱۲:۰۴ (UTC)
== صندخ ==
سلام ببخشید تیجه خله کار خوامه هکنی امیدوارِم ناراحت نواشی❤️ اگه تیسه زحمت نیه مجلس شورای اسلامی صندخِ دکش هکن مقاله دله، من شه سعی هکردمه کار نکرده. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۱ سپتامبر ۲۰۲۵، ساعت ۲۰:۲۰ (UTC)
:{{بیه}} اختیار داینی 💚 فقط انگلیسی جه دله دشنیمه و اتکه ترجمه خانه. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۱ سپتامبر ۲۰۲۵، ساعت ۲۱:۵۳ (UTC)
::تیخنابدون، ات کم وره ترجمه هکردمه اتا بخش ترجمه خود صندخ ونه ترجمه باوه بعضی پارامتراش [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۱ سپتامبر ۲۰۲۵، ساعت ۲۲:۲۳ (UTC)
:::{{بیه}} <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲ سپتامبر ۲۰۲۵، ساعت ۱۰:۰۴ (UTC)
== میلس اسلامی شورا ==
سلام ترجمه مقاله کامل بیّه حالا بخواستی اتا چک هاکن، تی نظر تومی وره کاندید برگزیدگی هکنیم؟ [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲ سپتامبر ۲۰۲۵، ساعت ۱۰:۰۲ (UTC)
:راسّی، ات کم ترجمه صندخ لازم دارنه(پارامترون) هروقت بتونستی درست هاکن. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲ سپتامبر ۲۰۲۵، ساعت ۱۰:۰۳ (UTC)
== کارورون دسترسی سطوح ==
سلام برار، تو مه ره باوت بی کا اینجه قوانین ونه جدا با اجماع درست باوه، این موضوع کارورون دسترسی سطوحسه هم صدق کنه یا نا؟ صفحهای هسه کا نشون هده این مسئله ر یا نا، اگر مه منظور واضح نیه: اتا صفحه مثل [https://fa.m.wikipedia.org/wiki/%D9%88%DB%8C%DA%A9%DB%8C%E2%80%8C%D9%BE%D8%AF%DB%8C%D8%A7:%D8%B3%D8%B7%D9%88%D8%AD_%D8%AF%D8%B3%D8%AA%D8%B1%D8%B3%DB%8C_%DA%A9%D8%A7%D8%B1%D8%A8%D8%B1%DB%8C ویکیپدیا:سطوح دسترسی کاربری] دارمی؟ یا امه دسترسیئون فرقی وشون جا دارنه یا نا [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲ سپتامبر ۲۰۲۵، ساعت ۱۶:۱۷ (UTC)
:@[[کارور:Urmazdaa|Urmazdaa]] اتکه فرق کنده. خدی ویکیمدیا اتا پیشفرض دسترسیون وسه دارنه که إما ونجه کار زمبی ولی فارسی دله اجماع بیه که گشتزن و ویکیبان و... دسوری سطح بساجن که أمه وسه بنظر لازم نییه.
:هر ویکی دله، [[شا:آمار]] دله دشتِ دسترسیون لیست کته ؛ توندی هارشی. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲ سپتامبر ۲۰۲۵، ساعت ۱۶:۲۱ (UTC)
::👍خاسمه بوینم اگه دسترسی مثل گشت زنی هسه اتا درخواست هدم تا وره بیرم، چون بعضی اوقات با لپتاپ امه تونسه کمک هکنه مهره. حالا فعلا که با موبایل هسمی همینطوری پیش ورمی بوینیم چتی بونه.
::راستی گروهکاربری دله از امیر بپرسیمه کا چتی تومی ابزار انتقال هدیم منتظر هسمه جواب هده. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲ سپتامبر ۲۰۲۵، ساعت ۱۶:۲۷ (UTC)
== انتقال ابزاری ==
سلام در مورد انتقال ابزار تلگرام دله تیسه پیغوم هدامه اگر نتونی بِیی تلگرام همینجا گپ بزنیم. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۲ سپتامبر ۲۰۲۵، ساعت ۱۹:۴۴ (UTC)
== عربی خلیج کایری شورا ==
سلام، بهتر نیه مقاله نوم به «خلیج کایری شورا» تغییر پیدا هکنه؟ چراکه ونه اسم رو توافق نییه، مه پیشنهاد این هسه کا و کلا فارس بوه از عربی، اگه نخوانی وره هکنی فارس خلیج، می نظر ونه نوم بلیم خلیج. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۵ سپتامبر ۲۰۲۵، ساعت ۱۷:۵۲ (UTC)
:👎🏼 ویکیپدیا ونه [[ویکیپدیا:بیطرفی|بیطرف]] بوئه. بیطرفی اتا اساسی [[ویکیپدیا:پنج اصل|اصل]] هسته. وقتی اتا سازمان (یا امارات لیگ برتر) دله رسمینوم «عربی خلیج» هسته و إما سرخود ونه نوم ره بلیم «فارس»، یعنی اتا طرف جه در پشتی کمبی. من این کار جه مخالفمه. فارسی و عربی ویکیپدیای شهوریگجی جه هم مخالفمه. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۶ سپتامبر ۲۰۲۵، ساعت ۰۷:۴۴ (UTC)
::اَره ت هم درست گنی، رسمی نوم ونه کار بزنیم [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۶ سپتامبر ۲۰۲۵، ساعت ۰۷:۴۷ (UTC)
== راهنما:فهرست ==
سلام، ات روز وقت بیاردمی برو دوتایی بوریم [[mw:Help:Contents/mzn|اینجه]] رِ کامل هکنیم. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۵ سپتامبر ۲۰۲۵، ساعت ۲۲:۵۰ (UTC)
:حتماً. اتفاقاً خله لازم هسته. تیناری مه ره سر نخاسته 😁 <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۶ سپتامبر ۲۰۲۵، ساعت ۰۷:۴۵ (UTC)
::مه اون ترجمه بخشِ کامل هکردمه ات کم بمونست بیه ونه زیربخشون نیاز دارننه، باز وشون زیربخشون هم لینک دارننه ای ونه وشونم ترجمه هکنیم😄 [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۶ سپتامبر ۲۰۲۵، ساعت ۰۷:۵۱ (UTC)
== تلگرام ==
سلام هروقت بتونستی بِرو تلگرام ات پیام تیسه بشتمه. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۶ سپتامبر ۲۰۲۵، ساعت ۰۹:۵۶ (UTC)
== شابلون ==
سلام مه رنگی نوار شابلون ر بساتمه، شه کاروری صفحهسه خاسمه الگو بلم، کار نکرده یعنی [[کارور:Urmazdaa/کاربریصفحه|اتی]] بَیه. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۸ سپتامبر ۲۰۲۵، ساعت ۱۰:۱۵ (UTC)
:اگه تونی ونه [[شابلون:رنگی نوار|شابلون صفحه]] ر هارش ایراد داشته درست هکن [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۸ سپتامبر ۲۰۲۵، ساعت ۱۰:۱۶ (UTC)
::{{بیه}} <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۹ سپتامبر ۲۰۲۵، ساعت ۱۶:۳۶ (UTC)
== سال نو مبارک ==
{{پینگ|Urmazdaa}} سال نو بر همکاران مازندرانی مبارک.
🎆🎇🎈🎉✧˚ ༘⋆2026✧˚ ༘ ⋆°⋆.*:・🎉 [[کارور:Sazwar|Sazwar]] ([[کارور گپ:Sazwar|گپ]]) ۳۰ دسامبر ۲۰۲۵، ساعت ۲۰:۳۲ (UTC)
:@[[کارور:Sazwar|Sazwar]] سپاسگزارم. امیدوارم سال بهتری برای همه باشد. <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۳۰ دسامبر ۲۰۲۵، ساعت ۲۰:۳۸ (UTC)
:سلام سازوار عزیز، از ته دل سال نو رو به شما تبریک میگم و آرزوی داشتن سالی خوب و پر از شادی برای خودتون و خانوادتون رو دارم.
:موفق باشید!🌹❤️🎉 [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۳۰ دسامبر ۲۰۲۵، ساعت ۲۰:۵۰ (UTC)
== شمه نوئه سال مبارک بووه! ==
نوئه میلادی سال ره شمه وسه شادباش دونّمه محک عزیز. امید دارمه که سالی خار و خِش شمه منتظر باوه. [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۳۰ دسامبر ۲۰۲۵، ساعت ۲۰:۵۴ (UTC)
:ممنون، شما هم خار سال داری ❤️ <small>شمه گِگا: </small>[[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۳۰ دسامبر ۲۰۲۵، ساعت ۲۱:۰۱ (UTC)
== درود ==
حال شما چطور است؟ برای شما پیام فرستادم اما پاسخی نگرفتم. خوب هستید؟ امیدوارم حال شما خوب باشه و سلامت باشید. [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۲۲ ژانویه ۲۰۲۶، ساعت ۱۹:۳۷ (UTC)
:@[[کارور:Vuzorg|Vuzorg]]: سلام. در ایران وضعیت بحرانی بود.
:من هم دو هفته در [[:en:2026 Internet blackout in Iran|سیاه چاله]] بودم و تازه کمی اکسیژن به من رسیده :)
:حالم خوب است ولی هنوز به اینترنت دسترسی کاملی ندارم. [[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۲ ژانویه ۲۰۲۶، ساعت ۱۹:۵۸ (UTC)
::Nice to know that you are doing well! از تلگرام پیام فراستاده بودم. یکی از دوستان ایرانی من گفت خیلی مردم در شمال کشته شدند، میترسم اگر تو هم یکی از کشتهشدگان باشی. مواظب خودت باش دوستم! [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۲۹ ژانویه ۲۰۲۶، ساعت ۱۷:۱۶ (UTC)
:::ممنون که در روزهای سخت به فکرم بودی. 💚🌷 [[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۳۰ ژانویه ۲۰۲۶، ساعت ۰۸:۲۹ (UTC)
::::دوستم، خیلی وقت بود خبرتو نگرفتم. چند باری بهت پیام فرستادم اما پاسخ نگرفتم. امیدوارم حالت خوبه و سلامت هستی. [[کارور:Vuzorg|Vuzorg]] ([[کارور گپ:Vuzorg|گپ]]) ۲۳ آوریل ۲۰۲۶، ساعت ۰۹:۴۸ (UTC)
:::::@[[کارور:Vuzorg|Vuzorg]] سلام. من کاملا خوبم و امیدوارم تو هم خوب باشی. پس از چند ماه، امشب اینترنت برای مردم عادی در ایران وصل شده. [[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۲۶ مه ۲۰۲۶، ساعت ۱۸:۲۹ (UTC)
== <span lang="en" dir="ltr">You may be eligible to vote in the U4C election</span> ==
<div lang="en" dir="ltr">
<section begin="announcement-content" />
I am contacting you because you previously voted in elections related to the [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee|Universal Code of Conduct Coordinating Committee (U4C)]]. You may be eligible to vote in the current U4C election, which is open now and closes on 2 June 2026. You can find out more about the candidates and the election on [[m:Special:MyLanguage/Universal_Code_of_Conduct/Coordinating_Committee/Election/2026|the election page on Meta]], and from there you can access the vote itself. Your participation in these elections is important to the governance of Wikimedia communities, and your time spent learning about the candidates and voting is appreciated.
-- In cooperation with the U4C, [[m:User:Keegan (WMF)|Keegan (WMF)]] ([[m:User talk:Keegan (WMF)|talk]])<section end="announcement-content" />
</div>
[[m:Keegan (WMF)|Keegan (WMF)]] ([[m:User_talk:Keegan (WMF)|talk]]) ۲۰ مه ۲۰۲۶، ساعت ۱۶:۳۵ (UTC)
<!-- پیام توسط کاربر:Keegan (WMF)@metawiki با استفاده از فهرست در https://meta.wikimedia.org/w/index.php?title=User:Keegan_(WMF)/test&oldid=30569740 ارسال شده است -->
== Help ==
Hello, can you help me please to translate [[:en:Gaza_genocide|this]]
article to your language. [[کارور:جودت|جودت]] ([[کارور گپ:جودت|گپ]]) ۲۵ ژوئن ۲۰۲۶، ساعت ۰۸:۲۱ (UTC)
:{{بیه}} [[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۴ ژوئیه ۲۰۲۶، ساعت ۱۰:۳۹ (UTC)
== محمدعلی رجایی ==
سلام، امیدوار هسمه تی حال خار بووه، همین الان [[محمدعلی رجایی]] مقاله ر ویکیترجمه جا مازرونی دله ترجمه هکردمه، اگه زحمت نیه توندی ونه صندخه درست هکنی؟ [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۷ ژوئیه ۲۰۲۶، ساعت ۱۳:۲۳ (UTC)
:@[[کارور:Urmazdaa|Urmazdaa]] سلام. ونه صندخ که خار هسته کا!؟ [[کارور:محک|<span style="font-family:IranNastaliq;">محک</span>]]<sup>[[کارور گپ:محک|گپ]]</sup> ۷ ژوئیه ۲۰۲۶، ساعت ۱۷:۰۶ (UTC)
::شه خدکار بیمو مثل اینکه [[کارور:Urmazdaa|ئورمزد]] ([[کارور گپ:Urmazdaa|گپ]]) ۹ ژوئیه ۲۰۲۶، ساعت ۲۱:۱۲ (UTC)
1plt0uuc6y1h3h7ghx5okfsudqoosp6
ماژول:String2
828
41052
389804
303059
2026-06-20T00:20:13Z
en>Uzume
0
remove artificial dependence on [[Module:GetParameters]]
389804
Scribunto
text/plain
require ('strict');
local p = {}
p.trim = function(frame)
return mw.text.trim(frame.args[1] or "")
end
p.sentence = function (frame)
-- {{lc:}} is strip-marker safe, string.lower is not.
frame.args[1] = frame:callParserFunction('lc', frame.args[1])
return p.ucfirst(frame)
end
p.ucfirst = function (frame)
local s = frame.args[1];
if not s or '' == s or s:match ('^%s+$') then -- when <s> is nil, empty, or only whitespace
return s; -- abandon because nothing to do
end
s = mw.text.trim( frame.args[1] or "" )
local s1 = ""
local prefix_patterns_t = { -- sequence of prefix patterns
'^\127[^\127]*UNIQ%-%-%a+%-%x+%-QINU[^\127]*\127', -- stripmarker
'^([%*;:#]+)', -- various list markup
'^(\'\'\'*)', -- bold / italic markup
'^(%b<>)', -- html-like tags because some templates render these
'^(&%a+;)', -- html character entities because some templates render these
'^(&#%d+;)', -- html numeric (decimal) entities because some templates render these
'^(&#x%x+;)', -- html numeric (hexadecimal) entities because some templates render these
'^(%s+)', -- any whitespace characters
'^([%(%)%-%+%?%.%%!~!@%$%^&_={}/`,‘’„“”ʻ|\"\'\\]+)', -- miscellaneous punctuation
}
local prefixes_t = {}; -- list, bold/italic, and html-like markup, & whitespace saved here
local function prefix_strip (s) -- local function to strip prefixes from <s>
for _, pattern in ipairs (prefix_patterns_t) do -- spin through <prefix_patterns_t>
if s:match (pattern) then -- when there is a match
local prefix = s:match (pattern); -- get a copy of the matched prefix
table.insert (prefixes_t, prefix); -- save it
s = s:sub (prefix:len() + 1); -- remove the prefix from <s>
return s, true; -- return <s> without prefix and flag; force restart at top of sequence because misc punct removal can break stripmarker
end
end
return s; -- no prefix found; return <s> with nil flag
end
local prefix_removed; -- flag; boolean true as long as prefix_strip() finds and removes a prefix
repeat -- one by one remove list, bold/italic, html-like markup, whitespace, etc from start of <s>
s, prefix_removed = prefix_strip (s);
until (not prefix_removed); -- until <prefix_removed> is nil
s1 = table.concat (prefixes_t); -- recreate the prefix string for later reattachment
local first_text = mw.ustring.match (s, '^%[%[[^%]]+%]%]'); -- extract wikilink at start of string if present; TODO: this can be string.match()?
local upcased;
if first_text then
if first_text:match ('^%[%[[^|]+|[^%]]+%]%]') then -- if <first_text> is a piped link
upcased = mw.ustring.match (s, '^%[%[[^|]+|%W*(%w)'); -- get first letter character
upcased = mw.ustring.upper (upcased); -- upcase first letter character
s = mw.ustring.gsub (s, '^(%[%[[^|]+|%W*)%w', '%1' .. upcased); -- replace
else -- here when <first_text> is a wikilink but not a piped link
upcased = mw.ustring.match (s, '^%[%[%W*%w'); -- get '[[' and first letter
upcased = mw.ustring.upper (upcased); -- upcase first letter character
s = mw.ustring.gsub (s, '^%[%[%W*%w', upcased); -- replace; no capture needed here
end
elseif s:match ('^%[%S+%s+[^%]]+%]') then -- if <s> is a ext link of some sort; must have label text
upcased = mw.ustring.match (s, '^%[%S+%s+%W*(%w)'); -- get first letter character
upcased = mw.ustring.upper (upcased); -- upcase first letter character
s = mw.ustring.gsub (s, '^(%[%S+%s+%W*)%w', '%1' .. upcased); -- replace
elseif s:match ('^%[%S+%s*%]') then -- if <s> is a ext link without label text; nothing to do
return s1 .. s; -- reattach prefix string (if present) and done
else -- <s> is not a wikilink or ext link; assume plain text
upcased = mw.ustring.match (s, '^%W*%w'); -- get the first letter character
upcased = mw.ustring.upper (upcased); -- upcase first letter character
s = mw.ustring.gsub (s, '^%W*%w', upcased); -- replace; no capture needed here
end
return s1 .. s; -- reattach prefix string (if present) and done
end
p.title = function (frame)
-- http://grammar.yourdictionary.com/capitalization/rules-for-capitalization-in-titles.html
-- recommended by The U.S. Government Printing Office Style Manual:
-- "Capitalize all words in titles of publications and documents,
-- except a, an, the, at, by, for, in, of, on, to, up, and, as, but, or, and nor."
local alwayslower = {['a'] = 1, ['an'] = 1, ['the'] = 1,
['and'] = 1, ['but'] = 1, ['or'] = 1, ['for'] = 1,
['nor'] = 1, ['on'] = 1, ['in'] = 1, ['at'] = 1, ['to'] = 1,
['from'] = 1, ['by'] = 1, ['of'] = 1, ['up'] = 1 }
local res = ''
local s = mw.text.trim( frame.args[1] or "" )
local words = mw.text.split( s, " ")
for i, s in ipairs(words) do
-- {{lc:}} is strip-marker safe, string.lower is not.
s = frame:callParserFunction('lc', s)
if i == 1 or alwayslower[s] ~= 1 then
s = mw.getContentLanguage():ucfirst(s)
end
words[i] = s
end
return table.concat(words, " ")
end
-- findlast finds the last item in a list
-- the first unnamed parameter is the list
-- the second, optional unnamed parameter is the list separator (default = comma space)
-- returns the whole list if separator not found
p.findlast = function(frame)
local s = mw.text.trim( frame.args[1] or "" )
local sep = frame.args[2] or ""
if sep == "" then sep = ", " end
local pattern = ".*" .. sep .. "(.*)"
local a, b, last = s:find(pattern)
if a then
return last
else
return s
end
end
-- stripZeros finds the first number and strips leading zeros (apart from units)
-- e.g "0940" -> "940"; "Year: 0023" -> "Year: 23"; "00.12" -> "0.12"
p.stripZeros = function(frame)
local s = mw.text.trim(frame.args[1] or "")
local n = tonumber( string.match( s, "%d+" ) ) or ""
s = string.gsub( s, "%d+", n, 1 )
return s
end
-- nowiki ensures that a string of text is treated by the MediaWiki software as just a string
-- it takes an unnamed parameter and trims whitespace, then removes any wikicode
p.nowiki = function(frame)
local str = mw.text.trim(frame.args[1] or "")
return mw.text.nowiki(str)
end
-- split splits text at boundaries specified by separator
-- and returns the chunk for the index idx (starting at 1)
-- #invoke:String2 |split |text |separator |index |true/false
-- #invoke:String2 |split |txt=text |sep=separator |idx=index |plain=true/false
-- if plain is false/no/0 then separator is treated as a Lua pattern - defaults to plain=true
p.split = function(frame)
local args = frame.args
if not(args[1] or args.txt) then args = frame:getParent().args end
local txt = args[1] or args.txt or ""
if txt == "" then return nil end
local sep = (args[2] or args.sep or ""):gsub('"', '')
local idx = tonumber(args[3] or args.idx) or 1
local plain = (args[4] or args.plain or "true"):sub(1,1)
plain = (plain ~= "f" and plain ~= "n" and plain ~= "0")
local splittbl = mw.text.split( txt, sep, plain )
if idx < 0 then idx = #splittbl + idx + 1 end
return splittbl[idx]
end
-- val2percent scans through a string, passed as either the first unnamed parameter or |txt=
-- it converts each number it finds into a percentage and returns the resultant string.
p.val2percent = function(frame)
local args = frame.args
if not(args[1] or args.txt) then args = frame:getParent().args end
local txt = mw.text.trim(args[1] or args.txt or "")
if txt == "" then return nil end
local function v2p (x)
x = (tonumber(x) or 0) * 100
if x == math.floor(x) then x = math.floor(x) end
return x .. "%"
end
txt = txt:gsub("%d[%d%.]*", v2p) -- store just the string
return txt
end
-- one2a scans through a string, passed as either the first unnamed parameter or |txt=
-- it converts each occurrence of 'one ' into either 'a ' or 'an ' and returns the resultant string.
p.one2a = function(frame)
local args = frame.args
if not(args[1] or args.txt) then args = frame:getParent().args end
local txt = mw.text.trim(args[1] or args.txt or "")
if txt == "" then return nil end
txt = txt:gsub(" one ", " a "):gsub("^one", "a"):gsub("One ", "A "):gsub("a ([aeiou])", "an %1"):gsub("A ([aeiou])", "An %1")
return txt
end
-- findpagetext returns the position of a piece of text in a page
-- First positional parameter or |text is the search text
-- Optional parameter |title is the page title, defaults to current page
-- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search
-- Optional parameter |nomatch is the return value when no match is found; default is nil
p._findpagetext = function(args)
-- process parameters
local nomatch = args.nomatch or ""
if nomatch == "" then nomatch = nil end
--
local text = mw.text.trim(args[1] or args.text or "")
if text == "" then return nil end
--
local title = args.title or ""
local titleobj
if title == "" then
titleobj = mw.title.getCurrentTitle()
else
titleobj = mw.title.new(title)
end
--
local plain = args.plain or ""
if plain:sub(1, 1) == "f" then plain = false else plain = true end
-- get the page content and look for 'text' - return position or nomatch
local content = titleobj and titleobj:getContent()
return content and mw.ustring.find(content, text, 1, plain) or nomatch
end
p.findpagetext = function(frame)
local args = frame.args
local pargs = frame:getParent().args
for k, v in pairs(pargs) do
args[k] = v
end
if not (args[1] or args.text) then return nil end
-- just the first value
return (p._findpagetext(args))
end
-- returns the decoded url. Inverse of parser function {{urlencode:val|TYPE}}
-- Type is:
-- QUERY decodes + to space (default)
-- PATH does no extra decoding
-- WIKI decodes _ to space
p._urldecode = function(url, type)
url = url or ""
type = (type == "PATH" or type == "WIKI") and type
return mw.uri.decode( url, type )
end
-- {{#invoke:String2|urldecode|url=url|type=type}}
p.urldecode = function(frame)
return mw.uri.decode( frame.args.url, frame.args.type )
end
-- what follows was merged from [[Module:StringFunc]]
-- Argument list helper function, as per [[Module:String]]
function p._getParameters( frame_args, arg_list )
local new_args = {};
local index = 1;
local value;
for i,arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index];
index = index + 1;
end
new_args[arg] = value;
end
return new_args;
end
-- Escape Pattern helper function so that all characters are treated as plain text, as per [[Module:String]]
function p._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
end
-- Helper Function to interpret boolean strings, as per [[Module:String]]
function p._getBoolean( boolean_str )
local boolean_value;
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower();
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false;
else
boolean_value = true;
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str;
else
error( 'No boolean value found' );
end
return boolean_value
end
--[[
Strip
This function Strips characters from string
Usage:
{{#invoke:String2|strip|source_string|characters_to_strip|plain_flag}}
Parameters
source: The string to strip
chars: The pattern or list of characters to strip from string, replaced with ''
plain: A flag indicating that the chars should be understood as plain text. defaults to true.
Leading and trailing whitespace is also automatically stripped from the string.
]]
function p.strip( frame )
local new_args = p._getParameters( frame.args, {'source', 'chars', 'plain'} )
local source_str = new_args['source'] or ''
local chars = new_args['chars'] or '' or 'characters'
source_str = mw.text.trim(source_str)
if source_str == '' or chars == '' then
return source_str
end
local l_plain = p._getBoolean( new_args['plain'] or true )
if l_plain then
chars = p._escapePattern( chars )
end
local result
result = mw.ustring.gsub(source_str, "["..chars.."]", '')
return result
end
--[[
Match any
Returns the index of the first given pattern to match the input. Patterns must be consecutively numbered.
Returns the empty string if nothing matches for use in {{#if:}}
Usage:
{{#invoke:String2|matchAll|source=123 abc|456|abc}} returns '2'.
Parameters:
source: the string to search
plain: A flag indicating that the patterns should be understood as plain text. defaults to true.
1, 2, 3, ...: the patterns to search for
]]
function p.matchAny(frame)
local source_str = frame.args['source'] or error('The source parameter is mandatory.')
local l_plain = p._getBoolean( frame.args['plain'] or true )
for i = 1, math.huge do
local pattern = frame.args[i]
if not pattern then return '' end
if mw.ustring.find(source_str, pattern, 1, l_plain) then
return tostring(i)
end
end
end
--[[--------------------------< H Y P H E N _ T O _ D A S H >--------------------------------------------------
Converts a hyphen to a dash under certain conditions. The hyphen must separate
like items; unlike items are returned unmodified. These forms are modified:
letter - letter (A - B)
digit - digit (4-5)
digit separator digit - digit separator digit (4.1-4.5 or 4-1-4-5)
letterdigit - letterdigit (A1-A5) (an optional separator between letter and
digit is supported – a.1-a.5 or a-1-a-5)
digitletter - digitletter (5a - 5d) (an optional separator between letter and
digit is supported – 5.a-5.d or 5-a-5-d)
any other forms are returned unmodified.
str may be a comma- or semicolon-separated list
]]
function p.hyphen_to_dash( str, spacing )
if (str == nil or str == '') then
return str
end
local accept
str = mw.text.decode(str, true ) -- replace html entities with their characters; semicolon mucks up the text.split
local out = {}
local list = mw.text.split (str, '%s*[,;]%s*') -- split str at comma or semicolon separators if there are any
for _, item in ipairs (list) do -- for each item in the list
item = mw.text.trim(item) -- trim whitespace
item, accept = item:gsub ('^%(%((.+)%)%)$', '%1')
if accept == 0 and mw.ustring.match (item, '^%w*[%.%-]?%w+%s*[%-–—]%s*%w*[%.%-]?%w+$') then -- if a hyphenated range or has endash or emdash separators
if item:match ('^%a+[%.%-]?%d+%s*%-%s*%a+[%.%-]?%d+$') or -- letterdigit hyphen letterdigit (optional separator between letter and digit)
item:match ('^%d+[%.%-]?%a+%s*%-%s*%d+[%.%-]?%a+$') or -- digitletter hyphen digitletter (optional separator between digit and letter)
item:match ('^%d+[%.%-]%d+%s*%-%s*%d+[%.%-]%d+$') or -- digit separator digit hyphen digit separator digit
item:match ('^%d+%s*%-%s*%d+$') or -- digit hyphen digit
item:match ('^%a+%s*%-%s*%a+$') then -- letter hyphen letter
item = item:gsub ('(%w*[%.%-]?%w+)%s*%-%s*(%w*[%.%-]?%w+)', '%1–%2') -- replace hyphen, remove extraneous space characters
else
item = mw.ustring.gsub (item, '%s*[–—]%s*', '–') -- for endash or emdash separated ranges, replace em with en, remove extraneous whitespace
end
end
table.insert (out, item) -- add the (possibly modified) item to the output table
end
local temp_str = table.concat (out, ',' .. spacing) -- concatenate the output table into a comma separated string
temp_str, accept = temp_str:gsub ('^%(%((.+)%)%)$', '%1') -- remove accept-this-as-written markup when it wraps all of concatenated out
if accept ~= 0 then
temp_str = str:gsub ('^%(%((.+)%)%)$', '%1') -- when global markup removed, return original str; do it this way to suppress boolean second return value
end
return temp_str
end
function p.hyphen2dash( frame )
local str = frame.args[1] or ''
local spacing = frame.args[2] or ' ' -- space is part of the standard separator for normal spacing (but in conjunction with templates r/rp/ran we may need a narrower spacing
return p.hyphen_to_dash(str, spacing)
end
-- Similar to [[Module:String#endswith]]
function p.startswith(frame)
return (frame.args[1]:sub(1, frame.args[2]:len()) == frame.args[2]) and 'yes' or ''
end
-- Implements [[Template:Isnumeric]]
function p.isnumeric(frame)
local s = frame.args[1] or frame:getParent().args[1]
local boolean = (frame.args.boolean or frame:getParent().args.boolean) == 'true'
if type(s) == 'string' and mw.getContentLanguage():parseFormattedNumber( s ) then
return boolean and 1 or s
end
return boolean and 0 or ''
end
-- Checks if a value in a group of numbers is not an interger.
-- Allows usage of an |empty= parameter to allow empty values to be skipped.
function p.isInteger(frame)
local values = frame.args or frame:getParent().args
local allow_empty = frame.args.empty or frame:getParent().args.empty
for _, value in ipairs(values) do
-- Trim spaces
value = value and value:gsub("^%s*(.-)%s*$", "%1")
if value == "" or value == nil then
if not allow_empty then
return false -- Empty values are not allowed
end
else
value = tonumber(value)
if not (type(value) == "number" and value == math.floor(value)) then
return false
end
end
end
return true
end
-- Returns an error found in a string.
function p.getError(frame)
local text = frame.args[1] or frame:getParent().args[1]
local error_message = text:match('(<strong class="error">.-</strong>)')
return error_message or nil
end
return p
ph89g30kzy2uwl0t05s6jtpby1w86b8
389805
389804
2026-07-10T09:32:41Z
محک
1023
۱ نسخه واردشده از [[:en:Module:String2]]: File:TheMaster2012Poster.jpg
389804
Scribunto
text/plain
require ('strict');
local p = {}
p.trim = function(frame)
return mw.text.trim(frame.args[1] or "")
end
p.sentence = function (frame)
-- {{lc:}} is strip-marker safe, string.lower is not.
frame.args[1] = frame:callParserFunction('lc', frame.args[1])
return p.ucfirst(frame)
end
p.ucfirst = function (frame)
local s = frame.args[1];
if not s or '' == s or s:match ('^%s+$') then -- when <s> is nil, empty, or only whitespace
return s; -- abandon because nothing to do
end
s = mw.text.trim( frame.args[1] or "" )
local s1 = ""
local prefix_patterns_t = { -- sequence of prefix patterns
'^\127[^\127]*UNIQ%-%-%a+%-%x+%-QINU[^\127]*\127', -- stripmarker
'^([%*;:#]+)', -- various list markup
'^(\'\'\'*)', -- bold / italic markup
'^(%b<>)', -- html-like tags because some templates render these
'^(&%a+;)', -- html character entities because some templates render these
'^(&#%d+;)', -- html numeric (decimal) entities because some templates render these
'^(&#x%x+;)', -- html numeric (hexadecimal) entities because some templates render these
'^(%s+)', -- any whitespace characters
'^([%(%)%-%+%?%.%%!~!@%$%^&_={}/`,‘’„“”ʻ|\"\'\\]+)', -- miscellaneous punctuation
}
local prefixes_t = {}; -- list, bold/italic, and html-like markup, & whitespace saved here
local function prefix_strip (s) -- local function to strip prefixes from <s>
for _, pattern in ipairs (prefix_patterns_t) do -- spin through <prefix_patterns_t>
if s:match (pattern) then -- when there is a match
local prefix = s:match (pattern); -- get a copy of the matched prefix
table.insert (prefixes_t, prefix); -- save it
s = s:sub (prefix:len() + 1); -- remove the prefix from <s>
return s, true; -- return <s> without prefix and flag; force restart at top of sequence because misc punct removal can break stripmarker
end
end
return s; -- no prefix found; return <s> with nil flag
end
local prefix_removed; -- flag; boolean true as long as prefix_strip() finds and removes a prefix
repeat -- one by one remove list, bold/italic, html-like markup, whitespace, etc from start of <s>
s, prefix_removed = prefix_strip (s);
until (not prefix_removed); -- until <prefix_removed> is nil
s1 = table.concat (prefixes_t); -- recreate the prefix string for later reattachment
local first_text = mw.ustring.match (s, '^%[%[[^%]]+%]%]'); -- extract wikilink at start of string if present; TODO: this can be string.match()?
local upcased;
if first_text then
if first_text:match ('^%[%[[^|]+|[^%]]+%]%]') then -- if <first_text> is a piped link
upcased = mw.ustring.match (s, '^%[%[[^|]+|%W*(%w)'); -- get first letter character
upcased = mw.ustring.upper (upcased); -- upcase first letter character
s = mw.ustring.gsub (s, '^(%[%[[^|]+|%W*)%w', '%1' .. upcased); -- replace
else -- here when <first_text> is a wikilink but not a piped link
upcased = mw.ustring.match (s, '^%[%[%W*%w'); -- get '[[' and first letter
upcased = mw.ustring.upper (upcased); -- upcase first letter character
s = mw.ustring.gsub (s, '^%[%[%W*%w', upcased); -- replace; no capture needed here
end
elseif s:match ('^%[%S+%s+[^%]]+%]') then -- if <s> is a ext link of some sort; must have label text
upcased = mw.ustring.match (s, '^%[%S+%s+%W*(%w)'); -- get first letter character
upcased = mw.ustring.upper (upcased); -- upcase first letter character
s = mw.ustring.gsub (s, '^(%[%S+%s+%W*)%w', '%1' .. upcased); -- replace
elseif s:match ('^%[%S+%s*%]') then -- if <s> is a ext link without label text; nothing to do
return s1 .. s; -- reattach prefix string (if present) and done
else -- <s> is not a wikilink or ext link; assume plain text
upcased = mw.ustring.match (s, '^%W*%w'); -- get the first letter character
upcased = mw.ustring.upper (upcased); -- upcase first letter character
s = mw.ustring.gsub (s, '^%W*%w', upcased); -- replace; no capture needed here
end
return s1 .. s; -- reattach prefix string (if present) and done
end
p.title = function (frame)
-- http://grammar.yourdictionary.com/capitalization/rules-for-capitalization-in-titles.html
-- recommended by The U.S. Government Printing Office Style Manual:
-- "Capitalize all words in titles of publications and documents,
-- except a, an, the, at, by, for, in, of, on, to, up, and, as, but, or, and nor."
local alwayslower = {['a'] = 1, ['an'] = 1, ['the'] = 1,
['and'] = 1, ['but'] = 1, ['or'] = 1, ['for'] = 1,
['nor'] = 1, ['on'] = 1, ['in'] = 1, ['at'] = 1, ['to'] = 1,
['from'] = 1, ['by'] = 1, ['of'] = 1, ['up'] = 1 }
local res = ''
local s = mw.text.trim( frame.args[1] or "" )
local words = mw.text.split( s, " ")
for i, s in ipairs(words) do
-- {{lc:}} is strip-marker safe, string.lower is not.
s = frame:callParserFunction('lc', s)
if i == 1 or alwayslower[s] ~= 1 then
s = mw.getContentLanguage():ucfirst(s)
end
words[i] = s
end
return table.concat(words, " ")
end
-- findlast finds the last item in a list
-- the first unnamed parameter is the list
-- the second, optional unnamed parameter is the list separator (default = comma space)
-- returns the whole list if separator not found
p.findlast = function(frame)
local s = mw.text.trim( frame.args[1] or "" )
local sep = frame.args[2] or ""
if sep == "" then sep = ", " end
local pattern = ".*" .. sep .. "(.*)"
local a, b, last = s:find(pattern)
if a then
return last
else
return s
end
end
-- stripZeros finds the first number and strips leading zeros (apart from units)
-- e.g "0940" -> "940"; "Year: 0023" -> "Year: 23"; "00.12" -> "0.12"
p.stripZeros = function(frame)
local s = mw.text.trim(frame.args[1] or "")
local n = tonumber( string.match( s, "%d+" ) ) or ""
s = string.gsub( s, "%d+", n, 1 )
return s
end
-- nowiki ensures that a string of text is treated by the MediaWiki software as just a string
-- it takes an unnamed parameter and trims whitespace, then removes any wikicode
p.nowiki = function(frame)
local str = mw.text.trim(frame.args[1] or "")
return mw.text.nowiki(str)
end
-- split splits text at boundaries specified by separator
-- and returns the chunk for the index idx (starting at 1)
-- #invoke:String2 |split |text |separator |index |true/false
-- #invoke:String2 |split |txt=text |sep=separator |idx=index |plain=true/false
-- if plain is false/no/0 then separator is treated as a Lua pattern - defaults to plain=true
p.split = function(frame)
local args = frame.args
if not(args[1] or args.txt) then args = frame:getParent().args end
local txt = args[1] or args.txt or ""
if txt == "" then return nil end
local sep = (args[2] or args.sep or ""):gsub('"', '')
local idx = tonumber(args[3] or args.idx) or 1
local plain = (args[4] or args.plain or "true"):sub(1,1)
plain = (plain ~= "f" and plain ~= "n" and plain ~= "0")
local splittbl = mw.text.split( txt, sep, plain )
if idx < 0 then idx = #splittbl + idx + 1 end
return splittbl[idx]
end
-- val2percent scans through a string, passed as either the first unnamed parameter or |txt=
-- it converts each number it finds into a percentage and returns the resultant string.
p.val2percent = function(frame)
local args = frame.args
if not(args[1] or args.txt) then args = frame:getParent().args end
local txt = mw.text.trim(args[1] or args.txt or "")
if txt == "" then return nil end
local function v2p (x)
x = (tonumber(x) or 0) * 100
if x == math.floor(x) then x = math.floor(x) end
return x .. "%"
end
txt = txt:gsub("%d[%d%.]*", v2p) -- store just the string
return txt
end
-- one2a scans through a string, passed as either the first unnamed parameter or |txt=
-- it converts each occurrence of 'one ' into either 'a ' or 'an ' and returns the resultant string.
p.one2a = function(frame)
local args = frame.args
if not(args[1] or args.txt) then args = frame:getParent().args end
local txt = mw.text.trim(args[1] or args.txt or "")
if txt == "" then return nil end
txt = txt:gsub(" one ", " a "):gsub("^one", "a"):gsub("One ", "A "):gsub("a ([aeiou])", "an %1"):gsub("A ([aeiou])", "An %1")
return txt
end
-- findpagetext returns the position of a piece of text in a page
-- First positional parameter or |text is the search text
-- Optional parameter |title is the page title, defaults to current page
-- Optional parameter |plain is either true for plain search (default) or false for Lua pattern search
-- Optional parameter |nomatch is the return value when no match is found; default is nil
p._findpagetext = function(args)
-- process parameters
local nomatch = args.nomatch or ""
if nomatch == "" then nomatch = nil end
--
local text = mw.text.trim(args[1] or args.text or "")
if text == "" then return nil end
--
local title = args.title or ""
local titleobj
if title == "" then
titleobj = mw.title.getCurrentTitle()
else
titleobj = mw.title.new(title)
end
--
local plain = args.plain or ""
if plain:sub(1, 1) == "f" then plain = false else plain = true end
-- get the page content and look for 'text' - return position or nomatch
local content = titleobj and titleobj:getContent()
return content and mw.ustring.find(content, text, 1, plain) or nomatch
end
p.findpagetext = function(frame)
local args = frame.args
local pargs = frame:getParent().args
for k, v in pairs(pargs) do
args[k] = v
end
if not (args[1] or args.text) then return nil end
-- just the first value
return (p._findpagetext(args))
end
-- returns the decoded url. Inverse of parser function {{urlencode:val|TYPE}}
-- Type is:
-- QUERY decodes + to space (default)
-- PATH does no extra decoding
-- WIKI decodes _ to space
p._urldecode = function(url, type)
url = url or ""
type = (type == "PATH" or type == "WIKI") and type
return mw.uri.decode( url, type )
end
-- {{#invoke:String2|urldecode|url=url|type=type}}
p.urldecode = function(frame)
return mw.uri.decode( frame.args.url, frame.args.type )
end
-- what follows was merged from [[Module:StringFunc]]
-- Argument list helper function, as per [[Module:String]]
function p._getParameters( frame_args, arg_list )
local new_args = {};
local index = 1;
local value;
for i,arg in ipairs( arg_list ) do
value = frame_args[arg]
if value == nil then
value = frame_args[index];
index = index + 1;
end
new_args[arg] = value;
end
return new_args;
end
-- Escape Pattern helper function so that all characters are treated as plain text, as per [[Module:String]]
function p._escapePattern( pattern_str )
return mw.ustring.gsub( pattern_str, "([%(%)%.%%%+%-%*%?%[%^%$%]])", "%%%1" )
end
-- Helper Function to interpret boolean strings, as per [[Module:String]]
function p._getBoolean( boolean_str )
local boolean_value;
if type( boolean_str ) == 'string' then
boolean_str = boolean_str:lower();
if boolean_str == 'false' or boolean_str == 'no' or boolean_str == '0'
or boolean_str == '' then
boolean_value = false;
else
boolean_value = true;
end
elseif type( boolean_str ) == 'boolean' then
boolean_value = boolean_str;
else
error( 'No boolean value found' );
end
return boolean_value
end
--[[
Strip
This function Strips characters from string
Usage:
{{#invoke:String2|strip|source_string|characters_to_strip|plain_flag}}
Parameters
source: The string to strip
chars: The pattern or list of characters to strip from string, replaced with ''
plain: A flag indicating that the chars should be understood as plain text. defaults to true.
Leading and trailing whitespace is also automatically stripped from the string.
]]
function p.strip( frame )
local new_args = p._getParameters( frame.args, {'source', 'chars', 'plain'} )
local source_str = new_args['source'] or ''
local chars = new_args['chars'] or '' or 'characters'
source_str = mw.text.trim(source_str)
if source_str == '' or chars == '' then
return source_str
end
local l_plain = p._getBoolean( new_args['plain'] or true )
if l_plain then
chars = p._escapePattern( chars )
end
local result
result = mw.ustring.gsub(source_str, "["..chars.."]", '')
return result
end
--[[
Match any
Returns the index of the first given pattern to match the input. Patterns must be consecutively numbered.
Returns the empty string if nothing matches for use in {{#if:}}
Usage:
{{#invoke:String2|matchAll|source=123 abc|456|abc}} returns '2'.
Parameters:
source: the string to search
plain: A flag indicating that the patterns should be understood as plain text. defaults to true.
1, 2, 3, ...: the patterns to search for
]]
function p.matchAny(frame)
local source_str = frame.args['source'] or error('The source parameter is mandatory.')
local l_plain = p._getBoolean( frame.args['plain'] or true )
for i = 1, math.huge do
local pattern = frame.args[i]
if not pattern then return '' end
if mw.ustring.find(source_str, pattern, 1, l_plain) then
return tostring(i)
end
end
end
--[[--------------------------< H Y P H E N _ T O _ D A S H >--------------------------------------------------
Converts a hyphen to a dash under certain conditions. The hyphen must separate
like items; unlike items are returned unmodified. These forms are modified:
letter - letter (A - B)
digit - digit (4-5)
digit separator digit - digit separator digit (4.1-4.5 or 4-1-4-5)
letterdigit - letterdigit (A1-A5) (an optional separator between letter and
digit is supported – a.1-a.5 or a-1-a-5)
digitletter - digitletter (5a - 5d) (an optional separator between letter and
digit is supported – 5.a-5.d or 5-a-5-d)
any other forms are returned unmodified.
str may be a comma- or semicolon-separated list
]]
function p.hyphen_to_dash( str, spacing )
if (str == nil or str == '') then
return str
end
local accept
str = mw.text.decode(str, true ) -- replace html entities with their characters; semicolon mucks up the text.split
local out = {}
local list = mw.text.split (str, '%s*[,;]%s*') -- split str at comma or semicolon separators if there are any
for _, item in ipairs (list) do -- for each item in the list
item = mw.text.trim(item) -- trim whitespace
item, accept = item:gsub ('^%(%((.+)%)%)$', '%1')
if accept == 0 and mw.ustring.match (item, '^%w*[%.%-]?%w+%s*[%-–—]%s*%w*[%.%-]?%w+$') then -- if a hyphenated range or has endash or emdash separators
if item:match ('^%a+[%.%-]?%d+%s*%-%s*%a+[%.%-]?%d+$') or -- letterdigit hyphen letterdigit (optional separator between letter and digit)
item:match ('^%d+[%.%-]?%a+%s*%-%s*%d+[%.%-]?%a+$') or -- digitletter hyphen digitletter (optional separator between digit and letter)
item:match ('^%d+[%.%-]%d+%s*%-%s*%d+[%.%-]%d+$') or -- digit separator digit hyphen digit separator digit
item:match ('^%d+%s*%-%s*%d+$') or -- digit hyphen digit
item:match ('^%a+%s*%-%s*%a+$') then -- letter hyphen letter
item = item:gsub ('(%w*[%.%-]?%w+)%s*%-%s*(%w*[%.%-]?%w+)', '%1–%2') -- replace hyphen, remove extraneous space characters
else
item = mw.ustring.gsub (item, '%s*[–—]%s*', '–') -- for endash or emdash separated ranges, replace em with en, remove extraneous whitespace
end
end
table.insert (out, item) -- add the (possibly modified) item to the output table
end
local temp_str = table.concat (out, ',' .. spacing) -- concatenate the output table into a comma separated string
temp_str, accept = temp_str:gsub ('^%(%((.+)%)%)$', '%1') -- remove accept-this-as-written markup when it wraps all of concatenated out
if accept ~= 0 then
temp_str = str:gsub ('^%(%((.+)%)%)$', '%1') -- when global markup removed, return original str; do it this way to suppress boolean second return value
end
return temp_str
end
function p.hyphen2dash( frame )
local str = frame.args[1] or ''
local spacing = frame.args[2] or ' ' -- space is part of the standard separator for normal spacing (but in conjunction with templates r/rp/ran we may need a narrower spacing
return p.hyphen_to_dash(str, spacing)
end
-- Similar to [[Module:String#endswith]]
function p.startswith(frame)
return (frame.args[1]:sub(1, frame.args[2]:len()) == frame.args[2]) and 'yes' or ''
end
-- Implements [[Template:Isnumeric]]
function p.isnumeric(frame)
local s = frame.args[1] or frame:getParent().args[1]
local boolean = (frame.args.boolean or frame:getParent().args.boolean) == 'true'
if type(s) == 'string' and mw.getContentLanguage():parseFormattedNumber( s ) then
return boolean and 1 or s
end
return boolean and 0 or ''
end
-- Checks if a value in a group of numbers is not an interger.
-- Allows usage of an |empty= parameter to allow empty values to be skipped.
function p.isInteger(frame)
local values = frame.args or frame:getParent().args
local allow_empty = frame.args.empty or frame:getParent().args.empty
for _, value in ipairs(values) do
-- Trim spaces
value = value and value:gsub("^%s*(.-)%s*$", "%1")
if value == "" or value == nil then
if not allow_empty then
return false -- Empty values are not allowed
end
else
value = tonumber(value)
if not (type(value) == "number" and value == math.floor(value)) then
return false
end
end
end
return true
end
-- Returns an error found in a string.
function p.getError(frame)
local text = frame.args[1] or frame:getParent().args[1]
local error_message = text:match('(<strong class="error">.-</strong>)')
return error_message or nil
end
return p
ph89g30kzy2uwl0t05s6jtpby1w86b8
ماژول:Wd
828
41062
389856
178612
2026-07-10T11:24:23Z
Uzume
1313
Update from [[d:Special:GoToLinkedPage/enwiki/Q24733825|master]] using [[mw:Synchronizer| #Synchronizer]]
389856
Scribunto
text/plain
-- Original module located at [[:en:Module:Wd]] and [[:en:Module:Wd/i18n]].
require("strict")
local p = {}
local module_arg = ...
local i18n
local i18nPath
local function loadI18n(aliasesP, frame)
local title
if frame then
-- current module invoked by page/template, get its title from frame
title = frame:getTitle()
else
-- current module included by other module, get its title from ...
title = module_arg
end
if not i18n then
i18nPath = title .. "/i18n"
i18n = require(i18nPath).init(aliasesP)
end
end
p.claimCommands = {
property = "property",
properties = "properties",
qualifier = "qualifier",
qualifiers = "qualifiers",
reference = "reference",
references = "references"
}
p.generalCommands = {
label = "label",
title = "title",
description = "description",
alias = "alias",
aliases = "aliases",
badge = "badge",
badges = "badges"
}
p.flags = {
linked = "linked",
short = "short",
raw = "raw",
multilanguage = "multilanguage",
unit = "unit",
-------------
preferred = "preferred",
normal = "normal",
deprecated = "deprecated",
best = "best",
future = "future",
current = "current",
former = "former",
edit = "edit",
editAtEnd = "edit@end",
mdy = "mdy",
single = "single",
sourced = "sourced"
}
p.args = {
eid = "eid",
page = "page",
date = "date",
globalSiteId = "globalSiteId"
}
local aliasesP = {
coord = "P625",
-----------------------
image = "P18",
author = "P50",
authorNameString = "P2093",
publisher = "P123",
importedFrom = "P143",
wikimediaImportURL = "P4656",
statedIn = "P248",
pages = "P304",
language = "P407",
hasPart = "P527",
publicationDate = "P577",
startTime = "P580",
endTime = "P582",
chapter = "P792",
retrieved = "P813",
referenceURL = "P854",
sectionVerseOrParagraph = "P958",
archiveURL = "P1065",
title = "P1476",
formatterURL = "P1630",
quote = "P1683",
shortName = "P1813",
definingFormula = "P2534",
archiveDate = "P2960",
inferredFrom = "P3452",
typeOfReference = "P3865",
column = "P3903",
subjectNamedAs = "P1810",
wikidataProperty = "P1687",
publishedIn = "P1433",
lastUpdate = "P5017"
}
local aliasesQ = {
percentage = "Q11229",
prolepticJulianCalendar = "Q1985786",
citeWeb = "Q5637226",
citeQ = "Q22321052"
}
local parameters = {
property = "%p",
qualifier = "%q",
reference = "%r",
alias = "%a",
badge = "%b",
separator = "%s",
general = "%x"
}
local formats = {
property = "%p[%s][%r]",
qualifier = "%q[%s][%r]",
reference = "%r",
propertyWithQualifier = "%p[ <span style=\"font-size:85\\%\">(%q)</span>][%s][%r]",
alias = "%a[%s]",
badge = "%b[%s]"
}
local hookNames = { -- {level_1, level_2}
[parameters.property] = {"getProperty"},
[parameters.reference] = {"getReferences", "getReference"},
[parameters.qualifier] = {"getAllQualifiers"},
[parameters.qualifier.."\\d"] = {"getQualifiers", "getQualifier"},
[parameters.alias] = {"getAlias"},
[parameters.badge] = {"getBadge"}
}
-- default value objects, should NOT be mutated but instead copied
local defaultSeparators = {
["sep"] = {" "},
["sep%s"] = {","},
["sep%q"] = {"; "},
["sep%q\\d"] = {", "},
["sep%r"] = nil, -- none
["punc"] = nil -- none
}
local rankTable = {
["preferred"] = 1,
["normal"] = 2,
["deprecated"] = 3
}
local function replaceAlias(id)
if aliasesP[id] then
id = aliasesP[id]
end
return id
end
local function errorText(code, ...)
local text = i18n["errors"][code]
if arg then text = mw.ustring.format(text, unpack(arg)) end
return text
end
local function throwError(errorMessage, ...)
error(errorText(errorMessage, unpack(arg)))
end
local function replaceDecimalMark(num)
return mw.ustring.gsub(num, "[.]", i18n['numeric']['decimal-mark'], 1)
end
local function padZeros(num, numDigits)
local numZeros
local negative = false
if num < 0 then
negative = true
num = num * -1
end
num = tostring(num)
numZeros = numDigits - num:len()
for _ = 1, numZeros do
num = "0"..num
end
if negative then
num = "-"..num
end
return num
end
local function replaceSpecialChar(chr)
if chr == '_' then
-- replace underscores with spaces
return ' '
else
return chr
end
end
local function replaceSpecialChars(str)
local chr
local esc = false
local strOut = ""
for i = 1, #str do
chr = str:sub(i,i)
if not esc then
if chr == '\\' then
esc = true
else
strOut = strOut .. replaceSpecialChar(chr)
end
else
strOut = strOut .. chr
esc = false
end
end
return strOut
end
local function buildWikilink(target, label)
if not label or target == label then
return "[[" .. target .. "]]"
else
return "[[" .. target .. "|" .. label .. "]]"
end
end
-- used to make frame.args mutable, to replace #frame.args (which is always 0)
-- with the actual amount and to simply copy tables
local function copyTable(tIn)
if not tIn then
return nil
end
local tOut = {}
for i, v in pairs(tIn) do
tOut[i] = v
end
return tOut
end
-- used to merge output arrays together;
-- note that it currently mutates the first input array
local function mergeArrays(a1, a2)
for i = 1, #a2 do
a1[#a1 + 1] = a2[i]
end
return a1
end
local function split(str, del)
local out = {}
local i, j = str:find(del)
if i and j then
out[1] = str:sub(1, i - 1)
out[2] = str:sub(j + 1)
else
out[1] = str
end
return out
end
local function parseWikidataURL(url)
local id
if url:match('^http[s]?://') then
id = split(url, "Q")
if id[2] then
return "Q" .. id[2]
end
end
return nil
end
local function parseDate(dateStr, precision)
precision = precision or "d"
local i, j, index, ptr
local parts = {nil, nil, nil}
if dateStr == nil then
return parts[1], parts[2], parts[3] -- year, month, day
end
-- 'T' for snak values, '/' for outputs with '/Julian' attached
i, j = dateStr:find("[T/]")
if i then
dateStr = dateStr:sub(1, i-1)
end
local from = 1
if dateStr:sub(1,1) == "-" then
-- this is a negative number, look further ahead
from = 2
end
index = 1
ptr = 1
i, j = dateStr:find("-", from)
if i then
-- year
parts[index] = tonumber(dateStr:sub(ptr, i-1), 10) -- explicitly give base 10 to prevent error
if parts[index] == -0 then
parts[index] = tonumber("0") -- for some reason, 'parts[index] = 0' may actually store '-0', so parse from string instead
end
if precision == "y" then
-- we're done
return parts[1], parts[2], parts[3] -- year, month, day
end
index = index + 1
ptr = i + 1
i, j = dateStr:find("-", ptr)
if i then
-- month
parts[index] = tonumber(dateStr:sub(ptr, i-1), 10)
if precision == "m" then
-- we're done
return parts[1], parts[2], parts[3] -- year, month, day
end
index = index + 1
ptr = i + 1
end
end
if dateStr:sub(ptr) ~= "" then
-- day if we have month, month if we have year, or year
parts[index] = tonumber(dateStr:sub(ptr), 10)
end
return parts[1], parts[2], parts[3] -- year, month, day
end
local function datePrecedesDate(aY, aM, aD, bY, bM, bD)
if aY == nil or bY == nil then
return nil
end
aM = aM or 1
aD = aD or 1
bM = bM or 1
bD = bD or 1
if aY < bY then
return true
end
if aY > bY then
return false
end
if aM < bM then
return true
end
if aM > bM then
return false
end
if aD < bD then
return true
end
return false
end
local function getHookName(param, index)
if hookNames[param] then
return hookNames[param][index]
elseif param:len() > 2 then
return hookNames[param:sub(1, 2).."\\d"][index]
else
return nil
end
end
local function alwaysTrue()
return true
end
-- The following function parses a format string.
--
-- The example below shows how a parsed string is structured in memory.
-- Variables other than 'str' and 'child' are left out for clarity's sake.
--
-- Example:
-- "A %p B [%s[%q1]] C [%r] D"
--
-- Structure:
-- [
-- {
-- str = "A "
-- },
-- {
-- str = "%p"
-- },
-- {
-- str = " B ",
-- child =
-- [
-- {
-- str = "%s",
-- child =
-- [
-- {
-- str = "%q1"
-- }
-- ]
-- }
-- ]
-- },
-- {
-- str = " C ",
-- child =
-- [
-- {
-- str = "%r"
-- }
-- ]
-- },
-- {
-- str = " D"
-- }
-- ]
--
local function parseFormat(str)
local chr, esc, param, root, cur, prev, new
local params = {}
local function newObject(array)
local obj = {} -- new object
obj.str = ""
array[#array + 1] = obj -- array{object}
obj.parent = array
return obj
end
local function endParam()
if param > 0 then
if cur.str ~= "" then
cur.str = "%"..cur.str
cur.param = true
params[cur.str] = true
cur.parent.req[cur.str] = true
prev = cur
cur = newObject(cur.parent)
end
param = 0
end
end
root = {} -- array
root.req = {}
cur = newObject(root)
prev = nil
esc = false
param = 0
for i = 1, #str do
chr = str:sub(i,i)
if not esc then
if chr == '\\' then
endParam()
esc = true
elseif chr == '%' then
endParam()
if cur.str ~= "" then
cur = newObject(cur.parent)
end
param = 2
elseif chr == '[' then
endParam()
if prev and cur.str == "" then
table.remove(cur.parent)
cur = prev
end
cur.child = {} -- new array
cur.child.req = {}
cur.child.parent = cur
cur = newObject(cur.child)
elseif chr == ']' then
endParam()
if cur.parent.parent then
new = newObject(cur.parent.parent.parent)
if cur.str == "" then
table.remove(cur.parent)
end
cur = new
end
else
if param > 1 then
param = param - 1
elseif param == 1 then
if not chr:match('%d') then
endParam()
end
end
cur.str = cur.str .. replaceSpecialChar(chr)
end
else
cur.str = cur.str .. chr
esc = false
end
prev = nil
end
endParam()
-- make sure that at least one required parameter has been defined
if not next(root.req) then
throwError("missing-required-parameter")
end
-- make sure that the separator parameter "%s" is not amongst the required parameters
if root.req[parameters.separator] then
throwError("extra-required-parameter", parameters.separator)
end
return root, params
end
local function sortOnRank(claims)
local rankPos
local ranks = {{}, {}, {}, {}} -- preferred, normal, deprecated, (default)
local sorted = {}
for _, v in ipairs(claims) do
rankPos = rankTable[v.rank] or 4
ranks[rankPos][#ranks[rankPos] + 1] = v
end
sorted = ranks[1]
sorted = mergeArrays(sorted, ranks[2])
sorted = mergeArrays(sorted, ranks[3])
return sorted
end
local function isValueInTable(searchedItem, inputTable)
for _, item in pairs(inputTable) do
if item == searchedItem then
return true
end
end
return false
end
local Config = {}
-- allows for recursive calls
function Config:new()
local cfg = {}
setmetatable(cfg, self)
self.__index = self
cfg.separators = {
-- single value objects wrapped in arrays so that we can pass by reference
["sep"] = {copyTable(defaultSeparators["sep"])},
["sep%s"] = {copyTable(defaultSeparators["sep%s"])},
["sep%q"] = {copyTable(defaultSeparators["sep%q"])},
["sep%r"] = {copyTable(defaultSeparators["sep%r"])},
["punc"] = {copyTable(defaultSeparators["punc"])}
}
cfg.entity = nil
cfg.entityID = nil
cfg.propertyID = nil
cfg.propertyValue = nil
cfg.qualifierIDs = {}
cfg.qualifierIDsAndValues = {}
cfg.bestRank = true
cfg.ranks = {true, true, false} -- preferred = true, normal = true, deprecated = false
cfg.foundRank = #cfg.ranks
cfg.flagBest = false
cfg.flagRank = false
cfg.periods = {true, true, true} -- future = true, current = true, former = true
cfg.flagPeriod = false
cfg.atDate = {parseDate(os.date('!%Y-%m-%d'))} -- today as {year, month, day}
cfg.mdyDate = false
cfg.singleClaim = false
cfg.sourcedOnly = false
cfg.editable = false
cfg.editAtEnd = false
cfg.inSitelinks = false
cfg.langCode = mw.language.getContentLanguage().code
cfg.langName = mw.language.fetchLanguageName(cfg.langCode, cfg.langCode)
cfg.langObj = mw.language.new(cfg.langCode)
cfg.siteID = mw.wikibase.getGlobalSiteId()
cfg.states = {}
cfg.states.qualifiersCount = 0
cfg.curState = nil
cfg.prefetchedRefs = nil
return cfg
end
local State = {}
function State:new(cfg, type)
local stt = {}
setmetatable(stt, self)
self.__index = self
stt.conf = cfg
stt.type = type
stt.results = {}
stt.parsedFormat = {}
stt.separator = {}
stt.movSeparator = {}
stt.puncMark = {}
stt.linked = false
stt.rawValue = false
stt.shortName = false
stt.anyLanguage = false
stt.unitOnly = false
stt.singleValue = false
return stt
end
-- if id == nil then item connected to current page is used
function Config:getLabel(id, raw, link, short)
local label = nil
local prefix, title= "", nil
if not id then
id = mw.wikibase.getEntityIdForCurrentPage()
if not id then
return ""
end
end
id = id:upper() -- just to be sure
if raw then
-- check if given id actually exists
if mw.wikibase.isValidEntityId(id) and mw.wikibase.entityExists(id) then
label = id
end
prefix, title = "d:Special:EntityPage/", label -- may be nil
else
-- try short name first if requested
if short then
label = p._property{aliasesP.shortName, [p.args.eid] = id} -- get short name
if label == "" then
label = nil
end
end
-- get label
if not label then
label = mw.wikibase.getLabel(id)
end
end
if not label then
label = ""
elseif link then
-- build a link if requested
if not title then
if id:sub(1,1) == "Q" then
title = mw.wikibase.getSitelink(id)
elseif id:sub(1,1) == "P" then
-- properties have no sitelink, link to Wikidata instead
prefix, title = "d:Special:EntityPage/", id
end
end
label = mw.text.nowiki(label) -- escape raw label text so it cannot be wikitext markup
if title then
label = buildWikilink(prefix .. title, label)
end
end
return label
end
function Config:getEditIcon()
local value = ""
local prefix = ""
local front = " "
local back = ""
if self.entityID:sub(1,1) == "P" then
prefix = "Property:"
end
if self.editAtEnd then
front = '<span style="float:'
if self.langObj:isRTL() then
front = front .. 'left'
else
front = front .. 'right'
end
front = front .. '">'
back = '</span>'
end
value = "[[File:OOjs UI icon edit-ltr-progressive.svg|frameless|text-top|10px|alt=" .. i18n['info']['edit-on-wikidata'] .. "|link=https://www.wikidata.org/wiki/" .. prefix .. self.entityID .. "?uselang=" .. self.langCode
if self.propertyID then
value = value .. "#" .. self.propertyID
elseif self.inSitelinks then
value = value .. "#sitelinks-wikipedia"
end
value = value .. "|" .. i18n['info']['edit-on-wikidata'] .. "]]"
return front .. value .. back
end
-- used to create the final output string when it's all done, so that for references the
-- function extensionTag("ref", ...) is only called when they really ended up in the final output
function Config:concatValues(valuesArray)
local outString = ""
local j, skip
for i = 1, #valuesArray do
-- check if this is a reference
if valuesArray[i].refHash then
j = i - 1
skip = false
-- skip this reference if it is part of a continuous row of references that already contains the exact same reference
while valuesArray[j] and valuesArray[j].refHash do
if valuesArray[i].refHash == valuesArray[j].refHash then
skip = true
break
end
j = j - 1
end
if not skip then
-- add <ref> tag with the reference's hash as its name (to deduplicate references)
outString = outString .. mw.getCurrentFrame():extensionTag("ref", valuesArray[i][1], {name = valuesArray[i].refHash})
end
else
outString = outString .. valuesArray[i][1]
end
end
return outString
end
function Config:convertUnit(unit, raw, link, short, unitOnly)
local space = " "
local label = ""
local itemID
if unit == "" or unit == "1" then
return nil
end
if unitOnly then
space = ""
end
itemID = parseWikidataURL(unit)
if itemID then
if itemID == aliasesQ.percentage then
return "%"
else
label = self:getLabel(itemID, raw, link, short)
if label ~= "" then
return space .. label
end
end
end
return ""
end
function State:getValue(snak)
return self.conf:getValue(snak, self.rawValue, self.linked, self.shortName, self.anyLanguage, self.unitOnly, false, self.type:sub(1,2))
end
function Config:getValue(snak, raw, link, short, anyLang, unitOnly, noSpecial, type)
if snak.snaktype == 'value' then
local datatype = snak.datavalue.type
local subtype = snak.datatype
local datavalue = snak.datavalue.value
if datatype == 'string' then
if subtype == 'url' and link then
-- create link explicitly
if raw then
-- will render as a linked number like [1]
return "[" .. datavalue .. "]"
else
return "[" .. datavalue .. " " .. datavalue .. "]"
end
elseif subtype == 'commonsMedia' then
if link then
return buildWikilink("c:File:" .. datavalue, datavalue)
elseif not raw then
return "[[File:" .. datavalue .. "]]"
else
return datavalue
end
elseif subtype == 'geo-shape' and link then
return buildWikilink("c:" .. datavalue, datavalue)
elseif subtype == 'math' and not raw then
local attribute = nil
if (type == parameters.property or (type == parameters.qualifier and self.propertyID == aliasesP.hasPart)) and snak.property == aliasesP.definingFormula then
attribute = {qid = self.entityID}
end
return mw.getCurrentFrame():extensionTag("math", datavalue, attribute)
elseif subtype == 'external-id' and link then
local url = p._property{aliasesP.formatterURL, [p.args.eid] = snak.property} -- get formatter URL
if url ~= "" then
url = mw.ustring.gsub(url, "$1", datavalue)
return "[" .. url .. " " .. datavalue .. "]"
else
return datavalue
end
else
return datavalue
end
elseif datatype == 'monolingualtext' then
if anyLang or datavalue['language'] == self.langCode then
return datavalue['text']
else
return nil
end
elseif datatype == 'quantity' then
local value = ""
local unit
if not unitOnly then
-- get value and strip + signs from front
value = mw.ustring.gsub(datavalue['amount'], "^%+(.+)$", "%1")
if raw then
return value
end
-- replace decimal mark based on locale
value = replaceDecimalMark(value)
-- add delimiters for readability
value = i18n.addDelimiters(value)
end
unit = self:convertUnit(datavalue['unit'], raw, link, short, unitOnly)
if unit then
value = value .. unit
end
return value
elseif datatype == 'time' then
local y, m, d, p, yDiv, yRound, yFull, value, calendarID, dateStr
local yFactor = 1
local sign = 1
local prefix = ""
local suffix = ""
local mayAddCalendar = false
local calendar = ""
local precision = datavalue['precision']
if precision == 11 then
p = "d"
elseif precision == 10 then
p = "m"
else
p = "y"
yFactor = 10^(9-precision)
end
y, m, d = parseDate(datavalue['time'], p)
if y < 0 then
sign = -1
y = y * sign
end
-- if precision is tens/hundreds/thousands/millions/billions of years
if precision <= 8 then
yDiv = y / yFactor
-- if precision is tens/hundreds/thousands of years
if precision >= 6 then
mayAddCalendar = true
if precision <= 7 then
-- round centuries/millenniums up (e.g. 20th century or 3rd millennium)
yRound = math.ceil(yDiv)
if not raw then
if precision == 6 then
suffix = i18n['datetime']['suffixes']['millennium']
else
suffix = i18n['datetime']['suffixes']['century']
end
suffix = i18n.getOrdinalSuffix(yRound) .. suffix
else
-- if not verbose, take the first year of the century/millennium
-- (e.g. 1901 for 20th century or 2001 for 3rd millennium)
yRound = (yRound - 1) * yFactor + 1
end
else
-- precision == 8
-- round decades down (e.g. 2010s)
yRound = math.floor(yDiv) * yFactor
if not raw then
prefix = i18n['datetime']['prefixes']['decade-period']
suffix = i18n['datetime']['suffixes']['decade-period']
end
end
if raw and sign < 0 then
-- if BCE then compensate for "counting backwards"
-- (e.g. -2019 for 2010s BCE, -2000 for 20th century BCE or -3000 for 3rd millennium BCE)
yRound = yRound + yFactor - 1
end
else
local yReFactor, yReDiv, yReRound
-- round to nearest for tens of thousands of years or more
yRound = math.floor(yDiv + 0.5)
if yRound == 0 then
if precision <= 2 and y ~= 0 then
yReFactor = 1e6
yReDiv = y / yReFactor
yReRound = math.floor(yReDiv + 0.5)
if yReDiv == yReRound then
-- change precision to millions of years only if we have a whole number of them
precision = 3
yFactor = yReFactor
yRound = yReRound
end
end
if yRound == 0 then
-- otherwise, take the unrounded (original) number of years
precision = 5
yFactor = 1
yRound = y
mayAddCalendar = true
end
end
if precision >= 1 and y ~= 0 then
yFull = yRound * yFactor
yReFactor = 1e9
yReDiv = yFull / yReFactor
yReRound = math.floor(yReDiv + 0.5)
if yReDiv == yReRound then
-- change precision to billions of years if we're in that range
precision = 0
yFactor = yReFactor
yRound = yReRound
else
yReFactor = 1e6
yReDiv = yFull / yReFactor
yReRound = math.floor(yReDiv + 0.5)
if yReDiv == yReRound then
-- change precision to millions of years if we're in that range
precision = 3
yFactor = yReFactor
yRound = yReRound
end
end
end
if not raw then
if precision == 3 then
suffix = i18n['datetime']['suffixes']['million-years']
elseif precision == 0 then
suffix = i18n['datetime']['suffixes']['billion-years']
else
yRound = yRound * yFactor
if yRound == 1 then
suffix = i18n['datetime']['suffixes']['year']
else
suffix = i18n['datetime']['suffixes']['years']
end
end
else
yRound = yRound * yFactor
end
end
else
yRound = y
mayAddCalendar = true
end
if mayAddCalendar then
calendarID = parseWikidataURL(datavalue['calendarmodel'])
if calendarID and calendarID == aliasesQ.prolepticJulianCalendar then
if not raw then
if link then
calendar = " ("..buildWikilink(i18n['datetime']['julian-calendar'], i18n['datetime']['julian'])..")"
else
calendar = " ("..i18n['datetime']['julian']..")"
end
else
calendar = "/"..i18n['datetime']['julian']
end
end
end
if not raw then
local ce = nil
if sign < 0 then
ce = i18n['datetime']['BCE']
elseif precision <= 5 then
ce = i18n['datetime']['CE']
end
if ce then
if link then
ce = buildWikilink(i18n['datetime']['common-era'], ce)
end
suffix = suffix .. " " .. ce
end
value = tostring(yRound)
if m then
dateStr = self.langObj:formatDate("F", "1-"..m.."-1")
if d then
if self.mdyDate then
dateStr = dateStr .. " " .. d .. ","
else
dateStr = d .. " " .. dateStr
end
end
value = dateStr .. " " .. value
end
value = prefix .. value .. suffix .. calendar
else
value = padZeros(yRound * sign, 4)
if m then
value = value .. "-" .. padZeros(m, 2)
if d then
value = value .. "-" .. padZeros(d, 2)
end
end
value = value .. calendar
end
return value
elseif datatype == 'globecoordinate' then
-- logic from https://github.com/DataValues/Geo (v4.0.1)
local precision, unitsPerDegree, numDigits, strFormat, value, globe
local latitude, latConv, latValue, latLink
local longitude, lonConv, lonValue, lonLink
local latDirection, latDirectionN, latDirectionS, latDirectionEN
local lonDirection, lonDirectionE, lonDirectionW, lonDirectionEN
local degSymbol, minSymbol, secSymbol, separator
local latDegrees = nil
local latMinutes = nil
local latSeconds = nil
local lonDegrees = nil
local lonMinutes = nil
local lonSeconds = nil
local latDegSym = ""
local latMinSym = ""
local latSecSym = ""
local lonDegSym = ""
local lonMinSym = ""
local lonSecSym = ""
local latDirectionEN_N = "N"
local latDirectionEN_S = "S"
local lonDirectionEN_E = "E"
local lonDirectionEN_W = "W"
if not raw then
latDirectionN = i18n['coord']['latitude-north']
latDirectionS = i18n['coord']['latitude-south']
lonDirectionE = i18n['coord']['longitude-east']
lonDirectionW = i18n['coord']['longitude-west']
degSymbol = i18n['coord']['degrees']
minSymbol = i18n['coord']['minutes']
secSymbol = i18n['coord']['seconds']
separator = i18n['coord']['separator']
else
latDirectionN = latDirectionEN_N
latDirectionS = latDirectionEN_S
lonDirectionE = lonDirectionEN_E
lonDirectionW = lonDirectionEN_W
degSymbol = "/"
minSymbol = "/"
secSymbol = "/"
separator = "/"
end
latitude = datavalue['latitude']
longitude = datavalue['longitude']
if latitude < 0 then
latDirection = latDirectionS
latDirectionEN = latDirectionEN_S
latitude = math.abs(latitude)
else
latDirection = latDirectionN
latDirectionEN = latDirectionEN_N
end
if longitude < 0 then
lonDirection = lonDirectionW
lonDirectionEN = lonDirectionEN_W
longitude = math.abs(longitude)
else
lonDirection = lonDirectionE
lonDirectionEN = lonDirectionEN_E
end
precision = datavalue['precision']
if not precision or precision <= 0 then
precision = 1 / 3600 -- precision not set (correctly), set to arcsecond
end
-- remove insignificant detail
latitude = math.floor(latitude / precision + 0.5) * precision
longitude = math.floor(longitude / precision + 0.5) * precision
if precision >= 1 - (1 / 60) and precision < 1 then
precision = 1
elseif precision >= (1 / 60) - (1 / 3600) and precision < (1 / 60) then
precision = 1 / 60
end
if precision >= 1 then
unitsPerDegree = 1
elseif precision >= (1 / 60) then
unitsPerDegree = 60
else
unitsPerDegree = 3600
end
numDigits = math.ceil(-math.log10(unitsPerDegree * precision))
if numDigits <= 0 then
numDigits = tonumber("0") -- for some reason, 'numDigits = 0' may actually store '-0', so parse from string instead
end
strFormat = "%." .. numDigits .. "f"
if precision >= 1 then
latDegrees = strFormat:format(latitude)
lonDegrees = strFormat:format(longitude)
if not raw then
latDegSym = replaceDecimalMark(latDegrees) .. degSymbol
lonDegSym = replaceDecimalMark(lonDegrees) .. degSymbol
else
latDegSym = latDegrees .. degSymbol
lonDegSym = lonDegrees .. degSymbol
end
else
latConv = math.floor(latitude * unitsPerDegree * 10^numDigits + 0.5) / 10^numDigits
lonConv = math.floor(longitude * unitsPerDegree * 10^numDigits + 0.5) / 10^numDigits
if precision >= (1 / 60) then
latMinutes = latConv
lonMinutes = lonConv
else
latSeconds = latConv
lonSeconds = lonConv
latMinutes = math.floor(latSeconds / 60)
lonMinutes = math.floor(lonSeconds / 60)
latSeconds = strFormat:format(latSeconds - (latMinutes * 60))
lonSeconds = strFormat:format(lonSeconds - (lonMinutes * 60))
if not raw then
latSecSym = replaceDecimalMark(latSeconds) .. secSymbol
lonSecSym = replaceDecimalMark(lonSeconds) .. secSymbol
else
latSecSym = latSeconds .. secSymbol
lonSecSym = lonSeconds .. secSymbol
end
end
latDegrees = math.floor(latMinutes / 60)
lonDegrees = math.floor(lonMinutes / 60)
latDegSym = latDegrees .. degSymbol
lonDegSym = lonDegrees .. degSymbol
latMinutes = latMinutes - (latDegrees * 60)
lonMinutes = lonMinutes - (lonDegrees * 60)
if precision >= (1 / 60) then
latMinutes = strFormat:format(latMinutes)
lonMinutes = strFormat:format(lonMinutes)
if not raw then
latMinSym = replaceDecimalMark(latMinutes) .. minSymbol
lonMinSym = replaceDecimalMark(lonMinutes) .. minSymbol
else
latMinSym = latMinutes .. minSymbol
lonMinSym = lonMinutes .. minSymbol
end
else
latMinSym = latMinutes .. minSymbol
lonMinSym = lonMinutes .. minSymbol
end
end
latValue = latDegSym .. latMinSym .. latSecSym .. latDirection
lonValue = lonDegSym .. lonMinSym .. lonSecSym .. lonDirection
value = latValue .. separator .. lonValue
if link then
globe = parseWikidataURL(datavalue['globe'])
if globe then
globe = mw.wikibase.getLabelByLang(globe, "en"):lower()
else
globe = "earth"
end
latLink = table.concat({latDegrees, latMinutes, latSeconds}, "_")
lonLink = table.concat({lonDegrees, lonMinutes, lonSeconds}, "_")
value = "[https://geohack.toolforge.org/geohack.php?language="..self.langCode.."¶ms="..latLink.."_"..latDirectionEN.."_"..lonLink.."_"..lonDirectionEN.."_globe:"..globe.." "..value.."]"
end
return value
elseif datatype == 'wikibase-entityid' then
local label
local itemID = datavalue['numeric-id']
if subtype == 'wikibase-item' then
itemID = "Q" .. itemID
elseif subtype == 'wikibase-property' then
itemID = "P" .. itemID
else
return '<strong class="error">' .. errorText('unknown-data-type', subtype) .. '</strong>'
end
label = self:getLabel(itemID, raw, link, short)
if label == "" then
label = nil
end
return label
else
return '<strong class="error">' .. errorText('unknown-data-type', datatype) .. '</strong>'
end
elseif snak.snaktype == 'somevalue' and not noSpecial then
if raw then
return " " -- single space represents 'somevalue'
else
return i18n['values']['unknown']
end
elseif snak.snaktype == 'novalue' and not noSpecial then
if raw then
return "" -- empty string represents 'novalue'
else
return i18n['values']['none']
end
else
return nil
end
end
function Config:getSingleRawQualifier(claim, qualifierID)
local qualifiers
if claim.qualifiers then qualifiers = claim.qualifiers[qualifierID] end
if qualifiers and qualifiers[1] then
return self:getValue(qualifiers[1], true) -- raw = true
else
return nil
end
end
function Config:snakEqualsValue(snak, value)
local snakValue = self:getValue(snak, true) -- raw = true
if snakValue and snak.snaktype == 'value' and snak.datavalue.type == 'wikibase-entityid' then value = value:upper() end
return snakValue == value
end
function Config:setRank(rank)
local rankPos
if rank == p.flags.best then
self.bestRank = true
self.flagBest = true -- mark that 'best' flag was given
return
end
if rank:sub(1,9) == p.flags.preferred then
rankPos = 1
elseif rank:sub(1,6) == p.flags.normal then
rankPos = 2
elseif rank:sub(1,10) == p.flags.deprecated then
rankPos = 3
else
return
end
-- one of the rank flags was given, check if another one was given before
if not self.flagRank then
self.ranks = {false, false, false} -- no other rank flag given before, so unset ranks
self.bestRank = self.flagBest -- unsets bestRank only if 'best' flag was not given before
self.flagRank = true -- mark that a rank flag was given
end
if rank:sub(-1) == "+" then
for i = rankPos, 1, -1 do
self.ranks[i] = true
end
elseif rank:sub(-1) == "-" then
for i = rankPos, #self.ranks do
self.ranks[i] = true
end
else
self.ranks[rankPos] = true
end
end
function Config:setPeriod(period)
local periodPos
if period == p.flags.future then
periodPos = 1
elseif period == p.flags.current then
periodPos = 2
elseif period == p.flags.former then
periodPos = 3
else
return
end
-- one of the period flags was given, check if another one was given before
if not self.flagPeriod then
self.periods = {false, false, false} -- no other period flag given before, so unset periods
self.flagPeriod = true -- mark that a period flag was given
end
self.periods[periodPos] = true
end
function Config:qualifierMatches(claim, id, value)
local qualifiers
if claim.qualifiers then qualifiers = claim.qualifiers[id] end
if qualifiers then
for _, v in pairs(qualifiers) do
if self:snakEqualsValue(v, value) then
return true
end
end
elseif value == "" then
-- if the qualifier is not present then treat it the same as the special value 'novalue'
return true
end
return false
end
function Config:rankMatches(rankPos)
if self.bestRank then
return (self.ranks[rankPos] and self.foundRank >= rankPos)
else
return self.ranks[rankPos]
end
end
function Config:timeMatches(claim)
local startTime = nil
local startTimeY = nil
local startTimeM = nil
local startTimeD = nil
local endTime = nil
local endTimeY = nil
local endTimeM = nil
local endTimeD = nil
if self.periods[1] and self.periods[2] and self.periods[3] then
-- any time
return true
end
startTime = self:getSingleRawQualifier(claim, aliasesP.startTime)
if startTime and startTime ~= "" and startTime ~= " " then
startTimeY, startTimeM, startTimeD = parseDate(startTime)
end
endTime = self:getSingleRawQualifier(claim, aliasesP.endTime)
if endTime and endTime ~= "" and endTime ~= " " then
endTimeY, endTimeM, endTimeD = parseDate(endTime)
end
if startTimeY ~= nil and endTimeY ~= nil and datePrecedesDate(endTimeY, endTimeM, endTimeD, startTimeY, startTimeM, startTimeD) then
-- invalidate end time if it precedes start time
endTimeY = nil
endTimeM = nil
endTimeD = nil
end
if self.periods[1] then
-- future
if startTimeY and datePrecedesDate(self.atDate[1], self.atDate[2], self.atDate[3], startTimeY, startTimeM, startTimeD) then
return true
end
end
if self.periods[2] then
-- current
if (startTimeY == nil or not datePrecedesDate(self.atDate[1], self.atDate[2], self.atDate[3], startTimeY, startTimeM, startTimeD)) and
(endTimeY == nil or datePrecedesDate(self.atDate[1], self.atDate[2], self.atDate[3], endTimeY, endTimeM, endTimeD)) then
return true
end
end
if self.periods[3] then
-- former
if endTimeY and not datePrecedesDate(self.atDate[1], self.atDate[2], self.atDate[3], endTimeY, endTimeM, endTimeD) then
return true
end
end
return false
end
function Config:processFlag(flag)
if not flag then
return false
end
if flag == p.flags.linked then
self.curState.linked = true
return true
elseif flag == p.flags.raw then
self.curState.rawValue = true
if self.curState == self.states[parameters.reference] then
-- raw reference values end with periods and require a separator (other than none)
self.separators["sep%r"][1] = {" "}
end
return true
elseif flag == p.flags.short then
self.curState.shortName = true
return true
elseif flag == p.flags.multilanguage then
self.curState.anyLanguage = true
return true
elseif flag == p.flags.unit then
self.curState.unitOnly = true
return true
elseif flag == p.flags.mdy then
self.mdyDate = true
return true
elseif flag == p.flags.single then
self.singleClaim = true
return true
elseif flag == p.flags.sourced then
self.sourcedOnly = true
return true
elseif flag == p.flags.edit then
self.editable = true
return true
elseif flag == p.flags.editAtEnd then
self.editable = true
self.editAtEnd = true
return true
elseif flag == p.flags.best or flag:match('^'..p.flags.preferred..'[+-]?$') or flag:match('^'..p.flags.normal..'[+-]?$') or flag:match('^'..p.flags.deprecated..'[+-]?$') then
self:setRank(flag)
return true
elseif flag == p.flags.future or flag == p.flags.current or flag == p.flags.former then
self:setPeriod(flag)
return true
elseif flag == "" then
-- ignore empty flags and carry on
return true
else
return false
end
end
function Config:processFlagOrCommand(flag)
local param = ""
if not flag then
return false
end
if flag == p.claimCommands.property or flag == p.claimCommands.properties then
param = parameters.property
elseif flag == p.claimCommands.qualifier or flag == p.claimCommands.qualifiers then
self.states.qualifiersCount = self.states.qualifiersCount + 1
param = parameters.qualifier .. self.states.qualifiersCount
self.separators["sep"..param] = {copyTable(defaultSeparators["sep%q\\d"])}
elseif flag == p.claimCommands.reference or flag == p.claimCommands.references then
param = parameters.reference
else
return self:processFlag(flag)
end
if self.states[param] then
return false
end
-- create a new state for each command
self.states[param] = State:new(self, param)
-- use "%x" as the general parameter name
self.states[param].parsedFormat = parseFormat(parameters.general) -- will be overwritten for param=="%p"
-- set the separator
self.states[param].separator = self.separators["sep"..param] -- will be nil for param=="%p", which will be set separately
if flag == p.claimCommands.property or flag == p.claimCommands.qualifier or flag == p.claimCommands.reference then
self.states[param].singleValue = true
end
self.curState = self.states[param]
return true
end
function Config:processSeparators(args)
local sep
for i, v in pairs(self.separators) do
if args[i] then
sep = replaceSpecialChars(args[i])
if sep ~= "" then
self.separators[i][1] = {sep}
else
self.separators[i][1] = nil
end
end
end
end
function Config:setFormatAndSeparators(state, parsedFormat)
state.parsedFormat = parsedFormat
state.separator = self.separators["sep"]
state.movSeparator = self.separators["sep"..parameters.separator]
state.puncMark = self.separators["punc"]
end
-- determines if a claim has references by prefetching them from the claim using getReferences,
-- which applies some filtering that determines if a reference is actually returned,
-- and caches the references for later use
function State:isSourced(claim)
self.conf.prefetchedRefs = self:getReferences(claim)
return (#self.conf.prefetchedRefs > 0)
end
function State:resetCaches()
-- any prefetched references of the previous claim must not be used
self.conf.prefetchedRefs = nil
end
function State:claimMatches(claim)
local matches, rankPos
-- first of all, reset any cached values used for the previous claim
self:resetCaches()
-- if a property value was given, check if it matches the claim's property value
if self.conf.propertyValue then
matches = self.conf:snakEqualsValue(claim.mainsnak, self.conf.propertyValue)
else
matches = true
end
-- if any qualifier values were given, check if each matches one of the claim's qualifier values
for i, v in pairs(self.conf.qualifierIDsAndValues) do
matches = (matches and self.conf:qualifierMatches(claim, i, v))
end
-- check if the claim's rank and time period match
rankPos = rankTable[claim.rank] or 4
matches = (matches and self.conf:rankMatches(rankPos) and self.conf:timeMatches(claim))
-- if only claims with references must be returned, check if this one has any
if self.conf.sourcedOnly then
matches = (matches and self:isSourced(claim)) -- prefetches and caches references
end
return matches, rankPos
end
function State:out()
local result -- collection of arrays with value objects
local valuesArray -- array with value objects
local sep = nil -- value object
local out = {} -- array with value objects
local function walk(formatTable, result)
local valuesArray = {} -- array with value objects
for i, v in pairs(formatTable.req) do
if not result[i] or not result[i][1] then
-- we've got no result for a parameter that is required on this level,
-- so skip this level (and its children) by returning an empty result
return {}
end
end
for _, v in ipairs(formatTable) do
if v.param then
valuesArray = mergeArrays(valuesArray, result[v.str])
elseif v.str ~= "" then
valuesArray[#valuesArray + 1] = {v.str}
end
if v.child then
valuesArray = mergeArrays(valuesArray, walk(v.child, result))
end
end
return valuesArray
end
-- iterate through the results from back to front, so that we know when to add separators
for i = #self.results, 1, -1 do
result = self.results[i]
-- if there is already some output, then add the separators
if #out > 0 then
sep = self.separator[1] -- fixed separator
result[parameters.separator] = {self.movSeparator[1]} -- movable separator
else
sep = nil
result[parameters.separator] = {self.puncMark[1]} -- optional punctuation mark
end
valuesArray = walk(self.parsedFormat, result)
if #valuesArray > 0 then
if sep then
valuesArray[#valuesArray + 1] = sep
end
out = mergeArrays(valuesArray, out)
end
end
-- reset state before next iteration
self.results = {}
return out
end
-- level 1 hook
function State:getProperty(claim)
local value = {self:getValue(claim.mainsnak)} -- create one value object
if #value > 0 then
return {value} -- wrap the value object in an array and return it
else
return {} -- return empty array if there was no value
end
end
-- level 1 hook
function State:getQualifiers(claim, param)
local qualifiers
if claim.qualifiers then qualifiers = claim.qualifiers[self.conf.qualifierIDs[param]] end
if qualifiers then
-- iterate through claim's qualifier statements to collect their values;
-- return array with multiple value objects
return self.conf.states[param]:iterate(qualifiers, {[parameters.general] = hookNames[parameters.qualifier.."\\d"][2], count = 1}) -- pass qualifier state with level 2 hook
else
return {} -- return empty array
end
end
-- level 2 hook
function State:getQualifier(snak)
local value = {self:getValue(snak)} -- create one value object
if #value > 0 then
return {value} -- wrap the value object in an array and return it
else
return {} -- return empty array if there was no value
end
end
-- level 1 hook
function State:getAllQualifiers(claim, param, result, hooks)
local out = {} -- array with value objects
local sep = self.conf.separators["sep"..parameters.qualifier][1] -- value object
-- iterate through the output of the separate "qualifier(s)" commands
for i = 1, self.conf.states.qualifiersCount do
-- if a hook has not been called yet, call it now
if not result[parameters.qualifier..i] then
self:callHook(parameters.qualifier..i, hooks, claim, result)
end
-- if there is output for this particular "qualifier(s)" command, then add it
if result[parameters.qualifier..i] and result[parameters.qualifier..i][1] then
-- if there is already some output, then add the separator
if #out > 0 and sep then
out[#out + 1] = sep
end
out = mergeArrays(out, result[parameters.qualifier..i])
end
end
return out
end
-- level 1 hook
function State:getReferences(claim)
if self.conf.prefetchedRefs then
-- return references that have been prefetched by isSourced
return self.conf.prefetchedRefs
end
if claim.references then
-- iterate through claim's reference statements to collect their values;
-- return array with multiple value objects
return self.conf.states[parameters.reference]:iterate(claim.references, {[parameters.general] = hookNames[parameters.reference][2], count = 1}) -- pass reference state with level 2 hook
else
return {} -- return empty array
end
end
-- level 2 hook
function State:getReference(statement)
local citeParamMapping = i18n['cite']['param-mapping']
local citeConfig = i18n['cite']['config']
local citeTypes = i18n['cite']['output-types']
-- will hold rendered properties of the reference which are not directly from statement.snaks,
-- Namely, is URL generated from an external ID.
local additionalProcessedProperties = {}
-- for each citation type, there will be an associative array that associates lists of rendered properties
-- to citation-template parameters
local candidateParams = {}
-- like above, but only associates one rendered property to each parameter; if the above variable
-- contains more strings for a parameter, the strings will be assigned to numbered params (e.g. "author1")
local citeParams = {}
local citeErrors = {}
local referenceEmpty = true -- will be set to false if at least one parameter is left unremoved
local version = 12 -- increment this each time the below logic is changed to avoid conflict errors
if not statement.snaks then
return {}
end
-- don't use bot-added references referencing Wikimedia projects or containing "inferred from" (such references are not usable on Wikipedia)
if statement.snaks[aliasesP.importedFrom] or statement.snaks[aliasesP.wikimediaImportURL] or statement.snaks[aliasesP.inferredFrom] then
return {}
end
-- don't include "type of reference"
if statement.snaks[aliasesP.typeOfReference] then
statement.snaks[aliasesP.typeOfReference] = nil
end
-- don't include "image" to prevent littering
if statement.snaks[aliasesP.image] then
statement.snaks[aliasesP.image] = nil
end
-- don't include "language" if it is equal to the local one
if self:getReferenceDetail(statement.snaks, aliasesP.language) == self.conf.langName then
statement.snaks[aliasesP.language] = nil
end
if statement.snaks[aliasesP.statedIn] and not statement.snaks[aliasesP.referenceURL] then
-- "stated in" was given but "reference URL" was not.
-- get "Wikidata property" properties from the item in "stated in"
-- if any of the returned properties of the external-id datatype is in statement.snaks, generate a link from it and use the link in the reference
-- find the "Wikidata property" properties in the item from "stated in"
local wikidataPropertiesOfSource = mw.text.split(p._properties{p.flags.raw, aliasesP.wikidataProperty, [p.args.eid] = self.conf:getValue(statement.snaks[aliasesP.statedIn][1], true, false)}, ", ", true)
for i, wikidataPropertyOfSource in pairs(wikidataPropertiesOfSource) do
if statement.snaks[wikidataPropertyOfSource] and statement.snaks[wikidataPropertyOfSource][1].datatype == "external-id" then
local tempLink = self:getReferenceDetail(statement.snaks, wikidataPropertyOfSource, false, true) -- not raw, linked
if mw.ustring.match(tempLink, "^%[%Z- %Z+%]$") then -- getValue returned a URL in square brackets.
-- the link is in wiki markup, so strip the square brackets and the display text
-- gsub also returns another, discarted value, therefore the result is assigned to tempLink first
tempLink = mw.ustring.gsub(tempLink, "^%[(%Z-) %Z+%]$", "%1")
additionalProcessedProperties[aliasesP.referenceURL] = {tempLink}
statement.snaks[wikidataPropertyOfSource] = nil
break
end
end
end
end
-- initialize candidateParams and citeParams
for _, citeType in ipairs(citeTypes) do
candidateParams[citeType] = {}
citeParams[citeType] = {}
end
-- fill candidateParams
for _, citeType in ipairs(citeTypes) do
-- This will contain value--priority pairs for each param name.
local candidateValuesAndPriorities = {}
-- fill candidateValuesAndPriorities
for refProperty in pairs(statement.snaks) do
if citeErrors[citeType] then
break
end
repeat -- just a simple wrapper to emulate "continue"
-- set mappingKey and prefix
local mappingKey
local prefix = ""
if statement.snaks[refProperty][1].datatype == 'external-id' then
mappingKey = "external-id"
prefix = self.conf:getLabel(refProperty)
if prefix ~= "" then
prefix = prefix .. " "
end
else
mappingKey = refProperty
end
local paramName = citeParamMapping[citeType][mappingKey]
-- skip properties with empty parameter name
if paramName == "" then
break -- skip this property for this value of citeType
end
-- handle unknown properties in the reference
if not paramName then
referenceEmpty = false
local error_message = errorText("unknown-property-in-ref", refProperty)
assert(error_message) -- Should not be nil
citeErrors[citeType] = error_message
break
end
-- set processedProperty
local processedProperty
local raw = false -- if the value is wanted raw
if isValueInTable(paramName, citeConfig[citeType]["raw-value-params"] or {}) then
raw = true
end
if isValueInTable(paramName, citeConfig[citeType]["numbered-params"] or {}) then
-- Multiple values may be given.
processedProperty = self:getReferenceDetails(statement.snaks, refProperty, raw, self.linked, true) -- anyLang = true
else
-- If multiple values are given, all but the first suitable one are discarted.
processedProperty = {self:getReferenceDetail(statement.snaks, refProperty, raw, self.linked and (statement.snaks[refProperty][1].datatype ~= 'url'), true)} -- link = true/false, anyLang = true
end
if #processedProperty == 0 then
break
end
referenceEmpty = false
-- add an empty entry to candidateValuesAndPriorities, if there isn't one already
if not candidateValuesAndPriorities[paramName] then
candidateValuesAndPriorities[paramName] = {}
end
-- find the priority of refProperty
local thisPropertyPriority = -1
local thisParamPrioritization = citeConfig[citeType]["prioritization"][paramName]
if thisParamPrioritization then
for i_priority, i_property in ipairs(thisParamPrioritization) do
if i_property == refProperty then
thisPropertyPriority = i_priority
end
end
end
for _, propertyValue in pairs(processedProperty) do
table.insert(
candidateValuesAndPriorities[paramName],
{prefix .. propertyValue, thisPropertyPriority}
)
end
until true
end
-- fill candidateParams[citeType]
if not citeErrors[citeType] then
local compareValuePriorities = function(pair1, pair2)
if pair1[2] == -1 and pair2[2] ~= -1 then
return false
end
if pair1[2] ~= -1 and pair2[2] == -1 then
return true
end
return pair1[2] < pair2[2]
end
-- fill candidateParams[citeType][paramName] for each used param
for paramName, _ in pairs(candidateValuesAndPriorities) do
table.sort(candidateValuesAndPriorities[paramName], compareValuePriorities)
candidateParams[citeType][paramName] = {}
for _, valuePriorityPair in ipairs(candidateValuesAndPriorities[paramName]) do
table.insert(candidateParams[citeType][paramName], valuePriorityPair[1])
end
end
end
end
-- handle additional properties
for refProperty in pairs(additionalProcessedProperties) do
for _, citeType in ipairs(citeTypes) do
repeat
-- skip if there already have been errors
if citeErrors[citeType] then
break
end
local paramName = citeParamMapping[citeType][refProperty]
-- handle unknown properties in the reference
if not paramName then
-- Skip this additional property, but do not cause an error.
break
end
if paramName == "" then
break
end
referenceEmpty = false
if not candidateParams[citeType][paramName] then
candidateParams[citeType][paramName] = {}
end
for _, propertyValue in pairs(additionalProcessedProperties[refProperty]) do
table.insert(candidateParams[citeType][paramName], propertyValue)
end
until true
end
end
-- fill citeParams
for _, citeType in ipairs(citeTypes) do
for paramName, paramValues in pairs(candidateParams[citeType]) do
if #paramValues == 1 or not isValueInTable(paramName, citeConfig[citeType]["numbered-params"] or {}) then
citeParams[citeType][paramName] = paramValues[1]
else
-- There is more than one value for this parameter - the values will
-- go into separate numbered parameters (e.g. "author1", "author2")
for paramNum, paramValue in pairs(paramValues) do
citeParams[citeType][paramName .. paramNum] = paramValue
end
end
end
end
-- handle missing mandatory parameters for the templates
for _, citeType in ipairs(citeTypes) do
for _, requiredCiteParam in pairs(citeConfig[citeType]["mandatory-params"] or {}) do
if not citeParams[citeType][requiredCiteParam] then -- The required param is not present.
if citeErrors[citeType] then -- Do not override the previous error, if it exists.
break
end
local error_message = errorText("missing-mandatory-param", requiredCiteParam)
assert(error_message) -- Should not be nil
citeErrors[citeType] = error_message
end
end
end
local citeTypeToUse = nil
-- choose the output template
for _, citeType in ipairs(citeTypes) do
if not citeErrors[citeType] then
citeTypeToUse = citeType
break
end
end
-- set refContent
local refContent = ""
if citeTypeToUse then
local templateToUse = citeConfig[citeTypeToUse]["template"]
local paramsToUse = citeParams[citeTypeToUse]
if not templateToUse or templateToUse == "" then
throwError("no-such-reference-template", tostring(templateToUse), i18nPath, citeTypeToUse)
end
-- if this module is being substituted then build a regular template call, otherwise expand the template
if mw.isSubsting() then
for i, v in pairs(paramsToUse) do
refContent = refContent .. "|" .. i .. "=" .. v
end
refContent = "{{" .. templateToUse .. refContent .. "}}"
else
xpcall(
function () refContent = mw.getCurrentFrame():expandTemplate{title=templateToUse, args=paramsToUse} end,
function () throwError("no-such-reference-template", templateToUse, i18nPath, citeTypeToUse) end
)
end
-- If the citation couldn't be displayed using any template, but is not empty (barring ignored propeties), throw an error.
elseif not referenceEmpty then
refContent = errorText("malformed-reference-header")
for _, citeType in ipairs(citeTypes) do
refContent = refContent .. errorText("template-failure-reason", citeConfig[citeType]["template"], citeErrors[citeType])
end
refContent = refContent .. errorText("malformed-reference-footer")
end
-- wrap refContent
local ref = {}
if refContent ~= "" then
ref = {refContent}
if not self.rawValue then
-- this should become a <ref> tag, so save the reference's hash for later
ref.refHash = "wikidata-" .. statement.hash .. "-v" .. (tonumber(i18n['version']) + version)
end
return {ref}
else
return {}
end
end
-- gets a detail of one particular type for a reference
function State:getReferenceDetail(snaks, dType, raw, link, anyLang)
local switchLang = anyLang
local value = nil
if not snaks[dType] then
return nil
end
-- if anyLang, first try the local language and otherwise any language
repeat
for _, v in ipairs(snaks[dType]) do
value = self.conf:getValue(v, raw, link, false, anyLang and not switchLang, false, true) -- noSpecial = true
if value then
break
end
end
if value or not anyLang then
break
end
switchLang = not switchLang
until anyLang and switchLang
return value
end
-- gets the details of one particular type for a reference
function State:getReferenceDetails(snaks, dType, raw, link, anyLang)
local values = {}
if not snaks[dType] then
return {}
end
for _, v in ipairs(snaks[dType]) do
-- if nil is returned then it will not be added to the table
values[#values + 1] = self.conf:getValue(v, raw, link, false, anyLang, false, true) -- noSpecial = true
end
return values
end
-- level 1 hook
function State:getAlias(object)
local value = object.value
local title = nil
if value and self.linked then
if self.conf.entityID:sub(1,1) == "Q" then
title = mw.wikibase.getSitelink(self.conf.entityID)
elseif self.conf.entityID:sub(1,1) == "P" then
title = "d:Property:" .. self.conf.entityID
end
if title then
value = buildWikilink(title, value)
end
end
value = {value} -- create one value object
if #value > 0 then
return {value} -- wrap the value object in an array and return it
else
return {} -- return empty array if there was no value
end
end
-- level 1 hook
function State:getBadge(value)
value = self.conf:getLabel(value, self.rawValue, self.linked, self.shortName)
if value == "" then
value = nil
end
value = {value} -- create one value object
if #value > 0 then
return {value} -- wrap the value object in an array and return it
else
return {} -- return empty array if there was no value
end
end
function State:callHook(param, hooks, statement, result)
-- call a parameter's hook if it has been defined and if it has not been called before
if not result[param] and hooks[param] then
local valuesArray = self[hooks[param]](self, statement, param, result, hooks) -- array with value objects
-- add to the result
if #valuesArray > 0 then
result[param] = valuesArray
result.count = result.count + 1
else
result[param] = {} -- an empty array to indicate that we've tried this hook already
return true -- miss == true
end
end
return false
end
-- iterate through claims, claim's qualifiers or claim's references to collect values
function State:iterate(statements, hooks, matchHook)
matchHook = matchHook or alwaysTrue
local matches = false
local rankPos = nil
local result, gotRequired
for _, v in ipairs(statements) do
-- rankPos will be nil for non-claim statements (e.g. qualifiers, references, etc.)
matches, rankPos = matchHook(self, v)
if matches then
result = {count = 0} -- collection of arrays with value objects
local function walk(formatTable)
local miss
for i2, v2 in pairs(formatTable.req) do
-- call a hook, adding its return value to the result
miss = self:callHook(i2, hooks, v, result)
if miss then
-- we miss a required value for this level, so return false
return false
end
if result.count == hooks.count then
-- we're done if all hooks have been called;
-- returning at this point breaks the loop
return true
end
end
for _, v2 in ipairs(formatTable) do
if result.count == hooks.count then
-- we're done if all hooks have been called;
-- returning at this point prevents further childs from being processed
return true
end
if v2.child then
walk(v2.child)
end
end
return true
end
gotRequired = walk(self.parsedFormat)
-- only append the result if we got values for all required parameters on the root level
if gotRequired then
-- if we have a rankPos (only with matchHook() for complete claims), then update the foundRank
if rankPos and self.conf.foundRank > rankPos then
self.conf.foundRank = rankPos
end
-- append the result
self.results[#self.results + 1] = result
-- break if we only need a single value
if self.singleValue then
break
end
end
end
end
return self:out()
end
local function getEntityId(arg, eid, page, allowOmitPropPrefix, globalSiteId)
local id = nil
local prop = nil
if arg then
if arg:sub(1,1) == ":" then
page = arg
eid = nil
elseif arg:sub(1,1):upper() == "Q" or arg:sub(1,9):lower() == "property:" or allowOmitPropPrefix then
eid = arg
page = nil
else
prop = arg
end
end
if eid then
if eid:sub(1,9):lower() == "property:" then
id = replaceAlias(mw.text.trim(eid:sub(10)))
if id:sub(1,1):upper() ~= "P" then
id = ""
end
else
id = replaceAlias(eid)
end
elseif page then
if page:sub(1,1) == ":" then
page = mw.text.trim(page:sub(2))
end
id = mw.wikibase.getEntityIdForTitle(page, globalSiteId) or ""
end
if not id then
id = mw.wikibase.getEntityIdForCurrentPage() or ""
end
id = id:upper()
if not mw.wikibase.isValidEntityId(id) then
id = ""
end
return id, prop
end
local function nextArg(args)
local arg = args[args.pointer]
if arg then
args.pointer = args.pointer + 1
return mw.text.trim(arg)
else
return nil
end
end
local function claimCommand(args, funcName)
local cfg = Config:new()
cfg:processFlagOrCommand(funcName) -- process first command (== function name)
local lastArg, parsedFormat, formatParams, claims, value
local hooks = {count = 0}
-- set the date if given;
-- must come BEFORE processing the flags
if args[p.args.date] then
cfg.atDate = {parseDate(args[p.args.date])}
cfg.periods = {false, true, false} -- change default time constraint to 'current'
end
-- process flags and commands
repeat
lastArg = nextArg(args)
until not cfg:processFlagOrCommand(lastArg)
-- get the entity ID from either the positional argument, the eid argument or the page argument
cfg.entityID, cfg.propertyID = getEntityId(lastArg, args[p.args.eid], args[p.args.page], false, args[p.args.globalSiteId])
if cfg.entityID == "" then
return "" -- we cannot continue without a valid entity ID
end
cfg.entity = mw.wikibase.getEntity(cfg.entityID)
if not cfg.propertyID then
cfg.propertyID = nextArg(args)
end
cfg.propertyID = replaceAlias(cfg.propertyID)
if not cfg.entity or not cfg.propertyID then
return "" -- we cannot continue without an entity or a property ID
end
cfg.propertyID = cfg.propertyID:upper()
if not cfg.entity.claims or not cfg.entity.claims[cfg.propertyID] then
return "" -- there is no use to continue without any claims
end
claims = cfg.entity.claims[cfg.propertyID]
if cfg.states.qualifiersCount > 0 then
-- do further processing if "qualifier(s)" command was given
if #args - args.pointer + 1 > cfg.states.qualifiersCount then
-- claim ID or literal value has been given
cfg.propertyValue = nextArg(args)
end
for i = 1, cfg.states.qualifiersCount do
-- check if given qualifier ID is an alias and add it
cfg.qualifierIDs[parameters.qualifier..i] = replaceAlias(nextArg(args) or ""):upper()
end
elseif cfg.states[parameters.reference] then
-- do further processing if "reference(s)" command was given
cfg.propertyValue = nextArg(args)
end
-- check for special property value 'somevalue' or 'novalue'
if cfg.propertyValue then
cfg.propertyValue = replaceSpecialChars(cfg.propertyValue)
if cfg.propertyValue ~= "" and mw.text.trim(cfg.propertyValue) == "" then
cfg.propertyValue = " " -- single space represents 'somevalue', whereas empty string represents 'novalue'
else
cfg.propertyValue = mw.text.trim(cfg.propertyValue)
end
end
-- parse the desired format, or choose an appropriate format
if args["format"] then
parsedFormat, formatParams = parseFormat(args["format"])
elseif cfg.states.qualifiersCount > 0 then -- "qualifier(s)" command given
if cfg.states[parameters.property] then -- "propert(y|ies)" command given
parsedFormat, formatParams = parseFormat(formats.propertyWithQualifier)
else
parsedFormat, formatParams = parseFormat(formats.qualifier)
end
elseif cfg.states[parameters.property] then -- "propert(y|ies)" command given
parsedFormat, formatParams = parseFormat(formats.property)
else -- "reference(s)" command given
parsedFormat, formatParams = parseFormat(formats.reference)
end
-- if a "qualifier(s)" command and no "propert(y|ies)" command has been given, make the movable separator a semicolon
if cfg.states.qualifiersCount > 0 and not cfg.states[parameters.property] then
cfg.separators["sep"..parameters.separator][1] = {";"}
end
-- if only "reference(s)" has been given, set the default separator to none (except when raw)
if cfg.states[parameters.reference] and not cfg.states[parameters.property] and cfg.states.qualifiersCount == 0
and not cfg.states[parameters.reference].rawValue then
cfg.separators["sep"][1] = nil
end
-- if exactly one "qualifier(s)" command has been given, make "sep%q" point to "sep%q1" to make them equivalent
if cfg.states.qualifiersCount == 1 then
cfg.separators["sep"..parameters.qualifier] = cfg.separators["sep"..parameters.qualifier.."1"]
end
-- process overridden separator values;
-- must come AFTER tweaking the default separators
cfg:processSeparators(args)
-- define the hooks that should be called (getProperty, getQualifiers, getReferences);
-- only define a hook if both its command ("propert(y|ies)", "reference(s)", "qualifier(s)") and its parameter ("%p", "%r", "%q1", "%q2", "%q3") have been given
for i, v in pairs(cfg.states) do
-- e.g. 'formatParams["%q1"] or formatParams["%q"]' to define hook even if "%q1" was not defined to be able to build a complete value for "%q"
if formatParams[i] or formatParams[i:sub(1, 2)] then
hooks[i] = getHookName(i, 1)
hooks.count = hooks.count + 1
end
end
-- the "%q" parameter is not attached to a state, but is a collection of the results of multiple states (attached to "%q1", "%q2", "%q3", ...);
-- so if this parameter is given then this hook must be defined separately, but only if at least one "qualifier(s)" command has been given
if formatParams[parameters.qualifier] and cfg.states.qualifiersCount > 0 then
hooks[parameters.qualifier] = getHookName(parameters.qualifier, 1)
hooks.count = hooks.count + 1
end
-- create a state for "properties" if it doesn't exist yet, which will be used as a base configuration for each claim iteration;
-- must come AFTER defining the hooks
if not cfg.states[parameters.property] then
cfg.states[parameters.property] = State:new(cfg, parameters.property)
-- if the "single" flag has been given then this state should be equivalent to "property" (singular)
if cfg.singleClaim then
cfg.states[parameters.property].singleValue = true
end
end
-- if the "sourced" flag has been given then create a state for "reference" if it doesn't exist yet, using default values,
-- which must exist in order to be able to determine if a claim has any references;
-- must come AFTER defining the hooks
if cfg.sourcedOnly and not cfg.states[parameters.reference] then
cfg:processFlagOrCommand(p.claimCommands.reference) -- use singular "reference" to minimize overhead
end
-- set the parsed format and the separators (and optional punctuation mark);
-- must come AFTER creating the additonal states
cfg:setFormatAndSeparators(cfg.states[parameters.property], parsedFormat)
-- process qualifier matching values, analogous to cfg.propertyValue
for i, v in pairs(args) do
i = tostring(i)
if i:match('^[Pp]%d+$') or aliasesP[i] then
v = replaceSpecialChars(v)
-- check for special qualifier value 'somevalue'
if v ~= "" and mw.text.trim(v) == "" then
v = " " -- single space represents 'somevalue'
end
cfg.qualifierIDsAndValues[replaceAlias(i):upper()] = v
end
end
-- first sort the claims on rank to pre-define the order of output (preferred first, then normal, then deprecated)
claims = sortOnRank(claims)
-- then iterate through the claims to collect values
value = cfg:concatValues(cfg.states[parameters.property]:iterate(claims, hooks, State.claimMatches)) -- pass property state with level 1 hooks and matchHook
-- if desired, add a clickable icon that may be used to edit the returned values on Wikidata
if cfg.editable and value ~= "" then
value = value .. cfg:getEditIcon()
end
return value
end
local function generalCommand(args, funcName)
local cfg = Config:new()
cfg.curState = State:new(cfg)
local lastArg
local value = nil
repeat
lastArg = nextArg(args)
until not cfg:processFlag(lastArg)
-- get the entity ID from either the positional argument, the eid argument or the page argument
cfg.entityID = getEntityId(lastArg, args[p.args.eid], args[p.args.page], true, args[p.args.globalSiteId])
if cfg.entityID == "" or not mw.wikibase.entityExists(cfg.entityID) then
return "" -- we cannot continue without an entity
end
-- serve according to the given command
if funcName == p.generalCommands.label then
value = cfg:getLabel(cfg.entityID, cfg.curState.rawValue, cfg.curState.linked, cfg.curState.shortName)
elseif funcName == p.generalCommands.title then
cfg.inSitelinks = true
if cfg.entityID:sub(1,1) == "Q" then
value = mw.wikibase.getSitelink(cfg.entityID)
end
if cfg.curState.linked and value then
value = buildWikilink(value)
end
elseif funcName == p.generalCommands.description then
value = mw.wikibase.getDescription(cfg.entityID)
else
local parsedFormat, formatParams
local hooks = {count = 0}
cfg.entity = mw.wikibase.getEntity(cfg.entityID)
if funcName == p.generalCommands.alias or funcName == p.generalCommands.badge then
cfg.curState.singleValue = true
end
if funcName == p.generalCommands.alias or funcName == p.generalCommands.aliases then
if not cfg.entity.aliases or not cfg.entity.aliases[cfg.langCode] then
return "" -- there is no use to continue without any aliasses
end
local aliases = cfg.entity.aliases[cfg.langCode]
-- parse the desired format, or parse the default aliases format
if args["format"] then
parsedFormat, formatParams = parseFormat(args["format"])
else
parsedFormat, formatParams = parseFormat(formats.alias)
end
-- process overridden separator values;
-- must come AFTER tweaking the default separators
cfg:processSeparators(args)
-- define the hook that should be called (getAlias);
-- only define the hook if the parameter ("%a") has been given
if formatParams[parameters.alias] then
hooks[parameters.alias] = getHookName(parameters.alias, 1)
hooks.count = hooks.count + 1
end
-- set the parsed format and the separators (and optional punctuation mark)
cfg:setFormatAndSeparators(cfg.curState, parsedFormat)
-- iterate to collect values
value = cfg:concatValues(cfg.curState:iterate(aliases, hooks))
elseif funcName == p.generalCommands.badge or funcName == p.generalCommands.badges then
if not cfg.entity.sitelinks or not cfg.entity.sitelinks[cfg.siteID] or not cfg.entity.sitelinks[cfg.siteID].badges then
return "" -- there is no use to continue without any badges
end
local badges = cfg.entity.sitelinks[cfg.siteID].badges
cfg.inSitelinks = true
-- parse the desired format, or parse the default aliases format
if args["format"] then
parsedFormat, formatParams = parseFormat(args["format"])
else
parsedFormat, formatParams = parseFormat(formats.badge)
end
-- process overridden separator values;
-- must come AFTER tweaking the default separators
cfg:processSeparators(args)
-- define the hook that should be called (getBadge);
-- only define the hook if the parameter ("%b") has been given
if formatParams[parameters.badge] then
hooks[parameters.badge] = getHookName(parameters.badge, 1)
hooks.count = hooks.count + 1
end
-- set the parsed format and the separators (and optional punctuation mark)
cfg:setFormatAndSeparators(cfg.curState, parsedFormat)
-- iterate to collect values
value = cfg:concatValues(cfg.curState:iterate(badges, hooks))
end
end
value = value or ""
if cfg.editable and value ~= "" then
-- if desired, add a clickable icon that may be used to edit the returned value on Wikidata
value = value .. cfg:getEditIcon()
end
return value
end
-- modules that include this module should call the functions with an underscore prepended, e.g.: p._property(args)
local function establishCommands(commandList, commandFunc)
for _, commandName in pairs(commandList) do
local function wikitextWrapper(frame)
local args = copyTable(frame.args)
args.pointer = 1
loadI18n(aliasesP, frame)
return commandFunc(args, commandName)
end
p[commandName] = wikitextWrapper
local function luaWrapper(args)
args = copyTable(args)
args.pointer = 1
loadI18n(aliasesP)
return commandFunc(args, commandName)
end
p["_" .. commandName] = luaWrapper
end
end
establishCommands(p.claimCommands, claimCommand)
establishCommands(p.generalCommands, generalCommand)
-- main function that is supposed to be used by wrapper templates
function p.main(frame)
if not mw.wikibase then return nil end
local f, args
loadI18n(aliasesP, frame)
-- get the parent frame to take the arguments that were passed to the wrapper template
frame = frame:getParent() or frame
if not frame.args[1] then
throwError("no-function-specified")
end
f = mw.text.trim(frame.args[1])
if f == "main" then
throwError("main-called-twice")
end
assert(p["_"..f], errorText('no-such-function', f))
-- copy arguments from immutable to mutable table
args = copyTable(frame.args)
-- remove the function name from the list
table.remove(args, 1)
return p["_"..f](args)
end
return p
j5a6l03tjwodgrvfnv3lb4x5up93wlv
ماژول:Wd/i18n
828
41063
389855
178614
2026-07-10T11:24:18Z
Uzume
1313
Update from [[d:Special:GoToLinkedPage/enwiki/Q29879601|master]] using [[mw:Synchronizer| #Synchronizer]]
389855
Scribunto
text/plain
-- The values and functions in this submodule should be localized per wiki.
local p = {}
function p.init(aliasesP)
p = {
["version"] = "8", -- increment this each time the below parameters are changed to avoid reference conflict errors
["errors"] = {
["unknown-data-type"] = "Unknown or unsupported datatype '%s'.",
["missing-required-parameter"] = "No required parameters defined, needing at least one",
["extra-required-parameter"] = "Parameter '%s' must be defined as optional",
["no-function-specified"] = "You must specify a function to call", -- equal to the standard module error message
["main-called-twice"] = 'The function "main" cannot be called twice',
["no-such-function"] = 'The function "%s" does not exist', -- equal to the standard module error message
["no-such-reference-template"] = 'Error: template "%s", which is set in %s as the output template for the citation-output type "%s", does not exist',
-- Parts of the error message signalling a malformed reference.
["malformed-reference-header"] = "<span style=\"color:#dd3333\">\nError: Unable to display the reference from Wikidata properly. Technical details:\n",
["malformed-reference-footer"] = "See [[Module:wd/doc#References|the documentation]] for further details.\n</span>\n[[Category:Module:Wd reference errors]]",
["template-failure-reason"] = "* Reason for the failure of {{tl|%s}}: %s\n",
["missing-mandatory-param"] = 'The output template call would miss the mandatory parameter <code>%s</code>.',
["unknown-property-in-ref"] = 'The Wikidata reference contains the property {{property|%s}}, which is not assigned to any parameter of this template.'
},
["info"] = {
["edit-on-wikidata"] = "Edit this on Wikidata"
},
["numeric"] = {
["decimal-mark"] = ".",
["delimiter"] = ","
},
["datetime"] = {
["prefixes"] = {
["decade-period"] = ""
},
["suffixes"] = {
["decade-period"] = "s",
["millennium"] = " millennium",
["century"] = " century",
["million-years"] = " million years",
["billion-years"] = " billion years",
["year"] = " year",
["years"] = " years"
},
["julian-calendar"] = "Julian calendar", -- linked page title
["julian"] = "Julian",
["BCE"] = "BCE",
["CE"] = "CE",
["common-era"] = "Common Era" -- linked page title
},
["coord"] = {
["latitude-north"] = "N",
["latitude-south"] = "S",
["longitude-east"] = "E",
["longitude-west"] = "W",
["degrees"] = "°",
["minutes"] = "'",
["seconds"] = '"',
["separator"] = ", "
},
["values"] = {
["unknown"] = "unknown",
["none"] = "none"
},
["cite"] = {
["output-types"] = {"web", "q"}, -- In this order, the output types will be tried
["param-mapping"] = {
["web"] = {
-- <= left side: all allowed reference properties for *web page sources* per https://www.wikidata.org/wiki/Help:Sources
-- => right side: corresponding parameter names in (equivalent of) [[:en:Template:Cite web]] (if non-existent, keep empty i.e. "")
[aliasesP.statedIn] = "website",
[aliasesP.referenceURL] = "url",
[aliasesP.publicationDate] = "date",
[aliasesP.lastUpdate] = "date",
[aliasesP.retrieved] = "access-date",
[aliasesP.title] = "title",
[aliasesP.subjectNamedAs] = "title",
[aliasesP.archiveURL] = "archive-url",
[aliasesP.archiveDate] = "archive-date",
[aliasesP.language] = "language",
[aliasesP.author] = "author",
[aliasesP.authorNameString] = "author",
[aliasesP.publisher] = "publisher",
[aliasesP.quote] = "quote",
[aliasesP.pages] = "pages", -- extra option
[aliasesP.publishedIn] = "website",
[aliasesP.sectionVerseOrParagraph] = "at"
},
["q"] = {
-- <= left side: all allowed reference properties for *sources other than web pages* per https://www.wikidata.org/wiki/Help:Sources
-- => right side: corresponding parameter names in (equivalent of) [[:en:Template:Cite Q]] (if non-existent, keep empty i.e. "")
[aliasesP.statedIn] = "1",
[aliasesP.pages] = "pages",
[aliasesP.column] = "at",
[aliasesP.chapter] = "chapter",
[aliasesP.sectionVerseOrParagraph] = "section",
["external-id"] = "id", -- used for any type of database property ID
[aliasesP.title] = "title",
[aliasesP.publicationDate] = "date",
[aliasesP.lastUpdate] = "date",
[aliasesP.retrieved] = "access-date"
}
},
["config"] = {
-- supported fields:
-- - template: name of the template used for output
-- - numbered-params: citation params accepting an arbitrary number of values by numbering the params (e.g. author1, author2)
-- - raw-value-params: params taking a raw value (which means the property is rendered with getValue with raw=true)
-- - mandatory-params: params that are required be in the template call (after potentially appending numbers to params listed in numbered-params)
-- - prioritization: table associating a list of properties, in the order in which they are preferred, to template parameters;
-- properties not mentioned here have the lowest priority;
-- prioritization of properties handled through additionalProcessedProperties is unsupported;
-- no key of this table can be from numbered-params
-- Leaving out the "template" field causes the output type to be ignored.
["web"] = {
["template"] = "Cite web",
["numbered-params"] = {"author"},
["mandatory-params"] = {"url"},
["prioritization"] = {
["date"] = {aliasesP.lastUpdate, aliasesP.publicationDate},
["title"] = {aliasesP.title, aliasesP.subjectNamedAs}
}
},
["q"] = {
["template"] = "Cite Q",
["raw-value-params"] = {"1"}, -- the first, unnamed parameter of CiteQ takes a QID, not the name of the item cited
["mandatory-params"] = {"1"},
["prioritization"] = {
["date"] = {aliasesP.lastUpdate, aliasesP.publicationDate}
}
}
}
}
}
p.getOrdinalSuffix = function(num)
if tostring(num):sub(-2,-2) == '1' then
return "th" -- 10th, 11th, 12th, 13th, ... 19th
end
num = tostring(num):sub(-1)
if num == '1' then
return "st"
elseif num == '2' then
return "nd"
elseif num == '3' then
return "rd"
else
return "th"
end
end
p.addDelimiters = function(n)
local left, num, right = string.match(n, "^([^%d]*%d)(%d*)(.-)$")
if left and num and right then
return left .. (num:reverse():gsub("(%d%d%d)", "%1" .. p['numeric']['delimiter']):reverse()) .. right
else
return n
end
end
return p
end
return p
pgkxz3kqyoyu0zj2nmtkjkdr0ntnin5
شاوشنک ردمپشن
0
46406
389851
189056
2026-07-10T10:35:53Z
محک
1023
[[رج:جنایی فیلمون]] اضافه شد با استفاده از [[ویکیپدیا:رجساز]]
389851
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس=Shawshank p.jpg
}}
'''''دِ شاؤشنگ ردمشن''''' که یعنن '''شاؤشنک ِپرند''' {{انگلیسی جه|The Shawshank Redemption}} اتا آمریکایی فیلم هسته که سال ۱۹۹۴، [[ فرانک دارابونت]] بساته و [[آی ام بی دی]] سایت دله، تاریخ ِبتترین فیلم انتخاب بئییه.
== آسنی ==
فیلم اتا کارمندِ زندگی ره سِراق دِنه که ونه نوم «اندی دوفرین» هسته و [[تیم رابینز]] ونه نقش ره دارنه. ونه زنا ونجه خیانت کنده. وه شونه زنا ره سر-به-سر پیدا کنده و تفنگ ره هم شه جه ورنه ولی وه ره دل ندنه که زنا ره بکوشه. همون شو اتا دزد شونه زنا-مردی که ونجه خیانت کردنه ره کِشنه و همینسه اندی ره بیگناه ورنه زندون و حبس ابد دِنّه و کفنه «شاوشنک» زندون دله.
زندون دله اندی خله رفق پیدا کنده و اتا سیو مردی، رِد، جه آشنا وونه که ونه نقش ره هم [[مورگان فریمن]] دارنه. اندی زندون ِزندونبانها و رییس وسّه مالیاتی کارون ره انجام دِنه و اونجه مخبر وونه که زندونِ رییس دره پولشویی کنده. این کارها عوض، اندی تونده زندون دله اتا کتابخنه راه دمبده و زندونیها ره اکابر کلاس دله درس یاد دِنه.
اتا جوون ریکا که اندی جه درس یاد گیرنه، وه ره گانه که اتی دیگه زندون دله ات نفر جه آشنا بیّه که حکماً قاتلی هسته که اندیِ زنا ره بکوشته. اندی اینتا آسنی ره رییس وسّه تعریف کنده ولی رییس که نخانه وه آزاد بوو، شونه جوون ریکا ره کاشنه و اندی ره هم دمدنه انفرادی.
اندی اَی شه رابطه ره رییس جه خار کنده و ونه اعتماد ره بدست یارنه. وه رییسِ مدارک و ونه لباس و… گیرنه و اتا تونل که تموم این سالها شه سلول دله در-ساته جه فرار کنده و زندون جه درشونه.
رِد هم چن وقت په عفو خرنه و آزاد وونه و سرنخهایی که اندی ونه خَوِری هدا بییه جه موفق وونه وه ره [[مکزیک]] دله پیدا هاکنه و دِ-به-دِ اونجه اتا نو زندگی ره از سر شروع کنّه.
== منابع ==
{{پانویس}}
[[رج:۱۹۹۴ فیلمون]]
[[رج:آمریکایی فیلمون]]
[[رج:انگلیسی فیلمون]]
[[رج:جنایی فیلمون]]
ibnyvsx6oydd1c69l7cbfc18mops8nz
مورگان فریمن
0
46600
389850
189514
2026-07-10T10:34:55Z
محک
1023
389850
wikitext
text/x-wiki
{{Infobox person
| name = Morgan Freeman
| image = Morgan Freeman at The Pentagon on 2 August 2023 - 230802-D-PM193-3363 (cropped).jpg
| caption = ونه عکس که سال ۲۰۲۳ شنه
| birth_name =
| birth_date = {{Birth date and age|1937|6|1}}
| birth_place = [[ممفیس، تنسی]]، آمریکا.
| death_date =
| death_place =
| education = [[Broad Street High School]]
| organization = [[Revelations Entertainment]]
| spouse = {{unbulleted list|{{marriage|Jeanette Adair Bradshaw|1967|1979|end=divorced}}|{{marriage|Myrna Colley-Lee|1984|2010|end=divorced}}}}
| occupation =
| years_active = ۱۹۶۴–تاسا
| works =
| awards =
| module2 = [[File:Morgan freeman bbc radio4 film programme 12 09 2008 b00dbcdn.flac|center]]Morgan Freeman's voice from BBC Radio 4's ''[[The Film Programme]]''، September 12، 2008.<ref>{{cite episode | url=http://www.bbc.co.uk/programmes/b00dbcdn | title=12/09/2008 | date=September 12، 2008 | access-date=January 18، 2014 | series=The Film Programme | station=BBC Radio 4 | archive-url=https://web.archive.org/web/20110204180033/http://www.bbc.co.uk/programmes/b00dbcdn | archive-date=February 4، 2011 | url-status=live }}</ref>
| children = چارتا
| module = {{Infobox military person
| embed = اره
| embed_title = Military service
| allegiance = {{US}}
| branch = {{air force|US}}
| branch_label =
| serviceyears = 1955–1959
| rank = [[File:E3 USAF AM1.svg|25px]] [[ایرمن فرست کلاس]]
| unit =
| awards =
}}
}}
'''مورگان فریمن'''<ref name=":0">{{Cite magazine|last1=Ross|first1=Harold Wallace|last2=White|first2=Katharine Sergeant Angell|others=[My grandmother] had been married to Morgan Herbert Freeman، and my father was Morgan Porterfield Freeman، but they forgot to give me a middle name.|date=July 3، 1978|title=Interview with Morgan Freeman|magazine=The New Yorker|url=https://books.google.com/books?id=l74eAQAAMAAJ&q=Morgan+Porterfield+Freeman|url-status=live|access-date=March 20، 2021|archive-date=March 20، 2021|archive-url=https://web.archive.org/web/20210320141310/https://books.google.co.uk/books?id=l74eAQAAMAAJ&dq=%22+my+father+was+Morgan+Porterfield+Freeman%2C+but+they+forgot+to+give+me+a+middle+name%22&q=Morgan+Porterfield+Freeman&redir_esc=y}}</ref> (بزائهی ۱ ژوئن ۱۹۳۷) اتا آمریکایی بازیگر و تهیهکننده هسته. وه شه خار صدا جه و خاصِ شخصیت وسّه بشناسی وونه. وه حدود پنج دهه فیلم بازی کنده و خله جوایز و تحسینها ره بدست بیارده که وشون دله اتا [[اوسکار جایزه]] و [[گولدن گلوب]] هم دره.
وه [[تنسی]] ایالت، [[ممفیس]] شهر دله دنیا بمو و همین شهر دله درس بخوندسته و مدرسهیِ نمایشنومهئون دله شرکت کرده و همونجه جه ونه دل دگرسته که بازیگر بوو و دانشگاه هم بورده [[لوس آنجلس]] و اونجه تیاتر درس ره بخونسته. وه دهه ۱۹۷۰ اتا وَچهگونه برنومه دله جه شه کار ره شروع هاکرده و بعداً [[ویلیام شکسپیر]] دِتا آسنی ره تیاتر دله بازی هاکرده که اتا جایزه هم ون سر بیته. سال ۱۹۷۸ وه اتا تیاتر ِنقش وسّه [[تونی جایزه]] ره کاندید بیّه.
وه تیاتر جه بمو سینما و خله فیلم بازی هاکرده. فیلمی که ونجه اوسکار بیته ''[[میلیون دلار بیبی]]'' (۲۰۰۴) بییه ولی ''[[استریت اسمارت]]'' (۱۹۸۷)، ''[[درایوینگ میس دیزی]]'' (۱۹۸۹)، ''دِ [[شاوشنک ردمپشن]]'' (۱۹۹۴) و ''[[اینویکتوس]]'' (۲۰۰۹) وسّه هم اوسکارِ کاندید بئیبییه. ونه دیگر مشهورِ نقشها جه ''[[گلوری (۱۹۸۹)|گلوری]]'' (۱۹۸۹)، ''[[لین آن می]]'' (۱۹۸۹)، ''[[رابین هود: پرنس آف تیوس]]'' (۱۹۹۱)، ''[[آنفورگیون]]'' (۱۹۹۲)، ''[[سون (۱۹۹۵)|سِۆِن]]'' (۱۹۹۵)، ''[[آمیستاد]]'' (۱۹۹۷)، ''[[گان بیبی گان]]'' (۲۰۰۷)، ''دِ [[باکت لیست]]'' (۲۰۰۷)، [[بتمن]] ِسهگانه، ''[[وانتد (۲۰۰۸)|وانتِد]]'' (۲۰۰۸)، ''[[رد (۲۰۱۰)|رِد]]'' (۲۰۱۰)، ''[[اوبلیویون|اوبلیویون]]'' (۲۰۱۳)، ''[[نو یو سی می]]'' (۲۰۱۳)، ''[[لوسی (۲۰۱۴)|لوسی]]'' (۲۰۱۴) و ''[[گوئینگ این استایل]]'' (۲۰۱۷) هستنه.
== منابع ==
* انگلیسی ویکیپدیا
{{پانویس}}
[[رج:امریکا بازیگرون]]
[[رج:زننه آدمون]]
cganbvs092g2aapi2lasm58v5k5g092
کودا
0
47001
389837
190698
2026-07-10T09:53:40Z
محک
1023
389837
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس=File:Coda poster.jpeg
}}
'''''کودا''''' {{انگلیسی جه|Coda}} اتا [[آمریکا]]یی فیلم هسته که سال ۲۰۲۱ [[شان هیدر]] بساته. این کمدی-درام فیلم که [[اوسکار جایزه]] ره هم بیته، اتا کیجا ره سِراق دِنه که ونه پییر، مار و برار همه لال-غول هستنه و وه فقط تونده شه خانواده دله بشنوئه و گپ بزنه. وه مدرسه دله آواز خوندنه و این سال دله ونه دانشگاهِ انتخاب هاکنه و ونه خانواده که خله ونه محتاج هستنه، نتونّه بدون وه شه زندگی ره دمباله بیرن...
== منابع ==
{{پهنویس}}
[[رج:آمریکایی فیلمون]]
[[رج:درام فیلمون]]
[[رج:اوسکار بیته فیلمون]]
[[رج:۲۰۲۱ فیلمون]]
kezgaukcxnn8yatq7n1mlr04mu5qsw4
شهرداری نوشهر
0
52567
389854
283997
2026-07-10T11:19:42Z
~2026-36780-53
46007
/* */
389854
wikitext
text/x-wiki
{{جعبه باشگاه فوتبال|نام باشگاه=شهرداری نوشهر|تصویر= NowShahr Futval Tim.png|نام کامل=باشگاه فرهنگی ورزشی شهرداری نوشهر|لقب=|تأسیس=[[۱۳۸۹ (خورشیدی)|۱۳۸۹]]|ورزشگاه=[[ورزشگاه شهدا نوشهر|شهدای نوشهر]]|گنجایش=۴۰۰۰ نفر|مالک=[[شهرداری نوشهر]]|مدیریت=[[عادل
خزایی پول]]|لیگ=[[لیگ دسته دوم فوتبال ایران|لیگ دو]]|فصل=۱۴۰۲-۱۴۰۳|رتبه= دوم(گروه دوم)(صعود به لیگ آزادگان در پلی آف)|الگوی دست چپ۱=|الگوی بدن۱=|الگوی دست راست۱=|دست چپ۱=0945A6|بدن۱=0945A6|دست راست۱=0945A6|شلوارک۱=۰۰۰۰۰۰|جوراب۱=0945A6|الگوی دست چپ۲=|الگوی بدن۲=|الگوی دست راست۲=|دست چپ۲=۰۰۰۰۰۰|بدن۲=۰۰۰۰۰۰|دست راست۲=۰۰۰۰۰۰|شلوارک۲=۰۰۰۰۰۰|جوراب۲=۰۰۰۰۰۰|سرمربی=}}
'''شهرداری نوشهر''' اتا فوتوال تیم هسته که [[نوشهر]] شنه و وه ره شورای شهر بساته.<ref>{{یادکرد وب|عنوان=احیای فوتبال نوشهر؛ با نام شهرداری و توسط یک پرسپولیسی|نشانی=https://khabarvarzeshi.com/x4KBD|ناشر=[[خبر ورزشی]]|تاریخ بازبینی=13 می 2023|کد زبان=fa|تاریخ=۶ آگوست ۲۰۲۱}}</ref>
این شهر قدیم [[شموشک نوشهر]] ره داشته که لیگ برتر جه دکته و ونه جا ره است شهرداری تیم ور کنده.
سال ۱۴۰۲ نوشهر باشگاه [[لیگ دسته یک]] ره صعود هاکرده و بجور بمو.<ref>[https://www.irna.ir/news/85499918/%D8%B3%D9%84%D8%A7%D9%85-%D9%86%D9%88%D8%B4%D9%87%D8%B1%DB%8C-%D9%87%D8%A7-%D8%A8%D9%87-%D9%84%DB%8C%DA%AF-%DB%8C%DA%A9-%D9%81%D9%88%D8%AA%D8%A8%D8%A7%D9%84-%DA%A9%D8%B4%D9%88%D8%B1 ایرنا]</ref>
== منابع ==
{{پانویس}}
[[رده:نوشهر شهرداری]]
[[رده:نوشهر شهرستان]]
[[رج:ایران فوتوال تیمون]]
mufsm71d81fx779ss42104j03ifn6g7
شلبی اوکس
0
65409
389843
328173
2026-07-10T09:56:58Z
محک
1023
389843
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس= File:Shelby_Oaks.jpg
}}
'''شلبی اوکس''' ([[اینگلیسی زوون|اینگلیسی]] جه: ''Shelby Oaks'') ات ۲۰۲۴ بسات بئی [[آمریکای متحده ایالات|آمریکایی]]، سوپر-نچرالِ ترسناک و معمایی فیلم هسّه کا [[کریس استاکمن|کریس اِستاکمَن]] (''Chris Stuckmann'') دسِّ جه بنویشته، [[کارگردون|کارگردونی]] و تهیهکری بیّه. اینتا فیلم ونه یَتِّمین بِلِند فیلم بساتن هسّه.
شِلبی اُکس یتمین کَش ۲۰۲۴ جولای مایِ ۲۰، [[فنتیژا بین المللی فیلم فستیوال|فنتیژا فیلم فستیوالِ]] دله شه عمومی نمایش ره داشته، ۲۰۲۵ اکتبر مای ۲۴، نیئون (''Neon''؛ اتِ آمریکایی فیلم توزیعکَر کومپانی) اینتا فیلم ره آمریکای سینمائون وسّه بریم هدائه،<ref>DiVincenzo, Alex (September 5, 2026). [https://bloody-disgusting.com/movie/3898427/chris-stuckmanns-shelby-oaks-poster-unleashes-an-unknown-evil/ "Chris Stuckmann's 'Shelby Oaks' Poster Unleashes an Unknown Evil"]. [[:en:Bloody_Disgusting|Bloody Disgusting]]. </ref> اینتا فیلم ۸ میلیون آمریکای [[دولار|دلار]] بروته و نقدکرون اشش ونه سر ات جور نیّه.
== منبع ==
{{پهنویس}}
* ۳۰ نوروزه مایِ ۱۵۳۵ تبری، این ولگ [[:en:Shelby_Oaks|اینگلیسی ویکیپدیا]] جه ترجمه بیّه.
[[رج:۲۰۲۴ فیلمون]]
[[رج:ترسناک فیلمون]]
nsbzz60rww1pjbyvyypn2a1flb8bh5c
389844
389843
2026-07-10T09:57:21Z
محک
1023
[[رج:آمریکایی فیلمون]] اضافه شد با استفاده از [[ویکیپدیا:رجساز]]
389844
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس= File:Shelby_Oaks.jpg
}}
'''شلبی اوکس''' ([[اینگلیسی زوون|اینگلیسی]] جه: ''Shelby Oaks'') ات ۲۰۲۴ بسات بئی [[آمریکای متحده ایالات|آمریکایی]]، سوپر-نچرالِ ترسناک و معمایی فیلم هسّه کا [[کریس استاکمن|کریس اِستاکمَن]] (''Chris Stuckmann'') دسِّ جه بنویشته، [[کارگردون|کارگردونی]] و تهیهکری بیّه. اینتا فیلم ونه یَتِّمین بِلِند فیلم بساتن هسّه.
شِلبی اُکس یتمین کَش ۲۰۲۴ جولای مایِ ۲۰، [[فنتیژا بین المللی فیلم فستیوال|فنتیژا فیلم فستیوالِ]] دله شه عمومی نمایش ره داشته، ۲۰۲۵ اکتبر مای ۲۴، نیئون (''Neon''؛ اتِ آمریکایی فیلم توزیعکَر کومپانی) اینتا فیلم ره آمریکای سینمائون وسّه بریم هدائه،<ref>DiVincenzo, Alex (September 5, 2026). [https://bloody-disgusting.com/movie/3898427/chris-stuckmanns-shelby-oaks-poster-unleashes-an-unknown-evil/ "Chris Stuckmann's 'Shelby Oaks' Poster Unleashes an Unknown Evil"]. [[:en:Bloody_Disgusting|Bloody Disgusting]]. </ref> اینتا فیلم ۸ میلیون آمریکای [[دولار|دلار]] بروته و نقدکرون اشش ونه سر ات جور نیّه.
== منبع ==
{{پهنویس}}
* ۳۰ نوروزه مایِ ۱۵۳۵ تبری، این ولگ [[:en:Shelby_Oaks|اینگلیسی ویکیپدیا]] جه ترجمه بیّه.
[[رج:۲۰۲۴ فیلمون]]
[[رج:ترسناک فیلمون]]
[[رج:آمریکایی فیلمون]]
9w5kqxzkh5q7zrgv8lua44i17yzumut
فیوریوسا: مد مکس ساگا
0
86904
389848
247427
2026-07-10T09:59:19Z
محک
1023
389848
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس= File:Furiosa A Mad Max Saga.jpg
}}
'''فیوریوسا: مد مکس ساگا''' (به انگلیسی: Furiosa: A Mad Max Saga) اتا آمریکایی فیلم هسته که[[مد مکس]] دمبالسر، سال ۲۰۲۴ بساتنه. [[جورج میلر]] ونه کارگردان بییه و [[آنیا تیلور جوی]] اصلی نقش ره داشته.
== آسنی ==
دنیا رقد بورده و خشکی و قحطی همه جا ره سر هایته. فقط بعضی خورد-خورد آبادی باقی هستنه که مخفی زندگی کننه. اتا پچیک کیجا، فیوریوسا، که اتا آبادی دله دره ره صحراشو موتور سوارون دزدنّه و ورنه. کیجای مار وشون دمبالسر شونه و ویشترشون ره کاشنه و کیجا ره هر طریقی هسته در ورنه ولی شه تله کفنه و موتورسوارون رییس، دمنتوس، وه ره صلیب کشنه و اینتی کیجا که فرار هاکرد بییه، ورگردنه مار وری و ای اسیر وونه.
دمنتوس کیجا بال ره وندنه و وه ره اسیر گیرنه ولی کیجا مقار ننه که ونه سره کمین وری هسته. موتورسوارون اتا مجموعه شهرون (که ونه نیشتگا سیتادل هسته) جا درگیر وونه و اتا توافقنومه وندنه که اتا شرط این هسته که فیوریوسا بئه سیتادل شهر و حرمسرای زنان جه بوو. فیوریوسا شه ره مرد واری دریارنه و شهر دله پیشرفت کنده تا راهی پیدا هاکنه که دربوره ولی....
== منابع ==
{{پهنویس}}
[[رج:۲۰۲۴ فیلمون]]
[[رج:مد مکس]]
[[رج: آمریکایی فیلمون]]
[[رج:آخرالزمانی فیلمون]]
[[رج:انگلیسی فیلمون]]
gdj4k5ty1rluxisx55fhxhjfx950hpv
389849
389848
2026-07-10T10:00:29Z
محک
1023
389849
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس= File:Furiosa A Mad Max Saga.jpg
}}
'''فیوریوسا: مد مکس ساگا''' (به انگلیسی: Furiosa: A Mad Max Saga) اتا آمریکایی فیلم هسته که ''[[مد مکس]]'' دمبالسر، سال ۲۰۲۴ بساتنه. [[جورج میلر]] ونه کارگردان بییه و [[آنیا تیلور جوی]] اصلی نقش ره داشته.
== آسنی ==
دنیا رقد بورده و خشکی و قحطی همه جا ره سر هایته. فقط بعضی خورد-خورد آبادی باقی هستنه که مخفی زندگی کننه. اتا پچیک کیجا، فیوریوسا، که اتا آبادی دله دره ره صحراشو موتور سوارون دزدنّه و ورنه. کیجای مار وشون دمبالسر شونه و ویشترشون ره کاشنه و کیجا ره هر طریقی هسته در ورنه ولی شه تله کفنه و موتورسوارون رییس، دمنتوس، وه ره صلیب کشنه و اینتی کیجا که فرار هاکرد بییه، ورگردنه مار وری و ای اسیر وونه.
دمنتوس کیجا بال ره وندنه و وه ره اسیر گیرنه ولی کیجا مقار ننه که ونه سره کمین وری هسته. موتورسوارون اتا مجموعه شهرون (که ونه نیشتگا سیتادل هسته) جا درگیر وونه و اتا توافقنومه وندنه که اتا شرط این هسته که فیوریوسا بئه سیتادل شهر و حرمسرای زنان جه بوو. فیوریوسا شه ره مرد واری دریارنه و شهر دله پیشرفت کنده تا راهی پیدا هاکنه که دربوره ولی....
== منابع ==
{{پهنویس}}
[[رج:۲۰۲۴ فیلمون]]
[[رج:مد مکس]]
[[رج: آمریکایی فیلمون]]
[[رج:آخرالزمانی فیلمون]]
[[رج:انگلیسی فیلمون]]
0c6ay4a4loakf2kh8jefcfvjs2zzjof
رج:2010s American film posters
14
93415
389806
279780
2026-06-25T07:39:34Z
en>Jevansen
0
Copying from [[Category:American film posters]] to [[Category:2010s film posters]] using [[c:Help:Cat-a-lot|Cat-a-lot]]
389806
wikitext
text/x-wiki
{{Category series navigation}}
{{Automatic category TOC}}
__NOGALLERY__
[[Category:2010s American films|Ω]]
[[Category:American film posters| ]]
[[Category:2010s film posters| ]]
mfbxajrq02h49g4ui8cg48pzxi0mjti
389807
389806
2026-07-10T09:32:41Z
محک
1023
۱ نسخه واردشده از [[:en:Category:2010s_American_film_posters]]: File:TheMaster2012Poster.jpg
389806
wikitext
text/x-wiki
{{Category series navigation}}
{{Automatic category TOC}}
__NOGALLERY__
[[Category:2010s American films|Ω]]
[[Category:American film posters| ]]
[[Category:2010s film posters| ]]
mfbxajrq02h49g4ui8cg48pzxi0mjti
رج:2020s American film posters
14
93421
389822
279800
2026-06-25T07:39:29Z
en>Jevansen
0
Copying from [[Category:American film posters]] to [[Category:2020s film posters]] using [[c:Help:Cat-a-lot|Cat-a-lot]]
389822
wikitext
text/x-wiki
{{Category series navigation}}
{{Automatic category TOC}}
__NOGALLERY__
[[Category:2020s American films|Ω]]
[[Category:American film posters| ]]
[[Category:2020s film posters| ]]
a0a3h402xowbseblo386hw8s27m4fki
389823
389822
2026-07-10T09:41:37Z
محک
1023
۱ نسخه واردشده از [[:en:Category:2020s_American_film_posters]]
389822
wikitext
text/x-wiki
{{Category series navigation}}
{{Automatic category TOC}}
__NOGALLERY__
[[Category:2020s American films|Ω]]
[[Category:American film posters| ]]
[[Category:2020s film posters| ]]
a0a3h402xowbseblo386hw8s27m4fki
ماژول:Params
828
112844
389788
328761
2026-07-09T20:14:58Z
Grufo
45757
[[:mw:Module:Params|Upstream]] updates
389788
Scribunto
text/plain
require[[strict]]
--- ---
--- PRIVATE ENVIRONMENT ---
--- ________________________________ ---
--- ---
--[[ Abstract utilities ]]--
----------------------------
-- Helper function for `string.gsub()` (for managing zero-padded numbers)
local function zero_padded (str)
return ('%03d%s'):format(#str, str)
end
-- Helper function for `table.sort()` (for natural sorting)
local function natural_sort (var1, var2)
return var1:gsub('%d+', zero_padded) < var2:gsub('%d+', zero_padded)
end
-- Return a copy or a reference to a table
local function copy_or_ref_table (src, refonly)
if refonly then return src end
local newtab = {}
for key, val in pairs(src) do newtab[key] = val end
return newtab
end
-- Remove some numeric elements from a table, shifting everything to the left
local function remove_numeric_keys (tbl, idx, len)
local cache, tmp = {}, idx + len - 1
for key, val in pairs(tbl) do
if type(key) == 'number' and key >= idx then
if key > tmp then cache[key - len] = val end
tbl[key] = nil
end
end
for key, val in pairs(cache) do tbl[key] = val end
end
-- Make a reduced copy of a table (shifting in both directions if necessary)
local function copy_table_reduced (tbl, idx, len)
local ret, tmp = {}, idx + len - 1
if idx > 0 then
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key < idx then
ret[key] = val
elseif key > tmp then ret[key - len] = val end
end
elseif tmp > 0 then
local nshift = 1 - idx
for key, val in pairs(tbl) do
if type(key) ~= 'number' then ret[key] = val
elseif key > tmp then ret[key - tmp] = val
elseif key < idx then ret[key + nshift] = val end
end
else
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key > tmp then
ret[key] = val
elseif key < idx then ret[key + len] = val end
end
end
return ret
end
-- Make an expanded copy of a table (shifting in both directions if necessary)
local function copy_table_expanded (tbl, idx, len)
local ret, tmp = {}, idx + len - 1
if idx > 0 then
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key < idx then
ret[key] = val
else ret[key + len] = val end
end
elseif tmp > 0 then
local nshift = idx - 1
for key, val in pairs(tbl) do
if type(key) ~= 'number' then ret[key] = val
elseif key > 0 then ret[key + tmp] = val
elseif key < 1 then ret[key + nshift] = val end
end
else
for key, val in pairs(tbl) do
if type(key) ~= 'number' or key > tmp then
ret[key] = val
else ret[key - len] = val end
end
end
return ret
end
-- Given a table, create two new tables containing the sorted list of keys
local function get_key_list_sorted (tbl, sort_fn)
local nums, words, nn, nw = {}, {}, 0, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
nn = nn + 1
nums[nn] = key
else
nw = nw + 1
words[nw] = key
end
end
table.sort(nums)
table.sort(words, sort_fn)
return nums, words, nn, nw
end
-- Parse a parameter name string and return it as a string or a number
local function get_parameter_name (par_str)
local ret = par_str:match'^%s*(.-)%s*$'
if ret ~= '0' and ret:find'^%-?[1-9]%d*$' == nil then return ret end
return tonumber(ret)
end
-- Move a key from a table to another, but only if under a different name and
-- always parsing numeric strings as numbers
local function steal_if_renamed (val, src, skey, dest, dkey)
local realkey = get_parameter_name(dkey)
if skey ~= realkey then
dest[realkey] = val
src[skey] = nil
end
end
--[[ Public strings ]]--
------------------------
-- Special match keywords (functions and modifiers MUST avoid these names)
local mkeywords = {
['or'] = 0,
pattern = 1,
plain = 2,
strict = 3
}
-- Sort functions (functions and modifiers MUST avoid these names)
local sortfunctions = {
alphabetically = false,
naturally = natural_sort
}
-- Callback styles for the `mapping_*` and `renaming_*` class of modifiers
-- (functions and modifiers MUST avoid these names)
--[[
Meanings of the columns:
col[1] = Loop type (0-3)
col[2] = Number of module arguments that the style requires (1-3)
col[3] = Minimum number of sequential parameters passed to the callback
col[4] = Name of the callback parameter where to place each parameter name
col[5] = Name of the callback parameter where to place each parameter value
col[6] = Argument in the modifier's invocation that will override `col[4]`
col[7] = Argument in the modifier's invocation that will override `col[5]`
A value of `-1` indicates that no meaningful value is stored (i.e. `nil`)
]]--
local mapping_styles = {
names_and_values = { 3, 2, 2, 1, 2, -1, -1 },
values_and_names = { 3, 2, 2, 2, 1, -1, -1 },
values_only = { 1, 2, 1, -1, 1, -1, -1 },
names_only = { 2, 2, 1, 1, -1, -1, -1 },
names_and_values_as = { 3, 4, 0, -1, -1, 2, 3 },
names_only_as = { 2, 3, 0, -1, -1, 2, -1 },
values_only_as = { 1, 3, 0, -1, -1, -1, 2 },
blindly = { 0, 2, 0, -1, -1, -1, -1 }
}
-- Memory slots (functions and modifiers MUST avoid these names)
local memoryslots = {
h = 'header',
f = 'footer',
i = 'itersep',
l = 'lastsep',
n = 'ifngiven',
p = 'pairsep',
s = 'oxfordsep'
}
-- Possible trimming modes for the `parsing` modifier
local trim_parse_opts = {
trim_none = { false, false },
trim_positional = { false, true },
trim_named = { true, false },
trim_all = { true, true }
}
-- Possible string modes for the iteration separator in the `parsing` and
-- `reinterpreting` modifiers
local isep_parse_opts = {
splitter_pattern = false,
splitter_string = true
}
-- Possible string modes for the key-value separator in the `parsing` and
-- `reinterpreting` modifiers
local psep_parse_opts = {
setter_pattern = false,
setter_string = true
}
-- Possible position references for the `splicing` modifier
local position_references = {
add_nothing = 0,
add_smallest_number = 1,
add_last_of_sequence = 2,
add_largest_number = 3
}
-- Functions and modifiers MUST avoid these names too: `let`, `here`,
-- `in_substack`, `without_sorting`
--[[ Private constants ]]--
---------------------------
-- Hard-coded name of the module (to avoid going through `frame:getTitle()`)
local modulename = 'Module:Params'
-- The functions listed here declare that they don't need the `frame.args`
-- metatable to be copied into a regular table; if they are modifiers they also
-- guarantee that they will make their own (modified) copy available
local refpipe = {
call_for_each_group = true,
--coins = true,
count = true,
evaluating = true,
for_each = true,
list = true,
list_values = true,
list_maybe_with_names = true,
value_of = true
}
-- The functions listed here declare that they don't need the
-- `frame:getParent().args` metatable to be copied into a regular table; if
-- they are modifiers they also guarantee that they will make their own
-- (modified) copy available
local refparams = {
call_for_each_group = true,
combining = true,
combining_by_calling = true,
combining_values = true,
concat_and_call = true,
concat_and_invoke = true,
concat_and_magic = true,
count = true,
grouping_by_calling = true,
mixing_names_and_values = true,
renaming_by_mixing = true,
renaming_to_sequence = true,
renaming_to_uppercase = true,
renaming_to_lowercase = true,
--renaming_to_values = true,
shifting = true,
splicing = true,
--swapping_names_and_values = true,
value_of = true,
with_name_matching = true
}
-- Maximum number of numeric parameters that can be filled, if missing (we
-- chose an arbitrary number for this constant; you can discuss about its
-- optimal value at Module talk:Params)
local maxfill = 1024
-- The private table of functions
local library = {}
-- Functions and modifiers that can only be invoked in first position
local static_iface = {}
--[[ Private functions ]]--
---------------------------
-- Create a new context
local function context_new (child_frame)
local ctx = {}
ctx.frame = child_frame:getParent()
ctx.opipe = child_frame.args
ctx.oparams = ctx.frame.args
ctx.firstposonly = static_iface
ctx.iterfunc = pairs
ctx.sorttype = 0
ctx.n_parents = 0
ctx.n_children = 0
ctx.n_available = maxfill
return ctx
end
-- Move to the next action within the user-given list
local function context_iterate (ctx, n_forward)
local nextfn
if ctx.pipe[n_forward] ~= nil then
nextfn = ctx.pipe[n_forward]:match'^%s*(.*%S)'
end
if nextfn == nil then error(modulename ..
': You must specify a function to call', 0) end
if library[nextfn] == nil then
if ctx.firstposonly[nextfn] == nil then error(modulename ..
': The function ‘' .. nextfn .. '’ does not exist', 0)
else error(modulename .. ': The ‘' .. nextfn ..
'’ directive can only appear in first position', 0)
end
end
remove_numeric_keys(ctx.pipe, 1, n_forward)
return library[nextfn]
end
-- Main loop
local function main_loop (ctx, start_with)
local fn = start_with
repeat fn = fn(ctx) until not fn
if ctx.n_parents > 0 then error(modulename ..
': One or more ‘merging_substack’ directives are missing', 0) end
if ctx.n_children > 0 then error(modulename ..
', For some of the snapshots either the ‘flushing’ directive is missing or a group has not been properly closed with ‘merging_substack’', 0) end
end
-- Load a `setting`-like directive string into the `dest` table
local function set_strings (dest, opts, start_from)
local cmd
if opts[start_from] == nil then return start_from - 1 end
cmd = opts[start_from]:gsub('%s+', ''):gsub('/+', '/')
:match'^/*(.*[^/])'
if cmd == nil then return start_from end
local amap, sep, argc = {}, string.byte('/'), start_from + 1
local vname
local chr
for idx = 1, #cmd do
chr = cmd:byte(idx)
if chr == sep then
for key, val in ipairs(amap) do
dest[val] = opts[argc]
amap[key] = nil
end
argc = argc + 1
else
vname = memoryslots[string.char(chr)]
if vname == nil then error(modulename ..
', ‘setting’: Unknown slot ‘' ..
string.char(chr) .. '’', 0) end
table.insert(amap, vname)
end
end
for key, val in ipairs(amap) do dest[val] = opts[argc] end
return argc
end
-- Add a new stack of parameters to `ctx.children`
local function new_substack (ctx)
local newparams = {}
local currsnap = ctx.n_children + 1
if ctx.children == nil then ctx.children = { newparams }
else ctx.children[currsnap] = newparams end
ctx.n_children = currsnap
return newparams
end
-- Parse a raw argument containing a `sortfunctions` directive, or
-- `'without_sorting'`, or `nil`
local function load_sort_opt (raw_arg)
if raw_arg == nil then return nil, 1, false end
local tmp = raw_arg:match'^%s*(.-)%s*$'
if tmp == 'without_sorting' then return nil, 2, false end
tmp = sortfunctions[tmp]
if tmp == nil then return nil, 1, false end
return tmp or nil, 2, true
end
-- Parse optional user arguments of type `...|[let]|[...][number of additional
-- parameters]|[parameter 1]|[parameter 2]|[...]`
local function load_child_opts (src, start_from, append_after)
local tbl, pin = {}, start_from
local tnamed
while src[pin] ~= nil and src[pin]:match'^%s*let%s*$' and
src[pin + 1] ~= nil and src[pin + 2] ~= nil
do
tbl[get_parameter_name(src[pin + 1])] = src[pin + 2]
pin = pin + 3
end
if pin ~= start_from then tnamed, tbl = tbl, {} end
local tmp = tonumber(src[pin])
if tmp ~= nil and math.floor(tmp) == tmp then
if tmp < 0 then tmp = -1 end
local shf = append_after - pin
for idx = pin + 1, pin + tmp do tbl[idx + shf] = src[idx] end
pin = pin + tmp + 1
end
if tnamed ~= nil then
for key, val in pairs(tnamed) do tbl[key] = val end
end
return tbl, pin
end
-- Load the optional arguments of some of the `mapping_*` and `renaming_*`
-- class of modifiers
local function load_callback_opts (src, n_skip, default_style)
local style
local shf
local tmp = src[n_skip + 1]
if tmp ~= nil then style = mapping_styles[tmp:match'^%s*(.-)%s*$'] end
if style == nil then style, shf = default_style, n_skip - 1
else shf = n_skip end
local n_exist, karg, varg = style[3], style[4], style[5]
tmp = style[6]
if tmp > -1 then
karg = src[tmp + shf]:match'^%s*(.-)%s*$'
if karg == '0' or karg:find'^%-?[1-9]%d*$' ~= nil then
karg = tonumber(karg)
n_exist = math.max(n_exist, karg)
end
end
tmp = style[7]
if tmp > -1 then
varg = src[tmp + shf]:match'^%s*(.-)%s*$'
if varg == '0' or varg:find'^%-?[1-9]%d*$' ~= nil then
varg = tonumber(varg)
n_exist = math.max(n_exist, varg)
end
end
local dest, nargs = load_child_opts(src, style[2] + shf, n_exist)
tmp = style[1]
if (tmp == 3 or tmp == 2) and dest[karg] ~= nil then
tmp = tmp - 2 end
if (tmp == 3 or tmp == 1) and dest[varg] ~= nil then
tmp = tmp - 1 end
return dest, nargs, tmp, karg, varg
end
-- Parse the arguments of some of the `mapping_*` and `renaming_*` class of
-- modifiers
local function load_replace_args (opts, whoami)
if opts[1] == nil then error(modulename ..
', ‘' .. whoami .. '’: No pattern string was given', 0) end
if opts[2] == nil then error(modulename ..
', ‘' .. whoami .. '’: No replacement string was given', 0) end
local ptn, repl, nmax, argc = opts[1], opts[2], tonumber(opts[3]), 3
if nmax ~= nil or (opts[3] or ''):match'^%s*$' ~= nil then argc = 4 end
local flg = opts[argc]
if flg ~= nil then flg = mkeywords[flg:match'^%s*(.-)%s*$'] end
if flg == 0 then flg = nil elseif flg ~= nil then argc = argc + 1 end
return ptn, repl, nmax, flg, argc, (nmax ~= nil and nmax < 1) or
(flg == 3 and ptn == repl)
end
-- Parse the arguments of the `with_*_matching` class of modifiers
local function load_pattern_args (opts, whoami)
local ptns, state, nptns, cnt = {}, 0, 0, 1
local keyw
for _, val in ipairs(opts) do
if state == 0 then
nptns, state = nptns + 1, -1
ptns[nptns] = { val, false, false }
else
keyw = val:match'^%s*(.*%S)'
if keyw == nil or mkeywords[keyw] == nil or (
state > 0 and mkeywords[keyw] > 0
) then break
else
state = mkeywords[keyw]
if state > 1 then ptns[nptns][2] = true end
if state == 3 then ptns[nptns][3] = true end
end
end
cnt = cnt + 1
end
if state == 0 then error(modulename .. ', ‘' .. whoami ..
'’: No pattern was given', 0) end
return ptns, nptns, cnt
end
-- Load the optional arguments of the `parsing`, `reinterpreting` and
-- `evaluating` modifiers
local function load_parse_opts (opts, start_from, isp, psp)
local tmp
local optslots, noptslots, argc = { true, true, true }, 3, start_from
local trimn, trimu, iplain, pplain = true, false, true, true
repeat
noptslots, tmp = noptslots - 1, opts[argc]
if tmp == nil then break end
tmp = tmp:match'^%s*(.-)%s*$'
if optslots[1] ~= nil and trim_parse_opts[tmp] ~= nil then
tmp = trim_parse_opts[tmp]
trimn, trimu = tmp[1], tmp[2]
optslots[1] = nil
elseif optslots[2] ~= nil and isep_parse_opts[tmp] ~= nil then
argc = argc + 1
iplain, isp = isep_parse_opts[tmp], opts[argc]
optslots[2] = nil
elseif optslots[3] ~= nil and psep_parse_opts[tmp] ~= nil then
argc = argc + 1
pplain, psp = psep_parse_opts[tmp], opts[argc]
optslots[3] = nil
else break end
argc = argc + 1
until noptslots < 1
return isp, iplain, psp, pplain, trimn, trimu, argc
end
-- Map parameters' values using a custom callback and a referenced table
local value_maps = {
[0] = function (tbl, margs, karg, varg, fn)
for key in pairs(tbl) do tbl[key] = fn() end
end,
[1] = function (tbl, margs, karg, varg, fn)
for key, val in pairs(tbl) do
margs[varg] = val
tbl[key] = fn()
end
end,
[2] = function (tbl, margs, karg, varg, fn)
for key in pairs(tbl) do
margs[karg] = key
tbl[key] = fn()
end
end,
[3] = function (tbl, margs, karg, varg, fn)
for key, val in pairs(tbl) do
margs[karg] = key
margs[varg] = val
tbl[key] = fn()
end
end
}
-- Private table for `map_names()`
local name_thieves = {
[0] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[1] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[varg] = val
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[2] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[karg] = key
steal_if_renamed(val, tbl, key, cache, fn())
end
end,
[3] = function (cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(tbl) do
rargs[karg] = key
rargs[varg] = val
steal_if_renamed(val, tbl, key, cache, fn())
end
end
}
-- Map parameters' names using a custom callback and a referenced table
local function map_names (tbl, rargs, karg, varg, looptype, fn)
local cache = {}
name_thieves[looptype](cache, tbl, rargs, karg, varg, fn)
for key, val in pairs(cache) do tbl[key] = val end
end
-- Return a new table that contains `src` regrouped according to the numeric
-- suffixes in its keys
local function make_groups (src)
-- NOTE: `src` might be the original metatable!
local prefix
local gid
local groups = {}
for key, val in pairs(src) do
-- `key` must only be a string or a number...
if type(key) == 'string' then
prefix, gid = key:match'^%s*(.-)%s*(%-?%d*)%s*$'
gid = tonumber(gid) or ''
else
prefix = ''
gid = key
end
if groups[gid] == nil then groups[gid] = {} end
if prefix == '0' or prefix:find'^%-?[1-9]%d*$' ~= nil then
prefix = tonumber(prefix)
if prefix < 1 then prefix = prefix - 1 end
end
groups[gid][prefix] = val
end
return groups
end
-- Split into parts a string containing the `$#` and `$@` placeholders and
-- return the information as a skeleton table, a canvas table and a length
local function parse_placeholder_string (target)
local skel = {}
local canvas = {}
local idx = 1
local s_pos = 1
local e_pos = string.find(target, '%$[@#]', 1, false)
while e_pos ~= nil do
canvas[idx] = target:sub(s_pos, e_pos - 1)
skel[idx + 1] = target:sub(e_pos, e_pos + 1) == '$@'
idx = idx + 2
s_pos = e_pos + 2
e_pos = string.find(target, '%$[@#]', s_pos, false)
end
if (s_pos > target:len()) then idx = idx - 1
else canvas[idx] = target:sub(s_pos) end
return skel, canvas, idx
end
-- Populate a table by parsing a parameter string (heavy lifting for `parsing`,
-- `reinterpreting` and `evaluating`)
local function parse_parameter_string (tbl, str, isp, ipl, psp, ppl, trn, tru)
local key
local val
local spos1
local spos2
local pos1
local pos2
local pos3 = 0
local idx = 1
local lenplone = #str + 1
if isp == nil or isp == '' then
if psp == nil or psp == '' then
if tru then tbl[idx] = str:match'^%s*(.-)%s*$'
else tbl[idx] = str end
return idx
end
spos1, spos2 = str:find(psp, 1, ppl)
if spos1 == nil then
key = idx
if tru then val = str:match'^%s*(.-)%s*$'
else val = str end
idx = idx + 1
else
key = get_parameter_name(str:sub(1, spos1 - 1))
val = str:sub(spos2 + 1)
if trn then val = val:match'^%s*(.-)%s*$' end
end
tbl[key] = val
return idx
end
if psp == nil or psp == '' then
repeat
pos1 = pos3 + 1
pos2, pos3 = str:find(isp, pos1, ipl)
val = str:sub(pos1, (pos2 or lenplone) - 1)
if tru then val = val:match'^%s*(.-)%s*$' end
tbl[idx] = val
idx = idx + 1
until pos2 == nil
return idx
end
repeat
pos1 = pos3 + 1
pos2, pos3 = str:find(isp, pos1, ipl)
val = str:sub(pos1, (pos2 or lenplone) - 1)
spos1, spos2 = val:find(psp, 1, ppl)
if spos1 == nil then
key = idx
if tru then val = val:match'^%s*(.-)%s*$' end
idx = idx + 1
else
key = get_parameter_name(val:sub(1, spos1 - 1))
val = val:sub(spos2 + 1)
if trn then val = val:match'^%s*(.-)%s*$' end
end
tbl[key] = val
until pos2 == nil
return idx
end
-- Heavy lifting for `combining` and `combining_values`
local function combine_parameters (ctx, keyval_fn, whoami)
-- NOTE: `ctx.params` might be the original metatable! This function
-- MUST create a copy of it before returning
local opts = ctx.pipe
if ctx.pipe[1] == nil then error(modulename ..
', ‘' .. whoami .. '’: No parameter name was provided', 0) end
local tbl = ctx.params
local vars = {}
local sortfn, tmp, do_sort = load_sort_opt(opts[2])
local argc = set_strings(vars, opts, tmp + 1)
if argc < tmp then error(modulename ..
', ‘' .. whoami .. '’: No setting directive was given', 0) end
if next(tbl) == nil then
if vars.ifngiven ~= nil then
ctx.params = {
[get_parameter_name(ctx.pipe[1])] = vars.ifngiven
}
elseif tbl == ctx.oparams then ctx.params = {} end
return argc
end
local cache
local len
if do_sort then
local words
cache, words, len, tmp = get_key_list_sorted(tbl, sortfn)
for idx = 1, tmp do cache[len + idx] = words[idx] end
len = len + tmp
else
cache = {}
len = 0
for key in pairs(tbl) do
len = len + 1
cache[len] = key
end
end
local pmap, nss, kvs, pps = {}, 0, vars.pairsep or '', vars.itersep or ''
for idx = 1, len do
tmp = cache[idx]
pmap[nss + 1] = pps
pmap[nss + 2] = keyval_fn(tmp, tbl[tmp], kvs)
nss = nss + 2
end
tmp = vars.oxfordsep or vars.lastsep
if tmp ~= nil and nss > 4 then pmap[nss - 1] = tmp
elseif nss > 2 and vars.lastsep ~= nil then
pmap[nss - 1] = vars.lastsep
end
pmap[1] = vars.header or ''
if vars.footer ~= nil then pmap[nss + 1] = vars.footer end
ctx.params = { [get_parameter_name(ctx.pipe[1])] = table.concat(pmap) }
return argc
end
-- Concatenate the numeric keys from the table of parameters to the numeric
-- keys from the table of options; non-numeric keys from the table of options
-- will prevail over colliding non-numeric keys from the table of parameters
local function concat_params (ctx)
local retval, tbl, nmax = {}, ctx.params, table.maxn(ctx.pipe)
if ctx.subset == 1 then
-- We need only the sequence
for key, val in ipairs(tbl) do retval[key + nmax] = val end
else
if ctx.subset == -1 then
for key in ipairs(tbl) do tbl[key] = nil end
end
for key, val in pairs(tbl) do
if type(key) == 'number' and key > 0 then
retval[key + nmax] = val
else retval[key] = val end
end
end
for key, val in pairs(ctx.pipe) do retval[key] = val end
return retval
end
-- Flush the parameters by calling a custom function for each value (after this
-- function has been invoked `ctx.params` will be no longer usable)
local function flush_params (ctx, fn)
local tbl = ctx.params
if ctx.subset == 1 then
for key, val in ipairs(tbl) do fn(key, val) end
return
end
if ctx.subset == -1 then
for key, val in ipairs(tbl) do tbl[key] = nil end
end
if ctx.sorttype > 0 then
local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort)
if ctx.sorttype == 2 then
for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end
for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end
return
end
for idx = 1, nn do fn(nums[idx], tbl[nums[idx]]) end
for idx = 1, nw do fn(words[idx], tbl[words[idx]]) end
return
end
if ctx.subset ~= -1 then
for key, val in ipairs(tbl) do
fn(key, val)
tbl[key] = nil
end
end
for key, val in pairs(tbl) do fn(key, val) end
end
-- Flush the parameters by calling one of two custom functions for each value
-- (after this function has been invoked `ctx.params` will be no longer usable)
local function mixed_flush_params (ctx, fn_seq, fn_oth)
if ctx.subset == 1 then
for key, val in ipairs(ctx.params) do fn_seq(key, val) end
return
end
if ctx.subset == -1 then
flush_params(ctx, fn_oth)
return
end
local tbl = ctx.params
if ctx.sorttype > 0 then
local nums, words, nn, nw = get_key_list_sorted(tbl, natural_sort)
local sequence = {}
for key, val in ipairs(tbl) do sequence[key] = val end
if ctx.sorttype == 2 then
for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end
end
for idx = 1, nn do
if sequence[nums[idx]] then
fn_seq(nums[idx], sequence[nums[idx]])
else
fn_oth(nums[idx], tbl[nums[idx]])
end
end
if ctx.sorttype ~= 2 then
for idx = 1, nw do fn_oth(words[idx], tbl[words[idx]]) end
end
return
end
for key, val in ipairs(tbl) do
fn_seq(key, val)
tbl[key] = nil
end
for key, val in pairs(tbl) do fn_oth(key, val) end
end
-- Finalize and return a concatenated list
local function finalize_and_return_concatenated_list (ctx, lst, len, modsize)
if len > 0 then
local tmp = ctx.oxfordsep or ctx.lastsep
if tmp ~= nil and len > modsize * 2 then
lst[len - modsize + 1] = tmp
elseif len > modsize and ctx.lastsep ~= nil then
lst[len - modsize + 1] = ctx.lastsep
end
lst[1] = ctx.header or ''
if ctx.footer ~= nil then lst[len + 1] = ctx.footer end
ctx.text = table.concat(lst)
else ctx.text = ctx.ifngiven or '' end
end
--- ---
--- PUBLIC ENVIRONMENT ---
--- ________________________________ ---
--- ---
--[[ Modifiers ]]--
-------------------
-- Syntax: #invoke:params|sequential|pipe to
library.sequential = function (ctx)
if ctx.subset == 1 then error(modulename ..
': The ‘sequential’ directive has been provided more than once', 0) end
if ctx.subset == -1 then error(modulename ..
': The two directives ‘non-sequential’ and ‘sequential’ are in contradiction with each other', 0) end
if ctx.sorttype > 0 then error(modulename ..
': The ‘all_sorted’ and ‘reassorted’ directives are redundant when followed by ‘sequential’', 0) end
ctx.iterfunc = ipairs
ctx.subset = 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|non-sequential|pipe to
library['non-sequential'] = function (ctx)
if ctx.subset == -1 then error(modulename ..
': The ‘non-sequential’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The two directives ‘sequential’ and ‘non-sequential’ are in contradiction with each other', 0) end
ctx.iterfunc = pairs
ctx.subset = -1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|all_sorted|pipe to
library.all_sorted = function (ctx)
if ctx.sorttype == 1 then error(modulename ..
': The ‘all_sorted’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The ‘all_sorted’ directive is redundant after ‘sequential’', 0) end
if ctx.sorttype == 2 then error(modulename ..
': The two directives ‘reassorted’ and ‘sequential’ are in contradiction with each other', 0) end
ctx.sorttype = 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|reassorted|pipe to
library.reassorted = function (ctx)
if ctx.sorttype == 2 then error(modulename ..
': The ‘reassorted’ directive has been provided more than once', 0) end
if ctx.subset == 1 then error(modulename ..
': The ‘reassorted’ directive is redundant after ‘sequential’', 0) end
if ctx.sorttype == 1 then error(modulename ..
': The two directives ‘sequential’ and ‘reassorted’ are in contradiction with each other', 0) end
ctx.sorttype = 2
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|setting|directives|...|pipe to
library.setting = function (ctx)
local argc = set_strings(ctx, ctx.pipe, 1)
if argc < 2 then error(modulename ..
', ‘setting’: No directive was given', 0) end
return context_iterate(ctx, argc + 1)
end
-- Syntax: #invoke:params|scoring|new parameter name|[container]|pipe to
library.scoring = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘scoring’: No parameter name was provided', 0) end
local tmp
local retval, opts = 0, ctx.pipe
for _ in pairs(ctx.params) do retval = retval + 1 end
if opts[2] ~= nil then tmp = opts[2]:match'^%s*(.*%S)' end
if tmp == 'here' then
ctx.params[get_parameter_name(opts[1])] = tostring(retval)
return context_iterate(ctx, 3)
end
new_substack(ctx)[get_parameter_name(opts[1])] = tostring(retval)
return context_iterate(ctx, tmp == 'in_substack' and 3 or 2)
end
-- Syntax: #invoke:params|squeezing|pipe to
library.squeezing = function (ctx)
local store, indices, tbl, newlen = {}, {}, ctx.params, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
newlen = newlen + 1
indices[newlen] = key
store[key] = val
tbl[key] = nil
end
end
table.sort(indices)
for idx = 1, newlen do tbl[idx] = store[indices[idx]] end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|filling_the_gaps|pipe to
library.filling_the_gaps = function (ctx)
local tbl, tmp, nmin, nmax, nnums = ctx.params, {}, 1, nil, -1
for key, val in pairs(tbl) do
if type(key) == 'number' then
if nmax == nil then
if key < nmin then nmin = key end
nmax = key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
nnums = nnums + 1
tmp[key] = val
end
end
if nmax ~= nil and nmax - nmin > nnums then
ctx.n_available = ctx.n_available + nmin + nnums - nmax
if ctx.n_available < 0 then error(modulename ..
', ‘filling_the_gaps’: It is possible to fill at most ' ..
tostring(maxfill) .. ' parameters', 0) end
for idx = nmin, nmax, 1 do tbl[idx] = '' end
for key, val in pairs(tmp) do tbl[key] = val end
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|clearing|pipe to
library.clearing = function (ctx)
local tbl = ctx.params
local numerics = {}
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key] = val
tbl[key] = nil
end
end
for key, val in ipairs(numerics) do tbl[key] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|cutting|left cut|right cut|pipe to
library.cutting = function (ctx)
local lcut = tonumber(ctx.pipe[1])
if lcut == nil or math.floor(lcut) ~= lcut then error(modulename ..
', ‘cutting’: Left cut must be an integer number', 0) end
local rcut = tonumber(ctx.pipe[2])
if rcut == nil or math.floor(rcut) ~= rcut then error(modulename ..
', ‘cutting’: Right cut must be an integer number', 0) end
local tbl = ctx.params
local len = #tbl
if lcut < 0 then lcut = len + lcut end
if rcut < 0 then rcut = len + rcut end
local tot = lcut + rcut
if tot > 0 then
local cache = {}
if tot >= len then
for key in ipairs(tbl) do tbl[key] = nil end
tot = len
else
for idx = len - rcut + 1, len, 1 do tbl[idx] = nil end
for idx = 1, lcut, 1 do tbl[idx] = nil end
end
for key, val in pairs(tbl) do
if type(key) == 'number' and key > 0 then
if key > len then cache[key - tot] = val
else cache[key - lcut] = val end
tbl[key] = nil
end
end
for key, val in pairs(cache) do tbl[key] = val end
end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|cropping|left crop|right crop|pipe to
library.cropping = function (ctx)
local lcut = tonumber(ctx.pipe[1])
if lcut == nil or math.floor(lcut) ~= lcut then error(modulename ..
', ‘cropping’: Left crop must be an integer number', 0) end
local rcut = tonumber(ctx.pipe[2])
if rcut == nil or math.floor(rcut) ~= rcut then error(modulename ..
', ‘cropping’: Right crop must be an integer number', 0) end
local tbl = ctx.params
local nmin
local nmax
for key in pairs(tbl) do
if type(key) == 'number' then
if nmin == nil then nmin, nmax = key, key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
end
end
if nmin ~= nil then
local len = nmax - nmin + 1
if lcut < 0 then lcut = len + lcut end
if rcut < 0 then rcut = len + rcut end
if lcut + rcut - len > -1 then
for key in pairs(tbl) do
if type(key) == 'number' then tbl[key] = nil end
end
elseif lcut + rcut > 0 then
for idx = nmax - rcut + 1, nmax do tbl[idx] = nil end
for idx = nmin, nmin + lcut - 1 do tbl[idx] = nil end
local lshift = nmin + lcut - 1
if lshift > 0 then
for idx = lshift + 1, nmax, 1 do
tbl[idx - lshift] = tbl[idx]
tbl[idx] = nil
end
end
end
end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|purging|start offset|length|pipe to
library.purging = function (ctx)
local idx = tonumber(ctx.pipe[1])
if idx == nil or math.floor(idx) ~= idx then error(modulename ..
', ‘purging’: Start offset must be an integer number', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘purging’: Length must be an integer number', 0) end
local tbl = ctx.params
if len < 1 then
len = len + table.maxn(tbl)
if idx > len then return context_iterate(ctx, 3) end
len = len - idx + 1
end
ctx.params = copy_table_reduced(tbl, idx, len)
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|backpurging|start offset|length|pipe to
library.backpurging = function (ctx)
local last = tonumber(ctx.pipe[1])
if last == nil or math.floor(last) ~= last then error(modulename ..
', ‘backpurging’: Start offset must be an integer number', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘backpurging’: Length must be an integer number', 0) end
local idx
local tbl = ctx.params
if len > 0 then
idx = last - len + 1
else
for key in pairs(tbl) do
if type(key) == 'number' and (idx == nil or
key < idx) then idx = key end
end
if idx == nil then return context_iterate(ctx, 3) end
idx = idx - len
if last < idx then return context_iterate(ctx, 3) end
len = last - idx + 1
end
ctx.params = copy_table_reduced(ctx.params, idx, len)
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|shifting|addend|pipe to
library.shifting = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local nshift = tonumber(ctx.pipe[1])
if nshift == nil or nshift == 0 or math.floor(nshift) ~= nshift then
error(modulename .. ', ‘shifting’: A non-zero integer number must be provided', 0) end
local tbl = {}
for key, val in pairs(ctx.params) do
if type(key) == 'number' then tbl[key + nshift] = val
else tbl[key] = val end
end
ctx.params = tbl
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|reversing_numeric_names|pipe to
library.reversing_numeric_names = function (ctx)
local tbl, numerics, nmax = ctx.params, {}, 0
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key] = val
tbl[key] = nil
if key > nmax then nmax = key end
end
end
for key, val in pairs(numerics) do tbl[nmax - key + 1] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|pivoting_numeric_names|pipe to
--[[
library.pivoting_numeric_names = function (ctx)
local tbl = ctx.params
local shift = #tbl + 1
if shift < 2 then return library.reversing_numeric_names(ctx) end
local numerics = {}
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key] = val
tbl[key] = nil
end
end
for key, val in pairs(numerics) do tbl[shift - key] = val end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|mirroring_numeric_names|pipe to
--[[
library.mirroring_numeric_names = function (ctx)
local tbl, numerics = ctx.params, {}
local nmax
local nmin
for key, val in pairs(tbl) do
if type(key) == 'number' then
numerics[key] = val
tbl[key] = nil
if nmax == nil then nmin, nmax = key, key
elseif key > nmax then nmax = key
elseif key < nmin then nmin = key end
end
end
for key, val in pairs(numerics) do tbl[nmax + nmin - key] = val end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|swapping_numeric_names|pipe to
--[[
library.swapping_numeric_names = function (ctx)
local tbl, cache, nsize = ctx.params, {}, 0
local tmp
for key in pairs(tbl) do
if type(key) == 'number' then
nsize = nsize + 1
cache[nsize] = key
end
end
table.sort(cache)
for idx = math.floor(nsize / 2), 1, -1 do
tmp = tbl[cache[idx] ]
tbl[cache[idx] ] = tbl[cache[nsize - idx + 1] ]
tbl[cache[nsize - idx + 1] ] = tmp
end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|sorting_sequential_values|[criterion]|pipe to
library.sorting_sequential_values = function (ctx)
local sortfn
if ctx.pipe[1] ~= nil then
sortfn = sortfunctions[ctx.pipe[1]:match'^%s*(.-)%s*$']
end
if sortfn then table.sort(ctx.params, sortfn)
else table.sort(ctx.params) end -- i.e. either `false` or `nil`
if sortfn == nil then return context_iterate(ctx, 1) end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|splicing|[add to position]|position|increment|
-- [number of elements to write]|...|pipe to
library.splicing = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local opts, tbl = ctx.pipe, ctx.params
local tmp1 = opts[1]
local tmp2
local argc
local pos
local refp
if tmp1 ~= nil then
tmp2 = tonumber(tmp1)
if tmp2 == nil or math.floor(tmp2) ~= tmp2 then
pos, argc, tmp2 = tonumber(opts[2]), 4,
tmp1:match'^%s*(.*%S)'
if tmp2 ~= nil then
refp = position_references[tmp2]
if refp == nil then error(modulename ..
', ‘splicing’: ‘' .. tostring(tmp2) ..
'’ is not a valid first argument', 0) end
else refp = 0 end
else pos, argc, refp = tmp2, 3, 0 end
else pos, argc, refp = tonumber(opts[2]), 4, 0 end
if pos == nil or math.floor(pos) ~= pos then error(modulename ..
', ‘splicing’: The position must be an integer number', 0) end
local len = tonumber(opts[argc - 1])
if len == nil or math.floor(len) ~= len then error(modulename ..
', ‘splicing’: The increment must be an integer number', 0) end
if refp == 2 then
for _ in ipairs(tbl) do pos = pos + 1 end
refp = 0
end
tmp1, tmp2 = nil, nil
if refp ~= 0 or len ~= 0 then
for key, val in pairs(tbl) do
if type(key) == 'number' then
if tmp1 == nil then tmp1, tmp2 = key, key
elseif key < tmp1 then tmp1 = key
elseif key > tmp2 then tmp2 = key end
end
end
end
if tmp2 == nil then len = 0
elseif refp == 3 then pos = pos + tmp2
elseif refp == 1 then pos = pos + tmp1 end
if len > 0 and pos + len > tmp1 and pos <= tmp2 then
tbl = copy_table_expanded(tbl, pos, len)
elseif len < 0 and pos - len > tmp1 and pos <= tmp2 then
tbl = copy_table_reduced(tbl, pos, -len)
else tbl = copy_or_ref_table(tbl, tbl ~= ctx.oparams) end
ctx.params = tbl
tmp1 = tonumber(opts[argc])
if len == 0 and (tmp1 == nil or tmp1 < 1) then error(modulename ..
', ‘splicing’: When the increment is zero the number of elements to add cannot be zero', 0) end
if tmp1 == nil or tmp1 < 0 or math.floor(tmp1) ~= tmp1 then
return context_iterate(ctx, argc)
end
tmp2 = argc - pos + 1
for key = pos, pos + tmp1 - 1 do tbl[key] = opts[key + tmp2] end
return context_iterate(ctx, argc + tmp1 + 1)
end
-- Syntax: #invoke:params|imposing|name|value|pipe to
library.imposing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘imposing’: Missing parameter name to impose', 0) end
ctx.params[get_parameter_name(ctx.pipe[1])] = ctx.pipe[2]
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|providing|name|value|pipe to
library.providing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘providing’: Missing parameter name to provide', 0) end
local key = get_parameter_name(ctx.pipe[1])
if ctx.params[key] == nil then ctx.params[key] = ctx.pipe[2] end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|discarding|name|[how many]|pipe to
library.discarding = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘discarding’: Missing parameter name to discard', 0) end
local len = tonumber(ctx.pipe[2])
if len == nil then
ctx.params[get_parameter_name(ctx.pipe[1])] = nil
return context_iterate(ctx, 2)
end
local key = tonumber(ctx.pipe[1])
if key == nil or math.floor(key) ~= key then error(modulename ..
', ‘discarding’: A range was provided, but the initial parameter name is not an integer number', 0) end
if len < 1 or math.floor(len) ~= len then error(modulename ..
', ‘discarding’: A range can only be an integer number greater than zero', 0) end
for idx = key, key + len - 1 do ctx.params[idx] = nil end
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|excluding_non-numeric_names|pipe to
library['excluding_non-numeric_names'] = function (ctx)
local tmp = ctx.params
for key, val in pairs(tmp) do
if type(key) ~= 'number' then tmp[key] = nil end
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|excluding_numeric_names|pipe to
library.excluding_numeric_names = function (ctx)
local tmp = ctx.params
for key, val in pairs(tmp) do
if type(key) == 'number' then tmp[key] = nil end
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|with_name_matching|target 1|[plain flag 1]|[or]
-- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag
-- N]|pipe to
library.with_name_matching = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_name_matching')
local tmp
local ptn
local tbl = ctx.params
local newparams = {}
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
tmp = ptn[1]
if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then
tmp = tonumber(tmp)
end
newparams[tmp] = tbl[tmp]
else
for key, val in pairs(tbl) do
if tostring(key):find(ptn[1], 1, ptn[2]) then
newparams[key] = val
end
end
end
end
ctx.params = newparams
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_name_not_matching|target 1|[plain flag 1]
-- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain
-- flag N]|pipe to
library.with_name_not_matching = function (ctx)
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_name_not_matching')
local tbl = ctx.params
if nptns == 1 and targets[1][3] then
local tmp = targets[1][1]
if tmp == '0' or tmp:find'^%-?[1-9]%d*$' ~= nil then
tbl[tonumber(tmp)] = nil
else tbl[tmp] = nil end
return context_iterate(ctx, argc)
end
local yesmatch
local ptn
for key in pairs(tbl) do
yesmatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if tostring(key) ~= ptn[1] then
yesmatch = false
break
end
elseif not tostring(key):find(ptn[1], 1, ptn[2]) then
yesmatch = false
break
end
end
if yesmatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_value_matching|target 1|[plain flag 1]|[or]
-- |[target 2]|[plain flag 2]|[or]|[...]|[target N]|[plain flag
-- N]|pipe to
library.with_value_matching = function (ctx)
local tbl = ctx.params
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_value_matching')
local nomatch
local ptn
for key, val in pairs(tbl) do
nomatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if val == ptn[1] then
nomatch = false
break
end
elseif val:find(ptn[1], 1, ptn[2]) then
nomatch = false
break
end
end
if nomatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|with_value_not_matching|target 1|[plain flag 1]
-- |[and]|[target 2]|[plain flag 2]|[and]|[...]|[target N]|[plain
-- flag N]|pipe to
library.with_value_not_matching = function (ctx)
local tbl = ctx.params
local targets, nptns, argc = load_pattern_args(ctx.pipe,
'with_value_not_matching')
local yesmatch
local ptn
for key, val in pairs(tbl) do
yesmatch = true
for idx = 1, nptns do
ptn = targets[idx]
if ptn[3] then
if val ~= ptn[1] then
yesmatch = false
break
end
elseif not val:find(ptn[1], 1, ptn[2]) then
yesmatch = false
break
end
end
if yesmatch then tbl[key] = nil end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|trimming_values|pipe to
library.trimming_values = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:match'^%s*(.-)%s*$' end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_to_lowercase|pipe to
library.mapping_to_lowercase = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:lower() end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_to_uppercase|pipe to
library.mapping_to_uppercase = function (ctx)
local tbl = ctx.params
for key, val in pairs(tbl) do tbl[key] = val:upper() end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mapping_by_calling|template name|[call
-- style]|[let]|[...][number of additional parameters]|[parameter
-- 1]|[parameter 2]|[...]|[parameter N]|pipe to
library.mapping_by_calling = function (ctx)
local opts = ctx.pipe
local tname
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘mapping_by_calling’: No template name was provided', 0) end
local margs, argc, looptype, karg, varg = load_callback_opts(opts, 1,
mapping_styles.values_only)
local model = { title = tname, args = margs }
value_maps[looptype](ctx.params, margs, karg, varg, function ()
return ctx.frame:expandTemplate(model)
end)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_invoking|module name|function
-- name|[call style]|[let]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.mapping_by_invoking = function (ctx)
local opts = ctx.pipe
local mname
local fname
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘mapping_by_invoking’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘mapping_by_invoking’: No function name was provided', 0) end
local margs, argc, looptype, karg, varg = load_callback_opts(opts, 2,
mapping_styles.values_only)
local model = { title = 'Module:' .. mname, args = margs }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘mapping_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
value_maps[looptype](ctx.params, margs, karg, varg, function ()
return tostring(mfunc(ctx.frame:newChild(model)))
end)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_magic|parser function|[call
-- style]|[let]|[...][number of additional arguments]|[argument
-- 1]|[argument 2]|[...]|[argument N]|pipe to
library.mapping_by_magic = function (ctx)
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘mapping_by_magic’: No parser function was provided', 0) end
local margs, argc, looptype, karg, varg = load_callback_opts(opts, 1,
mapping_styles.values_only)
value_maps[looptype](ctx.params, margs, karg, varg, function ()
return ctx.frame:callParserFunction(magic, margs)
end)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_replacing|target|replace|[count]|[plain
-- flag]|pipe to
library.mapping_by_replacing = function (ctx)
local ptn, repl, nmax, flg, argc, die =
load_replace_args(ctx.pipe, 'mapping_by_replacing')
if die then return context_iterate(ctx, argc) end
local tbl = ctx.params
if flg == 3 then
for key, val in pairs(tbl) do
if val == ptn then tbl[key] = repl end
end
else
if flg == 2 then
-- Copied from Module:String's `str._escapePattern()`
ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0')
end
for key, val in pairs(tbl) do
tbl[key] = val:gsub(ptn, repl, nmax)
end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|mapping_by_mixing|mixing string|pipe to
library.mapping_by_mixing = function (ctx)
if ctx.pipe[1] == nil then error(modulename ..
', ‘mapping_by_mixing’: No mixing string was provided', 0) end
local mix = ctx.pipe[1]
local tbl = ctx.params
if mix == '$#' then
for key in pairs(tbl) do tbl[key] = tostring(key) end
return context_iterate(ctx, 2)
end
local skel, cnv, n_parts = parse_placeholder_string(mix)
for key, val in pairs(tbl) do
for idx = 2, n_parts, 2 do
if skel[idx] then cnv[idx] = val else cnv[idx] = tostring(key) end
end
tbl[key] = table.concat(cnv)
end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|mapping_to_names|pipe to
--[[
library.mapping_to_names = function (ctx)
local tbl = ctx.params
for key in pairs(tbl) do tbl[key] = tostring(key) end
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|renaming_to_lowercase|pipe to
library.renaming_to_lowercase = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do
if type(key) == 'string' then cache[key:lower()] = val else
cache[key] = val end
end
ctx.params = cache
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|renaming_to_uppercase|pipe to
library.renaming_to_uppercase = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do
if type(key) == 'string' then cache[key:upper()] = val else
cache[key] = val end
end
ctx.params = cache
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|renaming_to_sequence|[sort order]|pipe to
library.renaming_to_sequence = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tbl = ctx.params
local sortfn, argc, do_sort = load_sort_opt(ctx.pipe[1])
local cache
local len
if do_sort then
local words
local wl
cache, words, len, wl = get_key_list_sorted(tbl, sortfn)
for idx = 1, len do cache[idx] = tbl[cache[idx]] end
for idx = 1, wl do cache[len + idx] = tbl[words[idx]] end
else
cache = {}
len = 0
for _, val in pairs(tbl) do
len = len + 1
cache[len] = val
end
end
ctx.params = cache
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_calling|template name|[call
-- style]|[let]|[...][number of additional parameters]|[parameter
-- 1]|[parameter 2]|[...]|[parameter N]|pipe to
library.renaming_by_calling = function (ctx)
local opts = ctx.pipe
local tname
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘renaming_by_calling’: No template name was provided', 0) end
local rargs, argc, looptype, karg, varg = load_callback_opts(opts, 1,
mapping_styles.names_only)
local model = { title = tname, args = rargs }
map_names(ctx.params, rargs, karg, varg, looptype, function ()
return ctx.frame:expandTemplate(model)
end)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_invoking|module name|function
-- name|[call style]|[let]|[...]|[number of additional
-- arguments]|[argument 1]|[argument 2]|[...]|[argument N]|pipe to
library.renaming_by_invoking = function (ctx)
local opts = ctx.pipe
local mname
local fname
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘renaming_by_invoking’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘renaming_by_invoking’: No function name was provided', 0) end
local rargs, argc, looptype, karg, varg = load_callback_opts(opts, 2,
mapping_styles.names_only)
local model = { title = 'Module:' .. mname, args = rargs }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘renaming_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
map_names(ctx.params, rargs, karg, varg, looptype, function ()
return tostring(mfunc(ctx.frame:newChild(model)))
end)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_magic|parser function|[call
-- style]|[let]|[...][number of additional arguments]|[argument
-- 1]|[argument 2]|[...]|[argument N]|pipe to
library.renaming_by_magic = function (ctx)
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘renaming_by_magic’: No parser function was provided', 0) end
local rargs, argc, looptype, karg, varg = load_callback_opts(opts, 1,
mapping_styles.names_only)
map_names(ctx.params, rargs, karg, varg, looptype, function ()
return ctx.frame:callParserFunction(magic, rargs)
end)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_replacing|target|replace|[count]|[plain
-- flag]|pipe to
library.renaming_by_replacing = function (ctx)
local ptn, repl, nmax, flg, argc, die =
load_replace_args(ctx.pipe, 'renaming_by_replacing')
if die then return context_iterate(ctx, argc) end
local tbl = ctx.params
if flg == 3 then
ptn = get_parameter_name(ptn)
local val = tbl[ptn]
if val ~= nil then
tbl[ptn] = nil
tbl[get_parameter_name(repl)] = val
end
else
if flg == 2 then
-- Copied from Module:String's `str._escapePattern()`
ptn = ptn:gsub('[%(%)%.%%%+%-%*%?%[%^%$%]]', '%%%0')
end
local cache = {}
for key, val in pairs(tbl) do
steal_if_renamed(val, tbl, key, cache,
tostring(key):gsub(ptn, repl, nmax))
end
for key, val in pairs(cache) do tbl[key] = val end
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|renaming_by_mixing|mixing string|pipe to
library.renaming_by_mixing = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
if ctx.pipe[1] == nil then error(modulename ..
', ‘renaming_by_mixing’: No mixing string was provided', 0) end
local mix = ctx.pipe[1]:match'^%s*(.-)%s*$'
local cache = {}
if mix == '$@' then
for _, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = val
end
else
local skel, canvas, n_parts = parse_placeholder_string(mix)
for key, val in pairs(ctx.params) do
for idx = 2, n_parts, 2 do
if skel[idx] then canvas[idx] = val
else canvas[idx] = tostring(key) end
end
cache[get_parameter_name(table.concat(canvas))] = val
end
end
ctx.params = cache
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|renaming_to_values|pipe to
--[[
library.renaming_to_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for _, val in pairs(ctx.params) do cache[val] = val end
ctx.params = cache
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|grouping_by_calling|template
-- name|[let]|[...]|[number of additional arguments]|[argument
-- 1]|[argument 2]|[...]|[argument N]|pipe to
library.grouping_by_calling = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local opts = ctx.pipe
local tmp
if opts[1] ~= nil then tmp = opts[1]:match'^%s*(.*%S)' end
if tmp == nil then error(modulename ..
', ‘grouping_by_calling’: No template name was provided', 0) end
local model = { title = tmp }
local argc
tmp, argc = load_child_opts(opts, 2, 0)
local gargs = {}
for key, val in pairs(tmp) do
if type(key) == 'number' and key < 1 then gargs[key - 1] = val
else gargs[key] = val end
end
local groups = make_groups(ctx.params)
for gid, group in pairs(groups) do
for key, val in pairs(gargs) do group[key] = val end
group[0] = gid
model.args = group
groups[gid] = ctx.frame:expandTemplate(model)
end
ctx.params = groups
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|parsing|string to parse|[trim flag]|[iteration
-- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to
library.parsing = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘parsing’: No string to parse was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '|', '=')
parse_parameter_string(ctx.params, opts[1], isep, iplain, psep, pplain,
trimnamed, trimunnamed)
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|reinterpreting|parameter to reinterpret|[trim
-- flag]|[iteration delimiter setter]|[...]|[key-value delimiter
-- setter]|[...]|pipe to
library.reinterpreting = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘reinterpreting’: No parameter to reinterpret was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '|', '=')
local tbl, tmp = ctx.params, get_parameter_name(opts[1])
local str = tbl[tmp]
if str ~= nil then
tbl[tmp] = nil
parse_parameter_string(tbl, str, isep, iplain, psep, pplain,
trimnamed, trimunnamed)
end
return context_iterate(ctx, argc)
end
-- Syntax: #invoke:params|evaluating|string to parse|[trim flag]|[iteration
-- delimiter setter]|[...]|[key-value delimiter setter]|[...]|pipe to
library.evaluating = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘evaluating’: No string to parse was provided', 0) end
local isep, iplain, psep, pplain, trimnamed, trimunnamed, argc =
load_parse_opts(opts, 2, '!', ':')
if opts[1]:match'^%s*(.*%S)' == nil then
ctx.pipe = copy_or_ref_table(opts, opts ~= ctx.opipe)
return context_iterate(ctx, argc)
end
local new_opts, cache = {}, {}
local shift = parse_parameter_string(cache, opts[1], isep, iplain,
psep, pplain, trimnamed, trimunnamed) - argc
for key, val in pairs(opts) do
if type(key) ~= 'number' or key < 1 then new_opts[key] = val
elseif key >= argc then new_opts[key + shift] = val end
end
for key, val in pairs(cache) do new_opts[key] = val end
ctx.pipe = new_opts
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|mixing_names_and_values|mixing string|pipe to
library.mixing_names_and_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
if ctx.pipe[1] == nil then error(modulename ..
', ‘mixing_names_and_values’: No mixing string was provided for parameter names', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘mixing_names_and_values’: No mixing string was provided for parameter values', 0) end
local cache = {}
local mix_k, mix_v = ctx.pipe[1]:match'^%s*(.-)%s*$', ctx.pipe[2]
local tmp
if mix_k == '$@' and mix_v == '$@' then
for _, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = val
end
elseif mix_k == '$@' and mix_v == '$#' then
for key, val in pairs(ctx.params) do
cache[get_parameter_name(val)] = tostring(key)
end
elseif mix_k == '$#' and mix_v == '$#' then
for key in pairs(ctx.params) do cache[key] = tostring(key) end
else
local skel_k, cnv_k, n_parts_k = parse_placeholder_string(mix_k)
local skel_v, cnv_v, n_parts_v = parse_placeholder_string(mix_v)
for key, val in pairs(ctx.params) do
tmp = tostring(key)
for idx = 2, n_parts_k, 2 do
if skel_k[idx] then cnv_k[idx] = val else cnv_k[idx] = tmp end
end
for idx = 2, n_parts_v, 2 do
if skel_v[idx] then cnv_v[idx] = val else cnv_v[idx] = tmp end
end
cache[get_parameter_name(table.concat(cnv_k))] =
table.concat(cnv_v)
end
end
ctx.params = cache
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|swapping_names_and_values|pipe to
--[[
library.swapping_names_and_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local cache = {}
for key, val in pairs(ctx.params) do cache[val] = key end
ctx.params = cache
return context_iterate(ctx, 1)
end
]]--
-- Syntax: #invoke:params|combining|new parameter name|[sort order]|setting
-- directives|...|pipe to
library.combining = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
return context_iterate(ctx, combine_parameters(
ctx,
function (key, val, kvs) return key .. kvs .. val end,
'combining'
) + 1)
end
-- Syntax: #invoke:params|combining_values|new parameter name|[sort
-- order]|setting directives|...|pipe to
library.combining_values = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
return context_iterate(ctx, combine_parameters(
ctx,
function (key, val, kvs) return val end,
'combining_values'
) + 1)
end
-- Syntax: #invoke:params|combining_by_calling|template name|new parameter
-- name|pipe to
library.combining_by_calling = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local tname = ctx.pipe[1]
if tname ~= nil then tname = tname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_calling’: No template name was provided', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘combining_by_calling’: No parameter name was provided', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[2])] = ctx.frame:expandTemplate{
title = tname,
args = ctx.params
}
}
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|combining_by_invoking|module name|function name|new
-- parameter name|pipe to
library.combining_by_invoking = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local mname = ctx.pipe[1]
if mname ~= nil then mname = mname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_invoking’: No module name was provided', 0) end
local fname = ctx.pipe[2]
if fname ~= nil then fname = fname:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_invoking’: No function name was provided', 0) end
if ctx.pipe[3] == nil then error(modulename ..
', ‘combining_by_invoking’: No parameter name was provided', 0) end
local model = { title = 'Module:' .. mname, args = ctx.params }
local mfunc = require(model.title)[fname]
if mfunc == nil then error(modulename ..
', ‘mapping_by_invoking’: The function ‘' .. fname ..
'’ does not exist', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[3])] =
tostring(mfunc(ctx.frame:newChild(model)))
}
return context_iterate(ctx, 4)
end
-- Syntax: #invoke:params|combining_by_magic|parser function|new parameter
-- name|pipe to
library.combining_by_magic = function (ctx)
-- NOTE: `ctx.params` might be the original metatable! As a modifier,
-- this function MUST create a copy of it before returning
local magic = ctx.pipe[1]
if magic ~= nil then magic = magic:match'^%s*(.*%S)'
else error(modulename ..
', ‘combining_by_magic’: No parser function was provided', 0) end
if ctx.pipe[2] == nil then error(modulename ..
', ‘combining_by_magic’: No parameter name was provided', 0) end
ctx.params = {
[get_parameter_name(ctx.pipe[2])] =
ctx.frame:callParserFunction(magic, ctx.params)
}
return context_iterate(ctx, 3)
end
-- Syntax: #invoke:params|snapshotting|pipe to
library.snapshotting = function (ctx)
local stack = new_substack(ctx)
for key, val in pairs(ctx.params) do stack[key] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|remembering|pipe to
library.remembering = function (ctx)
local stack = new_substack(ctx)
for key, val in pairs(ctx.oparams) do stack[key] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|entering_substack|[new]|pipe to
library.entering_substack = function (ctx)
local tbl = ctx.params
local ncurrparent = ctx.n_parents + 1
if ctx.parents == nil then ctx.parents = { tbl }
else ctx.parents[ncurrparent] = tbl end
ctx.n_parents = ncurrparent
if ctx.pipe[1] ~= nil and ctx.pipe[1]:match'^%s*new%s*$' then
ctx.params = {}
return context_iterate(ctx, 2)
end
local currsnap = ctx.n_children
if currsnap > 0 then
ctx.params = ctx.children[currsnap]
ctx.children[currsnap] = nil
ctx.n_children = currsnap - 1
else
local newparams = {}
for key, val in pairs(tbl) do newparams[key] = val end
ctx.params = newparams
end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|pulling|parameter name|pipe to
library.pulling = function (ctx)
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘pulling’: No parameter to pull was provided', 0) end
local parent
local tmp = ctx.n_parents
if tmp < 1 then parent = ctx.oparams else parent = ctx.parents[tmp] end
tmp = get_parameter_name(opts[1])
if parent[tmp] ~= nil then ctx.params[tmp] = parent[tmp] end
return context_iterate(ctx, 2)
end
-- Syntax: #invoke:params|detaching_substack|pipe to
library.detaching_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘detaching_substack’: No substack has been created', 0) end
local parent = ctx.parents[ncurrparent]
for key in pairs(ctx.params) do parent[key] = nil end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|dropping_substack|pipe to
library.dropping_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘dropping_substack’: No substack has been created', 0) end
ctx.params = ctx.parents[ncurrparent]
ctx.parents[ncurrparent] = nil
ctx.n_parents = ncurrparent - 1
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|leaving_substack|pipe to
library.leaving_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘leaving_substack’: No substack has been created', 0) end
local currsnap = ctx.n_children + 1
if ctx.children == nil then ctx.children = { ctx.params }
else ctx.children[currsnap] = ctx.params end
ctx.params = ctx.parents[ncurrparent]
ctx.parents[ncurrparent] = nil
ctx.n_parents = ncurrparent - 1
ctx.n_children = currsnap
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|merging_substack|pipe to
library.merging_substack = function (ctx)
local ncurrparent = ctx.n_parents
if ncurrparent < 1 then error(modulename ..
', ‘merging_substack’: No substack has been created', 0) end
local parent = ctx.parents[ncurrparent]
local child = ctx.params
ctx.params = parent
ctx.parents[ncurrparent] = nil
ctx.n_parents = ncurrparent - 1
for key, val in pairs(child) do parent[key] = val end
return context_iterate(ctx, 1)
end
-- Syntax: #invoke:params|flushing|pipe to
library.flushing = function (ctx)
if ctx.n_children < 1 then error(modulename ..
', ‘flushing’: There are no substacks to flush', 0) end
local parent = ctx.params
local currsnap = ctx.n_children
for key, val in pairs(ctx.children[currsnap]) do parent[key] = val end
ctx.children[currsnap] = nil
ctx.n_children = currsnap - 1
return context_iterate(ctx, 1)
end
--[[ Functions ]]--
-----------------------------
-- Syntax: #invoke:params|count
library.count = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local retval = 0
for _ in ctx.iterfunc(ctx.params) do retval = retval + 1 end
if ctx.subset == -1 then retval = retval - #ctx.params end
ctx.text = retval
return false
end
-- Syntax: #invoke:args|concat_and_call|template name|[prepend 1]|[prepend 2]
-- |[...]|[item n]|[named item 1=value 1]|[...]|[named item n=value
-- n]|[...]
library.concat_and_call = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local opts = ctx.pipe
local tname
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘concat_and_call’: No template name was provided', 0) end
remove_numeric_keys(opts, 1, 1)
ctx.text = ctx.frame:expandTemplate{
title = tname,
args = concat_params(ctx)
}
return false
end
-- Syntax: #invoke:args|concat_and_invoke|module name|function name|[prepend
-- 1]|[prepend 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named
-- item n=value n]|[...]
library.concat_and_invoke = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local opts = ctx.pipe
local mname
local fname
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘concat_and_invoke’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘concat_and_invoke’: No function name was provided', 0) end
remove_numeric_keys(opts, 1, 2)
local mfunc = require('Module:' .. mname)[fname]
if mfunc == nil then error(modulename ..
', ‘concat_and_invoke’: The function ‘' .. fname ..
'’ does not exist', 0) end
ctx.text = mfunc(ctx.frame:newChild{
title = 'Module:' .. mname,
args = concat_params(ctx)
})
return false
end
-- Syntax: #invoke:args|concat_and_magic|parser function|[prepend 1]|[prepend
-- 2]|[...]|[item n]|[named item 1=value 1]|[...]|[named item n=
-- value n]|[...]
library.concat_and_magic = function (ctx)
-- NOTE: `ctx.params` might be the original metatable!
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘concat_and_magic’: No parser function was provided', 0) end
remove_numeric_keys(opts, 1, 1)
ctx.text = ctx.frame:callParserFunction(magic, concat_params(ctx))
return false
end
-- Syntax: #invoke:params|value_of|parameter name
library.value_of = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local opts = ctx.pipe
if opts[1] == nil then error(modulename ..
', ‘value_of’: No parameter name was provided', 0) end
local val
local key = opts[1]:match'^%s*(.-)%s*$'
if key == '0' or key:find'^%-?[1-9]%d*$' ~= nil then
key = tonumber(key)
val = ctx.params[key]
-- No worries: #ctx.params is unused when the modifier is in
-- first position (and therefore `ctx.params` is a metatable)
if val ~= nil and (
ctx.subset ~= -1 or key > #ctx.params or key < 1
) and (
ctx.subset ~= 1 or (key <= #ctx.params and key > 0)
) then
ctx.text = (ctx.header or '') .. val .. (ctx.footer or '')
else ctx.text = ctx.ifngiven or '' end
else
val = ctx.params[key]
if ctx.subset ~= 1 and val ~= nil then
ctx.text = (ctx.header or '') .. val .. (ctx.footer or '')
else ctx.text = ctx.ifngiven or '' end
end
return false
end
-- Syntax: #invoke:params|list
library.list = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or ''
flush_params(
ctx,
function (key, val)
ret[nss + 1] = pps
ret[nss + 2] = key
ret[nss + 3] = kvs
ret[nss + 4] = val
nss = nss + 4
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 4)
return false
end
-- Syntax: #invoke:params|list_values
library.list_values = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
-- NOTE: `library.coins()` and `library.unique_coins()` rely on us
local ret, nss, pps = {}, 0, ctx.itersep or ''
flush_params(
ctx,
function (key, val)
ret[nss + 1] = pps
ret[nss + 2] = val
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|list_maybe_with_names
library.list_maybe_with_names = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, kvs, pps = {}, 0, ctx.pairsep or '', ctx.itersep or ''
mixed_flush_params(
ctx,
function (key, val)
ret[nss + 1] = pps
ret[nss + 2] = ''
ret[nss + 3] = ''
ret[nss + 4] = val
nss = nss + 4
end,
function (key, val)
ret[nss + 1] = pps
ret[nss + 2] = key
ret[nss + 3] = kvs
ret[nss + 4] = val
nss = nss + 4
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 4)
return false
end
-- Syntax: #invoke:params|coins|[first coin = value 1]|[second coin = value
-- 2]|[...]|[last coin = value N]
--[[
library.coins = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local opts, tbl = ctx.pipe, ctx.params
for key, val in pairs(tbl) do tbl[key] = opts[get_parameter_name(val)] end
return library.list_values(ctx)
end
]]--
-- Syntax: #invoke:params|unique_coins|[first coin = value 1]|[second coin =
-- value 2]|[...]|[last coin = value N]
library.unique_coins = function (ctx)
local opts, tbl = ctx.pipe, ctx.params
local tmp
for key, val in pairs(tbl) do
tmp = get_parameter_name(val)
tbl[key] = opts[tmp]
opts[tmp] = nil
end
return library.list_values(ctx)
end
-- Syntax: #invoke:params|for_each|wikitext
library.for_each = function (ctx)
-- NOTE: `ctx.pipe` might be the original metatable!
local ret, nss, pps, txt = {}, 0, ctx.itersep or '', ctx.pipe[1] or ''
local skel, cnv, n_parts = parse_placeholder_string(txt)
flush_params(
ctx,
function (key, val)
for idx = 2, n_parts, 2 do
if skel[idx] then cnv[idx] = val
else cnv[idx] = tostring(key) end
end
ret[nss + 1] = pps
ret[nss + 2] = table.concat(cnv)
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each|template name|[append 1]|[append 2]
-- |[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each = function (ctx)
local opts = ctx.pipe
local tname
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘call_for_each’: No template name was provided', 0) end
local model = { title = tname, args = opts }
local ret, nss, ccs = {}, 0, ctx.itersep or ''
table.insert(opts, 1, true)
flush_params(
ctx,
function (key, val)
opts[1] = key
opts[2] = val
ret[nss + 1] = ccs
ret[nss + 2] = ctx.frame:expandTemplate(model)
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|invoke_for_each|module name|module function|[append
-- 1]|[append 2]|[...]|[append n]|[named param 1=value 1]|[...]
-- |[named param n=value n]|[...]
library.invoke_for_each = function (ctx)
local opts = ctx.pipe
local mname
local fname
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘invoke_for_each’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘invoke_for_each’: No function name was provided', 0) end
local model = { title = 'Module:' .. mname, args = opts }
local mfunc = require(model.title)[fname]
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(
ctx,
function (key, val)
opts[1] = key
opts[2] = val
ret[nss + 1] = ccs
ret[nss + 2] = mfunc(ctx.frame:newChild(model))
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|magic_for_each|parser function|[append 1]|[append 2]
-- |[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.magic_for_each = function (ctx)
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘magic_for_each’: No parser function was provided', 0) end
local ret, nss, ccs = {}, 0, ctx.itersep or ''
table.insert(opts, 1, true)
flush_params(
ctx,
function (key, val)
opts[1] = key
opts[2] = val
ret[nss + 1] = ccs
ret[nss + 2] = ctx.frame:callParserFunction(magic, opts)
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each_value|template name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each_value = function (ctx)
local opts = ctx.pipe
local tname
if opts[1] ~= nil then tname = opts[1]:match'^%s*(.*%S)' end
if tname == nil then error(modulename ..
', ‘call_for_each_value’: No template name was provided', 0) end
local model = { title = tname, args = opts }
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(
ctx,
function (key, val)
opts[1] = val
ret[nss + 1] = ccs
ret[nss + 2] = ctx.frame:expandTemplate(model)
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|invoke_for_each_value|module name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.invoke_for_each_value = function (ctx)
local opts = ctx.pipe
local mname
local fname
if opts[1] ~= nil then mname = opts[1]:match'^%s*(.*%S)' end
if mname == nil then error(modulename ..
', ‘invoke_for_each_value’: No module name was provided', 0) end
if opts[2] ~= nil then fname = opts[2]:match'^%s*(.*%S)' end
if fname == nil then error(modulename ..
', ‘invoke_for_each_value’: No function name was provided', 0) end
local model = { title = 'Module:' .. mname, args = opts }
local mfunc = require(model.title)[fname]
local ret, nss, ccs = {}, 0, ctx.itersep or ''
remove_numeric_keys(opts, 1, 1)
flush_params(
ctx,
function (key, val)
opts[1] = val
ret[nss + 1] = ccs
ret[nss + 2] = mfunc(ctx.frame:newChild(model))
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|magic_for_each_value|parser function|[append 1]
-- |[append 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named
-- param n=value n]|[...]
library.magic_for_each_value = function (ctx)
local opts = ctx.pipe
local magic
if opts[1] ~= nil then magic = opts[1]:match'^%s*(.*%S)' end
if magic == nil then error(modulename ..
', ‘magic_for_each_value’: No parser function was provided', 0) end
local ret, nss, ccs = {}, 0, ctx.itersep or ''
flush_params(
ctx,
function (key, val)
opts[1] = val
ret[nss + 1] = ccs
ret[nss + 2] = ctx.frame:callParserFunction(magic, opts)
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
-- Syntax: #invoke:params|call_for_each_group|template name|[append 1]|[append
-- 2]|[...]|[append n]|[named param 1=value 1]|[...]|[named param
-- n=value n]|[...]
library.call_for_each_group = function (ctx)
-- NOTE: `ctx.pipe` and `ctx.params` might be the original metatables!
local tmp
if ctx.pipe[1] ~= nil then tmp = ctx.pipe[1]:match'^%s*(.*%S)' end
if tmp == nil then error(modulename ..
', ‘call_for_each_group’: No template name was provided', 0) end
local model = { title = tmp }
local opts, ret, nss, ccs = {}, {}, 0, ctx.itersep or ''
for key, val in pairs(ctx.pipe) do
if type(key) == 'number' then opts[key - 1] = val
else opts[key] = val end
end
ctx.pipe = opts
ctx.params = make_groups(ctx.params)
flush_params(
ctx,
function (gid, group)
for key, val in pairs(opts) do group[key] = val end
group[0] = gid
model.args = group
ret[nss + 1] = ccs
ret[nss + 2] = ctx.frame:expandTemplate(model)
nss = nss + 2
end
)
finalize_and_return_concatenated_list(ctx, ret, nss, 2)
return false
end
--[[ First-position-only modifiers ]]--
---------------------------------------
-- Syntax: #invoke:params|new|pipe to
static_iface.new = function (child_frame)
local ctx = context_new(child_frame)
ctx.pipe = copy_or_ref_table(ctx.opipe, false)
ctx.params = {}
main_loop(ctx, context_iterate(ctx, 1))
return ctx.text
end
--[[ First-position-only functions ]]--
---------------------------------------
-- Syntax: #invoke:params|self
static_iface.self = function (frame)
return frame:getParent():getTitle()
end
--[[ Public metatable of functions ]]--
---------------------------------------
return setmetatable({}, {
__index = function (_, query)
local fname = query:match'^%s*(.*%S)'
if fname == nil then error(modulename ..
': You must specify a function to call', 0) end
local func = static_iface[fname]
if func ~= nil then return func end
func = library[fname]
if func == nil then error(modulename ..
': The function ‘' .. fname .. '’ does not exist', 0) end
return function (child_frame)
local ctx = context_new(child_frame)
ctx.pipe = copy_or_ref_table(ctx.opipe, refpipe[fname])
ctx.params = copy_or_ref_table(ctx.oparams, refparams[fname])
main_loop(ctx, func)
return ctx.text
end
end
})
bx8a2av95b6jpca3zvf7xnia4bz7hsf
گوئینگ این استایل
0
114220
389829
326874
2026-07-10T09:45:04Z
محک
1023
389829
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس=File:Going in Style 2017 film poster.jpg
}}
'''''گوئینگ این استایل''''' اتا کؤمدی فیلم هسته که ۲۰۱۷ سال بساتنه . فیلم سه تا پیرمردی خوری هسته که بانک وشون حق ره بخرده و خانه همینسه بانک جه دزدی هاکنن.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج: آمریکایی فیلمون]]
[[رج:۲۰۱۷ فیلمون]]
[[رج: انگلیسی فیلمون]]
[[رج:کمدی فیلمون]]
j4nb3d0kbqilaliitmqywtk2xponayx
389830
389829
2026-07-10T09:46:44Z
محک
1023
389830
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس=File:Going in Style 2017 film poster.jpg
}}
'''''گوئینگ این استایل''''' {{به انگلیسی|Going in Style}} که یعنن '''دزدی سر بوردن''' اتا کؤمدی فیلم هسته که ۲۰۱۷ سال بساتنه . فیلم سه تا پیرمردی خوری هسته که بانک وشون حق ره بخرده و خانه همینسه بانک جه دزدی هاکنن.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج: آمریکایی فیلمون]]
[[رج:۲۰۱۷ فیلمون]]
[[رج: انگلیسی فیلمون]]
[[رج:کمدی فیلمون]]
cm64bfxvw730jsqd8qa2avako56fdny
389852
389830
2026-07-10T10:36:11Z
محک
1023
[[رج:جنایی فیلمون]] اضافه شد با استفاده از [[ویکیپدیا:رجساز]]
389852
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس=File:Going in Style 2017 film poster.jpg
}}
'''''گوئینگ این استایل''''' {{به انگلیسی|Going in Style}} که یعنن '''دزدی سر بوردن''' اتا کؤمدی فیلم هسته که ۲۰۱۷ سال بساتنه . فیلم سه تا پیرمردی خوری هسته که بانک وشون حق ره بخرده و خانه همینسه بانک جه دزدی هاکنن.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج: آمریکایی فیلمون]]
[[رج:۲۰۱۷ فیلمون]]
[[رج: انگلیسی فیلمون]]
[[رج:کمدی فیلمون]]
[[رج:جنایی فیلمون]]
2y3fyvt8umnttwyjm1fwejqaatpcts3
د مستر
0
171617
389791
2026-07-10T06:40:39Z
محک
1023
مقالهئونی که گت صفحهیِ کادر جه بساتنه.
389791
wikitext
text/x-wiki
{{صندخ/فیلم<!-- اینجه تونی شه مقالهٔ کلّی موضوع ره بنویسین تا صندخ بساجه. شهر، شخص، موجود، بنا، کومپانی و... واری -->}}
'''د ''مَستِر''''' یعنن '''مُرشد''' اتا ۲۰۱۲ سالِ فیلم هسته که [[خواکین فینیکس]] ونه اصلی نقش ره دارنه. وه این فیلم دله اتا جنگدگرست سرباز نقش ره کا بکرده که روانی مشکلات دارنه و اتا فرقه جه جذب وونه.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۱۲ فیلمون]]
[[رج: آمریکایی فیلمون]]
do694zixdw80u7t783e5zrvrqusq1u2
389809
389791
2026-07-10T09:33:58Z
محک
1023
389809
wikitext
text/x-wiki
{{صندخ/فیلم
| عکس= File:TheMaster2012Poster.jpg
}}
'''د ''مَستِر''''' یعنن '''مُرشد''' اتا ۲۰۱۲ سالِ فیلم هسته که [[خواکین فینیکس]] ونه اصلی نقش ره دارنه. وه این فیلم دله اتا جنگدگرست سرباز نقش ره کا بکرده که روانی مشکلات دارنه و اتا فرقه جه جذب وونه.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۱۲ فیلمون]]
[[رج: آمریکایی فیلمون]]
njie9lfpjbsd2vjgpndqtsqh0y0vmux
دای مای لاو
0
171618
389792
2026-07-10T06:44:34Z
محک
1023
مقالهئونی که گت صفحهیِ کادر جه بساتنه.
389792
wikitext
text/x-wiki
{{صندخ/فیلم}}
'''''دای مای لاو''''' یعنن '''''بمیر مه عشق''''' اتا روانشناسی و مفهومی فیلم هسته که ۲۰۲۵ سال شىنه و [[جنیفر لارنس]] ونه اصلی نقش ره دارنه.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۲۵ فیلمون]]
[[رج: آمریکایی فیلمون]]
34k0e63r03zbavsni0lgq2vw0tv5ko1
389793
389792
2026-07-10T06:48:56Z
محک
1023
389793
wikitext
text/x-wiki
{{صندخ/فیلم}}
'''''دای مای لاو''''' یعنن '''''بمیر مه عشق''''' اتا روانشناسی و مفهومی فیلم هسته که ۲۰۲۵ سال شىنه و [[لین رمزی ]] ونه کارگردان بییه.
[[جنیفر لارنس]] فیلمِ اصلی نقش ره دارنه. وه اتا زنای نقش ره دارنه که ونه شی جه اتا محلهدله سره ارث برسییه و وه کوچ شونه سره دله دره. وچهدار وونه و تکتیناری وه ره أفسردگی گیرنه و کمکم لوچ وونه و جنگل ره تش دنه.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۲۵ فیلمون]]
[[رج: آمریکایی فیلمون]]
[[رج:روانشناسی فیلمون]]
9rethl0n0ncgfyewd8v48klk71odsvp
389818
389793
2026-07-10T09:38:42Z
محک
1023
389818
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس= File:Die My Love 2025.jpeg
}}
'''''دای مای لاو''''' یعنن '''''بمیر مه عشق''''' اتا روانشناسی و مفهومی فیلم هسته که ۲۰۲۵ سال شىنه و [[لین رمزی ]] ونه کارگردان بییه.
[[جنیفر لارنس]] فیلمِ اصلی نقش ره دارنه. وه اتا زنای نقش ره دارنه که ونه شی جه اتا محلهدله سره ارث برسییه و وه کوچ شونه سره دله دره. وچهدار وونه و تکتیناری وه ره أفسردگی گیرنه و کمکم لوچ وونه و جنگل ره تش دنه.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۲۵ فیلمون]]
[[رج: آمریکایی فیلمون]]
[[رج:روانشناسی فیلمون]]
s7qngl7ufonf7u2p0bclcs8xd5fmqpf
ان امریکن پیکل
0
171619
389794
2026-07-10T06:50:51Z
محک
1023
مقالهئونی که گت صفحهیِ کادر جه بساتنه.
389794
wikitext
text/x-wiki
{{صندخ/فیلم<!-- اینجه تونی شه مقالهٔ کلّی موضوع ره بنویسین تا صندخ بساجه. شهر، شخص، موجود، بنا، کومپانی و... واری -->}}
'''''ان امریکن پیکل''''' یعنن '''اتا آمریکایی خیارشور''' اتا کؤمدی فیلم هسته که ۲۰۲۰ سال شىنه.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۲۰ فیلمون]]
kbt6tgjyq88smihiwsmd4d8cjdlqplf
389795
389794
2026-07-10T06:56:12Z
محک
1023
389795
wikitext
text/x-wiki
{{صندخ/فیلم<!-- اینجه تونی شه مقالهٔ کلّی موضوع ره بنویسین تا صندخ بساجه. شهر، شخص، موجود، بنا، کومپانی و... واری -->}}
'''''ان امریکن پیکل''''' یعنن '''اتا آمریکایی خیارشور''' اتا کمدی فیلم هسته که ۲۰۲۰ سال شىنه. [[برندن تراست]] وه ره کارگردانی هاکرده و [[ست روجن]] اصلی نقش بییه.
اتا [[جهود]] زن و شی فرار به فرار شونّه آمریکا. مردی اتا خیارشور کارخنه دله کارگر هسته که کفنه خیارشور دبّه دله و ونه سر پلمپ وونه. سالها گذرنه و دبّه سر ره وا کنّه، وه ویشار وونه و وینده دنیا چنده تغییر هاکرده. شه پسرـزا ره پىدا کنده که اتا برنومهنویس هسته. وشون میون پول دربیاردن سر رقابت کفنه و...
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۲۰ فیلمون]]
[[رج:کمدی فیلمون]]
[[رج: آمریکایی فیلمون ]]
mtb88pcrrc5bfpi83ju7jkys4p5fv8g
389825
389795
2026-07-10T09:42:39Z
محک
1023
389825
wikitext
text/x-wiki
{{صندخ/فیلم
|عکس=File:An American Pickle poster.jpg
}}
'''''ان امریکن پیکل''''' یعنن '''اتا آمریکایی خیارشور''' اتا کمدی فیلم هسته که ۲۰۲۰ سال شىنه. [[برندن تراست]] وه ره کارگردانی هاکرده و [[ست روجن]] اصلی نقش بییه.
اتا [[جهود]] زن و شی فرار به فرار شونّه آمریکا. مردی اتا خیارشور کارخنه دله کارگر هسته که کفنه خیارشور دبّه دله و ونه سر پلمپ وونه. سالها گذرنه و دبّه سر ره وا کنّه، وه ویشار وونه و وینده دنیا چنده تغییر هاکرده. شه پسرـزا ره پىدا کنده که اتا برنومهنویس هسته. وشون میون پول دربیاردن سر رقابت کفنه و...
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۲۰ فیلمون]]
[[رج:کمدی فیلمون]]
[[رج: آمریکایی فیلمون ]]
ipxw8eibf40ilqexmbg4bceerbgvg1q
نورمال (۲۰۲۵)
0
171620
389796
2026-07-10T07:04:39Z
محک
1023
مقالهئونی که گت صفحهیِ کادر جه بساتنه.
389796
wikitext
text/x-wiki
{{صندخ/فیلم<!-- اینجه تونی شه مقالهٔ کلّی موضوع ره بنویسین تا صندخ بساجه. شهر، شخص، موجود، بنا، کومپانی و... واری -->}}
'''نورمال (۲۰۲۵)''' اتا نو-وسترن فیلم هسته که [[دریک کوستلر]] وه ره ۲۰۲۵ بساته و [[باب اودنکرک]] ونه اصلی نقش ره دارنه.
اتا سابق جاسوس و افبیآی بازنشست مردی، شه خانواده ره ورنه مسافرت که اونجه اتا گانگستری گروه جه درگیر وونه و تکتینار وشون جه مقابله کنده.
== منابع ==
{{پهنویس}}
* [https://www.imdb.com/title/tt31195136/ آی ام دی بی]
<!--- رجئون: --->
[[رج:۲۰۲۵ فیلمون]]
[[رج: آمریکایی فیلمون ]]
gvulyb8d3v37f9ody1dfft6wfob9ncb
389797
389796
2026-07-10T07:05:55Z
محک
1023
389797
wikitext
text/x-wiki
{{صندخ/فیلم<!-- اینجه تونی شه مقالهٔ کلّی موضوع ره بنویسین تا صندخ بساجه. شهر، شخص، موجود، بنا، کومپانی و... واری -->}}
'''نورمال''' اتا نو-وسترن فیلم هسته که [[دریک کولستاد]] وه ره ۲۰۲۵ بساته و [[باب اودنکرک]] ونه اصلی نقش ره دارنه.
اتا سابق جاسوس و افبیآی بازنشست مردی، شه خانواده ره ورنه مسافرت که اونجه اتا گانگستری گروه جه درگیر وونه و تکتینار وشون جه مقابله کنده.
== منابع ==
{{پهنویس}}
* [https://www.imdb.com/title/tt31195136/ آی ام دی بی]
<!--- رجئون: --->
[[رج:۲۰۲۵ فیلمون]]
[[رج: آمریکایی فیلمون ]]
[[رج:جنایی فیلمون]]
9541biy4eqwvj0yajpzyqeku7joxg95
389814
389797
2026-07-10T09:36:35Z
محک
1023
389814
wikitext
text/x-wiki
{{صندخ/فیلم
| عکس= File:Normal poster.jpeg
}}
'''نورمال''' اتا نو-وسترن فیلم هسته که [[دریک کولستاد]] وه ره ۲۰۲۵ بساته و [[باب اودنکرک]] ونه اصلی نقش ره دارنه.
اتا سابق جاسوس و افبیآی بازنشست مردی، شه خانواده ره ورنه مسافرت که اونجه اتا گانگستری گروه جه درگیر وونه و تکتینار وشون جه مقابله کنده.
== منابع ==
{{پهنویس}}
* [https://www.imdb.com/title/tt31195136/ آی ام دی بی]
<!--- رجئون: --->
[[رج:۲۰۲۵ فیلمون]]
[[رج: آمریکایی فیلمون ]]
[[رج:جنایی فیلمون]]
cgsge6b07ifgi9z5tmybmghvsdx4vhn
اوئاسیس
0
171621
389798
2026-07-10T07:11:37Z
محک
1023
مقالهئونی که گت صفحهیِ کادر جه بساتنه.
389798
wikitext
text/x-wiki
{{صندخ/سریال<!-- اینجه تونی شه مقالهٔ کلّی موضوع ره بنویسین تا صندخ بساجه. شهر، شخص، موجود، بنا، کومپانی و... واری -->}}
'''اوئاسیس''' {{ایسپانیولی جه|Oasis}} اتا [[ایسپانیا|إسپانیایی]] سریال هسته.
اتا توریستی عمارت دره که پولدار و غنی خانواده ئون شه وچون ره یارنه اونجه تفریح. صاحب هتلِ کیجا اینمیونه گوم وونه. ونه رفخ و اتا ریکا که تازه ونجه آشنا بئی بییه، سرنخ ره دمبال کنّه که وه ره پىدا هاکنن و اینتی یواش-یواش باقیِ مسافرون ِ رمز و راز هم لو شونه.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:۲۰۲۶ فیلمون]]
[[رج:ایسپانیایی سریالون]]
sqxdrn4rh31c0jytuankghgzclzrodb
389799
389798
2026-07-10T07:16:29Z
محک
1023
389799
wikitext
text/x-wiki
{{صندخ/سریال<!-- اینجه تونی شه مقالهٔ کلّی موضوع ره بنویسین تا صندخ بساجه. شهر، شخص، موجود، بنا، کومپانی و... واری -->}}
'''اوئاسیس''' {{ایسپانیولی جه|Oasis}} اتا [[ایسپانیا|إسپانیایی]] سریال هسته.
اتا توریستی عمارت دره که پولدار و غنی خانواده ئون شه وچون ره یارنه اونجه تفریح. صاحب هتلِ کیجا اینمیونه گوم وونه. ونه رفخ و اتا ریکا که تازه ونجه آشنا بئی بییه، سرنخ ره دمبال کنّه که وه ره پىدا هاکنن و اینتی یواش-یواش باقیِ مسافرون ِ رمز و راز هم لو شونه.
== منابع ==
{{پهنویس}}
* [https://www.netflix.com/title/81734907 نت فلیکس ]
<!--- رجئون: --->
[[رج:۲۰۲۶ فیلمون]]
[[رج:ایسپانیایی سریالون]]
4st7mmi01sozn57g6tg7fcdiz5ev6g7
389800
389799
2026-07-10T07:21:11Z
محک
1023
389800
wikitext
text/x-wiki
{{صندخ/سریال
|فصل = 1
|نوم = Oasis
|imagen modo oscuro = <!- Acepta cualquier valor, pero se recomienda usar «sí». -->
|tamaño de imagen =
|pie de imagen =
|título alternativo =
|título español =
|lema = <!-- Para teletones y telenovelas. -->
|ژانر = [[Drama]]
|کارگردان = [[Ramón Campos]]
|basado en = <!-- {{Basada en|obra|autor}} -->
|showrunner =
|desarrollador =
|نویسنده = Javier Chacártegui
، Jon de la Cuesta
، David Orea
|guion =
|historia =
|کارگردان = Ana de Alva، [[David Pinillos]]
|director creativo =
|presentador = <!-- Organizado por el orden de crédito de su primera emisión, con nuevos en el elenco principal agregados al final de la lista. -->
|بازیگرون = [[Ana Garcés]]، Tomy Aguilera، Victoria Kantch
|jurado = <!-- Organizado por el orden de crédito de su primera emisión, con nuevos en el elenco principal agregados al final de la lista. -->
|voces = <!-- Organizado por el orden de crédito de su primera emisión, con nuevos en el elenco principal agregados al final de la lista. -->
|narrador =
|tema principal =
|autor tema principal =
|intérprete principal =
|tema principal 2 =
|autor tema principal 2 =
|intérprete principal 2 =
|tema de cierre =
|autor tema cierre =
|intérprete cierre =
|tema de cierre 2 =
|autor tema cierre 2 =
|intérprete cierre 2 =
|compositor =
|ambientación = <!-- Dejar en blanco si el programa se ambienta en la época contemporánea a su estreno. -->
|país de origen = {{En varias líneas|
| España
}}
|زوون = ایسپانیولی
|num temporadas = <!-- Número de temporadas emitidas. Solamente actualice después de que se haya iniciado una nueva temporada. -->
|num serial = <!-- Número de seriales emitidos. Solamente actualice después de que se haya iniciado un nuevo serial. -->
|num partes = <!-- Número de partes emitidas. Solamente actualice después de que se haya iniciado una nueva parte. -->
|اپیزود = 8
|lista episodios =
|productor ejecutivo =
|productor =
|editor noticias = <!-- Editor de contenido o editores de un programa informativo/político. -->
|localización = <!-- País en el que se filmó principalmente la serie, si es diferente al país de origen. -->
|cinematografía = Raquel Fernández Nuñez
|animador =
|editor =
|cámara = <!-- Ya sea Monocámara o Multicámara. -->
|duración = <!-- Se requiere una fuente confiable. -->
|empresa productora = [[Bambú Producciones]]
|distribuidor =
|presupuesto =
|تهیهکننده = [[Netflix]]
|edad =
|horario =
|audiencia =
|meta inicial = <!-- Para teletones. -->
|recaudación = <!-- Para teletones. -->
|formato de imagen =
|formato de audio =
|mostrado primero = <!-- El país en el que se emitió la serie por primera vez, si es diferente del parámetro país de origen. -->
|اکران = {{تاریخ|19|6|2026}}
|última emisión = <!-- {{Fecha|DD|MM|AAAA}} -->
|intervalos de emisión = <!-- Utilizar solamente para indicar intervalos de emisión de acuerdo a la documentación y dejar en blanco en cualquier otro caso. -->
|relacionados = <!-- Para ser usado solamente para series derivadas y adaptaciones. -->
|criterio sucesión =
|precedido por =
|sucedido por =
|سایت = https://www.netflix.com/title/81734907
|imdb = 38734636
|filmaffinity = 791643
}}
'''اوئاسیس''' {{ایسپانیولی جه|Oasis}} اتا [[ایسپانیا|إسپانیایی]] سریال هسته.
اتا توریستی عمارت دره که پولدار و غنی خانواده ئون شه وچون ره یارنه اونجه تفریح. صاحب هتلِ کیجا اینمیونه گوم وونه. ونه رفخ و اتا ریکا که تازه ونجه آشنا بئی بییه، سرنخ ره دمبال کنّه که وه ره پىدا هاکنن و اینتی یواش-یواش باقیِ مسافرون ِ رمز و راز هم لو شونه.
== منابع ==
{{پهنویس}}
* [https://www.netflix.com/title/81734907 نت فلیکس ]
<!--- رجئون: --->
[[رج:۲۰۲۶ فیلمون]]
[[رج:ایسپانیایی سریالون]]
1ujdw51i02s53bpooxs36537724d7il
اسپایدرمن نوآر
0
171622
389801
2026-07-10T07:26:55Z
محک
1023
مقالهئونی که گت صفحهیِ کادر جه بساتنه.
389801
wikitext
text/x-wiki
{{صندخ/سریال<!-- اینجه تونی شه مقالهٔ کلّی موضوع ره بنویسین تا صندخ بساجه. شهر، شخص، موجود، بنا، کومپانی و... واری -->}}
'''اسپایدرمن نوآر''' اتا ابر-قهرمونی سریال هسته که [[بتّو-مردی|بتّو-مردی (اسپایدرمن)]] نقش ره [[نیکولاس کیج]] دارنه. این سریال ره ۲۰۲۶ سال، دِ نسخه که اتا سیاهسفید و اتی دیئر رنگی هسته، تنک هاکردنه.
اسپایدرمن اتا کارآگاه بیه و دفتر بزو. سالهایی هسته که آمریکا دله رکود بیه و مردم کار و پول دربیاردن سر مشکل ور خرنه. کارگاه وسه مشتریونی إنه که وه ره مزارب اینگنده اتا نخش پرونده وسط دکفه.
== منابع ==
{{پهنویس}}
<!--- رجئون: --->
[[رج:اسپایدرمن]]
[[رج:آمریکایی سریالون]]
[[رج:۲۰۲۶ فیلمون]]
o1hru6etw1j06sfdrshv7zegn6o0vhk
پرونده:TheMaster2012Poster.jpg
6
171623
389802
2026-02-24T01:50:40Z
en>Jevansen
0
+ [[Category:Film posters for English-language films]]
389802
wikitext
text/x-wiki
== Summary ==
{{Non-free use rationale poster
| Media = film
| Article = The Master (2012 film)
| Use = Infobox
<!-- ADDITIONAL INFORMATION -->
| Name = The Master
| Distributor = [[The Weinstein Company]]
| Publisher =
| Owner = [[The Weinstein Company]]
| Website = [http://www.impawards.com/2012/master_ver2.html IMP Awards]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2010s American film posters}}
[[Category:Film posters for English-language films]]
9v9pzfscxq7lhk8x7p3qrte8wqsvp9i
389803
389802
2026-07-10T09:32:41Z
محک
1023
۱ نسخه واردشده از [[:en:File:TheMaster2012Poster.jpg]]: File:TheMaster2012Poster.jpg
389802
wikitext
text/x-wiki
== Summary ==
{{Non-free use rationale poster
| Media = film
| Article = The Master (2012 film)
| Use = Infobox
<!-- ADDITIONAL INFORMATION -->
| Name = The Master
| Distributor = [[The Weinstein Company]]
| Publisher =
| Owner = [[The Weinstein Company]]
| Website = [http://www.impawards.com/2012/master_ver2.html IMP Awards]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2010s American film posters}}
[[Category:Film posters for English-language films]]
9v9pzfscxq7lhk8x7p3qrte8wqsvp9i
389808
389803
2026-07-10T09:33:20Z
محک
1023
محک [[پرونده:TheMaster2012Poster.jpg]] ره بار بییشته
389802
wikitext
text/x-wiki
== Summary ==
{{Non-free use rationale poster
| Media = film
| Article = The Master (2012 film)
| Use = Infobox
<!-- ADDITIONAL INFORMATION -->
| Name = The Master
| Distributor = [[The Weinstein Company]]
| Publisher =
| Owner = [[The Weinstein Company]]
| Website = [http://www.impawards.com/2012/master_ver2.html IMP Awards]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2010s American film posters}}
[[Category:Film posters for English-language films]]
9v9pzfscxq7lhk8x7p3qrte8wqsvp9i
د مستر (۲۰۱۲ فیلم)
0
171624
389810
2026-07-10T09:34:30Z
محک
1023
ونه مسیر ره دکشییه [[د مستر]] دله
389810
wikitext
text/x-wiki
#بور [[د مستر]]
2iwzz55b0vrli9l6k9omj4vxx1fqrgc
پرونده:Normal poster.jpeg
6
171625
389811
2026-02-20T06:21:31Z
en>TAnthony
0
/* Licensing */
389811
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = This is a poster for ''Normal''.
The poster art copyright is believed to belong to the distributor of the film, the publisher of the film or the graphic artist.
|Source = https://www.impawards.com/2026/normal.html
|Author = [[Magnolia Pictures]]
|Article = Normal (2025 film)
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = It will be used once for the page
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
== Licensing ==
{{Non-free film poster|image_has_rationale=yes|2020s American film posters}}
[[Category:2020s Canadian film posters]]
serieutax2asuz7d8qkov014uk7oh8t
389812
389811
2026-07-10T09:35:48Z
محک
1023
۱ نسخه واردشده از [[:en:File:Normal_poster.jpeg]]
389811
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = This is a poster for ''Normal''.
The poster art copyright is believed to belong to the distributor of the film, the publisher of the film or the graphic artist.
|Source = https://www.impawards.com/2026/normal.html
|Author = [[Magnolia Pictures]]
|Article = Normal (2025 film)
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = It will be used once for the page
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
== Licensing ==
{{Non-free film poster|image_has_rationale=yes|2020s American film posters}}
[[Category:2020s Canadian film posters]]
serieutax2asuz7d8qkov014uk7oh8t
389813
389812
2026-07-10T09:36:07Z
محک
1023
محک [[پرونده:Normal poster.jpeg]] ره بار بییشته
389811
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = This is a poster for ''Normal''.
The poster art copyright is believed to belong to the distributor of the film, the publisher of the film or the graphic artist.
|Source = https://www.impawards.com/2026/normal.html
|Author = [[Magnolia Pictures]]
|Article = Normal (2025 film)
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = It will be used once for the page
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
== Licensing ==
{{Non-free film poster|image_has_rationale=yes|2020s American film posters}}
[[Category:2020s Canadian film posters]]
serieutax2asuz7d8qkov014uk7oh8t
پرونده:Die My Love 2025.jpeg
6
171626
389815
2025-11-11T11:13:24Z
en>KylieTastic
0
Previous version deleted per [[WP:F5|F5]]
389815
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = Die My Love movie poster
|Source = [https://www.imdb.com/title/tt9362736/mediaviewer/rm3832326402/?ref_=tt_ov_i IMDb]
|Author = Mubi
|Article = Die My Love
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = to serve as the primary means of visual identification at the top of the article dedicated to the work in question
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
==Licensing==
{{Non-free poster|image_has_rationale=yes|2020s American film posters}}}}
8pzpodfyxl9jnlfih0djbchmtiw9fdq
389816
389815
2026-07-10T09:37:42Z
محک
1023
۱ نسخه واردشده از [[:en:File:Die_My_Love_2025.jpeg]]
389815
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = Die My Love movie poster
|Source = [https://www.imdb.com/title/tt9362736/mediaviewer/rm3832326402/?ref_=tt_ov_i IMDb]
|Author = Mubi
|Article = Die My Love
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = to serve as the primary means of visual identification at the top of the article dedicated to the work in question
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
==Licensing==
{{Non-free poster|image_has_rationale=yes|2020s American film posters}}}}
8pzpodfyxl9jnlfih0djbchmtiw9fdq
389817
389816
2026-07-10T09:38:00Z
محک
1023
محک [[پرونده:Die My Love 2025.jpeg]] ره بار بییشته
389815
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = Die My Love movie poster
|Source = [https://www.imdb.com/title/tt9362736/mediaviewer/rm3832326402/?ref_=tt_ov_i IMDb]
|Author = Mubi
|Article = Die My Love
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = to serve as the primary means of visual identification at the top of the article dedicated to the work in question
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
==Licensing==
{{Non-free poster|image_has_rationale=yes|2020s American film posters}}}}
8pzpodfyxl9jnlfih0djbchmtiw9fdq
پرونده:An American Pickle poster.jpg
6
171627
389820
2026-02-24T02:52:54Z
en>Jevansen
0
+ [[Category:Film posters for English-language films]]
389820
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale poster
| Article = An American Pickle
| Use = Infobox
| Media = film
| Distributor = [[HBO Max]]
| Source = http://www.impawards.com/tv/american_pickle.html
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:Film posters for English-language films]]
lahu6fbj31vccnnlj5o3jx6wk80u5pk
389821
389820
2026-07-10T09:41:36Z
محک
1023
۱ نسخه واردشده از [[:en:File:An_American_Pickle_poster.jpg]]
389820
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale poster
| Article = An American Pickle
| Use = Infobox
| Media = film
| Distributor = [[HBO Max]]
| Source = http://www.impawards.com/tv/american_pickle.html
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:Film posters for English-language films]]
lahu6fbj31vccnnlj5o3jx6wk80u5pk
389824
389821
2026-07-10T09:42:11Z
محک
1023
محک [[پرونده:An American Pickle poster.jpg]] ره بار بییشته
389820
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale poster
| Article = An American Pickle
| Use = Infobox
| Media = film
| Distributor = [[HBO Max]]
| Source = http://www.impawards.com/tv/american_pickle.html
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:Film posters for English-language films]]
lahu6fbj31vccnnlj5o3jx6wk80u5pk
پرونده:Going in Style 2017 film poster.jpg
6
171628
389826
2026-02-24T02:19:10Z
en>Jevansen
0
+ [[Category:Film posters for English-language films]]
389826
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = Poster of ''[[Going in Style (2017 film)|Going in Style]]''.
|Source = [http://www.impawards.com/2017/going_in_style.html IMP Awards]
|Author = Warner Bros. Pictures
|Article = Going in Style (2017 film)
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = n.a.
|Minimality = The image is placed in the infobox at the top of the article as the primary visual image associated with the work.
|Commercial = n.a.
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2010s American film posters}}
[[Category:Film posters for English-language films]]
06lmueafnlnnyw8ic9nsfh8gn4jo2sh
389827
389826
2026-07-10T09:44:13Z
محک
1023
۱ نسخه واردشده از [[:en:File:Going_in_Style_2017_film_poster.jpg]]
389826
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = Poster of ''[[Going in Style (2017 film)|Going in Style]]''.
|Source = [http://www.impawards.com/2017/going_in_style.html IMP Awards]
|Author = Warner Bros. Pictures
|Article = Going in Style (2017 film)
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = n.a.
|Minimality = The image is placed in the infobox at the top of the article as the primary visual image associated with the work.
|Commercial = n.a.
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2010s American film posters}}
[[Category:Film posters for English-language films]]
06lmueafnlnnyw8ic9nsfh8gn4jo2sh
389828
389827
2026-07-10T09:44:30Z
محک
1023
محک [[پرونده:Going in Style 2017 film poster.jpg]] ره بار بییشته
389826
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale 2
|Description = Poster of ''[[Going in Style (2017 film)|Going in Style]]''.
|Source = [http://www.impawards.com/2017/going_in_style.html IMP Awards]
|Author = Warner Bros. Pictures
|Article = Going in Style (2017 film)
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = n.a.
|Minimality = The image is placed in the infobox at the top of the article as the primary visual image associated with the work.
|Commercial = n.a.
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2010s American film posters}}
[[Category:Film posters for English-language films]]
06lmueafnlnnyw8ic9nsfh8gn4jo2sh
پرونده:Still breathing 1997 film.jpg
6
171629
389831
2026-02-24T00:34:28Z
en>Jevansen
0
+ [[Category:Film posters for English-language films]]
389831
wikitext
text/x-wiki
== Licensing ==
{{Non-free film poster|image has rationale=yes|1990s American film posters}}
== Fair use ==
It is believed that this image, Still breathing 1997 film.jpg, is subject to fair use in the article [[Still Breathing (film)|''Still Breathing'' (film)]] because:
# This image illustrates the text next to which it appears, which describes the person in question for which it promotes.
# It is of much lower resolution than the original (copies made from it will be of very inferior quality).
# It does not limit the copyright owner's rights to market or sell the work in any way.
# This image is used on various websites, so its use on Wikipedia does not make it significantly more accessible or visible than it already is.
# The image is being used in an informative way and should not detract from the original work.
# No free or public domain images have been located for this item.
Creator/Source: October Films
[[Category:Film posters for English-language films]]
5y8uoc3bsxgoikyglgwkze2jrxnue3k
389832
389831
2026-07-10T09:48:49Z
محک
1023
۱ نسخه واردشده از [[:en:File:Still_breathing_1997_film.jpg]]
389831
wikitext
text/x-wiki
== Licensing ==
{{Non-free film poster|image has rationale=yes|1990s American film posters}}
== Fair use ==
It is believed that this image, Still breathing 1997 film.jpg, is subject to fair use in the article [[Still Breathing (film)|''Still Breathing'' (film)]] because:
# This image illustrates the text next to which it appears, which describes the person in question for which it promotes.
# It is of much lower resolution than the original (copies made from it will be of very inferior quality).
# It does not limit the copyright owner's rights to market or sell the work in any way.
# This image is used on various websites, so its use on Wikipedia does not make it significantly more accessible or visible than it already is.
# The image is being used in an informative way and should not detract from the original work.
# No free or public domain images have been located for this item.
Creator/Source: October Films
[[Category:Film posters for English-language films]]
5y8uoc3bsxgoikyglgwkze2jrxnue3k
389833
389832
2026-07-10T09:50:08Z
محک
1023
محک [[پرونده:Still breathing 1997 film.jpg]] ره بار بییشته
389831
wikitext
text/x-wiki
== Licensing ==
{{Non-free film poster|image has rationale=yes|1990s American film posters}}
== Fair use ==
It is believed that this image, Still breathing 1997 film.jpg, is subject to fair use in the article [[Still Breathing (film)|''Still Breathing'' (film)]] because:
# This image illustrates the text next to which it appears, which describes the person in question for which it promotes.
# It is of much lower resolution than the original (copies made from it will be of very inferior quality).
# It does not limit the copyright owner's rights to market or sell the work in any way.
# This image is used on various websites, so its use on Wikipedia does not make it significantly more accessible or visible than it already is.
# The image is being used in an informative way and should not detract from the original work.
# No free or public domain images have been located for this item.
Creator/Source: October Films
[[Category:Film posters for English-language films]]
5y8uoc3bsxgoikyglgwkze2jrxnue3k
پرونده:Coda poster.jpeg
6
171630
389834
2024-08-08T17:40:39Z
en>TAnthony
0
Refine image category
389834
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale poster
| Article = CODA (2021 film)
| Use = Infobox
| Media = film
| Name = CODA
| Distributor = [[Apple TV+]]
| Source = [http://www.impawards.com/2021/coda.html IMP Awards / 2021 Movie Poster Gallery / CODA Poster]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:2020s French film posters]]
le86ogd11pq0modmxkuttb4mvl4rcnp
389835
389834
2026-07-10T09:52:37Z
محک
1023
۱ نسخه واردشده از [[:en:File:Coda_poster.jpeg]]
389834
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale poster
| Article = CODA (2021 film)
| Use = Infobox
| Media = film
| Name = CODA
| Distributor = [[Apple TV+]]
| Source = [http://www.impawards.com/2021/coda.html IMP Awards / 2021 Movie Poster Gallery / CODA Poster]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:2020s French film posters]]
le86ogd11pq0modmxkuttb4mvl4rcnp
389836
389835
2026-07-10T09:52:56Z
محک
1023
محک [[پرونده:Coda poster.jpeg]] ره بار بییشته
389834
wikitext
text/x-wiki
==Summary==
{{Non-free use rationale poster
| Article = CODA (2021 film)
| Use = Infobox
| Media = film
| Name = CODA
| Distributor = [[Apple TV+]]
| Source = [http://www.impawards.com/2021/coda.html IMP Awards / 2021 Movie Poster Gallery / CODA Poster]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:2020s French film posters]]
le86ogd11pq0modmxkuttb4mvl4rcnp
پرونده:Shelby Oaks.jpg
6
171631
389838
2026-02-24T00:17:24Z
en>Jevansen
0
+ [[Category:Film posters for English-language films]]
389838
wikitext
text/x-wiki
{{Better source requested}}
==Summary==
{{Non-free use rationale 2
|Description = Shelby Oaks film poster
|Source = [https://m.media-amazon.com/images/M/MV5BOWQ1MjA5YzItMmE2NC00YWZkLWEwZjMtOTIxMDgyYmU2MTRmXkEyXkFqcGc@._V1_FMjpg_UX1000_.jpg IMDb]
|Date = 2025
|Author = [[Neon (company)|Neon]]
|Article = Shelby Oaks
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = Low resolution scan.
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
== Licensing ==
{{Non-free film poster|image_has_rationale=yes|2020s American film posters}}
[[Category:2020s horror film posters]]
[[Category:Film posters for English-language films]]
31rjos4f6e8y574sex71enwnp1z3u1f
389839
389838
2026-07-10T09:55:26Z
محک
1023
۱ نسخه واردشده از [[:en:File:Shelby_Oaks.jpg]]: https://en.wikipedia.org/wiki/Shelby_Oaks#/media/File:Shelby_Oaks.jpg
389838
wikitext
text/x-wiki
{{Better source requested}}
==Summary==
{{Non-free use rationale 2
|Description = Shelby Oaks film poster
|Source = [https://m.media-amazon.com/images/M/MV5BOWQ1MjA5YzItMmE2NC00YWZkLWEwZjMtOTIxMDgyYmU2MTRmXkEyXkFqcGc@._V1_FMjpg_UX1000_.jpg IMDb]
|Date = 2025
|Author = [[Neon (company)|Neon]]
|Article = Shelby Oaks
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = Low resolution scan.
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
== Licensing ==
{{Non-free film poster|image_has_rationale=yes|2020s American film posters}}
[[Category:2020s horror film posters]]
[[Category:Film posters for English-language films]]
31rjos4f6e8y574sex71enwnp1z3u1f
389842
389839
2026-07-10T09:55:43Z
محک
1023
محک [[پرونده:Shelby Oaks.jpg]] ره بار بییشته
389838
wikitext
text/x-wiki
{{Better source requested}}
==Summary==
{{Non-free use rationale 2
|Description = Shelby Oaks film poster
|Source = [https://m.media-amazon.com/images/M/MV5BOWQ1MjA5YzItMmE2NC00YWZkLWEwZjMtOTIxMDgyYmU2MTRmXkEyXkFqcGc@._V1_FMjpg_UX1000_.jpg IMDb]
|Date = 2025
|Author = [[Neon (company)|Neon]]
|Article = Shelby Oaks
|Purpose = to serve as the primary means of visual identification at the top of the article dedicated to the work in question.
|Replaceability = Any derivative work based upon the cover art would be a copyright violation, so creation of a free image is not possible.
|Minimality = Low resolution scan.
|Commercial = The use of a low resolution image of a work's cover will not impact the commercial viability of the work.
}}
== Licensing ==
{{Non-free film poster|image_has_rationale=yes|2020s American film posters}}
[[Category:2020s horror film posters]]
[[Category:Film posters for English-language films]]
31rjos4f6e8y574sex71enwnp1z3u1f
شابلون:Better source requested
10
171632
389840
2020-11-28T17:54:05Z
en>Primefac
0
Primefac moved page [[Template:Bsr]] to [[Template:Better source requested]]: per [[Special:PermaLink/991170251#Requested_move_20_November_2020|RM outcome]]
389840
wikitext
text/x-wiki
{{imbox
| type = content
| name = Bsr
| text = This image has source information, but it either links '''directly to the image''' or is a '''generic base [[Uniform resource locator|URL]]''', or is not an Internet source for an image that was likely found on the Internet. Source information should be provided so that the [[Wikipedia:File copyright tags|copyright]] status can be verified by others. It is requested that a better source be provided to make determination of the copyright information easier. Please provide a URL to an [[HTML]] page that contains this image. See [[Wikipedia:Citing sources#Multimedia]] for more information.
''Please remove this template once better source information is provided.''
<small>Notify the uploader with: <nowiki>{{subst:</nowiki>[[Template:bsr-user|bsr-user]]<nowiki>|1=File:</nowiki>{{PAGENAME}}<nowiki>}} ~~~~</nowiki></small>
}}{{{category|{{file other|[[Category:Files with poor sources|{{PAGENAME}}]]}}}}}<noinclude>{{Documentation}}</noinclude>
3bpe0sbxv2fko6dv6p1s29356gdhrk1
389841
389840
2026-07-10T09:55:26Z
محک
1023
۱ نسخه واردشده از [[:en:Template:Better_source_requested]]: https://en.wikipedia.org/wiki/Shelby_Oaks#/media/File:Shelby_Oaks.jpg
389840
wikitext
text/x-wiki
{{imbox
| type = content
| name = Bsr
| text = This image has source information, but it either links '''directly to the image''' or is a '''generic base [[Uniform resource locator|URL]]''', or is not an Internet source for an image that was likely found on the Internet. Source information should be provided so that the [[Wikipedia:File copyright tags|copyright]] status can be verified by others. It is requested that a better source be provided to make determination of the copyright information easier. Please provide a URL to an [[HTML]] page that contains this image. See [[Wikipedia:Citing sources#Multimedia]] for more information.
''Please remove this template once better source information is provided.''
<small>Notify the uploader with: <nowiki>{{subst:</nowiki>[[Template:bsr-user|bsr-user]]<nowiki>|1=File:</nowiki>{{PAGENAME}}<nowiki>}} ~~~~</nowiki></small>
}}{{{category|{{file other|[[Category:Files with poor sources|{{PAGENAME}}]]}}}}}<noinclude>{{Documentation}}</noinclude>
3bpe0sbxv2fko6dv6p1s29356gdhrk1
پرونده:Furiosa A Mad Max Saga.jpg
6
171633
389845
2026-02-24T04:06:49Z
en>Jevansen
0
+ [[Category:Film posters for English-language films]]
389845
wikitext
text/x-wiki
== Summary ==
{{Non-free use rationale poster
| Article = Furiosa: A Mad Max Saga
| Use = Infobox
| Owner = [[Warner Bros. Pictures]]
| Source = [https://www.imdb.com/title/tt12037194/mediaviewer/rm1584887809/ IMDb]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:2020s Australian film posters]]
[[Category:Film posters for English-language films]]
sraueuu8ldqgsqvzvfgyvxaldqzksue
389846
389845
2026-07-10T09:58:36Z
محک
1023
۱ نسخه واردشده از [[:en:File:Furiosa_A_Mad_Max_Saga.jpg]]
389845
wikitext
text/x-wiki
== Summary ==
{{Non-free use rationale poster
| Article = Furiosa: A Mad Max Saga
| Use = Infobox
| Owner = [[Warner Bros. Pictures]]
| Source = [https://www.imdb.com/title/tt12037194/mediaviewer/rm1584887809/ IMDb]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:2020s Australian film posters]]
[[Category:Film posters for English-language films]]
sraueuu8ldqgsqvzvfgyvxaldqzksue
389847
389846
2026-07-10T09:58:52Z
محک
1023
محک [[پرونده:Furiosa A Mad Max Saga.jpg]] ره بار بییشته
389845
wikitext
text/x-wiki
== Summary ==
{{Non-free use rationale poster
| Article = Furiosa: A Mad Max Saga
| Use = Infobox
| Owner = [[Warner Bros. Pictures]]
| Source = [https://www.imdb.com/title/tt12037194/mediaviewer/rm1584887809/ IMDb]
}}
== Licensing ==
{{Non-free film poster|image has rationale=yes|2020s American film posters}}
[[Category:2020s Australian film posters]]
[[Category:Film posters for English-language films]]
sraueuu8ldqgsqvzvfgyvxaldqzksue