ویکینبشته
fawikisource
https://fa.wikisource.org/wiki/%D8%B5%D9%81%D8%AD%D9%87%D9%94_%D8%A7%D8%B5%D9%84%DB%8C
MediaWiki 1.47.0-wmf.20
first-letter
مدیا
ویژه
بحث
کاربر
بحث کاربر
ویکینبشته
بحث ویکینبشته
پرونده
بحث پرونده
مدیاویکی
بحث مدیاویکی
الگو
بحث الگو
راهنما
بحث راهنما
رده
بحث رده
درگاه
بحث درگاه
پدیدآورنده
بحث پدیدآورنده
برگه
گفتگوی برگه
فهرست
گفتگوی فهرست
TimedText
TimedText talk
پودمان
بحث پودمان
Event
Event talk
راهنما:افزودن تصویر
12
19694
299739
196478
2026-09-19T17:39:03Z
Hanooz
17889
ترجمه هوش مصنوعی
299739
wikitext
text/x-wiki
{{سرصفحه پردازش
|title =راهنما: افزودن تصویر
|notes =
یکی از راهنماهای زودیاب: [[راهنما:آشنایی|آشنایی عمومی]] – [[راهنما:خواندن|خواندن]] – [[راهنما:ویرایش ویکینبشته|ویرایش]] – [[راهنما:افزودن متن|افزودن متن جدید]] – [[راهنما:افزودن تصویر|افزودن تصویر]] – [[راهنما:درونمایه|راهنمایی بیشتر]]
}}
این صفحه روند کلی آمادهسازی و گنجاندن محتوای مصور در ویکینبشته را بیان میکند.
[[ویکینبشته:رهنمودهای تصویر|رهنمودهای تصویر]] به کاربرد، سبک و معیارهای گنجاندن تصاویر میپردازند.
پس از آماده شدن تصویر، به [[:c:Special:MyLanguage/Main Page|ویکیانبار]] بروید و دستورالعملهای [[:c:Special:Upload|بارگذاری تصویر]] را دنبال کنید.
اگر انجام دستی این کار برایتان بسیار دشوار است، میتوانید [https://ws-image-uploader.toolforge.org ابزار «Wikisource Illustrator»] را امتحان کنید (که میتوانید آن را از طریق یک ابزارک فعال کنید). تصویر را خودتان استخراج کنید، فرادادهها را وارد کنید و سپس روی «بارگذاری» بزنید.
==انواع پرونده==
*DjVu: پروندهای شامل یک لایهٔ متنی ماشینخوان و اسکنی از منبع. اغلب در نمونهخوانیِ پهلو به پهلو از طریق [[راهنما:فضای نام|فضاهای نام]] «برگه» و «فهرست» به کار میرود.
*JPG، PNG، TIFF و جز آنها: برای تصاویر مناسباند و معمولاً در همان منبعی که DjVu را ارائه میدهد در دسترس هستند.
==آمادهسازی تصویر==
#یک تصویر با کیفیت بالا تهیه کنید: [[#کیفیت تصویر|پایین]] را ببینید. آن را در یک ویرایشگر تصویر باز کنید.
#تصویر را برش دهید تا متن، از جمله شرح تصویر، و هر فضای خالی اضافه حذف شود.
#در صورت نیاز تصویر را به چپ یا راست بچرخانید؛ تنظیم دقیقتر زاویه نیز میتواند تصویر را بهتر کند.
#پسزمینهٔ سفید یا شفاف با صفحههای ویکینبشته سازگار است؛ بنابراین تبدیل تصاویر تکرنگ را در نظر بگیرید
:*با اعمال «پروفایل رنگ» (colour profile) یا فرمانی مشابه، تصویر را به طیف خاکستری تبدیل کنید
:*با «تصحیح رنگ» (colour correction) یا فرمانی مشابه، نقاط سیاه و سفید را تنظیم کنید.
نتیجه باید رنگ پسزمینه را از میان ببرد و فقط «جوهر» را برای نمایش باقی بگذارد. تصاویر رنگی به فنون بازسازی پیشرفتهتری نیاز دارند؛ برای کمک در این زمینه میتوانید به ویکیانبار مراجعه کنید.
==کیفیت تصویر==
روش تهیهٔ اسکن صفحهها و تصاویر با کیفیت بالا.
===تصاویر متنی===
قالب DjVu برای رونویسی، نمونهخوانی و تأیید آثار در ویکینبشته در دسترس است. این پروندهها برای چاپ بهینه شدهاند، حجم پرونده را بهشدت فشرده میکنند و برای هر صفحه متن دیجیتالیشده دارند. این قالب نمودارهای ساده را نیز نمایش میدهد، اما برای فشردهسازی رنگ و جزئیات ظریف مناسب نیست. کاربرد آنها در [[راهنما:نمونهخوانی]] بحث شده است.
#اسکن یک اثر را در پایگاهی مانند [https://www.archive.org archive.org] جستوجو کنید
#کیفیت اسکن گاهی ضعیف است. با یک نمایشگر برخط چند صفحهٔ اسکنشده را نمونهوار بررسی کنید، یا نسخهٔ متنیِ موجود در پایگاه را وارسی کنید، یا [[راهنما:استخراج تصویر#از تصاویر صفحهٔ JP2|یک پروندهٔ .jp2 را دستکاری کنید]]
#همانگونه که در ادامه آمده است، با عنوان مناسب و ابهامزدایی لازم بارگذاری کنید.
*نکته: اگر صفحهٔ نخست محتوای اضافی دارد، میتوان آن را حذف کرد.
#پرونده را با [http://sourceforge.net/projects/djvu/ DjVuLibre] یا نرمافزاری مشابه باز کنید
#گزینهٔ «ذخیره بهعنوان» (save as) را انتخاب کنید و بازهٔ صفحهها را تنظیم کنید، مثلاً ۲–۱۲۳
===تصویرسازیها===
پایگاهها اغلب اسکن اسناد را در قالبهای پروندهٔ گوناگون ارائه میکنند. دستورالعمل استخراج تصویر از این پروندهها در [[راهنما:استخراج تصویر]] آمده است.
* راهنمای ویکیانبار: [[c:Commons:Preparing images for upload|Commons:Preparing images for upload]]
==مراحل بارگذاری==
برای افزودن تصویر به ویکینبشته از [[:commons:Main Page|ویکیانبار]] استفاده کنید؛ تصاویر در آنجا بلافاصله برای استفاده در ویکینبشته و جاهای دیگر در دسترس قرار میگیرند. تصاویر معمولاً مستقیماً در ویکینبشته بارگذاری نمیشوند.
:''همچنین ببینید:'' [[:c:Commons:First steps|Commons:First steps]]
#مطمئن شوید تصویری که میخواهید بارگذاری کنید با [[:commons:Commons:Licensing|قوانین حق تکثیر]] ویکیانبار سازگار است.
#از بهترین کیفیت موجود استفاده کنید و پرونده را برای گنجاندن در اینجا ویرایش کنید.
#[[:c:Special:Upload|پرونده را بارگذاری کنید]] و اطلاعات دقیقی دربارهٔ تصویر، نشانی (URL) منبع و وضعیت حق تکثیر ارائه دهید.
#بر پایهٔ سبکی که در [[ویکینبشته:رهنمودهای تصویر|رهنمودهای تصویر]] آمده است، نامی برای پرونده انتخاب کنید و آن را در ویکیانبار ردهبندی کنید.
#هر تغییری مانند برش، حذف شرح تصویر یا تبدیل به سیاهوسفید را یادداشت کنید. بهترین روش در ویکیانبار آن است که پروندهٔ اصلیِ ویرایشنشده را هم بارگذاری کنید و در توضیحات، از طریق <code> other_versions=</code> به آن پیوند دهید.
===اسکنهای دارای پیوند به ویکیداده===
اگر صفحهٔ فهرست (Index) اثر شما یک آیتم ویکیداده دارد (چیزی به شکل Qnnnn که n هر تعداد رقم است)، میتوانید {{tl|Information}} را به {{tl|Book}} تغییر دهید و بهجای تاریخ و پدیدآورنده، «|wikidata = » و «|Image page =» را اضافه کنید؛ در این صورت بقیهٔ اطلاعات از ویکیداده پر میشود. افزون بر این، شمارهٔ صفحه را (شمارهٔ صفحهٔ اسکن، نه صفحهٔ چاپی) بنویسید تا الگو تصویر اسکن را روی صفحهٔ مربوط به تصویر باز کند و دیگر نیازی به اشاره به پروندهٔ اصلی نباشد.
از [[commons:Special:Upload]] استفاده کنید؛ ویرایش الگوی Information در آنجا آسان است و با دکمهٔ «بازگشت» مرورگر، فرمِ قبلی دوباره در دسترس خواهد بود. فقط کافی است مکان پروندهٔ بعدی را بدهید و شمارهٔ صفحه و/یا توضیح را ویرایش کنید.
با ویکیداده، تنها مواردی که بر عهدهٔ شماست شمارهٔ آیتم داده، یک ردهٔ مناسب و مجوز است.
=== دادههای ساختاریافته ===
به پروندههای ویکیانبار میتوان [[commons:COM:SDC|دادههای ساختاریافته]] (SDC) پیوست کرد تا دادههای تصویر بهصورت ماشینخوان پردازش شوند.
دستورالعملهای مربوط به انواع SDC و قالبهای استانداردِ کاربردی برای تصاویر استخراجشده از کتابها در [[commons:Commons:Structured data/Modeling/Illustrations|Commons:Structured data/Modeling/Illustrations]] آمده است.
در ویکیانبار ابزارکی به نام «[[c:Help:Gadget-ACDC|AC/DC]]» (کوتاهشدهٔ «Add to Commons / Descriptive Claims») وجود دارد که از طریق ترجیحات فعال میشود و امکان میدهد دادههای ساختاریافته را یکجا به همهٔ تصاویر یک رده اضافه کنید. باید رده را بدانید و تصوری از ویژگیهایی که میخواهید اضافه کنید داشته باشید.
دستکم افزودن تاریخ انتشار (P1433) و وضعیت حق تکثیر (P6216) توصیه میشود.
برای دادههای ساختاریافتهٔ متناظر (ویژگیها) دربارهٔ ''خودِ کتابها''، [[ویکینبشته:ویکیداده]] را ببینید.
==افزودن به ویکینبشته==
{{Img float
| file = The Kinematics of Machinery Fig 1.png
| width = 200px
| align = right
| cap = {{font-size-x|90%|این تصویر با {{tl|img float}} نمایش داده شده است. قاب ندارد، اما همچنان شرح تصویر دارد.}}
| capalign = right
|alt= نمودار سادهای از دو پارهخط با کمانهای متقاطع
}}
:''همچنین ببینید: [[:w:Wikipedia:Picture tutorial|Wikipedia:Picture tutorial]]''
#به صفحهای در ویکینبشته که میخواهید تصویر را در آن اضافه کنید بروید و سپس روی «ویرایش» کلیک کنید.
#برای افزودن تصویر، <nowiki>[[پرونده:</nowiki>'''نام تصویر در اینجا.jpg'''<nowiki>|frameless]]</nowiki> را بنویسید. همچنین میتوان تصویر را تراز کرد: <nowiki>[[پرونده:</nowiki>'''نام تصویر در اینجا.jpg'''<nowiki>|frameless|center]]</nowiki> تصویر را در وسط صفحه قرار میدهد و «left» یا «right» به متن اجازه میدهد دور تصویر جریان یابد.
#اندازهٔ تصویر ترجیحی است که کاربر آن را تعیین میکند. برای نادیده گرفتن اندازهٔ پیشفرض، مقداری مانند <nowiki>...|frameless|90px]]</nowiki> اضافه کنید تا اندازهای نسبتاً کوچکتر اعمال شود. توجه کنید که تصاویر بزرگتر میتوانند بر نمایش صفحه تأثیر بگذارند و ممکن است حجم آن را بسیار افزایش دهند.
#با استفاده از پارامتر <nowiki>...|alt=[متن توصیفی]|...</nowiki>، آنقدر توضیح بدهید که کسی که کتاب را با صفحهخوان گوش میکند بتواند تصویر و ارجاع متن به آن را بفهمد.
#تغییر را ذخیره کنید و مطمئن شوید که تصویر به هیچ شکلی مانع خواندن متن نمیشود.
* همچنین میتوانید از الگویی مانند {{tl|img float}} استفاده کنید تا تصویری شناور در سمت چپ یا راست، همراه با شرح تصویر اما بدون قاب، درج شود.
[[رده:راهنما]]
9h9dnkxjggjgw52niwaifigiyunbd7q
299745
299739
2026-09-19T18:38:51Z
Hanooz
17889
/* افزودن به ویکینبشته */
299745
wikitext
text/x-wiki
{{سرصفحه پردازش
|title =راهنما: افزودن تصویر
|notes =
یکی از راهنماهای زودیاب: [[راهنما:آشنایی|آشنایی عمومی]] – [[راهنما:خواندن|خواندن]] – [[راهنما:ویرایش ویکینبشته|ویرایش]] – [[راهنما:افزودن متن|افزودن متن جدید]] – [[راهنما:افزودن تصویر|افزودن تصویر]] – [[راهنما:درونمایه|راهنمایی بیشتر]]
}}
این صفحه روند کلی آمادهسازی و گنجاندن محتوای مصور در ویکینبشته را بیان میکند.
[[ویکینبشته:رهنمودهای تصویر|رهنمودهای تصویر]] به کاربرد، سبک و معیارهای گنجاندن تصاویر میپردازند.
پس از آماده شدن تصویر، به [[:c:Special:MyLanguage/Main Page|ویکیانبار]] بروید و دستورالعملهای [[:c:Special:Upload|بارگذاری تصویر]] را دنبال کنید.
اگر انجام دستی این کار برایتان بسیار دشوار است، میتوانید [https://ws-image-uploader.toolforge.org ابزار «Wikisource Illustrator»] را امتحان کنید (که میتوانید آن را از طریق یک ابزارک فعال کنید). تصویر را خودتان استخراج کنید، فرادادهها را وارد کنید و سپس روی «بارگذاری» بزنید.
==انواع پرونده==
*DjVu: پروندهای شامل یک لایهٔ متنی ماشینخوان و اسکنی از منبع. اغلب در نمونهخوانیِ پهلو به پهلو از طریق [[راهنما:فضای نام|فضاهای نام]] «برگه» و «فهرست» به کار میرود.
*JPG، PNG، TIFF و جز آنها: برای تصاویر مناسباند و معمولاً در همان منبعی که DjVu را ارائه میدهد در دسترس هستند.
==آمادهسازی تصویر==
#یک تصویر با کیفیت بالا تهیه کنید: [[#کیفیت تصویر|پایین]] را ببینید. آن را در یک ویرایشگر تصویر باز کنید.
#تصویر را برش دهید تا متن، از جمله شرح تصویر، و هر فضای خالی اضافه حذف شود.
#در صورت نیاز تصویر را به چپ یا راست بچرخانید؛ تنظیم دقیقتر زاویه نیز میتواند تصویر را بهتر کند.
#پسزمینهٔ سفید یا شفاف با صفحههای ویکینبشته سازگار است؛ بنابراین تبدیل تصاویر تکرنگ را در نظر بگیرید
:*با اعمال «پروفایل رنگ» (colour profile) یا فرمانی مشابه، تصویر را به طیف خاکستری تبدیل کنید
:*با «تصحیح رنگ» (colour correction) یا فرمانی مشابه، نقاط سیاه و سفید را تنظیم کنید.
نتیجه باید رنگ پسزمینه را از میان ببرد و فقط «جوهر» را برای نمایش باقی بگذارد. تصاویر رنگی به فنون بازسازی پیشرفتهتری نیاز دارند؛ برای کمک در این زمینه میتوانید به ویکیانبار مراجعه کنید.
==کیفیت تصویر==
روش تهیهٔ اسکن صفحهها و تصاویر با کیفیت بالا.
===تصاویر متنی===
قالب DjVu برای رونویسی، نمونهخوانی و تأیید آثار در ویکینبشته در دسترس است. این پروندهها برای چاپ بهینه شدهاند، حجم پرونده را بهشدت فشرده میکنند و برای هر صفحه متن دیجیتالیشده دارند. این قالب نمودارهای ساده را نیز نمایش میدهد، اما برای فشردهسازی رنگ و جزئیات ظریف مناسب نیست. کاربرد آنها در [[راهنما:نمونهخوانی]] بحث شده است.
#اسکن یک اثر را در پایگاهی مانند [https://www.archive.org archive.org] جستوجو کنید
#کیفیت اسکن گاهی ضعیف است. با یک نمایشگر برخط چند صفحهٔ اسکنشده را نمونهوار بررسی کنید، یا نسخهٔ متنیِ موجود در پایگاه را وارسی کنید، یا [[راهنما:استخراج تصویر#از تصاویر صفحهٔ JP2|یک پروندهٔ .jp2 را دستکاری کنید]]
#همانگونه که در ادامه آمده است، با عنوان مناسب و ابهامزدایی لازم بارگذاری کنید.
*نکته: اگر صفحهٔ نخست محتوای اضافی دارد، میتوان آن را حذف کرد.
#پرونده را با [http://sourceforge.net/projects/djvu/ DjVuLibre] یا نرمافزاری مشابه باز کنید
#گزینهٔ «ذخیره بهعنوان» (save as) را انتخاب کنید و بازهٔ صفحهها را تنظیم کنید، مثلاً ۲–۱۲۳
===تصویرسازیها===
پایگاهها اغلب اسکن اسناد را در قالبهای پروندهٔ گوناگون ارائه میکنند. دستورالعمل استخراج تصویر از این پروندهها در [[راهنما:استخراج تصویر]] آمده است.
* راهنمای ویکیانبار: [[c:Commons:Preparing images for upload|Commons:Preparing images for upload]]
==مراحل بارگذاری==
برای افزودن تصویر به ویکینبشته از [[:commons:Main Page|ویکیانبار]] استفاده کنید؛ تصاویر در آنجا بلافاصله برای استفاده در ویکینبشته و جاهای دیگر در دسترس قرار میگیرند. تصاویر معمولاً مستقیماً در ویکینبشته بارگذاری نمیشوند.
:''همچنین ببینید:'' [[:c:Commons:First steps|Commons:First steps]]
#مطمئن شوید تصویری که میخواهید بارگذاری کنید با [[:commons:Commons:Licensing|قوانین حق تکثیر]] ویکیانبار سازگار است.
#از بهترین کیفیت موجود استفاده کنید و پرونده را برای گنجاندن در اینجا ویرایش کنید.
#[[:c:Special:Upload|پرونده را بارگذاری کنید]] و اطلاعات دقیقی دربارهٔ تصویر، نشانی (URL) منبع و وضعیت حق تکثیر ارائه دهید.
#بر پایهٔ سبکی که در [[ویکینبشته:رهنمودهای تصویر|رهنمودهای تصویر]] آمده است، نامی برای پرونده انتخاب کنید و آن را در ویکیانبار ردهبندی کنید.
#هر تغییری مانند برش، حذف شرح تصویر یا تبدیل به سیاهوسفید را یادداشت کنید. بهترین روش در ویکیانبار آن است که پروندهٔ اصلیِ ویرایشنشده را هم بارگذاری کنید و در توضیحات، از طریق <code> other_versions=</code> به آن پیوند دهید.
===اسکنهای دارای پیوند به ویکیداده===
اگر صفحهٔ فهرست (Index) اثر شما یک آیتم ویکیداده دارد (چیزی به شکل Qnnnn که n هر تعداد رقم است)، میتوانید {{tl|Information}} را به {{tl|Book}} تغییر دهید و بهجای تاریخ و پدیدآورنده، «|wikidata = » و «|Image page =» را اضافه کنید؛ در این صورت بقیهٔ اطلاعات از ویکیداده پر میشود. افزون بر این، شمارهٔ صفحه را (شمارهٔ صفحهٔ اسکن، نه صفحهٔ چاپی) بنویسید تا الگو تصویر اسکن را روی صفحهٔ مربوط به تصویر باز کند و دیگر نیازی به اشاره به پروندهٔ اصلی نباشد.
از [[commons:Special:Upload]] استفاده کنید؛ ویرایش الگوی Information در آنجا آسان است و با دکمهٔ «بازگشت» مرورگر، فرمِ قبلی دوباره در دسترس خواهد بود. فقط کافی است مکان پروندهٔ بعدی را بدهید و شمارهٔ صفحه و/یا توضیح را ویرایش کنید.
با ویکیداده، تنها مواردی که بر عهدهٔ شماست شمارهٔ آیتم داده، یک ردهٔ مناسب و مجوز است.
=== دادههای ساختاریافته ===
به پروندههای ویکیانبار میتوان [[commons:COM:SDC|دادههای ساختاریافته]] (SDC) پیوست کرد تا دادههای تصویر بهصورت ماشینخوان پردازش شوند.
دستورالعملهای مربوط به انواع SDC و قالبهای استانداردِ کاربردی برای تصاویر استخراجشده از کتابها در [[commons:Commons:Structured data/Modeling/Illustrations|Commons:Structured data/Modeling/Illustrations]] آمده است.
در ویکیانبار ابزارکی به نام «[[c:Help:Gadget-ACDC|AC/DC]]» (کوتاهشدهٔ «Add to Commons / Descriptive Claims») وجود دارد که از طریق ترجیحات فعال میشود و امکان میدهد دادههای ساختاریافته را یکجا به همهٔ تصاویر یک رده اضافه کنید. باید رده را بدانید و تصوری از ویژگیهایی که میخواهید اضافه کنید داشته باشید.
دستکم افزودن تاریخ انتشار (P1433) و وضعیت حق تکثیر (P6216) توصیه میشود.
برای دادههای ساختاریافتهٔ متناظر (ویژگیها) دربارهٔ ''خودِ کتابها''، [[ویکینبشته:ویکیداده]] را ببینید.
==افزودن به ویکینبشته==
{{Img float
| file = The Kinematics of Machinery Fig 1.png
| width = 200px
| align = right
| cap = {{font-size-x|90%|این تصویر با {{tl|img float}} نمایش داده شده است. قاب ندارد، اما همچنان شرح تصویر دارد.}}
| capalign = right
|alt= نمودار سادهای از دو پارهخط با کمانهای متقاطع
}}
:''همچنین ببینید: [[:w:en:Wikipedia:Picture tutorial|Wikipedia:Picture tutorial]]''
#به صفحهای در ویکینبشته که میخواهید تصویر را در آن اضافه کنید بروید و سپس روی «ویرایش» کلیک کنید.
#برای افزودن تصویر، <nowiki>[[پرونده:</nowiki>'''نام تصویر در اینجا.jpg'''<nowiki>|frameless]]</nowiki> را بنویسید. همچنین میتوان تصویر را تراز کرد: <nowiki>[[پرونده:</nowiki>'''نام تصویر در اینجا.jpg'''<nowiki>|frameless|center]]</nowiki> تصویر را در وسط صفحه قرار میدهد و «left» یا «right» به متن اجازه میدهد دور تصویر جریان یابد.
#اندازهٔ تصویر ترجیحی است که کاربر آن را تعیین میکند. برای نادیده گرفتن اندازهٔ پیشفرض، مقداری مانند <nowiki>...|frameless|90px]]</nowiki> اضافه کنید تا اندازهای نسبتاً کوچکتر اعمال شود. توجه کنید که تصاویر بزرگتر میتوانند بر نمایش صفحه تأثیر بگذارند و ممکن است حجم آن را بسیار افزایش دهند.
#با استفاده از پارامتر <nowiki>...|alt=[متن توصیفی]|...</nowiki>، آنقدر توضیح بدهید که کسی که کتاب را با صفحهخوان گوش میکند بتواند تصویر و ارجاع متن به آن را بفهمد.
#تغییر را ذخیره کنید و مطمئن شوید که تصویر به هیچ شکلی مانع خواندن متن نمیشود.
* همچنین میتوانید از الگویی مانند {{tl|img float}} استفاده کنید تا تصویری شناور در سمت چپ یا راست، همراه با شرح تصویر اما بدون قاب، درج شود.
[[رده:راهنما]]
eifltsv9iso7032qk5q1msb03psdgh4
کاربر:Hanooz/common.js
2
63731
299731
299614
2026-09-19T15:13:37Z
Hanooz
17889
299731
javascript
text/javascript
//<nowiki>
/* Cat-a-lot - changes category of multiple files */
mw.loader.using(['jquery.ui', 'mediawiki.util'], function(){
mw.loader.load('//commons.wikimedia.org/w/load.php?modules=ext.gadget.Cat-a-lot');
});
////////// Cat-a-lot user preferences //////////
window.catALotPrefs = {"watchlist":"preferences","minor":true,"editpages":true,"docleanup":false,"subcatcount":10};
////////////////////////////////////catALotEnd//
//</nowiki>
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Krinkle/Tools/WhatLeavesHere.js&action=raw&ctype=text/javascript');
mw.loader.load('//meta.wikimedia.org/w/index.php?title=User:Indic-TechCom/Script/massMover.js&action=raw&ctype=text/javascript');
mw.loader.load('//mediawiki.org/w/index.php?title=MediaWiki:Gadget-UTCLiveClock.js&action=raw&ctype=text/javascript&smaxage=21600&maxage=86400');
mw.loader.load('//mediawiki.org/w/index.php?title=User:PerfektesChaos/js/resultListSort/r.js&action=raw&bcache=1&ctype=text/javascript');
mw.loader.load('//fa.wikipedia.org/w/index.php?title=مدیاویکی:Gadget-quickLinker.js&action=raw&ctype=text/javascript');
mw.loader.load('//fa.wikipedia.org/w/index.php?title=مدیاویکی:Gadget-Extra-Editbuttons-sisters.js&action=raw&ctype=text/javascript');
mw.loader.load('//fa.wikisource.org/w/index.php?title=کاربر:Hanooz/Gadget-charinsert-core.js&action=raw&ctype=text/javascript');
mw.loader.load('//fa.wikisource.org/w/index.php?title=کاربر:Hanooz/page carousel.js&action=raw&ctype=text/javascript');
mw.loader.load('//fa.wikisource.org/w/index.php?title=کاربر:Hanooz/NopInserter.js&action=raw&ctype=text/javascript');
mw.loader.load('//fa.wikisource.org/w/index.php?title=کاربر:Hanooz/redirectmaker.js&action=raw&ctype=text/javascript');
mw.loader.load('//fa.wikisource.org/w/index.php?title=کاربر:Hanooz/RunningHeader.js&action=raw&ctype=text/javascript');
mw.loader.load('//fa.wikisource.org/w/index.php?title=کاربر:Hanooz/test.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=MediaWiki:Gadget-TemplatePreloader.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=MediaWiki:Gadget-Without text.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=MediaWiki:Gadget-transclusion-check.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=MediaWiki:Gadget-HotCat.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=MediaWiki:Gadget-Easy LST.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=MediaWiki:Gadget-Fill Index.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=User:Inductiveload/cleanup.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=User:Inductiveload/quick_access.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=User:Xover/cleanup.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=User:Xover/unwrap.js&action=raw&ctype=text/javascript');
mw.loader.load('//en.wikisource.org/w/index.php?title=User:Xover/copySource.js&action=raw&ctype=text/javascript');
mw.loader.load('//fa.wikisource.org/w/index.php?title=کاربر:Nightdevil/indexFiller.js&action=raw&ctype=text/javascript');
hqday0skcoxmh6a8by3mlhy4u3hgk05
ویکینبشته:ورودی کاربران/منتظر همسنجی
4
68683
299765
290138
2026-09-20T07:31:30Z
MoAMINho
30743
/* کتابها */
299765
wikitext
text/x-wiki
=== کتابها===
{{MC-Section/s
|background-color=#ffe868
|text=منتظر همسنجی
}}
{{MC-Cover|MasaalekolMohsenin.pdf|1|مسالک المحسنین|۱۳۵۶|عبدالرحیم طالبوف|داستان|۲۹۴}}
{{MC-Cover|Quatrains of Omar Khayyam (tr. Whinfield, 1883).djvu|29|رباعیات خیام (تصحیح وینفیلد)|۱۲۶۲|خیام|شعر|۳۹۶|ادوارد هانری وینفیلد|}}
{{MC-Cover|SeyrHekmatDarOrupa.pdf|1|سیر حکمت در اروپا|۱۳۴۴|محمدعلی فروغی|فلسفه|۸۴۹}}
{{MC-Cover|در_خدمت_و_خیانت_روشنفکران_(جلد_دوم).pdf|1|در خدمت و خیانت روشنفکران|۱۳۵۷|جلال آلاحمد|مجموعه مقاله|۲۸۳}}
{{MC-Cover|SargozashteKandouha.pdf|1|سرگذشت کندوها|۱۳۵۰|جلال آلاحمد|داستان|۷۶}}
{{MC-Cover|MarghadeAgha.pdf|1|مرقد آقا|۱۳۴۹|نیما یوشیج|داستان|۹۰}}
<!-- {{MC-Cover|3MaqaalehDigar.pdf}}
{{MC-Cover|فواید گیاهخواری.pdf}}
{{MC-Cover|DonyaKhaneManAst.pdf}}
{{MC-Cover|Tarikh-e Iran-e Bastan.pdf}}
{{MC-Cover|TarikhMokhtasareDolateGhadimeRoom.pdf}}
{{MC-Cover|TazkereMorour.pdf}} -->
{{MC-Cover|برنامه مراسم حمل و تدفین جنازه اعلیحضرت فقید رضا شاه کبیر.pdf|1|برنامه مراسم حمل و تدفین جنازه اعلیحضرت فقید رضا شاه کبیر|۱۳۲۹|نامعلوم|تاریخ|۲۶}}
{{MC-Cover|پرگرام تاجگذاری اعلیحضرت همایون شاهنشاهی.pdf|1|پرگرام تاجگذاری اعلیحضرت همایون شاهنشاهی|۱۳۰۵|نامعلوم|تاریخ|۱۶}}
{{MC-Cover|تاریخ_جراید_و_مجلات_ایران_از_محمد_صدر_هاشمی_جلد_اول.pdf|1|تاریخ جراید و مجلات ایران|۳۶۶|محمد صدر هاشمی|تاریخ|۱۳۶۳}}
{{MC-Cover|One Thousand and One Nights.pdf|1|هزار و یکشب|۷۱۷|ملا عبداللطیف طسوجی|داستان|۱۳۲۵}}
{{MC-Cover|قانون اساسی (مطبعه شاهنشاهی، ۱۳۲۵ قمری).pdf|1|قانون اساسی (مطبعه شاهنشاهی، ۱۳۲۵ قمری)|نامعلوم|نامعلوم||۲۲}}
{{MC-Cover|انقلاب سفید - محمدرضاشاه پهلوی.pdf|1|انقلاب سفید|نامعلوم|محمدرضاشاه پهلوی| |۲۲۰}}
{{MC-Cover|استاندارد تمثال علیا حضرت شهبانوی ایران - مؤسسه استاندارد و تحقیقات صنعتی ایران.pdf|1|استاندارد تمثال علیا حضرت شهبانوی ایران|۱۳۴۴|نامعلوم| |۱۸}}
{{MC-Cover|رساله موسومه به یک کلمه - میرزا یوسف خان مستشارالدوله - مطبعه مبارکه شاهنشاهی.pdf|1|رساله موسومه به یک کلمه|۱۳۲۵ ه. ق|یوسف مستشارالدوله|قانون|۸۰||}}
{{MC-Cover|هشت کتاب - سهراب سپهری - کتابخانه طهوری (چاپ دوم).pdf|1|هشت کتاب|۱۳۵۸|سهراب سپهری|شعر|۴۷۲||}}
{{MC-Cover|رساله فارسی عقل سرخ - نوشته شیخ شهابالدین سهروردی به کوشش مهدی بیانی - چاپخانه عرفان.pdf|1|عقل سرخ|۱۳۱۹|شهابالدین یحیی سهروردی|فلسفه|۲۰|مهدی بیانی|}}
<!-- {{MC-Cover|فهرست|شمارهٔ برگ جلد|عنوان|سال چاپ|نویسنده|موضوع|تعداد برگ|مصحح|مترجم}} -->
{{MC-Section/e}}
=== نشریات ===
{{MC-Section/s
|background-color=#ffe868
|text=منتظر همسنجی
}}
<!-- {{MC-Cover| Sharaf 02 Safar 1300.pdf}}
{{MC-Cover| Sharaf 04 Rabi al thani 1300.pdf}}
{{MC-Cover| Sharaf 05 Jamadi al Oula 1300.pdf}}
{{MC-Cover| Sharaf 06 Jamadi al thani 1300.pdf}}
{{MC-Cover| Sharaf 07 Rajab 1300.pdf}}
{{MC-Cover| Sharaf 08 Shaban 1300.pdf}}
{{MC-Cover| Sharaf 09 Ramazan 1300.pdf}}
{{MC-Cover| Sharaf 10 Shawal 1300.pdf}}
{{MC-Cover| Sharaf 11 Ziqadeh 1300.pdf}}
{{MC-Cover| Sharaf 12 Zihajeh 1300.pdf}}
{{MC-Cover| Sharaf 13 Muharram 1301.pdf}}
{{MC-Cover| Sharaf 14 Safar 1301.pdf}}
{{MC-Cover| Sharaf 15 Rabi al Oula 1301.pdf}}
{{MC-Cover| Sharaf 16 Rabi al thani 1301.pdf}}
{{MC-Cover| Sharaf 18 Jamadi al thani 1301.pdf}}
{{MC-Cover| Sharaf 19 Shabaan 1301.pdf}}
{{MC-Cover| Sharaf 20 Ramadaan 1301.pdf}}
{{MC-Cover| Sharaf 21 Shawal 1301.pdf}}
{{MC-Cover| Sharaf 23 Zihajeh 1301.pdf}}
{{MC-Cover| Sharaf 24 Muharram 1302.pdf}}
{{MC-Cover| Sur-e Esrafil 15 Ṣafar 1327 8 März 1909.pdf}}
{{MC-Cover| 25. Ausgabe (Rabīʿ al-awwal 1302).pdf}}
{{MC-Cover| Ettelaat13050419.pdf}}
{{MC-Cover| دوست.pdf}} -->
{{MC-Section/e}}
=== اسناد ===
{{MC-Section/s
|background-color=#ffe868
|text=منتظر همسنجی
}}
<!-- {{MC-Cover|Farman Shah Safi I 2- Sahand Ace.jpg}}
{{MC-Cover|Farman Shah Safi I 3- Sahand Ace.jpg}} -->
{{MC-Section/e}}
q0d92h8su53jgegf20hk2ndng6blrje
کاربر:Hanooz/test.js
2
86084
299730
297527
2026-09-19T15:13:02Z
Hanooz
17889
299730
javascript
text/javascript
/*
This page defines a TemplateScript library for fa.wikisource.org (ویکینبشتهٔ فارسی).
It's not meant to be referenced directly - install it the same way as the upstream
English version described at [[Wikisource:TemplateScript]].
This is a Persian Wikisource adaptation of Pathoschild's proofreading and typography
libraries, combined into a single file. It draws on the fa.wikipedia/fa.wikisource
"Persian text style improvement tools" gadget (Gadget-Extra-Editbuttons-
persianwikitools.js) for several of the character/orthography helpers, since that's the
community's own tested implementation rather than something invented for this file.
*/
/* global $, pathoschild */
/**
* TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
* @see https://meta.wikimedia.org/wiki/TemplateScript
*
* The upstream proofreading library's @update-token has been removed on purpose: Wikisource's
* maintenance bot uses that token to overwrite local copies with the vanilla English script,
* which would silently wipe out every change made here for fa.wikisource. See [[Wikisource:Tools
* and scripts]] for how the update-bot category works.
*/
// <nowiki>
$.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', { dataType:'script', cache:true }).then(function() {
/*********
** Define library
*********/
pathoschild.TemplateScript.library.define({
key: 'wikisource.fa.tools',
name: 'ابزارهای ویکینبشتهٔ فارسی',
url: '//fa.wikisource.org/wiki/راهنما:نمونهخوانی',
description: 'مجموعهای از ابزارها برای <a href="/wiki/راهنما:نمونهخوانی">نمونهخوانی آثار در فضای نام <tt>برگه:</tt></a>: پاکسازی OCR (با اصلاح گستردهٔ نویسهها، نیمفاصله و نشانهگذاری)، ساخت الگوهای سرصفحه و پاصفحه، اصلاح حروف و ارقام عربی به فارسی، مرتبسازی خطوط، ساخت پیوند به عنوان اثر یا <a href="/wiki/راهنما:صفحههای_پدیدآورندگان">پدیدآورنده</a>، افزودن و اصلاح اعراب (زبر، زیر، پیش، تشدید، سکون)، و پاکسازی کشیده.',
categories: [
{
name: 'ابزارهای برگه',
scripts: [
{ key: 'add-header', name: 'افزودن سرصفحه', script: function(editor) { addPageHeader(editor); }, forNamespaces: 'page' },
{ key: 'add-footer', name: 'افزودن پاصفحه', script: function(editor) { addPageFooter(editor); }, forNamespaces: 'page' },
{ key: 'cleanup-ocr', name: 'پاکسازی OCR', script: function(editor) { pageCleanup(editor); }, forNamespaces: 'page' },
{ key: 'make-ref', name: 'جایگذاری پانویس', script: function(editor) { makeReference(editor); }, forNamespaces: 'page' },
{ key: 'wrap-ltr', name: 'تبدیل به چپبهراست', script: function(editor) { wrapLTR(editor); }, forNamespaces: 'page' },
{ key: 'normalize-arabic', name: 'اصلاح حروف عربی به فارسی', script: function(editor) { normalizeArabicLetters(editor); }, forNamespaces: 'page' },
{ key: 'convert-digits', name: 'تبدیل ارقام به فارسی', script: function(editor) { convertDigitsToPersian(editor); }, forNamespaces: 'page' },
{ key: 'smart-zwnj', name: 'اصلاح نیمفاصلهٔ افعال', script: function(editor) { smartZwnj(editor); }, forNamespaces: 'page' },
{ key: 'sort-lines', name: 'مرتبسازی خطوط گزیده', script: function(editor) { sortSelectedLines(editor); }, forNamespaces: 'page' }
]
},
{
name: 'ابزارهای اعراب و پیوند',
scripts: [
{ key: 'title-link', name: 'ساخت پیوند عنوان', script: maketitle, accessKey: 't' },
{ key: 'author-link', name: 'ساخت پیوند پدیدآورنده', script: author, accessKey: 'a' },
{ key: 'remove-tatweel', name: 'حذف کشیده', script: removeTatweel, accessKey: 'k' },
{ key: 'fatha', name: 'افزودن زبر', script: fatha, accessKey: 'f' },
{ key: 'kasra', name: 'افزودن زیر', script: kasra, accessKey: 'i' },
{ key: 'damma', name: 'افزودن پیش', script: damma, accessKey: 'u' },
{ key: 'tashdid', name: 'افزودن تشدید', script: tashdid, accessKey: 'd' },
{ key: 'sukun', name: 'افزودن سکون', script: sukun, accessKey: 's' },
{ key: 'fix-vowels', name: 'اصلاح جای اعراب', script: fixVowelMarks, accessKey: 'v' },
{ key: 'misc', name: 'افزودن تنوین یا خط تیره', script: catchall, accessKey: '-' }
]
}
]
});
/*********
** Page context
*********/
var state = {
initialised: false, // whether the page context has been initialised
page: {
number: null, // the djvu/pdf page number extracted from the page title
proofed: null
},
specialFormats: [] // work-specific header template formats
};
/*********
** Private methods
*********/
// Digit tables used to convert between Latin, Persian and Arabic-Indic numerals.
var _persianDigits = '۰۱۲۳۴۵۶۷۸۹';
var _arabicIndicDigits = '٠١٢٣٤٥٦٧٨٩';
var _latinDigits = '0123456789';
// Character-class tables used by the Persian-specific cleanup helpers below. Ported from the
// fa.wikipedia/fa.wikisource "Persian text style improvement tools" gadget (Gadget-Extra-
// Editbuttons-persianwikitools.js) - the community's own tested implementation of this
// normalisation, rather than something invented for this file.
var _hamza = '\u0654';
var _persianVowels = '\u064B-\u0650\u0652\u0670';
// non-standard letterforms (Arabic ي/ك, Urdu, Pashto, Uyghur presentation forms, etc.) that
// should still count as "a Persian-ish letter" for context-matching, even before
// _toStandardPersianCharacters() below has normalised them
var _similarPersianCharacters = '\u0643\uFB91\uFB90\uFB8F\uFB8E\uFEDC\uFEDB\uFEDA\uFED9\u0649\uFEEF\u064A\u06C1\u06D5\u06BE\uFEF0-\uFEF4';
var _persianCharacters = '\u0621-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2' + _similarPersianCharacters;
/**
* Convert any mix of Persian or Arabic-Indic digits in a string to plain Latin digits, so the result can be used in arithmetic (e.g. parseInt, odd/even checks).
* @param {string} text The text to convert.
*/
var _digitsToLatin = function(text) {
var result = '';
for (var i = 0; i < text.length; i++) {
var ch = text.charAt(i);
var idx = _persianDigits.indexOf(ch);
if (idx === -1) idx = _arabicIndicDigits.indexOf(ch);
result += (idx !== -1) ? _latinDigits.charAt(idx) : ch;
}
return result;
};
/**
* Convert any mix of Latin or Arabic-Indic digits in a string to Persian digits, for display in wikitext.
* @param {string} text The text to convert.
*/
var _digitsToPersian = function(text) {
var result = '';
for (var i = 0; i < text.length; i++) {
var ch = text.charAt(i);
var idx = _latinDigits.indexOf(ch);
if (idx === -1) idx = _arabicIndicDigits.indexOf(ch);
result += (idx !== -1) ? _persianDigits.charAt(idx) : ch;
}
return result;
};
/**
* OCR/PDF presentation-form and script-variant glyphs that extraction sometimes leaves as
* literal characters instead of the standard Persian letter - a common problem specifically on
* PDF-sourced works, where each glyph can get saved as its own shaped codepoint. Keys are the
* standard letter (or letter + a real ZWNJ, for the two glyphs that visually look joined);
* values are a character class of the presentation-form/variant glyphs that should fold into it.
*/
var _persianGlyphs = {
'\u200cه': 'ﻫ',
'ی\u200c': 'ﻰﻲ',
'أ': 'ﺄﺃﺃ',
'آ': 'ﺁﺁﺂ',
'إ': 'ﺇﺈﺇ',
'ا': 'ﺍﺎ',
'ب': 'ﺏﺐﺑﺒ',
'پ': 'ﭖﭗﭘﭙ',
'ت': 'ﺕﺖﺗﺘ',
'ث': 'ﺙﺚﺛﺜ',
'ج': 'ﺝﺞﺟﺠ',
'چ': 'ﭺﭻﭼﭽ',
'ح': 'ﺡﺢﺣﺤ',
'خ': 'ﺥﺦﺧﺨ',
'د': 'ﺩﺪ',
'ذ': 'ﺫﺬ',
'ر': 'ﺭﺮ',
'ز': 'ﺯﺰ',
'ژ': 'ﮊﮋ',
'س': 'ﺱﺲﺳﺴ',
'ش': 'ﺵﺶﺷﺸ',
'ص': 'ﺹﺺﺻﺼ',
'ض': 'ﺽﺾﺿﻀ',
'ط': 'ﻁﻂﻃﻄ',
'ظ': 'ﻅﻆﻇﻈ',
'ع': 'ﻉﻊﻋﻌ',
'غ': 'ﻍﻎﻏﻐ',
'ف': 'ﻑﻒﻓﻔ',
'ق': 'ﻕﻖﻗﻘ',
'ک': 'ﮎﮏﮐﮑﻙﻚﻛﻜ',
'گ': 'ﮒﮓﮔﮕ',
'ل': 'ﻝﻞﻟﻠ',
'م': 'ﻡﻢﻣﻤ',
'ن': 'ﻥﻦﻧﻨ',
'ه': 'ﻩﻪﻫﻬ',
'هٔ': 'ﮤﮥ',
'و': 'ﻭﻮ',
'ؤ': 'ﺅﺅﺆ',
'ی': 'ﯼﯽﯾﯿﻯﻰﻱﻲﻳﻴ',
'ئ': 'ﺉﺊﺋﺌ',
'لا': 'ﻻﻼ',
'لإ': 'ﻹﻺ',
'لأ': 'ﻸﻷ',
'لآ': 'ﻵﻶ'
};
/**
* Remove stray/duplicate ZWNJ-family characters and OCR artifacts that stand in for a ZWNJ,
* without trying to guess where a NEW ZWNJ should be inserted between words - that needs the
* verb word-lists in smartZwnj() below, since blindly inserting one is what risks corrupting
* unrelated text (see that function's comment for why).
* @param {string} text The text to clean.
*/
var _cleanupZwnjArtifacts = function(text) {
return text
// a stray LRM/RLM between two Persian letters was almost always meant to be a ZWNJ
.replace(new RegExp('([' + _persianCharacters + '] *)[\u200F\u200E]+( *[' + _persianCharacters + '])', 'g'), '$1\u200c$2')
// collapse repeated invisible-joiner/mark characters down to one
.replace(/([\u200B-\u200D\uFEFF\u200E\u200F]){2,}/g, '$1')
// ¬ between two Persian letters is almost always a misrecognised ZWNJ, not a real character
.replace(new RegExp('([' + _persianCharacters + '])¬(?=[' + _persianCharacters + '])', 'g'), '$1\u200c')
// a ZWNJ has no business after a digit or most punctuation/brackets, or next to a Latin word
.replace(/([۰-۹0-9إأةؤورزژاآدذ،؛,:«»\\\/@#$٪×*()ـ\-=|ء])\u200c/g, '$1')
.replace(/[\u200B-\u200D\uFEFF]([\w])/g, '$1')
.replace(/([\w])[\u200B-\u200D\uFEFF]/g, '$1')
.replace(new RegExp('[\\u200B-\\u200D\\uFEFF]([' + _persianVowels + _arabicIndicDigits + _persianDigits + _hamza + '])', 'g'), '$1')
.replace(new RegExp('([' + _arabicIndicDigits + '])[\\u200B-\\u200D\\uFEFF]', 'g'), '$1')
.replace(/[\u200B\u200C\uFEFF]([ء\n\s\[\].،«»:()؛؟?;$!@\-=+\\|])/g, '$1')
.replace(/([\n\s\[.،«»:()؛؟?;$!@\-=+\\|])[\u200B-\u200D\uFEFF]/g, '$1')
.replace(/[\u200B-\u200D\uFEFF](\]\][\s\n])/g, '$1')
.replace(/([\n\s]\[\[)[\u200B-\u200D\uFEFF]/g, '$1');
};
/**
* Fold OCR/PDF presentation-form glyphs and non-Persian script variants (Arabic ي/ك, Urdu,
* Pashto, Uyghur, Kurdish) back to standard Persian characters, and canonicalise the hamza-
* bearing forms per ISIRI 6219 (Iran's national character-encoding standard).
* @param {string} text The text to clean.
*/
var _toStandardPersianCharacters = function(text) {
for (var standard in _persianGlyphs) {
if (_persianGlyphs.hasOwnProperty(standard)) {
text = text.replace(new RegExp('[' + _persianGlyphs[standard] + ']', 'g'), standard);
}
}
return _cleanupZwnjArtifacts(text) // needed because of the two ZWNJ-bearing keys above
.replace(/ك/g, 'ک') // Arabic
.replace(/ڪ/g, 'ک') // Urdu
.replace(/ﻙ/g, 'ک') // Pushtu
.replace(/ﻚ/g, 'ک') // Uyghur
.replace(/ي/g, 'ی') // Arabic
.replace(/ى/g, 'ی') // Urdu
.replace(/ے/g, 'ی') // Urdu
.replace(/ۍ/g, 'ی') // Pushtu
.replace(/ې/g, 'ی') // Uyghur
.replace(/ہ/g, 'ه') // Urdu
.replace(/ە/g, 'ه\u200c') // Kurdish
.replace(/ھ/g, 'ه') // Kurdish
.replace(/أ/g, 'أ') // canonical alef+hamza form per ISIRI 6219
.replace(/آ/g, 'آ');
};
/**
* Strip tatweel/kashide (ـ, U+0640) characters from a string. Tatweel is a pure justification
* stretch-mark used in decorative Persian typesetting (common on title pages); OCR frequently
* captures it as literal characters, but it has no place in a wikilink target or in wikitext.
* @param {string} text The text to clean.
*/
var _stripTatweel = function(text) {
return text.replace(/\u0640+/g, '');
};
/**
* Initialise the data needed by the page tools.
*/
var _initialise = function() {
// only initialise once
if(state.initialised)
return;
state.initialised = true;
// Get page metadata. The page number is read from wgTitle rather than location.href:
// fa.wikisource page titles commonly use Persian digits (e.g. «برگه:کتاب.pdf/۷۱۳»), and
// non-ASCII characters like those are percent-encoded in location.href, so a plain
// [0-9] match against the URL never fires there. wgTitle is always the decoded title,
// and _digitsToLatin() copes with Persian, Arabic-Indic or Latin page numbers alike.
// Matches both .djvu and .pdf source files, since fa.wikisource hosts plenty of both.
var pn = /\.(?:djvu|pdf)\/([0-9۰-۹٠-٩]+)$/.exec(mw.config.get('wgTitle'));
var pq = document.getElementById('pagequality');
state.page = {
number: pn !== null ? parseInt(_digitsToLatin(pn[1]), 10) : null,
proofed: pq && pq.getAttribute('class') && pq.getAttribute('class').match(/quality0|quality[2-4]/)
};
// get user-defined work formats
// expected format:
// {
// title: /تاریخ ایران /,
// evenHeader: '{{rh|...}}',
// oddHeader: '{{rh|...}}',
// footer: '',
// footerWithReferences: '{{smallrefs}}'
// }
state.specialFormats = [];
if(window.specialFormats)
state.specialFormats = state.specialFormats.concat(window.specialFormats);
};
/*********
** Script methods
*********/
/**
* Add a {{سرصفحهمستمر}} template to the page.
* @param {object} editor The script helpers for the page.
*/
var addPageHeader = function(editor) {
_initialise();
if(state.page.number === null)
return;
var isEven = (state.page.number % 2 === 0);
var generic = true;
var headertext = '';
for (var f in state.specialFormats) {
var format = state.specialFormats[f];
if (mw.config.get('wgTitle').match(format.title)) {
headertext = isEven ? format.evenHeader : format.oddHeader;
generic = false;
break;
}
}
// No special header matched, use a generic running header. fa.wikisource is
// right-to-left, which flips which side is the outer edge compared to en.wikisource:
// even pages (verso) put the page number on the RIGHT, odd pages (recto) put it on
// the LEFT - the opposite of the English left/right assignment. This matches the
// convention documented at [[الگو:سربرگ]] on fa.wikisource itself.
if (generic) {
if (isEven)
headertext = '{{سرصفحهمستمر|میان=|راست=}}';
else
headertext = '{{سرصفحهمستمر|چپ=|میان=}}';
}
$('#wpHeaderTextbox').val(function(i, val) {
return $.trim(val + '\n' + headertext);
});
// if this is unproofed text, then delete the first line of the OCR text, which presumably is raw OCR of the header we've just inserted
if (!state.page.proofed) {
var text = editor.get();
editor.set(text.slice(text.indexOf('\n') + 1));
}
};
/**
* Clean up OCR errors in the text, and push <noinclude> content at the top
* & bottom of the page into the header & footer boxes respectively.
* @param {object} editor The script helpers for the page.
*/
var pageCleanup = function(editor) {
_initialise();
// fold OCR/PDF presentation-form glyphs, non-Persian letter variants and stray ZWNJ
// artifacts back to standard characters before anything else runs
editor.set(_toStandardPersianCharacters(editor.get()));
// push <noinclude> content at the top & bottom into the header & footer
if (editor.get().match(/^<noinclude\>/)) {
var text = editor.get();
var e = text.indexOf("</noinclude>");
$('#wpHeaderTextbox').val(function(i, val) {
return $.trim(val + "\n" + text.substr(11, e-11).replace(/^\s+|\s+$/g, ''));
});
editor.set(text.substr(e+12));
}
if (editor.get().match(/<\/noinclude\>$/)) {
var text = editor.get();
var s = text.lastIndexOf("<noinclude>");
$('#wpFooterTextbox').val(function(i, val) {
return $.trim(text.substr(s+11, text.length-s-11-12).replace(/^\s+|\s+$/g, '') + "\n" + val);
});
editor.set(text.substr(0, s));
}
// clean up text
editor
// remove trailing spaces at the end of each line
.replace(/ +\n/g, '\n')
// remove trailing whitespace preceding a hard line break
.replace(/ +<br *\/?>/g, '<br />')
// remove trailing whitespace and numerals at the end of page text - matches
// Latin, Persian and Arabic-Indic digits, since page-number artifacts at the
// bottom of a scanned fa.wikisource page can OCR as any of the three
.replace(/[\s0-9۰-۹٠-٩]+$/g, '')
// remove trailing spaces at the end of refs
.replace(/ +<\/ref>/g, '</ref>')
// remove trailing spaces at the end of template calls
.replace(/ +}}/g, '}}')
// convert double-hyphen to mdash (avoiding breaking HTML comment syntax)
.replace(/([^\!])--([^>])/g, '$1—$2')
// remove spacing around mdash, but only if it has spaces on both sides
.replace(/ +— +/g, '—');
// clean up pages if they don't have <poem>
if (!editor.contains('<poem>') && !editor.contains('{{' + 'ppoem')) {
editor
// remove single line breaks; preserve multiple.
// but not if there's a tag, template or table syntax either side of the line break
.replace(/([^>}\|\n])\n([^:#\*<{\|\n])/g, '$1 $2')
// collapse sequences of spaces into a single space
.replace(/ +/g, ' ');
}
// more page cleanup
editor
// dump spurious hard breaks at the end of paragraphs
.replace(/<br *\/?>\n\n/g, '\n\n')
// remove unwanted spaces before punctuation marks - both Latin (;:?!,) and
// Persian (،؛؟) forms, since either can turn up depending on the OCR engine
.replace(/ ([;:\?!,،؛؟])/g, '$1')
// convert ASCII look-alikes to proper Persian punctuation when they follow Persian
// text. Properly printed Persian sources always used ؟/؛/، - an ASCII ?/;/, next to
// Persian text is an OCR/encoding artifact to restore, not an authorial style choice
.replace(new RegExp('([' + _persianCharacters + '])\\?', 'g'), '$1؟')
.replace(new RegExp('([' + _persianCharacters + ']);', 'g'), '$1؛')
.replace(new RegExp('([' + _persianCharacters + '])(\\]\\]|»|)\\,', 'g'), '$1$2،')
// three-or-more dots after Persian text is an ellipsis, not literal periods
.replace(new RegExp('([' + _persianCharacters + '])( *)\\.{3,}', 'g'), '$1$2…')
// canonicalise ۀ / هٴ / هٓ to ISIRI 6219's ه + combining hamza above (هٔ) - this is a
// same-character encoding choice, not a wording change, so it's safe to automate
.replace(/[ۂۀ]/g, 'هٔ')
.replace(/هٴ/g, 'هٔ')
.replace(/هٓ/g, 'هٔ')
// unicodify
.replace(/—/g, '—')
.replace(/–/g, '–')
.replace(/"/g, '"')
.replace(/<center>\s*([.\n]*?)\s*<\/center>/g, '{{center|$1}}');
};
/**
* As you work your way through the page, when you encounter a reference, just mark it with <ref></ref> tags and continue.
* Once you've got to the end of the page and proofed the references, simply highlight each reference in turn,
* and use this function to move it to its proper position.
* @param {object} editor The script helpers for the page.
*/
var makeReference = function(editor) {
_initialise();
var editbox = $('#wpTextbox1').get(0);
editbox.focus();
var refStart = editbox.selectionStart;
var refEnd = editbox.selectionEnd;
var firstref = editbox.value.indexOf('<ref></ref>');
if (firstref != -1) {
editbox.value = editbox.value.slice(0,firstref+5)
+ editbox.value.slice(refStart, refEnd)
+ editbox.value.slice(firstref+5, refStart)
+ editbox.value.slice(refEnd);
}
};
/**
* Insert formatted references into the footer box if needed.
* @param {object} editor The script helpers for the page.
*/
var addPageFooter = function(editor) {
_initialise();
var editbox = $('#wpTextbox1').get(0);
var footerbox = $('#wpFooterTextbox').get(0);
var generic;
var format;
var f;
if (editbox.value.indexOf("<ref>") == -1 && editbox.value.indexOf("{{#tag:ref") == -1) {
// page contains no refs
generic = true;
for (f in state.specialFormats) {
format = state.specialFormats[f];
if (mw.config.get('wgTitle').match(format.title)) {
footerbox.value = format.footer;
generic = false;
break;
}
}
// no special footer matched, use just strip out the references tag
if (generic)
footerbox.value = '';
}
else {
generic = true;
for (f in state.specialFormats) {
format = state.specialFormats[f];
if (mw.config.get('wgTitle').match(format.title)) {
footerbox.value = format.footerWithReferences;
generic = false;
break;
}
}
// no special footer matched, so use a generic ref tag
if (generic)
footerbox.value = '{{block center|{{smallrefs}}}}';
}
};
/**
* Wrap the selected text in {{چپ به راست}} so embedded left-to-right text (Latin names, foreign-language quotes, etc.) renders correctly inside a right-to-left Persian paragraph.
* @param {object} editor The script helpers for the page.
*/
var wrapLTR = function(editor) {
_initialise();
editor.replaceSelection(function(text) {
return '{{چپ به راست|' + text + '}}';
});
};
/**
* Convert Arabic/Urdu/Pashto/Uyghur/Kurdish letterforms and OCR presentation-form glyphs to
* their standard Persian equivalents in the selected text (see _toStandardPersianCharacters).
* Only select genuinely Persian passages - a direct Arabic quotation (a Qur'an verse, hadith, proverb) should keep its own Arabic letters, so leave that unselected.
* @param {object} editor The script helpers for the page.
*/
var normalizeArabicLetters = function(editor) {
_initialise();
editor.replaceSelection(_toStandardPersianCharacters);
};
/**
* Convert Latin (0-9) and Arabic-Indic (٠-٩) digits in the selected text to Persian digits (۰-۹).
* Skip any digits that should stay Western on purpose, such as an ISBN or a citation in another language.
* @param {object} editor The script helpers for the page.
*/
var convertDigitsToPersian = function(editor) {
_initialise();
editor.replaceSelection(function(text) {
return _digitsToPersian(text);
});
};
// Verb stems used by smartZwnj() below to decide when "می"/"نمی" is a verb prefix that should
// join to what follows with a ZWNJ, rather than something else (most importantly, the classical
// word «می» meaning "wine" - extremely common in the poetry Wikisource hosts a lot of, e.g.
// Hafez or Khayyam). Matching only against a real verb stem from this list, with a real person/
// tense suffix, is what makes this safe enough to automate at all; a blind "می" + space match
// would wrongly rewrite «می ناب» (pure wine) in a ghazal. Ported verbatim from the fa.wikipedia/
// fa.wikisource "Persian text style improvement tools" gadget, since retyping ~500 verb stems by
// hand is exactly how new bugs get introduced.
var _persianPastVerbs = '(' +
'ارزید|افتاد|افراشت|افروخت|افزود|افسرد|افشاند|افکند|انباشت|انجامید|انداخت|اندوخت|اندود|اندیشید|انگاشت|انگیخت|انگیزاند|اوباشت|ایستاد' +
'|آراست|آراماند|آرامید|آرمید|آزرد|آزمود|آسود|آشامید|آشفت|آشوبید|آغازید|آغشت|آفرید|آکند|آگند|آلود|آمد|آمرزید|آموخت|آموزاند' +
'|آمیخت|آهیخت|آورد|آویخت|باخت|باراند|بارید|بافت|بالید|باوراند|بایست|بخشود|بخشید|برازید|برد|برید|بست|بسود|بسیجید|بلعید' +
'|بود|بوسید|بویید|بیخت|پاشاند|پاشید|پالود|پایید|پخت|پذیراند|پذیرفت|پراکند|پراند|پرداخت|پرستید|پرسید|پرهیزید|پروراند|پرورد|پرید' +
'|پژمرد|پژوهید|پسندید|پلاسید|پلکید|پناهید|پنداشت|پوسید|پوشاند|پوشید|پویید|پیچاند|پیچانید|پیچید|پیراست|پیمود|پیوست|تاباند|تابید|تاخت' +
'|تاراند|تازاند|تازید|تافت|تپاند|تپید|تراشاند|تراشید|تراوید|ترساند|ترسید|ترشید|ترکاند|ترکید|تکاند|تکانید|تنید|توانست|جَست|جُست' +
'|جست|جنباند|جنبید|جنگید|جهاند|جهید|جوشاند|جوشید|جوید|چاپید|چایید|چپاند|چپید|چراند|چربید|چرخاند|چرخید|چرید|چسباند|چسبید' +
'|چشاند|چشید|چکاند|چکید|چلاند|چلانید|چمید|چید|خاراند|خارید|خاست|خایید|خراشاند|خراشید|خرامید|خروشید|خرید|خزید|خشکاند' +
'|خشکید|خفت|خلید|خمید|خنداند|خندانید|خندید|خواباند|خوابانید|خوابید|خواست|خواند|خوراند|خورد|خوفید|خیساند|خیسید|داد|داشت|دانست' +
'|درخشانید|درخشید|دروید|درید|دزدید|دمید|دواند|دوخت|دوشید|دوید|دید|دیدم|راند|ربود|رخشید|رساند|رسانید|رست|رَست|رُست' +
'|رسید|رشت|رفت|رُفت|رقصاند|رقصید|رمید|رنجاند|رنجید|رندید|رهاند|رهانید|رهید|روبید|روفت|رویاند|رویید|ریخت|رید|ریسید' +
'|زاد|زارید|زایید|زد|زدود|زیست|سابید|ساخت|سپارد|سپرد|سپوخت|ستاند|ستد|سترد|ستود|ستیزید|سرایید|سرشت|سرود|سرید' +
'|سزید|سفت|سگالید|سنجید|سوخت|سود|سوزاند|شاشید|شایست|شتافت|شد|شست|شکافت|شکست|شکفت|شکیفت|شگفت|شمارد|شمرد|شناخت' +
'|شناساند|شنید|شوراند|شورید|طپید|طلبید|طوفید|غارتید|غرید|غلتاند|غلتانید|غلتید|غلطاند|غلطانید|غلطید|غنود|فرستاد|فرسود|فرمود|فروخت' +
'|فریفت|فشاند|فشرد|فهماند|فهمید|قاپید|قبولاند|کاست|کاشت|کاوید|کرد|کشاند|کشانید|کشت|کشید|کفت|کفید|کند|کوبید|کوچید' +
'|کوشید|کوفت|گَزید|گُزید|گایید|گداخت|گذارد|گذاشت|گذراند|گذشت|گرازید|گرایید|گرداند|گردانید|گردید|گرفت|گروید|گریاند|گریخت|گریست' +
'|گزارد|گزید|گسارد|گستراند|گسترد|گسست|گسیخت|گشت|گشود|گفت|گمارد|گماشت|گنجاند|گنجانید|گنجید|گندید|گوارید|گوزید|لرزاند|لرزید' +
'|لغزاند|لغزید|لمباند|لمدنی|لمید|لندید|لنگید|لهید|لولید|لیسید|ماسید|مالاند|مالید|ماند|مانست|مرد|مکشید|مکید|مولید|مویید' +
'|نازید|نالید|نامید|نشاند|نشست|نکوهید|نگاشت|نگریست|نمایاند|نمود|نهاد|نهفت|نواخت|نوردید|نوشاند|نوشت|نوشید|نیوشید|هراسید|هشت' +
'|ورزید|وزاند|وزید|یارست|یازید|یافت' +
')';
var _persianPresentVerbs = '(' +
'ارز|افت|افراز|افروز|افزا|افزای|افسر|افشان|افکن|انبار|انباز|انجام|انداز|اندای|اندوز|اندیش|انگار|انگیز|انگیزان' +
'|اوبار|ایست|آرا|آرام|آرامان|آرای|آزار|آزما|آزمای|آسا|آسای|آشام|آشوب|آغار|آغاز|آفرین|آکن|آگن|آلا|آلای' +
'|آمرز|آموز|آموزان|آمیز|آهنج|آور|آویز|آی|بار|باران|باز|باش|باف|بال|باوران|بای|باید|بخش|بخشا|بخشای' +
'|بر|بَر|بُر|براز|بساو|بسیج|بلع|بند|بو|بوس|بوی|بیز|بین|پا|پاش|پاشان|پالا|پالای|پذیر|پذیران' +
'|پر|پراکن|پران|پرداز|پرس|پرست|پرهیز|پرور|پروران|پز|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پوس|پوش|پوشان' +
'|پوی|پیچ|پیچان|پیرا|پیرای|پیما|پیمای|پیوند|تاب|تابان|تاران|تاز|تازان|تپ|تپان|تراش|تراشان|تراو|ترس|ترسان' +
'|ترش|ترک|ترکان|تکان|تن|توان|توپ|جنب|جنبان|جنگ|جه|جهان|جو|جوش|جوشان|جوی|چاپ|چای|چپ|چپان' +
'|چر|چران|چرب|چرخ|چرخان|چسب|چسبان|چش|چشان|چک|چکان|چل|چلان|چم|چین|خار|خاران|خای|خر|خراش' +
'|خراشان|خرام|خروش|خز|خشک|خشکان|خل|خم|خند|خندان|خواب|خوابان|خوان|خواه|خور|خوران|خوف|خیز|خیس' +
'|خیسان|دار|درخش|درخشان|درو|دزد|دم|ده|دو|دوان|دوز|دوش|ران|ربا|ربای|رخش|رس|رسان' +
'|رشت|رقص|رقصان|رم|رنج|رنجان|رند|ره|رهان|رو|روب|روی|رویان|ریز|ریس|رین|زا|زار|زای|زدا' +
'|زدای|زن|زی|ساب|ساز|سای|سپار|سپر|سپوز|ستا|ستان|ستر|ستیز|سر|سرا|سرای|سرشت|سز|سگال|سنب' +
'|سنج|سوز|سوزان|شاش|شای|شتاب|شکاف|شکف|شکن|شکوف|شکیب|شمار|شمر|شناس|شناسان|شنو|شو|شور|شوران|شوی' +
'|طپ|طلب|طوف|غارت|غر|غلت|غلتان|غلط|غلطان|غنو|فرسا|فرسای|فرست|فرما|فرمای|فروش|فریب|فشار|فشان|فشر' +
'|فهم|فهمان|قاپ|قبولان|کار|کاه|کاو|کش|کَش|کُش|کِش|کشان|کف|کن|کوب|کوچ|کوش|گا|گای|گداز' +
'|گذار|گذر|گذران|گرا|گراز|گرای|گرد|گردان|گرو|گری|گریان|گریز|گز|گزار|گزین|گسار|گستر|گستران|گسل|گشا' +
'|گشای|گمار|گنج|گنجان|گند|گو|گوار|گوز|گوی|گیر|لرز|لرزان|لغز|لغزان|لم|لمبان|لند|لنگ|له|لول' +
'|لیس|ماس|مال|مان|مک|مول|موی|میر|ناز|نال|نام|نشان|نشین|نکوه|نگار|نگر|نما|نمای|نمایان|نه' +
'|نهنب|نواز|نورد|نوش|نوشان|نویس|نیوش|هراس|هست|هل|ورز|وز|وزان|یاب|یار|یاز' +
')';
var _persianComplexPastVerbs = {
'باز': 'آفرید|آمد|آموخت|آورد|ایستاد|تابید|جست|خواند|داشت|رساند|ستاند|شمرد|ماند|نمایاند|نهاد|نگریست|پرسید|گذارد' +
'|گرداند|گردید|گرفت|گشت|گشود|گفت|یافت',
'در': 'بر ?داشت|بر ?گرفت|آمد|آمیخت|آورد|آویخت|افتاد|افکند|انداخت|رفت|ماند|نوردید|کشید|گرفت',
'بر': 'آشفت|آمد|آورد|افتاد|افراشت|افروخت|افشاند|افکند|انداخت|انگیخت|تاباند|تابید|تافت|تنید|جهید|خاست|خواست|خورد' +
'|داشت|دمید|شمرد|نهاد|چید|کرد|کشید|گرداند|گردانید|گردید|گزید|گشت|گشود|گمارد|گماشت',
'فرو': 'آمد|خورد|داد|رفت|نشاند|کرد|گذارد|گذاشت',
'وا': 'داشت|رهاند|ماند|نهاد|کرد',
'ور': 'آمد|افتاد|رفت',
'یاد': 'گرفت',
'پراکنده': 'ساخت',
'زمین': 'خورد',
'گول': 'زد',
'لخت': 'کرد'
};
var _persianComplexPresentVerbs = {
'باز': 'آفرین|آموز|آور|ایست|تاب|جو|خوان|دار|رس|ستان|شمار|مان|نمایان|نه|نگر|پرس|گذار|گردان|گرد|گشا|گو|گیر|یاب',
'در': 'بر ?دار|بر ?گیر|آمیز|آور|آویز|افت|افکن|انداز|مان|نورد|کش|گذر|گیر',
'بر': 'آشوب|آور|افت|افراز|افروز|افشان|افکن|انداز|انگیز|تابان|تاب|تن|جه|خواه|خور|خیز|دار|دم|شمار|نه|چین|کش|کن' +
'|گردان|گزین|گشا|گمار',
'فرو': 'خور|ده|رو|نشین|کن|گذار',
'وا': 'دار|رهان|مان|نه|کن',
'ور': 'افت|رو',
'یاد': 'گیر',
'پراکنده': 'ساز',
'زمین': 'خور',
'گول': 'زن',
'لخت': 'کن'
};
/**
* Join compound verbs (باز آفرید, در آمد, بر داشت, etc.) with a ZWNJ instead of a space, using
* the curated prefix/stem pairs above so only real compound verbs match.
* @param {string} text The text to process.
*/
var _applyComplexVerbZwnj = function(text) {
var prefix, stems;
for (prefix in _persianComplexPastVerbs) {
if (!_persianComplexPastVerbs.hasOwnProperty(prefix)) continue;
stems = _persianComplexPastVerbs[prefix];
text = text.replace(new RegExp(
'(^|[^' + _persianCharacters + '])(' + prefix + ') ?(می|نمی|)( |\u200c|)(ن|)(' +
stems + ')(م|ی|یم|ید|ند|ه|ن|)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3\u200c$5$6$7$8');
}
for (prefix in _persianComplexPresentVerbs) {
if (!_persianComplexPresentVerbs.hasOwnProperty(prefix)) continue;
stems = _persianComplexPresentVerbs[prefix];
text = text.replace(new RegExp(
'(^|[^' + _persianCharacters + '])(' + prefix + ') ?(می|نمی|)( |\u200c|)(ن|)(' +
stems + ')(م|ی|د|یم|ید|ند|ن)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3\u200c$5$6$7$8');
}
return text;
};
/**
* Join می/نمی to a following verb stem with a ZWNJ (میرود), join the plural/superlative
* suffixes ها/ترین with a ZWNJ, and a handful of specific, well-tested exceptions (میدانی,
* میتوان, میگوی دریایی, میدوی) that would otherwise be wrongly split by the general rules.
* Ported from the same gadget's applyZwnj(); see the smartZwnj() comment for the caveat this
* still doesn't (and can't) fully resolve.
* @param {string} text The text to process.
*/
var _applyZwnj = function(text) {
text = _applyComplexVerbZwnj(text);
return _cleanupZwnjArtifacts(text)
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?' + _persianPastVerbs +
'(م|ی|یم|ید|ند|ه|)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?' + _persianPresentVerbs +
'(م|ی|د|یم|ید|ند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
// ماضی نقلی: خوردهام, رفتهاید, ...
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(ن|)' + _persianPastVerbs +
'ه (ام|ای|ایم|اید|اند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2$3ه\u200c$4$5'
)
.replace(new RegExp('([' + _persianCharacters + '])هاست($|[^' + _persianCharacters + '])', 'g'), '$1ه است$2')
// «دان» handled separately: its «ی» suffix collides with the verb «دانی»/میدانی
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?(دان)(م|د|یم|ید|ند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
.replace(/(\s)(می|نمی) ?توان/g, '$1$2\u200cتوان')
// «ها» and «ترین» always join with a ZWNJ, never a full space
.replace(/ ها([\]\.،\:»\)\s]|\'{2,3}|\={2,})/g, '\u200cها$1')
.replace(/ ها(ی|یی|یم|یت|یش|ی?مان|ی?تان|ی?شان)([\]\.،\:»\)\s])/g, '\u200cها$1$2')
.replace(/هها/g, 'هها')
.replace(/ ترین([\]\.،\:»\)\s]|\'{2,3}|\={2,})/g, '\u200cترین$1')
// a few specific words that would otherwise be caught by the general rules above
.replace(new RegExp('می\u200cگوی($|[^' + _persianCharacters + '\u200c])', 'g'), 'میگوی$1') // میگوی دریایی
.replace(new RegExp('می\u200cدوی($|[^' + _persianCharacters + '\u200c])', 'g'), 'میدوی$1'); // میدوی (ابهامزدایی)
};
/**
* Join می/نمی verb prefixes (and a few common suffixes) to what follows with a ZWNJ instead of
* a full space, using curated Persian verb-stem lists so it only fires on real verbs.
*
* This is scoped to your selection rather than the whole page on purpose: even with the word
* lists, «می» on its own is also the classical word for "wine" (می ناب، میگلگون، ساقی می ده…),
* and Wikisource hosts a lot of exactly the poetry where that comes up. The word-list approach
* makes this far safer than a blind "می" + space replace, but it can't tell «می» the prefix from
* «می» the noun by context alone - so select the passage you've checked, rather than running it
* across a whole ghazal unread.
* @param {object} editor The script helpers for the page.
*/
var smartZwnj = function(editor) {
_initialise();
editor.replaceSelection(_applyZwnj);
};
/**
* Sort the selected lines using Persian collation - useful when proofreading a back-of-book
* index or table of contents that needs alphabetising. Works by mapping each line to an
* Arabic-letter sort key first (so ی/ک sort the same as ي/ك, etc.), matching how the community
* gadget this is ported from sorts Persian category listings.
* @param {object} editor The script helpers for the page.
*/
var sortSelectedLines = function(editor) {
_initialise();
editor.replaceSelection(function(text) {
var lines = text.split('\n');
var sortKey = function(line) {
return line
.replace(/ی/g, 'ي')
.replace(/ک/g, 'ك')
.replace(/گ/g, 'كی')
.replace(/ژ/g, 'زی')
.replace(/چ/g, 'جی')
.replace(/پ/g, 'بی')
.replace(/و/g, 'نی')
.replace(/([۰-۹])/g, function(ch) { return String.fromCharCode(ch.charCodeAt(0) - 1728); });
};
lines.sort(function(a, b) {
var keyA = sortKey(a), keyB = sortKey(b);
return keyA < keyB ? -1 : (keyA > keyB ? 1 : 0);
});
return lines.join('\n');
});
};
/**
* Fix common harakat placement problems in the selected text: a mark that ended up separated
* from its letter by a stray space moves back next to the letter, and repeated marks on the
* same letter collapse to one. Complements fatha/kasra/damma/tashdid/sukun above, which insert
* marks, by cleaning up marks that are already there but misplaced.
* Ported from the fa.wikipedia/fa.wikisource "Persian text style improvement tools" gadget.
* @param {object} editor The script helpers for the page.
*/
function fixVowelMarks(editor) {
editor.replaceSelection(function(text) {
return text
.replace(new RegExp('([' + _persianCharacters + _persianVowels + _hamza + '])(\\s)([' + _persianVowels + _hamza + '])', 'g'), '$1$3$2')
.replace(new RegExp('([' + _persianVowels + _hamza + ']){2,}', 'g'), '$1');
});
}
/*********
** Script methods
*********/
/**
* Convert the selected text into a link to the work's title, after stripping any tatweel.
* This replaces the English original's title-case logic: Persian has no letter case, so there's
* nothing to "fix" about capitalisation the way an English ALL-CAPS title page needs fixing -
* the only thing that reliably differs between the OCR'd display text and a clean link target
* is decorative tatweel, so that's what gets stripped here.
* @param {object} editor The script helpers for the page.
*/
function maketitle(editor) {
editor.replaceSelection(function(text) {
var target = _stripTatweel(text);
return target === text
? '[[' + text + ']]'
: '[[' + target + '|' + text + ']]';
});
}
/**
* Convert the selected text into a link to the creator's page in the پدیدآورنده: namespace
* (fa.wikisource's Author: equivalent), with support for the "Lastname, Firstname" cataloguing
* format if a comma is present. Note this will rarely fire on classical Persian works, since
* authors like حافظ or فردوسی are catalogued by a single name/pen name rather than a Western-
* style inverted surname - that's expected, not a bug in this function.
* @param {object} editor The script helpers for the page.
*/
function author(editor) {
editor.replaceSelection(function(name) {
var commaMatch = name.match(/[,،]/); // real Persian sources use «،», not the ASCII comma
var commaPos = commaMatch ? commaMatch.index : -1;
var target = commaPos === -1
? name
: name.substr(commaPos + 1).replace(/^\s+|\s+$/g, '') + ' ' + name.substr(0, commaPos).replace(/^\s+|\s+$/g, '');
return '[[پدیدآورنده:' + target + '|' + name + ']]';
});
}
/**
* Strip tatweel/kashide (ـ) from the selected text. Unlike maketitle, this is meant for general
* body text, not just title pages - decorative or justified Persian OCR sources can introduce
* tatweel anywhere.
* @param {object} editor The script helpers for the page.
*/
function removeTatweel(editor) {
editor.replaceSelection(_stripTatweel);
}
/**
* Add a fatha (زبر / فتحه, َ - U+064E) after the selected letter.
* Harakat are combining marks that attach after their base letter, so - unlike the Latin accent
* functions in the English original - this doesn't need a per-letter switch statement; it just
* appends the mark to whatever is selected.
* @param {object} editor The script helpers for the page.
*/
function fatha(editor) {
editor.replaceSelection(function(selected) {
return selected + '\u064E';
});
}
/**
* Add a kasra (زیر / کسره, ِ - U+0650) after the selected letter.
* @param {object} editor The script helpers for the page.
*/
function kasra(editor) {
editor.replaceSelection(function(selected) {
return selected + '\u0650';
});
}
/**
* Add a damma (پیش / ضمه, ُ - U+064F) after the selected letter.
* @param {object} editor The script helpers for the page.
*/
function damma(editor) {
editor.replaceSelection(function(selected) {
return selected + '\u064F';
});
}
/**
* Add a shadda/tashdid (تشدید, ّ - U+0651) after the selected letter.
* @param {object} editor The script helpers for the page.
*/
function tashdid(editor) {
editor.replaceSelection(function(selected) {
return selected + '\u0651';
});
}
/**
* Add a sukun (سکون, ْ - U+0652) after the selected letter.
* @param {object} editor The script helpers for the page.
*/
function sukun(editor) {
editor.replaceSelection(function(selected) {
return selected + '\u0652';
});
}
/**
* Add less common marks. A bare selected «ا» gets a fathatan (تنوین نصب, اً - U+064B), which
* covers the very common Arabic-loan adverb ending seen in words like اتفاقاً, مثلاً and لطفاً.
* Anything else falls back to appending an em dash, mirroring the English original's catchall
* default (useful as a quick one-key dash insert).
* @param {object} editor The script helpers for the page.
*/
function catchall(editor) {
editor.replaceSelection(function(selected) {
switch (selected) {
case 'ا':
return 'ا\u064B';
default:
return selected + '—';
}
});
}
});
// </nowiki>
jdsohacnw70rdycsys3c608bfyhz7qu
299732
299730
2026-09-19T15:41:42Z
Hanooz
17889
299732
javascript
text/javascript
/*
This page defines a TemplateScript library for fa.wikisource.org (ویکینبشتهٔ فارسی).
It's not meant to be referenced directly - install it the same way as the upstream
English version described at [[Wikisource:TemplateScript]].
This is a Persian Wikisource adaptation of Pathoschild's proofreading and typography
libraries, pared down to a focused four-action toolset. It draws on the fa.wikipedia/
fa.wikisource "Persian text style improvement tools" gadget (Gadget-Extra-Editbuttons-
persianwikitools.js) for several of the character/orthography helpers, since that's the
community's own tested implementation rather than something invented for this file.
*/
/* global $, pathoschild */
/**
* TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
* @see https://meta.wikimedia.org/wiki/TemplateScript
*
* The upstream proofreading library's @update-token has been removed on purpose: Wikisource's
* maintenance bot uses that token to overwrite local copies with the vanilla English script,
* which would silently wipe out every change made here for fa.wikisource. See [[Wikisource:Tools
* and scripts]] for how the update-bot category works.
*/
// <nowiki>
$.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', { dataType:'script', cache:true }).then(function() {
/*********
** Define library
*********/
pathoschild.TemplateScript.library.define({
key: 'wikisource.fa.tools',
name: 'ابزارهای ویکینبشتهٔ فارسی',
url: '//fa.wikisource.org/wiki/راهنما:نمونهخوانی',
description: 'مجموعهای از ابزارها برای <a href="/wiki/راهنما:نمونهخوانی">نمونهخوانی آثار در فضای نام <tt>برگه:</tt></a>: پاکسازی OCR (با اصلاح نویسهها، کشیده، ارقام، نیمفاصله و نشانهگذاری)، اصلاح نیمفاصلهٔ افعال، اصلاح جای اعراب، و افزودن تنوین یا خط تیره.',
categories: [
{
name: 'ابزارهای برگه',
scripts: [
{ key: 'cleanup-ocr', name: 'پاکسازی OCR', script: function(editor) { pageCleanup(editor); }, forNamespaces: 'page' },
{ key: 'smart-zwnj', name: 'اصلاح نیمفاصلهٔ افعال', script: function(editor) { smartZwnj(editor); }, forNamespaces: 'page' }
]
},
{
name: 'ابزارهای اعراب',
scripts: [
{ key: 'fix-vowels', name: 'اصلاح جای اعراب', script: fixVowelMarks, accessKey: 'v' },
{ key: 'misc', name: 'افزودن تنوین یا خط تیره', script: catchall, accessKey: '-' }
]
}
]
});
/*********
** Private methods
*********/
// Digit tables used to convert between Latin, Persian and Arabic-Indic numerals.
var _persianDigits = '۰۱۲۳۴۵۶۷۸۹';
var _arabicIndicDigits = '٠١٢٣٤٥٦٧٨٩';
var _latinDigits = '0123456789';
// Character-class tables used by the Persian-specific cleanup helpers below. Ported from the
// fa.wikipedia/fa.wikisource "Persian text style improvement tools" gadget (Gadget-Extra-
// Editbuttons-persianwikitools.js) - the community's own tested implementation of this
// normalisation, rather than something invented for this file.
var _hamza = '\u0654';
var _persianVowels = '\u064B-\u0650\u0652\u0670';
// non-standard letterforms (Arabic ي/ك, Urdu, Pashto, Uyghur presentation forms, etc.) that
// should still count as "a Persian-ish letter" for context-matching, even before
// _toStandardPersianCharacters() below has normalised them
var _similarPersianCharacters = '\u0643\uFB91\uFB90\uFB8F\uFB8E\uFEDC\uFEDB\uFEDA\uFED9\u0649\uFEEF\u064A\u06C1\u06D5\u06BE\uFEF0-\uFEF4';
var _persianCharacters = '\u0621-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2' + _similarPersianCharacters;
/**
* Convert any mix of Latin or Arabic-Indic digits in a string to Persian digits, for display in wikitext.
* @param {string} text The text to convert.
*/
var _digitsToPersian = function(text) {
var result = '';
for (var i = 0; i < text.length; i++) {
var ch = text.charAt(i);
var idx = _latinDigits.indexOf(ch);
if (idx === -1) idx = _arabicIndicDigits.indexOf(ch);
result += (idx !== -1) ? _persianDigits.charAt(idx) : ch;
}
return result;
};
/**
* OCR/PDF presentation-form and script-variant glyphs that extraction sometimes leaves as
* literal characters instead of the standard Persian letter - a common problem specifically on
* PDF-sourced works, where each glyph can get saved as its own shaped codepoint. Keys are the
* standard letter (or letter + a real ZWNJ, for the two glyphs that visually look joined);
* values are a character class of the presentation-form/variant glyphs that should fold into it.
*/
var _persianGlyphs = {
'\u200cه': 'ﻫ',
'ی\u200c': 'ﻰﻲ',
'أ': 'ﺄﺃﺃ',
'آ': 'ﺁﺁﺂ',
'إ': 'ﺇﺈﺇ',
'ا': 'ﺍﺎ',
'ب': 'ﺏﺐﺑﺒ',
'پ': 'ﭖﭗﭘﭙ',
'ت': 'ﺕﺖﺗﺘ',
'ث': 'ﺙﺚﺛﺜ',
'ج': 'ﺝﺞﺟﺠ',
'چ': 'ﭺﭻﭼﭽ',
'ح': 'ﺡﺢﺣﺤ',
'خ': 'ﺥﺦﺧﺨ',
'د': 'ﺩﺪ',
'ذ': 'ﺫﺬ',
'ر': 'ﺭﺮ',
'ز': 'ﺯﺰ',
'ژ': 'ﮊﮋ',
'س': 'ﺱﺲﺳﺴ',
'ش': 'ﺵﺶﺷﺸ',
'ص': 'ﺹﺺﺻﺼ',
'ض': 'ﺽﺾﺿﻀ',
'ط': 'ﻁﻂﻃﻄ',
'ظ': 'ﻅﻆﻇﻈ',
'ع': 'ﻉﻊﻋﻌ',
'غ': 'ﻍﻎﻏﻐ',
'ف': 'ﻑﻒﻓﻔ',
'ق': 'ﻕﻖﻗﻘ',
'ک': 'ﮎﮏﮐﮑﻙﻚﻛﻜ',
'گ': 'ﮒﮓﮔﮕ',
'ل': 'ﻝﻞﻟﻠ',
'م': 'ﻡﻢﻣﻤ',
'ن': 'ﻥﻦﻧﻨ',
'ه': 'ﻩﻪﻫﻬ',
'هٔ': 'ﮤﮥ',
'و': 'ﻭﻮ',
'ؤ': 'ﺅﺅﺆ',
'ی': 'ﯼﯽﯾﯿﻯﻰﻱﻲﻳﻴ',
'ئ': 'ﺉﺊﺋﺌ',
'لا': 'ﻻﻼ',
'لإ': 'ﻹﻺ',
'لأ': 'ﻸﻷ',
'لآ': 'ﻵﻶ'
};
/**
* Remove stray/duplicate ZWNJ-family characters and OCR artifacts that stand in for a ZWNJ,
* without trying to guess where a NEW ZWNJ should be inserted between words - that needs the
* verb word-lists in smartZwnj() below, since blindly inserting one is what risks corrupting
* unrelated text (see that function's comment for why).
* @param {string} text The text to clean.
*/
var _cleanupZwnjArtifacts = function(text) {
return text
// a stray LRM/RLM between two Persian letters was almost always meant to be a ZWNJ
.replace(new RegExp('([' + _persianCharacters + '] *)[\u200F\u200E]+( *[' + _persianCharacters + '])', 'g'), '$1\u200c$2')
// collapse repeated invisible-joiner/mark characters down to one
.replace(/([\u200B-\u200D\uFEFF\u200E\u200F]){2,}/g, '$1')
// ¬ between two Persian letters is almost always a misrecognised ZWNJ, not a real character
.replace(new RegExp('([' + _persianCharacters + '])¬(?=[' + _persianCharacters + '])', 'g'), '$1\u200c')
// a ZWNJ has no business after a digit or most punctuation/brackets, or next to a Latin word
.replace(/([۰-۹0-9إأةؤورزژاآدذ،؛,:«»\\\/@#$٪×*()ـ\-=|ء])\u200c/g, '$1')
.replace(/[\u200B-\u200D\uFEFF]([\w])/g, '$1')
.replace(/([\w])[\u200B-\u200D\uFEFF]/g, '$1')
.replace(new RegExp('[\\u200B-\\u200D\\uFEFF]([' + _persianVowels + _arabicIndicDigits + _persianDigits + _hamza + '])', 'g'), '$1')
.replace(new RegExp('([' + _arabicIndicDigits + '])[\\u200B-\\u200D\\uFEFF]', 'g'), '$1')
.replace(/[\u200B\u200C\uFEFF]([ء\n\s\[\].،«»:()؛؟?;$!@\-=+\\|])/g, '$1')
.replace(/([\n\s\[.،«»:()؛؟?;$!@\-=+\\|])[\u200B-\u200D\uFEFF]/g, '$1')
.replace(/[\u200B-\u200D\uFEFF](\]\][\s\n])/g, '$1')
.replace(/([\n\s]\[\[)[\u200B-\u200D\uFEFF]/g, '$1');
};
/**
* Fold OCR/PDF presentation-form glyphs and non-Persian script variants (Arabic ي/ك, Urdu,
* Pashto, Uyghur, Kurdish) back to standard Persian characters, and canonicalise the hamza-
* bearing forms per ISIRI 6219 (Iran's national character-encoding standard).
* @param {string} text The text to clean.
*/
var _toStandardPersianCharacters = function(text) {
for (var standard in _persianGlyphs) {
if (_persianGlyphs.hasOwnProperty(standard)) {
text = text.replace(new RegExp('[' + _persianGlyphs[standard] + ']', 'g'), standard);
}
}
return _cleanupZwnjArtifacts(text) // needed because of the two ZWNJ-bearing keys above
.replace(/ك/g, 'ک') // Arabic
.replace(/ڪ/g, 'ک') // Urdu
.replace(/ﻙ/g, 'ک') // Pushtu
.replace(/ﻚ/g, 'ک') // Uyghur
.replace(/ي/g, 'ی') // Arabic
.replace(/ى/g, 'ی') // Urdu
.replace(/ے/g, 'ی') // Urdu
.replace(/ۍ/g, 'ی') // Pushtu
.replace(/ې/g, 'ی') // Uyghur
.replace(/ہ/g, 'ه') // Urdu
.replace(/ە/g, 'ه\u200c') // Kurdish
.replace(/ھ/g, 'ه') // Kurdish
.replace(/أ/g, 'أ') // canonical alef+hamza form per ISIRI 6219
.replace(/آ/g, 'آ');
};
/**
* Strip tatweel/kashide (ـ, U+0640) characters from a string. Tatweel is a pure justification
* stretch-mark used in decorative Persian typesetting (common on title pages); OCR frequently
* captures it as literal characters, but it has no place in a wikilink target or in wikitext.
* @param {string} text The text to clean.
*/
var _stripTatweel = function(text) {
return text.replace(/\u0640+/g, '');
};
/*********
** Script methods
*********/
/**
* Clean up OCR errors in the text, and push <noinclude> content at the top
* & bottom of the page into the header & footer boxes respectively.
* @param {object} editor The script helpers for the page.
*/
var pageCleanup = function(editor) {
// Normalise the raw text before anything else runs: fold OCR/PDF presentation-form
// glyphs and non-Persian letter variants to standard Persian characters, strip
// decorative tatweel, and convert Latin/Arabic-Indic digits to Persian. The digit
// conversion now runs unconditionally on the whole page - if a work legitimately needs
// Western digits somewhere (an ISBN, a citation in another language), those get
// converted too; there's no separate opt-in step for that anymore.
var text = _toStandardPersianCharacters(editor.get());
text = _stripTatweel(text);
text = _digitsToPersian(text);
editor.set(text);
// push <noinclude> content at the top & bottom into the header & footer
if (editor.get().match(/^<noinclude\>/)) {
var text = editor.get();
var e = text.indexOf("</noinclude>");
$('#wpHeaderTextbox').val(function(i, val) {
return $.trim(val + "\n" + text.substr(11, e-11).replace(/^\s+|\s+$/g, ''));
});
editor.set(text.substr(e+12));
}
if (editor.get().match(/<\/noinclude\>$/)) {
var text = editor.get();
var s = text.lastIndexOf("<noinclude>");
$('#wpFooterTextbox').val(function(i, val) {
return $.trim(text.substr(s+11, text.length-s-11-12).replace(/^\s+|\s+$/g, '') + "\n" + val);
});
editor.set(text.substr(0, s));
}
// clean up text
editor
// remove trailing spaces at the end of each line
.replace(/ +\n/g, '\n')
// remove trailing whitespace preceding a hard line break
.replace(/ +<br *\/?>/g, '<br />')
// remove trailing whitespace and numerals at the end of page text - matches
// Latin, Persian and Arabic-Indic digits, since page-number artifacts at the
// bottom of a scanned fa.wikisource page can OCR as any of the three
.replace(/[\s0-9۰-۹٠-٩]+$/g, '')
// remove trailing spaces at the end of refs
.replace(/ +<\/ref>/g, '</ref>')
// remove trailing spaces at the end of template calls
.replace(/ +}}/g, '}}')
// convert double-hyphen to mdash (avoiding breaking HTML comment syntax)
.replace(/([^\!])--([^>])/g, '$1—$2')
// remove spacing around mdash, but only if it has spaces on both sides
.replace(/ +— +/g, '—');
// clean up pages if they don't have <poem>
if (!editor.contains('<poem>') && !editor.contains('{{' + 'ppoem')) {
editor
// remove single line breaks; preserve multiple.
// but not if there's a tag, template or table syntax either side of the line break
.replace(/([^>}\|\n])\n([^:#\*<{\|\n])/g, '$1 $2')
// collapse sequences of spaces into a single space
.replace(/ +/g, ' ');
}
// more page cleanup
editor
// dump spurious hard breaks at the end of paragraphs
.replace(/<br *\/?>\n\n/g, '\n\n')
// remove unwanted spaces before punctuation marks - both Latin (;:?!,) and
// Persian (،؛؟) forms, since either can turn up depending on the OCR engine
.replace(/ ([;:\?!,،؛؟])/g, '$1')
// convert ASCII look-alikes to proper Persian punctuation when they follow Persian
// text. Properly printed Persian sources always used ؟/؛/، - an ASCII ?/;/, next to
// Persian text is an OCR/encoding artifact to restore, not an authorial style choice
.replace(new RegExp('([' + _persianCharacters + '])\\?', 'g'), '$1؟')
.replace(new RegExp('([' + _persianCharacters + ']);', 'g'), '$1؛')
.replace(new RegExp('([' + _persianCharacters + '])(\\]\\]|»|)\\,', 'g'), '$1$2،')
// three-or-more dots after Persian text is an ellipsis, not literal periods
.replace(new RegExp('([' + _persianCharacters + '])( *)\\.{3,}', 'g'), '$1$2…')
// canonicalise ۀ / هٴ / هٓ to ISIRI 6219's ه + combining hamza above (هٔ) - this is a
// same-character encoding choice, not a wording change, so it's safe to automate
.replace(/[ۂۀ]/g, 'هٔ')
.replace(/هٴ/g, 'هٔ')
.replace(/هٓ/g, 'هٔ')
// unicodify
.replace(/—/g, '—')
.replace(/–/g, '–')
.replace(/"/g, '"')
.replace(/<center>\s*([.\n]*?)\s*<\/center>/g, '{{center|$1}}');
};
// Verb stems used by smartZwnj() below to decide when "می"/"نمی" is a verb prefix that should
// join to what follows with a ZWNJ, rather than something else (most importantly, the classical
// word «می» meaning "wine" - extremely common in the poetry Wikisource hosts a lot of, e.g.
// Hafez or Khayyam). Matching only against a real verb stem from this list, with a real person/
// tense suffix, is what makes this safe enough to automate at all; a blind "می" + space match
// would wrongly rewrite «می ناب» (pure wine) in a ghazal. Ported verbatim from the fa.wikipedia/
// fa.wikisource "Persian text style improvement tools" gadget, since retyping ~500 verb stems by
// hand is exactly how new bugs get introduced.
var _persianPastVerbs = '(' +
'ارزید|افتاد|افراشت|افروخت|افزود|افسرد|افشاند|افکند|انباشت|انجامید|انداخت|اندوخت|اندود|اندیشید|انگاشت|انگیخت|انگیزاند|اوباشت|ایستاد' +
'|آراست|آراماند|آرامید|آرمید|آزرد|آزمود|آسود|آشامید|آشفت|آشوبید|آغازید|آغشت|آفرید|آکند|آگند|آلود|آمد|آمرزید|آموخت|آموزاند' +
'|آمیخت|آهیخت|آورد|آویخت|باخت|باراند|بارید|بافت|بالید|باوراند|بایست|بخشود|بخشید|برازید|برد|برید|بست|بسود|بسیجید|بلعید' +
'|بود|بوسید|بویید|بیخت|پاشاند|پاشید|پالود|پایید|پخت|پذیراند|پذیرفت|پراکند|پراند|پرداخت|پرستید|پرسید|پرهیزید|پروراند|پرورد|پرید' +
'|پژمرد|پژوهید|پسندید|پلاسید|پلکید|پناهید|پنداشت|پوسید|پوشاند|پوشید|پویید|پیچاند|پیچانید|پیچید|پیراست|پیمود|پیوست|تاباند|تابید|تاخت' +
'|تاراند|تازاند|تازید|تافت|تپاند|تپید|تراشاند|تراشید|تراوید|ترساند|ترسید|ترشید|ترکاند|ترکید|تکاند|تکانید|تنید|توانست|جَست|جُست' +
'|جست|جنباند|جنبید|جنگید|جهاند|جهید|جوشاند|جوشید|جوید|چاپید|چایید|چپاند|چپید|چراند|چربید|چرخاند|چرخید|چرید|چسباند|چسبید' +
'|چشاند|چشید|چکاند|چکید|چلاند|چلانید|چمید|چید|خاراند|خارید|خاست|خایید|خراشاند|خراشید|خرامید|خروشید|خرید|خزید|خشکاند' +
'|خشکید|خفت|خلید|خمید|خنداند|خندانید|خندید|خواباند|خوابانید|خوابید|خواست|خواند|خوراند|خورد|خوفید|خیساند|خیسید|داد|داشت|دانست' +
'|درخشانید|درخشید|دروید|درید|دزدید|دمید|دواند|دوخت|دوشید|دوید|دید|دیدم|راند|ربود|رخشید|رساند|رسانید|رست|رَست|رُست' +
'|رسید|رشت|رفت|رُفت|رقصاند|رقصید|رمید|رنجاند|رنجید|رندید|رهاند|رهانید|رهید|روبید|روفت|رویاند|رویید|ریخت|رید|ریسید' +
'|زاد|زارید|زایید|زد|زدود|زیست|سابید|ساخت|سپارد|سپرد|سپوخت|ستاند|ستد|سترد|ستود|ستیزید|سرایید|سرشت|سرود|سرید' +
'|سزید|سفت|سگالید|سنجید|سوخت|سود|سوزاند|شاشید|شایست|شتافت|شد|شست|شکافت|شکست|شکفت|شکیفت|شگفت|شمارد|شمرد|شناخت' +
'|شناساند|شنید|شوراند|شورید|طپید|طلبید|طوفید|غارتید|غرید|غلتاند|غلتانید|غلتید|غلطاند|غلطانید|غلطید|غنود|فرستاد|فرسود|فرمود|فروخت' +
'|فریفت|فشاند|فشرد|فهماند|فهمید|قاپید|قبولاند|کاست|کاشت|کاوید|کرد|کشاند|کشانید|کشت|کشید|کفت|کفید|کند|کوبید|کوچید' +
'|کوشید|کوفت|گَزید|گُزید|گایید|گداخت|گذارد|گذاشت|گذراند|گذشت|گرازید|گرایید|گرداند|گردانید|گردید|گرفت|گروید|گریاند|گریخت|گریست' +
'|گزارد|گزید|گسارد|گستراند|گسترد|گسست|گسیخت|گشت|گشود|گفت|گمارد|گماشت|گنجاند|گنجانید|گنجید|گندید|گوارید|گوزید|لرزاند|لرزید' +
'|لغزاند|لغزید|لمباند|لمدنی|لمید|لندید|لنگید|لهید|لولید|لیسید|ماسید|مالاند|مالید|ماند|مانست|مرد|مکشید|مکید|مولید|مویید' +
'|نازید|نالید|نامید|نشاند|نشست|نکوهید|نگاشت|نگریست|نمایاند|نمود|نهاد|نهفت|نواخت|نوردید|نوشاند|نوشت|نوشید|نیوشید|هراسید|هشت' +
'|ورزید|وزاند|وزید|یارست|یازید|یافت' +
')';
var _persianPresentVerbs = '(' +
'ارز|افت|افراز|افروز|افزا|افزای|افسر|افشان|افکن|انبار|انباز|انجام|انداز|اندای|اندوز|اندیش|انگار|انگیز|انگیزان' +
'|اوبار|ایست|آرا|آرام|آرامان|آرای|آزار|آزما|آزمای|آسا|آسای|آشام|آشوب|آغار|آغاز|آفرین|آکن|آگن|آلا|آلای' +
'|آمرز|آموز|آموزان|آمیز|آهنج|آور|آویز|آی|بار|باران|باز|باش|باف|بال|باوران|بای|باید|بخش|بخشا|بخشای' +
'|بر|بَر|بُر|براز|بساو|بسیج|بلع|بند|بو|بوس|بوی|بیز|بین|پا|پاش|پاشان|پالا|پالای|پذیر|پذیران' +
'|پر|پراکن|پران|پرداز|پرس|پرست|پرهیز|پرور|پروران|پز|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پوس|پوش|پوشان' +
'|پوی|پیچ|پیچان|پیرا|پیرای|پیما|پیمای|پیوند|تاب|تابان|تاران|تاز|تازان|تپ|تپان|تراش|تراشان|تراو|ترس|ترسان' +
'|ترش|ترک|ترکان|تکان|تن|توان|توپ|جنب|جنبان|جنگ|جه|جهان|جو|جوش|جوشان|جوی|چاپ|چای|چپ|چپان' +
'|چر|چران|چرب|چرخ|چرخان|چسب|چسبان|چش|چشان|چک|چکان|چل|چلان|چم|چین|خار|خاران|خای|خر|خراش' +
'|خراشان|خرام|خروش|خز|خشک|خشکان|خل|خم|خند|خندان|خواب|خوابان|خوان|خواه|خور|خوران|خوف|خیز|خیس' +
'|خیسان|دار|درخش|درخشان|درو|دزد|دم|ده|دو|دوان|دوز|دوش|ران|ربا|ربای|رخش|رس|رسان' +
'|رشت|رقص|رقصان|رم|رنج|رنجان|رند|ره|رهان|رو|روب|روی|رویان|ریز|ریس|رین|زا|زار|زای|زدا' +
'|زدای|زن|زی|ساب|ساز|سای|سپار|سپر|سپوز|ستا|ستان|ستر|ستیز|سر|سرا|سرای|سرشت|سز|سگال|سنب' +
'|سنج|سوز|سوزان|شاش|شای|شتاب|شکاف|شکف|شکن|شکوف|شکیب|شمار|شمر|شناس|شناسان|شنو|شو|شور|شوران|شوی' +
'|طپ|طلب|طوف|غارت|غر|غلت|غلتان|غلط|غلطان|غنو|فرسا|فرسای|فرست|فرما|فرمای|فروش|فریب|فشار|فشان|فشر' +
'|فهم|فهمان|قاپ|قبولان|کار|کاه|کاو|کش|کَش|کُش|کِش|کشان|کف|کن|کوب|کوچ|کوش|گا|گای|گداز' +
'|گذار|گذر|گذران|گرا|گراز|گرای|گرد|گردان|گرو|گری|گریان|گریز|گز|گزار|گزین|گسار|گستر|گستران|گسل|گشا' +
'|گشای|گمار|گنج|گنجان|گند|گو|گوار|گوز|گوی|گیر|لرز|لرزان|لغز|لغزان|لم|لمبان|لند|لنگ|له|لول' +
'|لیس|ماس|مال|مان|مک|مول|موی|میر|ناز|نال|نام|نشان|نشین|نکوه|نگار|نگر|نما|نمای|نمایان|نه' +
'|نهنب|نواز|نورد|نوش|نوشان|نویس|نیوش|هراس|هست|هل|ورز|وز|وزان|یاب|یار|یاز' +
')';
var _persianComplexPastVerbs = {
'باز': 'آفرید|آمد|آموخت|آورد|ایستاد|تابید|جست|خواند|داشت|رساند|ستاند|شمرد|ماند|نمایاند|نهاد|نگریست|پرسید|گذارد' +
'|گرداند|گردید|گرفت|گشت|گشود|گفت|یافت',
'در': 'بر ?داشت|بر ?گرفت|آمد|آمیخت|آورد|آویخت|افتاد|افکند|انداخت|رفت|ماند|نوردید|کشید|گرفت',
'بر': 'آشفت|آمد|آورد|افتاد|افراشت|افروخت|افشاند|افکند|انداخت|انگیخت|تاباند|تابید|تافت|تنید|جهید|خاست|خواست|خورد' +
'|داشت|دمید|شمرد|نهاد|چید|کرد|کشید|گرداند|گردانید|گردید|گزید|گشت|گشود|گمارد|گماشت',
'فرو': 'آمد|خورد|داد|رفت|نشاند|کرد|گذارد|گذاشت',
'وا': 'داشت|رهاند|ماند|نهاد|کرد',
'ور': 'آمد|افتاد|رفت',
'یاد': 'گرفت',
'پراکنده': 'ساخت',
'زمین': 'خورد',
'گول': 'زد',
'لخت': 'کرد'
};
var _persianComplexPresentVerbs = {
'باز': 'آفرین|آموز|آور|ایست|تاب|جو|خوان|دار|رس|ستان|شمار|مان|نمایان|نه|نگر|پرس|گذار|گردان|گرد|گشا|گو|گیر|یاب',
'در': 'بر ?دار|بر ?گیر|آمیز|آور|آویز|افت|افکن|انداز|مان|نورد|کش|گذر|گیر',
'بر': 'آشوب|آور|افت|افراز|افروز|افشان|افکن|انداز|انگیز|تابان|تاب|تن|جه|خواه|خور|خیز|دار|دم|شمار|نه|چین|کش|کن' +
'|گردان|گزین|گشا|گمار',
'فرو': 'خور|ده|رو|نشین|کن|گذار',
'وا': 'دار|رهان|مان|نه|کن',
'ور': 'افت|رو',
'یاد': 'گیر',
'پراکنده': 'ساز',
'زمین': 'خور',
'گول': 'زن',
'لخت': 'کن'
};
/**
* Join compound verbs (باز آفرید, در آمد, بر داشت, etc.) with a ZWNJ instead of a space, using
* the curated prefix/stem pairs above so only real compound verbs match.
* @param {string} text The text to process.
*/
var _applyComplexVerbZwnj = function(text) {
var prefix, stems;
for (prefix in _persianComplexPastVerbs) {
if (!_persianComplexPastVerbs.hasOwnProperty(prefix)) continue;
stems = _persianComplexPastVerbs[prefix];
text = text.replace(new RegExp(
'(^|[^' + _persianCharacters + '])(' + prefix + ') ?(می|نمی|)( |\u200c|)(ن|)(' +
stems + ')(م|ی|یم|ید|ند|ه|ن|)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3\u200c$5$6$7$8');
}
for (prefix in _persianComplexPresentVerbs) {
if (!_persianComplexPresentVerbs.hasOwnProperty(prefix)) continue;
stems = _persianComplexPresentVerbs[prefix];
text = text.replace(new RegExp(
'(^|[^' + _persianCharacters + '])(' + prefix + ') ?(می|نمی|)( |\u200c|)(ن|)(' +
stems + ')(م|ی|د|یم|ید|ند|ن)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3\u200c$5$6$7$8');
}
return text;
};
/**
* Join می/نمی to a following verb stem with a ZWNJ (میرود), join the plural/superlative
* suffixes ها/ترین with a ZWNJ, and a handful of specific, well-tested exceptions (میدانی,
* میتوان, میگوی دریایی, میدوی) that would otherwise be wrongly split by the general rules.
* Ported from the same gadget's applyZwnj(); see the smartZwnj() comment for the caveat this
* still doesn't (and can't) fully resolve.
* @param {string} text The text to process.
*/
var _applyZwnj = function(text) {
text = _applyComplexVerbZwnj(text);
return _cleanupZwnjArtifacts(text)
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?' + _persianPastVerbs +
'(م|ی|یم|ید|ند|ه|)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?' + _persianPresentVerbs +
'(م|ی|د|یم|ید|ند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
// ماضی نقلی: خوردهام, رفتهاید, ...
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(ن|)' + _persianPastVerbs +
'ه (ام|ای|ایم|اید|اند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2$3ه\u200c$4$5'
)
.replace(new RegExp('([' + _persianCharacters + '])هاست($|[^' + _persianCharacters + '])', 'g'), '$1ه است$2')
// «دان» handled separately: its «ی» suffix collides with the verb «دانی»/میدانی
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?(دان)(م|د|یم|ید|ند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
.replace(/(\s)(می|نمی) ?توان/g, '$1$2\u200cتوان')
// «ها» and «ترین» always join with a ZWNJ, never a full space
.replace(/ ها([\]\.،\:»\)\s]|\'{2,3}|\={2,})/g, '\u200cها$1')
.replace(/ ها(ی|یی|یم|یت|یش|ی?مان|ی?تان|ی?شان)([\]\.،\:»\)\s])/g, '\u200cها$1$2')
.replace(/هها/g, 'هها')
.replace(/ ترین([\]\.،\:»\)\s]|\'{2,3}|\={2,})/g, '\u200cترین$1')
// a few specific words that would otherwise be caught by the general rules above
.replace(new RegExp('می\u200cگوی($|[^' + _persianCharacters + '\u200c])', 'g'), 'میگوی$1') // میگوی دریایی
.replace(new RegExp('می\u200cدوی($|[^' + _persianCharacters + '\u200c])', 'g'), 'میدوی$1'); // میدوی (ابهامزدایی)
};
/**
* Join می/نمی verb prefixes (and a few common suffixes) to what follows with a ZWNJ instead of
* a full space, using curated Persian verb-stem lists so it only fires on real verbs.
*
* This is scoped to your selection rather than the whole page on purpose: even with the word
* lists, «می» on its own is also the classical word for "wine" (می ناب، میگلگون، ساقی می ده…),
* and Wikisource hosts a lot of exactly the poetry where that comes up. The word-list approach
* makes this far safer than a blind "می" + space replace, but it can't tell «می» the prefix from
* «می» the noun by context alone - so select the passage you've checked, rather than running it
* across a whole ghazal unread.
* @param {object} editor The script helpers for the page.
*/
var smartZwnj = function(editor) {
editor.replaceSelection(_applyZwnj);
};
/**
* Fix common harakat placement problems in the selected text: a mark that ended up separated
* from its letter by a stray space moves back next to the letter, and repeated marks on the
* same letter collapse to one. Complements fatha/kasra/damma/tashdid/sukun above, which insert
* marks, by cleaning up marks that are already there but misplaced.
* Ported from the fa.wikipedia/fa.wikisource "Persian text style improvement tools" gadget.
* @param {object} editor The script helpers for the page.
*/
function fixVowelMarks(editor) {
editor.replaceSelection(function(text) {
return text
.replace(new RegExp('([' + _persianCharacters + _persianVowels + _hamza + '])(\\s)([' + _persianVowels + _hamza + '])', 'g'), '$1$3$2')
.replace(new RegExp('([' + _persianVowels + _hamza + ']){2,}', 'g'), '$1');
});
}
/**
* Add less common marks. A bare selected «ا» gets a fathatan (تنوین نصب, اً - U+064B), which
* covers the very common Arabic-loan adverb ending seen in words like اتفاقاً, مثلاً and لطفاً.
* Anything else falls back to appending an em dash, mirroring the English original's catchall
* default (useful as a quick one-key dash insert).
* @param {object} editor The script helpers for the page.
*/
function catchall(editor) {
editor.replaceSelection(function(selected) {
switch (selected) {
case 'ا':
return 'ا\u064B';
default:
return selected + '—';
}
});
}
});
// </nowiki>
0tpodt3mqor3oquo6xx5uqjx92cw4et
299758
299732
2026-09-19T20:47:15Z
Hanooz
17889
299758
javascript
text/javascript
/*
This page defines a TemplateScript library for fa.wikisource.org (ویکینبشتهٔ فارسی).
It's not meant to be referenced directly - install it the same way as the upstream
English version described at [[Wikisource:TemplateScript]].
This is a Persian Wikisource adaptation of Pathoschild's proofreading and typography
libraries, pared down to a focused four-action toolset. It draws on the fa.wikipedia/
fa.wikisource "Persian text style improvement tools" gadget (Gadget-Extra-Editbuttons-
persianwikitools.js) for several of the character/orthography helpers, since that's the
community's own tested implementation rather than something invented for this file.
*/
/* global $, pathoschild */
/**
* TemplateScript adds configurable templates and scripts to the sidebar, and adds an example regex editor.
* @see https://meta.wikimedia.org/wiki/TemplateScript
*
* The upstream proofreading library's @update-token has been removed on purpose: Wikisource's
* maintenance bot uses that token to overwrite local copies with the vanilla English script,
* which would silently wipe out every change made here for fa.wikisource. See [[Wikisource:Tools
* and scripts]] for how the update-bot category works.
*/
// <nowiki>
$.ajax('//tools-static.wmflabs.org/meta/scripts/pathoschild.templatescript.js', { dataType:'script', cache:true }).then(function() {
/*********
** Define library
*********/
pathoschild.TemplateScript.library.define({
key: 'wikisource.fa.tools',
name: 'ابزارهای ویکینبشتهٔ فارسی',
url: '//fa.wikisource.org/wiki/راهنما:نمونهخوانی',
description: 'مجموعهای از ابزارها برای <a href="/wiki/راهنما:نمونهخوانی">نمونهخوانی آثار در فضای نام <tt>برگه:</tt></a>: پاکسازی OCR (با اصلاح نویسهها، کشیده، ارقام، جای اعراب، نیمفاصله، نشانهگذاری و حذف زوائد اسکن)، اصلاح نیمفاصلهٔ افعال، و افزودن تنوین یا خط تیره.',
categories: [
{
name: 'ابزارهای برگه',
scripts: [
{ key: 'cleanup-ocr', name: 'پاکسازی OCR', script: function(editor) { pageCleanup(editor); }, forNamespaces: 'page' },
{ key: 'smart-zwnj', name: 'اصلاح نیمفاصلهٔ افعال', script: function(editor) { smartZwnj(editor); }, forNamespaces: 'page' }
]
},
{
name: 'ابزارهای اعراب',
scripts: [
{ key: 'misc', name: 'افزودن تنوین یا خط تیره', script: catchall, accessKey: '-' }
]
}
]
});
/*********
** Private methods
*********/
// Digit tables used to convert between Latin, Persian and Arabic-Indic numerals.
var _persianDigits = '۰۱۲۳۴۵۶۷۸۹';
var _arabicIndicDigits = '٠١٢٣٤٥٦٧٨٩';
var _latinDigits = '0123456789';
// Character-class tables used by the Persian-specific cleanup helpers below. Ported from the
// fa.wikipedia/fa.wikisource "Persian text style improvement tools" gadget (Gadget-Extra-
// Editbuttons-persianwikitools.js) - the community's own tested implementation of this
// normalisation, rather than something invented for this file.
var _hamza = '\u0654';
var _persianVowels = '\u064B-\u0650\u0652\u0670';
// non-standard letterforms (Arabic ي/ك, Urdu, Pashto, Uyghur presentation forms, etc.) that
// should still count as "a Persian-ish letter" for context-matching, even before
// _toStandardPersianCharacters() below has normalised them
var _similarPersianCharacters = '\u0643\uFB91\uFB90\uFB8F\uFB8E\uFEDC\uFEDB\uFEDA\uFED9\u0649\uFEEF\u064A\u06C1\u06D5\u06BE\uFEF0-\uFEF4';
var _persianCharacters = '\u0621-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2' + _similarPersianCharacters;
/**
* Convert any mix of Latin or Arabic-Indic digits in a string to Persian digits, for display in wikitext.
* @param {string} text The text to convert.
*/
var _digitsToPersian = function(text) {
var result = '';
for (var i = 0; i < text.length; i++) {
var ch = text.charAt(i);
var idx = _latinDigits.indexOf(ch);
if (idx === -1) idx = _arabicIndicDigits.indexOf(ch);
result += (idx !== -1) ? _persianDigits.charAt(idx) : ch;
}
return result;
};
/**
* OCR/PDF presentation-form and script-variant glyphs that extraction sometimes leaves as
* literal characters instead of the standard Persian letter - a common problem specifically on
* PDF-sourced works, where each glyph can get saved as its own shaped codepoint. Keys are the
* standard letter (or letter + a real ZWNJ, for the two glyphs that visually look joined);
* values are a character class of the presentation-form/variant glyphs that should fold into it.
*/
var _persianGlyphs = {
'\u200cه': 'ﻫ',
'ی\u200c': 'ﻰﻲ',
'أ': 'ﺄﺃﺃ',
'آ': 'ﺁﺁﺂ',
'إ': 'ﺇﺈﺇ',
'ا': 'ﺍﺎ',
'ب': 'ﺏﺐﺑﺒ',
'پ': 'ﭖﭗﭘﭙ',
'ت': 'ﺕﺖﺗﺘ',
'ث': 'ﺙﺚﺛﺜ',
'ج': 'ﺝﺞﺟﺠ',
'چ': 'ﭺﭻﭼﭽ',
'ح': 'ﺡﺢﺣﺤ',
'خ': 'ﺥﺦﺧﺨ',
'د': 'ﺩﺪ',
'ذ': 'ﺫﺬ',
'ر': 'ﺭﺮ',
'ز': 'ﺯﺰ',
'ژ': 'ﮊﮋ',
'س': 'ﺱﺲﺳﺴ',
'ش': 'ﺵﺶﺷﺸ',
'ص': 'ﺹﺺﺻﺼ',
'ض': 'ﺽﺾﺿﻀ',
'ط': 'ﻁﻂﻃﻄ',
'ظ': 'ﻅﻆﻇﻈ',
'ع': 'ﻉﻊﻋﻌ',
'غ': 'ﻍﻎﻏﻐ',
'ف': 'ﻑﻒﻓﻔ',
'ق': 'ﻕﻖﻗﻘ',
'ک': 'ﮎﮏﮐﮑﻙﻚﻛﻜ',
'گ': 'ﮒﮓﮔﮕ',
'ل': 'ﻝﻞﻟﻠ',
'م': 'ﻡﻢﻣﻤ',
'ن': 'ﻥﻦﻧﻨ',
'ه': 'ﻩﻪﻫﻬ',
'هٔ': 'ﮤﮥ',
'و': 'ﻭﻮ',
'ؤ': 'ﺅﺅﺆ',
'ی': 'ﯼﯽﯾﯿﻯﻰﻱﻲﻳﻴ',
'ئ': 'ﺉﺊﺋﺌ',
'لا': 'ﻻﻼ',
'لإ': 'ﻹﻺ',
'لأ': 'ﻸﻷ',
'لآ': 'ﻵﻶ'
};
/**
* Remove stray/duplicate ZWNJ-family characters and OCR artifacts that stand in for a ZWNJ,
* without trying to guess where a NEW ZWNJ should be inserted between words - that needs the
* verb word-lists in smartZwnj() below, since blindly inserting one is what risks corrupting
* unrelated text (see that function's comment for why).
* @param {string} text The text to clean.
*/
var _cleanupZwnjArtifacts = function(text) {
return text
// a stray LRM/RLM between two Persian letters was almost always meant to be a ZWNJ
.replace(new RegExp('([' + _persianCharacters + '] *)[\u200F\u200E]+( *[' + _persianCharacters + '])', 'g'), '$1\u200c$2')
// collapse repeated invisible-joiner/mark characters down to one
.replace(/([\u200B-\u200D\uFEFF\u200E\u200F]){2,}/g, '$1')
// ¬ between two Persian letters is almost always a misrecognised ZWNJ, not a real character
.replace(new RegExp('([' + _persianCharacters + '])¬(?=[' + _persianCharacters + '])', 'g'), '$1\u200c')
// a ZWNJ has no business after a digit or most punctuation/brackets, or next to a Latin word
.replace(/([۰-۹0-9إأةؤورزژاآدذ،؛,:«»\\\/@#$٪×*()ـ\-=|ء])\u200c/g, '$1')
.replace(/[\u200B-\u200D\uFEFF]([\w])/g, '$1')
.replace(/([\w])[\u200B-\u200D\uFEFF]/g, '$1')
.replace(new RegExp('[\\u200B-\\u200D\\uFEFF]([' + _persianVowels + _arabicIndicDigits + _persianDigits + _hamza + '])', 'g'), '$1')
.replace(new RegExp('([' + _arabicIndicDigits + '])[\\u200B-\\u200D\\uFEFF]', 'g'), '$1')
.replace(/[\u200B\u200C\uFEFF]([ء\n\s\[\].،«»:()؛؟?;$!@\-=+\\|])/g, '$1')
.replace(/([\n\s\[.،«»:()؛؟?;$!@\-=+\\|])[\u200B-\u200D\uFEFF]/g, '$1')
.replace(/[\u200B-\u200D\uFEFF](\]\][\s\n])/g, '$1')
.replace(/([\n\s]\[\[)[\u200B-\u200D\uFEFF]/g, '$1');
};
/**
* Fold OCR/PDF presentation-form glyphs and non-Persian script variants (Arabic ي/ك, Urdu,
* Pashto, Uyghur, Kurdish) back to standard Persian characters, and canonicalise the hamza-
* bearing forms per ISIRI 6219 (Iran's national character-encoding standard).
* @param {string} text The text to clean.
*/
var _toStandardPersianCharacters = function(text) {
for (var standard in _persianGlyphs) {
if (_persianGlyphs.hasOwnProperty(standard)) {
text = text.replace(new RegExp('[' + _persianGlyphs[standard] + ']', 'g'), standard);
}
}
return _cleanupZwnjArtifacts(text) // needed because of the two ZWNJ-bearing keys above
.replace(/ك/g, 'ک') // Arabic
.replace(/ڪ/g, 'ک') // Urdu
.replace(/ﻙ/g, 'ک') // Pushtu
.replace(/ﻚ/g, 'ک') // Uyghur
.replace(/ي/g, 'ی') // Arabic
.replace(/ى/g, 'ی') // Urdu
.replace(/ے/g, 'ی') // Urdu
.replace(/ۍ/g, 'ی') // Pushtu
.replace(/ې/g, 'ی') // Uyghur
.replace(/ہ/g, 'ه') // Urdu
.replace(/ە/g, 'ه\u200c') // Kurdish
.replace(/ھ/g, 'ه') // Kurdish
.replace(/أ/g, 'أ') // canonical alef+hamza form per ISIRI 6219
.replace(/آ/g, 'آ');
};
/**
* Strip tatweel/kashide (ـ, U+0640) characters from a string. Tatweel is a pure justification
* stretch-mark used in decorative Persian typesetting (common on title pages); OCR frequently
* captures it as literal characters, but it has no place in a wikilink target or in wikitext.
* @param {string} text The text to clean.
*/
var _stripTatweel = function(text) {
return text.replace(/\u0640+/g, '');
};
/*********
** Script methods
*********/
/**
* Clean up OCR errors in the text, and push <noinclude> content at the top
* & bottom of the page into the header & footer boxes respectively.
* @param {object} editor The script helpers for the page.
*/
var pageCleanup = function(editor) {
// Normalise the raw text before anything else runs: fold OCR/PDF presentation-form
// glyphs and non-Persian letter variants to standard Persian characters, strip
// decorative tatweel, convert Latin/Arabic-Indic digits to Persian, and fix vowel-mark
// (harakat) placement - a mark separated from its letter by a stray space moves back
// next to the letter, and duplicate marks on the same letter collapse to one. The digit
// conversion runs unconditionally on the whole page - if a work legitimately needs
// Western digits somewhere (an ISBN, a citation in another language), those get
// converted too; there's no separate opt-in step for that anymore.
var text = _toStandardPersianCharacters(editor.get());
text = _stripTatweel(text);
text = _digitsToPersian(text);
text = text.replace(new RegExp('([' + _persianCharacters + _persianVowels + _hamza + '])(\\s)([' + _persianVowels + _hamza + '])', 'g'), '$1$3$2');
text = text.replace(new RegExp('([' + _persianVowels + _hamza + ']){2,}', 'g'), '$1');
editor.set(text);
// Strip leading lines that are pure page-number "running header" junk - the digits-only
// case of the en.wikisource WsCleanup gadget's running-header patterns. Dropped that
// gadget's other pattern (digits plus an ALL-CAPS title fragment) since Persian has no
// letter case to signal "this is header text, not body text" the way English capitals
// do. Caveat carried over from the source: a work with numbered stanzas/verses starting
// right at the top of a page could have its number line mistaken for header junk here -
// worth a glance after running this on poetry.
(function() {
var lines = editor.get().split(/\r?\n/);
var pageNumberOnly = /^[\s0-9۰-۹٠-٩.,\-–—]+$/;
var start = 0;
for (var li = 0; li < lines.length; li++) {
if (lines[li].trim().length === 0 || (pageNumberOnly.test(lines[li]) && lines[li].trim().length > 0)) {
start++;
continue;
}
break;
}
if (start > 0) {
editor.set(lines.slice(start).join('\n'));
}
})();
// push <noinclude> content at the top & bottom into the header & footer
if (editor.get().match(/^<noinclude\>/)) {
var text = editor.get();
var e = text.indexOf("</noinclude>");
$('#wpHeaderTextbox').val(function(i, val) {
return $.trim(val + "\n" + text.substr(11, e-11).replace(/^\s+|\s+$/g, ''));
});
editor.set(text.substr(e+12));
}
if (editor.get().match(/<\/noinclude\>$/)) {
var text = editor.get();
var s = text.lastIndexOf("<noinclude>");
$('#wpFooterTextbox').val(function(i, val) {
return $.trim(text.substr(s+11, text.length-s-11-12).replace(/^\s+|\s+$/g, '') + "\n" + val);
});
editor.set(text.substr(0, s));
}
// clean up text
editor
// remove trailing spaces at the end of each line
.replace(/ +\n/g, '\n')
// remove trailing whitespace preceding a hard line break
.replace(/ +<br *\/?>/g, '<br />')
// remove trailing whitespace and numerals at the end of page text - matches
// Latin, Persian and Arabic-Indic digits, since page-number artifacts at the
// bottom of a scanned fa.wikisource page can OCR as any of the three
.replace(/[\s0-9۰-۹٠-٩]+$/g, '')
// remove trailing spaces at the end of refs
.replace(/ +<\/ref>/g, '</ref>')
// remove trailing spaces at the end of template calls
.replace(/ +}}/g, '}}')
// convert double-hyphen to mdash (avoiding breaking HTML comment syntax)
.replace(/([^\!])--([^>])/g, '$1—$2')
// remove spacing around mdash, but only if it has spaces on both sides
.replace(/ +— +/g, '—')
// "Digitized by Google" scan-watermark text and stray OCR of the word "Google" -
// the watermark itself is always in English regardless of the scanned work's
// language, so this is just as relevant to a Google Books-sourced Persian scan
.replace(/\s?D[il]g[il]t[il][sz][eco]d\s+by[^\n]*\s+([6G][Oo0]{2}g[lI]e)?/g, '')
.replace(/\bG[oO0]{2}gle\b/g, '')
// highly suspicious OCR noise characters
.replace(/[■•]/g, '')
// a line containing nothing but a stray punctuation mark is likely scan noise
.replace(/^[.,^،؛]$/gm, '')
// underscores (often OCR of underlined text or a form field) aren't meaningful in wikitext
.replace(/_/g, ' ')
// number ranges get an en dash, not a hyphen, per fa.wikisource's وپ:خط تیره
.replace(/([۰-۹]+)[ \t]?-[ \t]?(?=[۰-۹])/g, '$1–')
// <section begin=x/> needs to be <section begin="x"/> to parse
.replace(/<section (begin|end)=(\w[^/]+)\/>/g, '<section $1="$2"/>')
// a <ref> shouldn't have a space glued before it
.replace(/ <ref/g, '<ref')
// {{hws}}/{{hwe}} shorthand for a word split across a page boundary, expanded to the
// full template names (same English names used across Wikisource language versions,
// fa.wikisource included, for this kind of utility template)
.replace(/{{hws\|/g, '{{hyphenated word start|')
.replace(/{{hwe\|/g, '{{hyphenated word end|')
// {{c|...}} shorthand for {{center|...}}, if used
.replace(/{{c\|/g, '{{center|');
// clean up pages if they don't have <poem>
if (!editor.contains('<poem>') && !editor.contains('{{' + 'ppoem')) {
editor
// remove single line breaks; preserve multiple.
// but not if there's a tag, template or table syntax either side of the line break
.replace(/([^>}\|\n])\n([^:#\*<{\|\n])/g, '$1 $2')
// collapse sequences of spaces into a single space
.replace(/ +/g, ' ');
}
// more page cleanup
editor
// dump spurious hard breaks at the end of paragraphs
.replace(/<br *\/?>\n\n/g, '\n\n')
// remove unwanted spaces before punctuation marks - both Latin (;:?!,.)) and
// Persian (،؛؟) forms, since either can turn up depending on the OCR engine
.replace(/ ([;:\?!,.)،؛؟])/g, '$1')
// and no space after an opening parenthesis
.replace(/\( +/g, '(')
// convert ASCII look-alikes to proper Persian punctuation when they follow Persian
// text. Properly printed Persian sources always used ؟/؛/، - an ASCII ?/;/, next to
// Persian text is an OCR/encoding artifact to restore, not an authorial style choice
.replace(new RegExp('([' + _persianCharacters + '])\\?', 'g'), '$1؟')
.replace(new RegExp('([' + _persianCharacters + ']);', 'g'), '$1؛')
.replace(new RegExp('([' + _persianCharacters + '])(\\]\\]|»|)\\,', 'g'), '$1$2،')
// ensure a space after punctuation when it's glued directly to the next word...
.replace(/([;:\?!,.)،؛؟])([^\s0-9۰-۹٠-٩\n}|"«»'’”])/g, '$1 $2')
// ...but consecutive punctuation marks (or end of line) don't get a space between them
.replace(/([;:\?!,.)،؛؟]) +([\n;:\?!,.)،؛؟\]]|$)/g, '$1$2')
// a double period after a Persian letter is almost always meant to be one
.replace(new RegExp('([' + _persianCharacters + '])\\.\\. (?=[' + _persianCharacters + '])', 'g'), '$1. ')
// three-or-more dots after Persian text is an ellipsis, not literal periods
.replace(new RegExp('([' + _persianCharacters + '])( *)\\.{3,}', 'g'), '$1$2…')
// canonicalise ۀ / هٴ / هٓ to ISIRI 6219's ه + combining hamza above (هٔ) - this is a
// same-character encoding choice, not a wording change, so it's safe to automate
.replace(/[ۂۀ]/g, 'هٔ')
.replace(/هٴ/g, 'هٔ')
.replace(/هٓ/g, 'هٔ')
// unicodify
.replace(/—/g, '—')
.replace(/–/g, '–')
.replace(/"/g, '"')
.replace(/<center>\s*([.\n]*?)\s*<\/center>/g, '{{center|$1}}');
};
// Verb stems used by smartZwnj() below to decide when "می"/"نمی" is a verb prefix that should
// join to what follows with a ZWNJ, rather than something else (most importantly, the classical
// word «می» meaning "wine" - extremely common in the poetry Wikisource hosts a lot of, e.g.
// Hafez or Khayyam). Matching only against a real verb stem from this list, with a real person/
// tense suffix, is what makes this safe enough to automate at all; a blind "می" + space match
// would wrongly rewrite «می ناب» (pure wine) in a ghazal. Ported verbatim from the fa.wikipedia/
// fa.wikisource "Persian text style improvement tools" gadget, since retyping ~500 verb stems by
// hand is exactly how new bugs get introduced.
var _persianPastVerbs = '(' +
'ارزید|افتاد|افراشت|افروخت|افزود|افسرد|افشاند|افکند|انباشت|انجامید|انداخت|اندوخت|اندود|اندیشید|انگاشت|انگیخت|انگیزاند|اوباشت|ایستاد' +
'|آراست|آراماند|آرامید|آرمید|آزرد|آزمود|آسود|آشامید|آشفت|آشوبید|آغازید|آغشت|آفرید|آکند|آگند|آلود|آمد|آمرزید|آموخت|آموزاند' +
'|آمیخت|آهیخت|آورد|آویخت|باخت|باراند|بارید|بافت|بالید|باوراند|بایست|بخشود|بخشید|برازید|برد|برید|بست|بسود|بسیجید|بلعید' +
'|بود|بوسید|بویید|بیخت|پاشاند|پاشید|پالود|پایید|پخت|پذیراند|پذیرفت|پراکند|پراند|پرداخت|پرستید|پرسید|پرهیزید|پروراند|پرورد|پرید' +
'|پژمرد|پژوهید|پسندید|پلاسید|پلکید|پناهید|پنداشت|پوسید|پوشاند|پوشید|پویید|پیچاند|پیچانید|پیچید|پیراست|پیمود|پیوست|تاباند|تابید|تاخت' +
'|تاراند|تازاند|تازید|تافت|تپاند|تپید|تراشاند|تراشید|تراوید|ترساند|ترسید|ترشید|ترکاند|ترکید|تکاند|تکانید|تنید|توانست|جَست|جُست' +
'|جست|جنباند|جنبید|جنگید|جهاند|جهید|جوشاند|جوشید|جوید|چاپید|چایید|چپاند|چپید|چراند|چربید|چرخاند|چرخید|چرید|چسباند|چسبید' +
'|چشاند|چشید|چکاند|چکید|چلاند|چلانید|چمید|چید|خاراند|خارید|خاست|خایید|خراشاند|خراشید|خرامید|خروشید|خرید|خزید|خشکاند' +
'|خشکید|خفت|خلید|خمید|خنداند|خندانید|خندید|خواباند|خوابانید|خوابید|خواست|خواند|خوراند|خورد|خوفید|خیساند|خیسید|داد|داشت|دانست' +
'|درخشانید|درخشید|دروید|درید|دزدید|دمید|دواند|دوخت|دوشید|دوید|دید|دیدم|راند|ربود|رخشید|رساند|رسانید|رست|رَست|رُست' +
'|رسید|رشت|رفت|رُفت|رقصاند|رقصید|رمید|رنجاند|رنجید|رندید|رهاند|رهانید|رهید|روبید|روفت|رویاند|رویید|ریخت|رید|ریسید' +
'|زاد|زارید|زایید|زد|زدود|زیست|سابید|ساخت|سپارد|سپرد|سپوخت|ستاند|ستد|سترد|ستود|ستیزید|سرایید|سرشت|سرود|سرید' +
'|سزید|سفت|سگالید|سنجید|سوخت|سود|سوزاند|شاشید|شایست|شتافت|شد|شست|شکافت|شکست|شکفت|شکیفت|شگفت|شمارد|شمرد|شناخت' +
'|شناساند|شنید|شوراند|شورید|طپید|طلبید|طوفید|غارتید|غرید|غلتاند|غلتانید|غلتید|غلطاند|غلطانید|غلطید|غنود|فرستاد|فرسود|فرمود|فروخت' +
'|فریفت|فشاند|فشرد|فهماند|فهمید|قاپید|قبولاند|کاست|کاشت|کاوید|کرد|کشاند|کشانید|کشت|کشید|کفت|کفید|کند|کوبید|کوچید' +
'|کوشید|کوفت|گَزید|گُزید|گایید|گداخت|گذارد|گذاشت|گذراند|گذشت|گرازید|گرایید|گرداند|گردانید|گردید|گرفت|گروید|گریاند|گریخت|گریست' +
'|گزارد|گزید|گسارد|گستراند|گسترد|گسست|گسیخت|گشت|گشود|گفت|گمارد|گماشت|گنجاند|گنجانید|گنجید|گندید|گوارید|گوزید|لرزاند|لرزید' +
'|لغزاند|لغزید|لمباند|لمدنی|لمید|لندید|لنگید|لهید|لولید|لیسید|ماسید|مالاند|مالید|ماند|مانست|مرد|مکشید|مکید|مولید|مویید' +
'|نازید|نالید|نامید|نشاند|نشست|نکوهید|نگاشت|نگریست|نمایاند|نمود|نهاد|نهفت|نواخت|نوردید|نوشاند|نوشت|نوشید|نیوشید|هراسید|هشت' +
'|ورزید|وزاند|وزید|یارست|یازید|یافت' +
')';
var _persianPresentVerbs = '(' +
'ارز|افت|افراز|افروز|افزا|افزای|افسر|افشان|افکن|انبار|انباز|انجام|انداز|اندای|اندوز|اندیش|انگار|انگیز|انگیزان' +
'|اوبار|ایست|آرا|آرام|آرامان|آرای|آزار|آزما|آزمای|آسا|آسای|آشام|آشوب|آغار|آغاز|آفرین|آکن|آگن|آلا|آلای' +
'|آمرز|آموز|آموزان|آمیز|آهنج|آور|آویز|آی|بار|باران|باز|باش|باف|بال|باوران|بای|باید|بخش|بخشا|بخشای' +
'|بر|بَر|بُر|براز|بساو|بسیج|بلع|بند|بو|بوس|بوی|بیز|بین|پا|پاش|پاشان|پالا|پالای|پذیر|پذیران' +
'|پر|پراکن|پران|پرداز|پرس|پرست|پرهیز|پرور|پروران|پز|پژمر|پژوه|پسند|پلاس|پلک|پناه|پندار|پوس|پوش|پوشان' +
'|پوی|پیچ|پیچان|پیرا|پیرای|پیما|پیمای|پیوند|تاب|تابان|تاران|تاز|تازان|تپ|تپان|تراش|تراشان|تراو|ترس|ترسان' +
'|ترش|ترک|ترکان|تکان|تن|توان|توپ|جنب|جنبان|جنگ|جه|جهان|جو|جوش|جوشان|جوی|چاپ|چای|چپ|چپان' +
'|چر|چران|چرب|چرخ|چرخان|چسب|چسبان|چش|چشان|چک|چکان|چل|چلان|چم|چین|خار|خاران|خای|خر|خراش' +
'|خراشان|خرام|خروش|خز|خشک|خشکان|خل|خم|خند|خندان|خواب|خوابان|خوان|خواه|خور|خوران|خوف|خیز|خیس' +
'|خیسان|دار|درخش|درخشان|درو|دزد|دم|ده|دو|دوان|دوز|دوش|ران|ربا|ربای|رخش|رس|رسان' +
'|رشت|رقص|رقصان|رم|رنج|رنجان|رند|ره|رهان|رو|روب|روی|رویان|ریز|ریس|رین|زا|زار|زای|زدا' +
'|زدای|زن|زی|ساب|ساز|سای|سپار|سپر|سپوز|ستا|ستان|ستر|ستیز|سر|سرا|سرای|سرشت|سز|سگال|سنب' +
'|سنج|سوز|سوزان|شاش|شای|شتاب|شکاف|شکف|شکن|شکوف|شکیب|شمار|شمر|شناس|شناسان|شنو|شو|شور|شوران|شوی' +
'|طپ|طلب|طوف|غارت|غر|غلت|غلتان|غلط|غلطان|غنو|فرسا|فرسای|فرست|فرما|فرمای|فروش|فریب|فشار|فشان|فشر' +
'|فهم|فهمان|قاپ|قبولان|کار|کاه|کاو|کش|کَش|کُش|کِش|کشان|کف|کن|کوب|کوچ|کوش|گا|گای|گداز' +
'|گذار|گذر|گذران|گرا|گراز|گرای|گرد|گردان|گرو|گری|گریان|گریز|گز|گزار|گزین|گسار|گستر|گستران|گسل|گشا' +
'|گشای|گمار|گنج|گنجان|گند|گو|گوار|گوز|گوی|گیر|لرز|لرزان|لغز|لغزان|لم|لمبان|لند|لنگ|له|لول' +
'|لیس|ماس|مال|مان|مک|مول|موی|میر|ناز|نال|نام|نشان|نشین|نکوه|نگار|نگر|نما|نمای|نمایان|نه' +
'|نهنب|نواز|نورد|نوش|نوشان|نویس|نیوش|هراس|هست|هل|ورز|وز|وزان|یاب|یار|یاز' +
')';
var _persianComplexPastVerbs = {
'باز': 'آفرید|آمد|آموخت|آورد|ایستاد|تابید|جست|خواند|داشت|رساند|ستاند|شمرد|ماند|نمایاند|نهاد|نگریست|پرسید|گذارد' +
'|گرداند|گردید|گرفت|گشت|گشود|گفت|یافت',
'در': 'بر ?داشت|بر ?گرفت|آمد|آمیخت|آورد|آویخت|افتاد|افکند|انداخت|رفت|ماند|نوردید|کشید|گرفت',
'بر': 'آشفت|آمد|آورد|افتاد|افراشت|افروخت|افشاند|افکند|انداخت|انگیخت|تاباند|تابید|تافت|تنید|جهید|خاست|خواست|خورد' +
'|داشت|دمید|شمرد|نهاد|چید|کرد|کشید|گرداند|گردانید|گردید|گزید|گشت|گشود|گمارد|گماشت',
'فرو': 'آمد|خورد|داد|رفت|نشاند|کرد|گذارد|گذاشت',
'وا': 'داشت|رهاند|ماند|نهاد|کرد',
'ور': 'آمد|افتاد|رفت',
'یاد': 'گرفت',
'پراکنده': 'ساخت',
'زمین': 'خورد',
'گول': 'زد',
'لخت': 'کرد'
};
var _persianComplexPresentVerbs = {
'باز': 'آفرین|آموز|آور|ایست|تاب|جو|خوان|دار|رس|ستان|شمار|مان|نمایان|نه|نگر|پرس|گذار|گردان|گرد|گشا|گو|گیر|یاب',
'در': 'بر ?دار|بر ?گیر|آمیز|آور|آویز|افت|افکن|انداز|مان|نورد|کش|گذر|گیر',
'بر': 'آشوب|آور|افت|افراز|افروز|افشان|افکن|انداز|انگیز|تابان|تاب|تن|جه|خواه|خور|خیز|دار|دم|شمار|نه|چین|کش|کن' +
'|گردان|گزین|گشا|گمار',
'فرو': 'خور|ده|رو|نشین|کن|گذار',
'وا': 'دار|رهان|مان|نه|کن',
'ور': 'افت|رو',
'یاد': 'گیر',
'پراکنده': 'ساز',
'زمین': 'خور',
'گول': 'زن',
'لخت': 'کن'
};
/**
* Join compound verbs (باز آفرید, در آمد, بر داشت, etc.) with a ZWNJ instead of a space, using
* the curated prefix/stem pairs above so only real compound verbs match.
* @param {string} text The text to process.
*/
var _applyComplexVerbZwnj = function(text) {
var prefix, stems;
for (prefix in _persianComplexPastVerbs) {
if (!_persianComplexPastVerbs.hasOwnProperty(prefix)) continue;
stems = _persianComplexPastVerbs[prefix];
text = text.replace(new RegExp(
'(^|[^' + _persianCharacters + '])(' + prefix + ') ?(می|نمی|)( |\u200c|)(ن|)(' +
stems + ')(م|ی|یم|ید|ند|ه|ن|)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3\u200c$5$6$7$8');
}
for (prefix in _persianComplexPresentVerbs) {
if (!_persianComplexPresentVerbs.hasOwnProperty(prefix)) continue;
stems = _persianComplexPresentVerbs[prefix];
text = text.replace(new RegExp(
'(^|[^' + _persianCharacters + '])(' + prefix + ') ?(می|نمی|)( |\u200c|)(ن|)(' +
stems + ')(م|ی|د|یم|ید|ند|ن)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3\u200c$5$6$7$8');
}
return text;
};
/**
* Join می/نمی to a following verb stem with a ZWNJ (میرود), join the plural/superlative
* suffixes ها/ترین with a ZWNJ, and a handful of specific, well-tested exceptions (میدانی,
* میتوان, میگوی دریایی, میدوی) that would otherwise be wrongly split by the general rules.
* Ported from the same gadget's applyZwnj(); see the smartZwnj() comment for the caveat this
* still doesn't (and can't) fully resolve.
* @param {string} text The text to process.
*/
var _applyZwnj = function(text) {
text = _applyComplexVerbZwnj(text);
return _cleanupZwnjArtifacts(text)
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?' + _persianPastVerbs +
'(م|ی|یم|ید|ند|ه|)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?' + _persianPresentVerbs +
'(م|ی|د|یم|ید|ند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
// ماضی نقلی: خوردهام, رفتهاید, ...
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(ن|)' + _persianPastVerbs +
'ه (ام|ای|ایم|اید|اند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2$3ه\u200c$4$5'
)
.replace(new RegExp('([' + _persianCharacters + '])هاست($|[^' + _persianCharacters + '])', 'g'), '$1ه است$2')
// «دان» handled separately: its «ی» suffix collides with the verb «دانی»/میدانی
.replace(
new RegExp('(^|[^' + _persianCharacters + '])(می|نمی) ?(دان)(م|د|یم|ید|ند)($|[^' + _persianCharacters + '])', 'g'),
'$1$2\u200c$3$4$5'
)
.replace(/(\s)(می|نمی) ?توان/g, '$1$2\u200cتوان')
// «ها» and «ترین» always join with a ZWNJ, never a full space
.replace(/ ها([\]\.،\:»\)\s]|\'{2,3}|\={2,})/g, '\u200cها$1')
.replace(/ ها(ی|یی|یم|یت|یش|ی?مان|ی?تان|ی?شان)([\]\.،\:»\)\s])/g, '\u200cها$1$2')
.replace(/هها/g, 'هها')
.replace(/ ترین([\]\.،\:»\)\s]|\'{2,3}|\={2,})/g, '\u200cترین$1')
// a few specific words that would otherwise be caught by the general rules above
.replace(new RegExp('می\u200cگوی($|[^' + _persianCharacters + '\u200c])', 'g'), 'میگوی$1') // میگوی دریایی
.replace(new RegExp('می\u200cدوی($|[^' + _persianCharacters + '\u200c])', 'g'), 'میدوی$1'); // میدوی (ابهامزدایی)
};
/**
* Join می/نمی verb prefixes (and a few common suffixes) to what follows with a ZWNJ instead of
* a full space, using curated Persian verb-stem lists so it only fires on real verbs.
*
* This is scoped to your selection rather than the whole page on purpose: even with the word
* lists, «می» on its own is also the classical word for "wine" (می ناب، میگلگون، ساقی می ده…),
* and Wikisource hosts a lot of exactly the poetry where that comes up. The word-list approach
* makes this far safer than a blind "می" + space replace, but it can't tell «می» the prefix from
* «می» the noun by context alone - so select the passage you've checked, rather than running it
* across a whole ghazal unread.
* @param {object} editor The script helpers for the page.
*/
var smartZwnj = function(editor) {
editor.replaceSelection(_applyZwnj);
};
/**
* Add less common marks. A bare selected «ا» gets a fathatan (تنوین نصب, اً - U+064B), which
* covers the very common Arabic-loan adverb ending seen in words like اتفاقاً, مثلاً and لطفاً.
* Anything else falls back to appending an em dash, mirroring the English original's catchall
* default (useful as a quick one-key dash insert).
* @param {object} editor The script helpers for the page.
*/
function catchall(editor) {
editor.replaceSelection(function(selected) {
switch (selected) {
case 'ا':
return 'ا\u064B';
default:
return selected + '—';
}
});
}
});
// </nowiki>
8brpbmn5p65l4to342756ixww7virhp
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۵۶
104
95526
299748
299685
2026-09-19T19:33:28Z
Hanooz
17889
/* نمونهخوانیشده */
299748
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|۵۴||تاریخ سی ساله ایران}}</noinclude>بود. اغلب مسئولین متوسط و افراد حزب و سازمان علیرغم مطالبی که از کودتا شنیده و خوانده بودند در شناخت واقعه سر در گم شدند و آنها نیز که بسرعت بخود آمدند و به بسیج افراد خود دست زدند موفق به ایجاد ارتباط با بالا نشدند (بطور کلی در حزب و سازمان جوانان، ارگانهای رهبری در گفت و گو و موارد غیررسمی، بالا خوانده می شدند) اولین ارتباط ها عصر (از ساعت سه به بعد) برقرار شد رهبری خود قادر به اتخاذ تصمیم میشود. مسئولین سازمان جوانان در تهران که موفق به ایجاد تماس با افراد شده بودند دستور دادند که افراد با کلیه وسائل ممکن (سلاح سرد) در قرار عصر حاضر شوند. این تماس تا سقوط و غارت خانه مصدق ادامه داشت و بعد بدستور رهبری به روز بعد موکول شد تا ساعت دو بعد از ظهر هنوز خانهٔ مصدق با فرماندهی {{w|عزتالله ممتاز|سرهنگ ممتاز}} مقاومت میکرد. سرانجام خانهٔ مصدق سقوط کرد و مصدق فرار کرد و خانه غارت شد. {{w|رادیو ایران}} ({{w|عمارت کلاهفرنگی بیسیم|بی سیم پهلوی}} در {{w|خیابان شریعتی (تهران)|جاده قدیم}}) حدود ظهر توسط نیروهای تیپ زرهی اشغال شد. فریادهای "زنده باد شاه" از آن برخاست.
خانه سقوط رادیو اهمیت زیادی در یکسره شدن کار داشت. روز ۲۹ تماس حزبی و سازمانی بهتر شده بود. حداقل ۵۰٪ کادرها در سر قرارها حاضر بودند حزب تصمیم گرفت کادرهای ضربتی تشکیل دهد. افراد واجد شرایط (یعنی آنهایی که خدمت سربازی انجام داده بودند و قدرت بدنی خوبی داشتند) از واحدها جدا شدند و هر بیست نفر در یک خانه دور از چشم پلیس برای ضربه زدن به دشمن آماده شدند. افسران سازمان نظامی با شتاب باین خانه ها اعزام شدند تا تعلیمات لازم را به افراد بدهند برای هر بیست نفر دو {{w|اسلحه کمری}} و دو {{کذا|نارنک|نارنجک}} وجود داشت. این گروهها ۴۸ ساعت در<noinclude></noinclude>
s376q0p95vxxy6pylvfd9iwfuantfwi
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۵۷
104
95527
299750
299686
2026-09-19T19:37:20Z
Hanooz
17889
/* نمونهخوانیشده */
299750
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|تاریخ سی ساله ایران||۵۵}}</noinclude>خانه ها به سر بردند. عدهٔ قابل توجهی از افسران یکدیگر را شناختند و عدهای از آنها توسط افراد غیر نظامی شناخته شدند. با همهٔ اینها پس از ۴۸ ساعت این گروهها مرخص شدند و افراد که انتظار عکس العمل حزب را میکشیدند با بازگشت رفقایشان نومید شدند، طی این دو روز (تا روز ۳۱ مرداد) تماسها برقرار بود. {{کذا|دو|در}} هر تماس اخبار و شایعات که اغلب در زمینهٔ پایداری نیروها در شهرستانها بود میرسید. مهمترین این شایعات عبارت بود از:
قیام ایل قشقائی و حرکت بطرف شیراز، مقاومت ارتشی های اصفهان به حمایت از مصدق و حرکت آنها بطرف تهران، پایداری کلیه سازمانهای اداری و نظامی رشت. سرانجام خبر قیام افراد توده ای در گیلان و به جنگل زدن آنها رسید. از میان همه شایعات این خبر تا حدی واقعیت داشت و آن این بود که عده ای از افراد و سازمان جوانان در گیلان به جنگل رفتند و آماده عملیات جنگلی شدند. بعدها حزب با زحمت زیاد این افراد را از جنگل بازگرداند. سرانجام رهبری کودتا را انجام یافته دانست و عکس العمل خود را به بعد موکول کرد.
ضعفهای حزب توده در کودتای ۲۸ مرداد بشرح زیر بود:
{{plainlist/s}}
* ۱ - حزب توده علیرغم هشدارهائی که به مصدق میداد خود در مقابل کودتا غافلگیر شد.
* ۲ - گرچه حزب توده قبلاً نیروهای خود را آمادهٔ مبارزه نظامی نکرده بود معذالک میتوانست در کودتای ۲۸ مرداد نیروهای موجود را وارد عمل کند. برخوردهای نظامی با کمک سازمان نظامی میسر بود و حتی اگر این برخورد به شکست میانجامید باعث میشد که اولا پروسهٔ سیاسی به<noinclude>{{plainlist/e}}</noinclude>
d8rqmb05o74lgact53q80qxuv6zqrq3
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۵۸
104
95528
299751
299687
2026-09-19T19:42:37Z
Hanooz
17889
/* نمونهخوانیشده */
299751
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|۵۶||تاریخ سی ساله ایران}}
{{plainlist/s}}</noinclude>پروسه به سیاسی – نظامی تکامل پیدا کند. ثانیاً رسالت مبارزه رهائی بخش بدست نیروهای طبقه کارگر بیفتد. بنابر این مهمترین ضعف رهبری حزب توده هراس از عمل و بکار نبردن نیروهای خود در مقابله (تودهای نظامی) با دشمن بود ثالثاً عناصر انقلابی در رهبری و ارگان های مسئول جای رهبری اپورتونیست را بگیرند.
* ۳ - رهبری حزب توده قادر نبود در لحظات حساس تصمیم بهگیرد و اختلافات داخلی و بی شخصیتی فرصت طلبانه بر آنها غلبه میکرد.
* ۴ - نفوذ عناصر فرصت طلب در شرایط مبارزه نیمه علنی بدرون حزب توده که زمینه ادامه {{کذا|اپورتوتیزم|اپورتونیزم}} در رهبری است، باعث ضعف عمومی حزب در ماجرای ۲۸ مرداد شد بهطوریکه در همان روزهای اول عده قابل توجهی از افراد ساده با واحدهای خود قطع تماس کردند.
* ۵ - پس از پیروزی کودتا رهبری حزب از درک اهمیت این پیروزی و نتایجی که ببار میآورد عاجز مانده و درصدد تجدید سازمان و تغییر برنامههای خود برنیامد. این ترتیب که اولاً اصرار داشت که همهٔ افراد خود را حفظ کند. ثانیاً با دست زدن به میتینگهای موضعی و پخش اعلامیه و شعار نویسی با کودتا مقابله کند. رهبران حزب توده فکر میکردند که همانطور که "کودتای صغیر" ۱۵ بهمن مانع ادامه حیات حزب نشد. این کودتا هم "به خیر" خواهد گذشت. رهبری عملاً سیاست دفع الوقت آغاز حرکت خود را به تعویق انداخت و سرانجام پس از یکسال تعلل و دست زدن به تاکتیکهای نامناسب با بازداشت سازمان نظامی، ضربهٔ مرگبار دشمن بر سراسر حزب و سازمانهای وابسته به آن وارد آمد، قبل از آنکه رویدادهای پس از ۲۸ مرداد را تحلیل کنیم باید چند جنبه مختلف را از فعالیتهای و مسائل حزب<noinclude>{{plainlist/e}}</noinclude>
l84ahs1x4jk9gnqrb9fvjiwjsz2v18x
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۵۹
104
95529
299752
299688
2026-09-19T20:09:05Z
Hanooz
17889
/* نمونهخوانیشده */
299752
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|تاریخ سی ساله ایران||۵۷}}
{{plainlist/s}}</noinclude>توده را بررسی کنیم.
{{plainlist/e}}
{{زیرخط|'''''حزب توده و مساله دهقانان'''''}}
در برنامهٔ اولیه حزب توده از تقسیم اراضی صحبت شده بود بدون اینکه معین کند این اراضی باید مصادره شود یا بازخرید شود. در برنامه های بعدی (در دوره مخفی) مصادره اراضی و تقسیم آن بمیان آمده است. اشتباه است اگر بخواهیم مشی حزب توده در مورد دهقانان را در این برنامهها جستجو کنیم. حزب توده از روز نخست از کارگر و دهقان حرف میزد. اتحاد کارگران و دهقانان از شعارهای دائمی حزب و سازمانهای وابسته به آن بود. ولی تماس عملی حزب با مسئلهٔ دهقانان گیلان، مازندران و آذربایجان تحقق یافت. در شمال مصادرهٔ اراضی فئودالها توسط دربار و سپس سقوط رضا شاه یک رشته مسائل ارضی و دهقانی را بوجود آورده بود. بخصوص در گیلان که هنوز اداره املاک نتوانسته بود بلعیدن اراضی را خاتمه دهد (برخلاف دشت گرگان و {{کذا|ماندران |مازندران}} شرقی که اداره املاک پهلوی زمینهای خود را ثبت کرده بود) این مسئله جدی تر بود. دهقانان معتقد بودند که این اراضی متعلق به شاه بود و حالا که رفته است متعلق به خود آنهاست. مالکان این تحولات را نپذیرفتند و خود را صاحب اراضی دانستند بهرهٔ مالکانه مطالبه میکردند. در سال ۲۰ اجاره های اداره املاک پرداخته شد و نه بهرهٔ مالکانه اربابها که آغاز به بازگشت کرده بودند. در سال ۲۱ بر سر بهرهٔ مالکانه برخوردها ادامه یافت و با توجه به اینکه این نواحی در اشغال ارتش سرخ بود، بکار بردن نیروی نظامی برای سرکوب کردن دهقانان به<noinclude></noinclude>
khfcx5atksqwnrwax89fvlgja2zxue3
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۰
104
95530
299753
299689
2026-09-19T20:16:43Z
Hanooz
17889
/* نمونهخوانیشده */
299753
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|۵۸||تاریخ سی ساله ایران}}</noinclude>آسانی میسر نبود. معذالک در اغلب نواحی طی سالهای ۲۱ تا ۲۳ مالکان توانستند بهره دریافت دارند (سیاست جنگی شوروی ها مبتنی بر حفظ امنیت در گرما گرم جنگ اجازه نمی داد که این جنبشها را حزب توده تقویت کند.) از سال ۲۳ اتحادیه های دهقانی در گیلان آغاز به رشد کرد. اتحادیه ها با حمایت و سازماندهی حزب توده تشکیل شد و در میان دهقانان نفوذ کرد. مراکز اتحادیه ها، در روستاها بود آگاهی دهقانان گیلان و برخوردهای یاد شده، در سالهای ۲۰ تا ۲۳ زمینه مساله تشکیل اتحادیه بود و استقرار ارتش سرخ موقعیت مساعدی برای گسترش کمی کیفی آنها را بوجود آورد. دهقانان به تدریج حالت تهاجمی بخود گرفتند، در سال ۲۴ استنکاف از پرداخت بهره مالکانه شروع شد. در سال ۲۵ (مقارن فرقه دمکرات) ارباب را از ملک راندند و حتی تهاجمهای خوئین نسبت به آنها روی داد. در این تهاجمات، مهاجمینی را که ارتش یا ژاندارمری گرفته بود (به تعداد کم) در اختیار رهبران کمیته ها گذاشت. پس از خروج ارتش سرخ دستجات مجازات مسلح از طرف اوباش و مرتجعین دولتی تشکیل شد. {{w|حزب جنگل}}<ref>حزب جنگل یک {{کذا|داور|دار و}} دستهٔ ارتجاعی بود که در سال ۲۵ در گیلان و مازندران فعالیت میکرد و موسسین آن عده ای از مالکان بزرگ و نظامیان مرتجع بودند مثل: بهار مست، حسین خان زال، جعفر خان رشوند و صوفی و… </ref> و مرکز آن در چالوس بود، اوباش و وابستگان ارباب (مباشران، {{w|چارواداری|چاروادار}}ها، کدخدا و مانند آنها) را متشکل کرده زیر حمایت ژاندارمری به نواحی زیر اداره دهقانان گسیل داشت. این برخوردها طی چند ماه ادامه<noinclude>{{خطکش}}
{{پانویس}}</noinclude>
2mpufhtm36qwrbjgp6dn225imx2c1zl
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۱
104
95531
299754
299690
2026-09-19T20:21:14Z
Hanooz
17889
/* نمونهخوانیشده */
299754
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|تاریخ سی ساله ایران||۵۹}}</noinclude>یافت ولی پس از آذر ماه ۲۵ که تهاجم عمومی ارتجاع آغاز شد. تعقیبها و کشتارها، تجاوزها، یغما و آتش زدنها به مقداری وسیع اعمال شد. فعالان جنبش فراری شدند و عده ای جان خود را از دست دادند، جعفر خان رشوند رئیس ایل جلیلو از ناحیه اشکور ورود باز گذشته و به پشتیبانی فئودالها ریاست پاک کردن منطقه رانکوه را بعهده گرفت. "از رودسر تا لاهیجان" با چنین ترتیبی طبیعی ترین و جدی ترین کوشش حزب توده در بر پا کردن جنبش دهقانی سرکوب شد.
در آذربایجان طی سالهای ۲۳ تا ۲۴ یعنی قبل از تشکیل فرقه در مناطق مساعد کمیته های حزب توده دست به تشکیل اتحادیه های دهقانی زد. در اطراف مراغه، آذرشهر و رضائیه این کوششها نتایج مساعدی بدست دادند. زمینه های جنبش دهقانی در آذربایجان پس از تشکیل فرقه. استخوانبندی نیروی فدائی را بوجود آورد. در آذربایجان نیز استقرار ارتش سرخ عامل مؤثری در برپا کردن این جنبشها بود سرانجام جنبشهای دهقانی آذربایجان با شکست فرقه دمکرات به خاموشی گرائیده پس از تجدید سازمان از سال ۱۳۳۰ حزب توده دوباره برنامه های دهقانی خود را از سر گرفت ولی از همان اول با کمبود امکان روبرو شد. شرایط مخفی، نزدیک شدن حزب توده به دهقانان را مشکلتر کرده بود و مهمتر از آن پس از سرکوبی در سالهای ۲۵ و تا ۲۶ جنبشها خود بخود فروکش کرده و تودههای دهقان حتی در نواحی رکود و نومیدی بسر میبردند. حزب توده و سازمان جوانان اقدام به اعزام واحدهای (اکیپهای) گارد دهقانی از شهر به روستا میکردند تقریباً در تمام موارد نتیجه کار این واحدها نزدیک به سفر بود. واحدها در روزهای تعطیلی در دستههای هفت، هشت نفری تا بیست، سی نفری به<noinclude></noinclude>
168j6bppl88g1k47hahcw7exlpdk4me
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۲
104
95532
299755
299691
2026-09-19T20:26:07Z
Hanooz
17889
/* نمونهخوانیشده */
299755
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|۶۰||تاریخ سی ساله ایران}}</noinclude>روستاهایی که اغلب هیچگونه رابطه قبلی با روستائیان آنجا نداشتند میرفتند و در زمینهٔ نقش اربابها و ضرورت گرفتن {{کذا|زیمنها|زمینها}} صحبت میکردند. ژاندارم آدتخدا <!-- ؟ -->مباشر و ملاهای ده دشمنان پیگیر این اکیپها بودند و اغلب کار به کتک خوردن و بازداشت شدن همه میرسید.
عامل شکست این اکیپها عبارتند از:
{{plainlist|
* ۱ - عدم وجود جنبش های خود بخودی در روستا.
* ۲ - نداشتن تماس ریشه دار و درونی با روستائیان.
* ۳ - نشناختن روحیه روستائیان و عدم توجه به عوامل سنتی و فرهنگی روستائیان. اکیپهای حزبی که افراد آن متینتر بود حتی از تظاهر مذهبی خواندن نماز نیز کوتاهی نمیکردند ولی اکیپهای سازمان جوانان، اغلب دچار چپ روی و رم دادن روستائیان میشدند.
* ۴ - نداشتن امکانات قانونی و علنی باعث میشد که این کوشش در مقابل آنچه باید انجام پذیرد بسیار حقیر و نارسا از کار در آید.
}}
با همه اینها پس از آنکه مصدق در شهریور ۳۱ قانون ۲۰٪ بهرهٔ مالکانه والغای سوروسات را اعلام کرد<ref>قانون ۲۰٪ بهره مالکانه برای جلب رضایت دهقانان در مبارزه یا مالکان بزرگ بموجب اختیارات مصدق وضع شد. روحانیون از جمله کاشانی با لایحه مخالفت میکردند و در راه اجرای آن کارشکنی مینمودند سرانجام در سال ۳۲ این قانون را فسح کردند و آن را از ارزش انداختند. به موجب این قانون را ۱۰٪ بهره مالکانه به دهقانان و ۱۰٪ برای مصارف عمومی روستا به انجمن ده تعلق میگرفت.</ref> همزمان با اوج گرفتن جنبش ضدامپریالیستی<noinclude></noinclude>
71513bijd4chqbmvql0jtkk0218tg2i
299756
299755
2026-09-19T20:26:21Z
Hanooz
17889
299756
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|۶۰||تاریخ سی ساله ایران}}</noinclude>روستاهایی که اغلب هیچگونه رابطه قبلی با روستائیان آنجا نداشتند میرفتند و در زمینهٔ نقش اربابها و ضرورت گرفتن {{کذا|زیمنها|زمینها}} صحبت میکردند. ژاندارم آدتخدا <!-- ؟ -->مباشر و ملاهای ده دشمنان پیگیر این اکیپها بودند و اغلب کار به کتک خوردن و بازداشت شدن همه میرسید.
عامل شکست این اکیپها عبارتند از:
{{plainlist|
* ۱ - عدم وجود جنبش های خود بخودی در روستا.
* ۲ - نداشتن تماس ریشه دار و درونی با روستائیان.
* ۳ - نشناختن روحیه روستائیان و عدم توجه به عوامل سنتی و فرهنگی روستائیان. اکیپهای حزبی که افراد آن متینتر بود حتی از تظاهر مذهبی خواندن نماز نیز کوتاهی نمیکردند ولی اکیپهای سازمان جوانان، اغلب دچار چپ روی و رم دادن روستائیان میشدند.
* ۴ - نداشتن امکانات قانونی و علنی باعث میشد که این کوشش در مقابل آنچه باید انجام پذیرد بسیار حقیر و نارسا از کار در آید.
}}
با همه اینها پس از آنکه مصدق در شهریور ۳۱ قانون ۲۰٪ بهرهٔ مالکانه والغای سوروسات را اعلام کرد<ref>قانون ۲۰٪ بهره مالکانه برای جلب رضایت دهقانان در مبارزه یا مالکان بزرگ بموجب اختیارات مصدق وضع شد. روحانیون از جمله کاشانی با لایحه مخالفت میکردند و در راه اجرای آن کارشکنی مینمودند سرانجام در سال ۳۲ این قانون را فسح کردند و آن را از ارزش انداختند. به موجب این قانون را ۱۰٪ بهره مالکانه به دهقانان و ۱۰٪ برای مصارف عمومی روستا به انجمن ده تعلق میگرفت.</ref> همزمان با اوج گرفتن جنبش ضدامپریالیستی<noinclude>{{خطکش}}
{{پانویس}}</noinclude>
3avhbm2im2t1fv1gixc8r8yhbfxosps
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۳
104
95533
299757
299692
2026-09-19T20:31:21Z
Hanooz
17889
/* نمونهخوانیشده */
299757
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|تاریخ سی ساله ایران||۶۱}}</noinclude>و درست در موقعیکه جنبش از جنبهٔ ضدامپریالیستی صرف به جنبه فئودالی (دربار و مرتجعین) و ضد امپریالیستی دهقانی در مناطق آماده تر به نضج گرفتن کرد، اینبار نیز گیلان در پیشاپیش سایر مناطق حرکت میکرد. نقطه اوج جنبش دهقانی گیلان در برخوردهای خونین در {{w|لشت نشا}} بود که دهقانان بطور دسته جمعی به رشت آمده و در آنجا با نیروی مسلح برخورد کردند. استنکاف از دادن بهرهٔ مالکانه در دیگر مناطق نیز بندرت بچشم می خورد. رمز موفقیت حزب توده در این موارد داشتن پیوند درونی با دهقانان بود این پیوند اصولاً بصورت رابطه کارگران و دیگر زحمتکشان شهر با محل زادگاه خود و بستگانشان انجام میگرفت، همچنین، دموکراسی سالهای ۳۱–۳۲ اجازه میداد که حزب توده با دست بازتری در این مناطق عمل کند. با کودتای ۲۸ مرداد نه فقط جنبش در شهر سرکوب شد بلکه در روستا نیز ارتجاع بدون هراس از مجازات جنبشها، تمایلات ضد فئودالی ریشه کن ساخت.
{{زیرخط|'''''دربارهٔ اختلافهای داخلی حزب توده'''''}}
کنگره دوم (در سال ۲۷) که پس از انشعاب در پرتو جهاد بر ضد انشعابیون برگزار شد، نتوانست اختلافهای درونی را نابود سازد بزودی پس از تجدید سازمان، یک جناح بندی تازه در حزب خودنمائی میکرد. این جناح بدنبال اختلافهای دوره علنی (وقتی اختلافهای پیش از انشعاب ملکی) بود. در یک طرف احمد قاسمی کیانوری و {{w|امانالله قرشی|امان قریشی}} و اکثریت قاطع اعضای کمیته ایالتی و در طرف دیگر، یزدی، جودت، شرمینی، علوی و<noinclude></noinclude>
08f1fi3olzj007cjc8v5rmx9ufzhxs2
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۴
104
95534
299759
299693
2026-09-19T21:06:47Z
Hanooz
17889
/* نمونهخوانیشده */
299759
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|۶۲||تاریخ سی ساله ایران}}</noinclude>اکثریت قاطع کمیته مرکزی سازمان جوانان قرار داشتند. این جناحبندی خطوط ممیزه روشنی نداشت، لیکن بطور کلی جناح قاسمی – کیانوری تمایلات تذیری<!-- ? --> داشتند. آنها روی معیارهای تشکیل حزب و ضرورت ایدئولوژی طبقه کارگر تأکید بیشتری میکردند و با عناصر قدیمی بر سر این معیارها اختلاف داشتند. در مقابل جنبش ملی، این جناح چپ روتر بود و در تعیین خصوصیات مصدق و جبهه ملی در دوره اول نقش مهمی بازی کرد و در جدائی حزب توده از جبهه (که دلایل و زمینه های آن قبلاً مورد بررسی قرار گرفته) نقش بیشتری داشت. کیانوری در راس کمیسیون تعلیمات و قاسمی در واوس <!-- راس؟ -->تشکیلات کل شهرستانها (تکش) قرار داشت. این دو موقعیت مهم اجازه داد که اولاً — نظرات این جناح در حوزهها و کمیته های حزب مورد قبول قرار گیرد و ثانیاً {{کذا|مسئولات|مسئولان}} شهرستانها از طرفداران این جناح برگزیده شوند. بهمین منظور تقریبا تمام اعضای کمیته ایالتی تهران که میبایست مسئول کمیته های محلی تهران باشند به شهرستانها اعزام شدند مهمترین استانها و ولایتها در اختیار آنها قرار گرفت که با تجدید نظر نسبت به جبههٔ ملی (قبلاً دلایل آن ذکر شد) موقعیت این جناح به خطر افتاد. قاسمی در سال ۱۳۳۱ برای شرکت در کنگره نوزدهم (بعنوان یکی از اعضای هیئت نمایندگی حزب) به خارج رفت و جای او را در هیئت اجرائیه مهندس علوی گرفت. (هیئت اجرائیه از این افراد تشکیل شده بود: یزدی، جودت، کیانوری، قاسمی، بهرامی، که نفر آخر چون بین دو جناح بیطرف بود عنوان دبیر هیات اجرائیه را داشت ولی چندان اعتباری در هیئت نداشت. نادر شرمینی بی آنکه به عضویت هیئت اجرائیه درآید با علوی همکاری کرد و طرفداران جناح کیانوری – قاسمی<noinclude></noinclude>
tmpl1iaqfi3slrqmt0y5jtme49xma19
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۵
104
95535
299760
299694
2026-09-19T21:11:07Z
Hanooz
17889
/* نمونهخوانیشده */
299760
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|تاریخ سی ساله ایران||۶۳}}</noinclude>را از مسئولیت شهرستانهای مهم بازگرداندند و در راس کمیتههای محلی تهران گماردند.
پس از اینکه شعار "جبهه واحد" اعلام شد. دو جناح اختلاف خود را روی آن پیاده کردند جناح کیانوری قاسمی تاکید داشت که "جبهه واحد" باید به رهبری طبقه کارگر تشکیل شود و جناح مقابل از ذکر رهبری خودداری میکرد و طبیعی است که این تأکید ناشی از ادامه همان چپ روی ناشی بود و شعار جناح مقابل، با توجه بدست بالائی که جبهه ملی داشت و حکومت مصدق به واقعیت نزدیکتر بود.
بر سر تعیین خصوصیات حزب و نام آن نیز اختلافی وجود داشت جناح تندرو معتقد بود که حزب توده حزب طبقه کارگر ایران است و جناح مقابل معتقد بود که حزب تودهٔ حزب طبقه زحمتکش است این دو اختلاف که اساسی ترین اختلاف دو جناح بود آنها را در موضع چپ و راست قرار میداد. همان قدر که جناح قاسمی – کیانوری در چپ و راست قرار میداد. همان قدر که جناح قاسمی - کیانوری در چپ روی دوره اول (رابطه با مصدق) مؤثر بود جناح دوم در راست روی و دنباله روی در مرحله دوم اثر گذاشت. با همه اینها عواملی وجود داشت که مانع از شناخت قطعی دو جناح بعنوان جناح چپ و راست میشود. این عوامل از این قرارند.
{{plainlist/s}}
* الف - موقعیت و تاکتیک سازمان جوانان که دربست به اختیار شرمینی قرار داشت، برخلاف اساسنامه و مناسبات رسمی که میبایست با حزب داشته باشد تبدیل به یک سازمان نسبتاً مستقل شده و مقررات سنی در آن رعایت نمیشد. (عضویت در سازمان جوانان بین ۱۳ تا ۲۰ سالگی مجاز بود حال آنکه مسئولین ساده سازمان تا سن ۲۳ سالگی و {{کذا|مسئولیت|مسئولین}} مهمتر<noinclude>{{plainlist/e}}</noinclude>
sqe3ku9ka8r3ib4kauqvy3tk9yhm4ad
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۶
104
95536
299761
299695
2026-09-19T21:17:43Z
Hanooz
17889
/* نمونهخوانیشده */
299761
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|۶۴||تاریخ سی ساله ایران}}
{{plainlist/s}}</noinclude>برای همیشه در سازمان میماندند. (تقریباً تمام مسئولین دو عضویتی بودند یعنی در آن واحد عضو حزب و سازمان بودند) کمیتهٔ مرکزی سازمان جوانان با تعصب از جناح یزدی، جودت، {{کذا|شرمنی|شرمینی}} که اکثریت رهبری حزب را برخود داشت حمایت کرد. کمیته جناح مخالف را دائماً در کارهای خود و رسوخ میداد و دو جناح یکدیگر را "{{w|منشویکها|منشویک}}" خطاب میکردند و پس از واقعه هشتم فروردین ۳۱ شدیدترین برخورد بین سازمان جوانان و جناح مخالف روی داد. بطوریکه از تهدید علنی یکدیگر خودداری نمی کردند. سازمان جوانان در حالیکه از جناح راست حمایت میکرد در اغلب موارد دست به ماجراجوئی میزد و کارائی افراد آن در مجموع به کارآئی حزبیها می چربید. انضباط و تعلیمات ایدئولوژیک در سازمان جوانان سطحی بالاتر از حزب داشت. سازمانی که میبایست از هر نظر پایین تر از وضعیت حزب باشد، تقریباً در تمام موارد بر حزب می چربید. برای تظاهرات، افراد سازمان خیلی سریع بسیج میشدند. در برخورد پلیس و سربازان فقط کارگران حزبی بر آنها پیشی داشتند و اکثریت افراد حزبی از آنها عقب تر بودند. طرح شرمینی این بود که با انحصار کردن سازمان جوانان و تربیت سیاسی و سازمانی افراد آن، آینده حزب را برای خود و جناح خود تعیین کند و این خطری جدی برای جناح مخالف بود. بهمین دلیل در هر فرصت سعی میکردند نفوذ شرمینی را در سازمان جوانان از بین ببرند، او را رسماً از سرپرستی سازمان برداشتند ولی در عمل هیچ نتیجهای بدست نیاوردند. نفوذ شرمینی تا پائین ترین کادرهای مسئول سازمان جوانان رسوخ یافته و بر خلاف حزب که اختلافهای داخلی در صفوف پائین آن مطرح نمی شده در اینجا مسئولان جزء هم از قضایا باخبر بودند. خصوصیات سازمان جوانان و تاکتیکهای آن اساساً<noinclude>{{plainlist/e}}</noinclude>
md7n5ysnqn73wy81mon47rb2vdz5f4i
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۷
104
95537
299762
299696
2026-09-19T21:23:28Z
Hanooz
17889
/* نمونهخوانیشده */
299762
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|تاریخ سی ساله ایران||۶۵}}
{{plainlist/s}}</noinclude>می بایست با افکار جناح مخالف یکی باشد و این یک جنبه از غیراصولی بودن {{کذا|جناجنبدی|جناحبندی}} درونی حزب بود. واقعیت این بود که شرمینی دارای تمام خصوصیات تندروی چپ نمائی بود. در جناح قاسمی – کیانوری امثال او زیاد بودند، حال آنکه قدیمی ها به اصطلاح پیرو پاتال ها به یک جوان مثل او احتیاج داشتند. در این جناح رهبری آینده او، مسلم بنظر میرسید. اکثریت رهبری نیز که اغلب در خارج بودند با این جناح بود. {{کذا|جناحنبدی|جناحبندی}} بیشتر، باندبازی عناصر رهبری بود و بر سر اشغال پستهای حزبی و بدست آوردن نفوذ بیشتری، ولی این باندبازیها جنبههای ایدئولوژیک یافته و نمودهای سیاسی پیدا میکرد.
* ب - عامل دوم ترکیب دو جناح از نظر منشأ و سوابق افراد آن است جناح قاسمی – کیانوری اغلب از کمونیستهای جوان بودند که در جنبشی کمونیستی سالهای ۱۳۰۰ تا ۱۳۱۰ سوابقی نداشتند. خصوصیات روشنفکرانه آنها نیز بر جناح مخالف می چربید. علیرغم تأکید ایشان روشنفکرترین کادرهای خائن حزب در صف آنها جا داشت و از همه عجیب تر اینکه در بکار گرفتن افراد کارگر و رشد دادن مسئولان کارگر کوشش بعمل نمیآوردند. گرچه این خود نموداری از زمینه های مادی راست روی در این جناح است ولی این پدیده با شعارها و برداشتهای آنها وفق نمیداد. حاکمیت جناح یزدی – شرمینی مقارن بود با توجه به ترکیب طبقاتی حزب و دگرگون ساختن نسبت کارگران به روشنفکران در سطح مسئولان متوسط حزب و سازمان جوانان که در سال ۳۱ بطور مکانیکی به عناصر کارگر توجه شده و کوشش بعمل آمد که کارگران مسئولیتهای بیشتری بعهده بگیرند. این پدیده که ناشی از عدم شناخت طبقه کارگر ایران و بی توجهی به کیفیت واقعی کادرهای کارگر در<noinclude>{{plainlist/e}}</noinclude>
0u2am9gq2tlth0rh1ml3a3hneicotwh
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۸
104
95538
299763
299697
2026-09-19T21:27:27Z
Hanooz
17889
/* نمونهخوانیشده */
299763
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|۶۶||تاریخ سی ساله ایران}}
{{plainlist/s}}</noinclude>حزب و سازمان جوانان بود باعث شد که مسئولین متوسط و نسبتاً بالای حزب در یک مساله ۳۱ تا ۳۲ مرداد از عناصر بی تجربه و فاقد خصوصیات لازم تشکیل شود. و صرف کارگر بودن ملاکی برای مسئولیت بشمار برود و در نتیجه تعداد مسئولان بله قربان گو افزایش یابد و در واقع این کادرهای تازه کار اغلب بصورت مهره ای در دست روشنفکران بالائی بکار میرفتند. حداقل میتوان گفت که این دگرگونی هیچگونه بهبودی در روابط رهبری و توده های حزبی بوجود نیاورد و اثر مثبتی در مقابله با رهبری فرصت طلب برجای نگذاشت حتی شکست ۲۸ مرداد به اختلافهای داخلی خاتمه نداد کیانوری روی عکس العمل فوری تأکید میکرد از جمله اقدامات این جناح انتشار اعلامیه ای به امضای کمیته ایالتی در آبان سال ۳۲ بود که طی آن دشمن به انتقام تهدید شد و همه کسانیکه بر ضد مردم و حزب دست به اقدام بزنند (مثل روزنامه نویسها اعضای دادگاهها و غیره) به مجازات وحشتناک تهدید شده بودند ولی همانطور که میدانیم این تهدیدها زمینه مادی در حزب نداشت و بیشتر بلوف بود تا عمل، گذشته از این، این عمل خودسرانه انجام گرفته و موافقت هیئت اجرائی را کسب نکرده بود بنابر این هیچ عملی بدنبال نیاورد. پس از آنکه کیانوری و جودت به رهبران خارج پیوستند اختلاف در زمینه های دیگر ادامه یافت. سرانجام در جدا شدن چین از شوروری و بروز اختلاف در جنبش جهانی، این جناحبندی به انشعاب در سازمان حزب توده و در خارج از کشور انجامید و قاسمی و فروتن و همکارانش از بقیه جدا شدند. کیانوری در این مرحله از قاسمی جدا شد. رسیدگی به پروسه های خارج از کشور و از جمله سازمان حزب توده که دیگر بمثابه یک "حزب" شناخته نمیشد در فصلهای بعد خواهد آمد. گرچه پس<noinclude>{{plainlist/e}}</noinclude>
fqdh5gryqf6ngftp2lrf7db20owhx68
برگه:تاریخ سی ساله ایران - بیژن جزنی (جلد اول).pdf/۶۹
104
95539
299764
299699
2026-09-19T21:30:50Z
Hanooz
17889
/* نمونهخوانیشده */
299764
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Hanooz" />{{سرصفحهمستمر|تاریخ سی ساله ایران||۶۷}}
{{plainlist/e}}</noinclude>از ۲۸ مرداد تا اواخر سال ۳۴ حیات حزب توده در داخل کشور ادامه یافت معذالک ۲۸ مرداد نقطه عطفی در زندگی حزب توده در جنبش ملی بود بنابراین بتوضیحاتی که درباره حزب توده داده شد نتیجه میگیریم:
{{plainlist/e}}
{{plainlist/s}}
* اولاً - حزب توده از همان اول تأسیس خود جانشین یک جریان کارگری شد یعنی علیرغم تمام انحرافات و اشتباهات، رهبری جنبش طبقه کارگر را بدست گرفت، یعنی عملاً نقش پیشاهنگ را بعهده گرفت. در واقع بهمین دلیل است که پروسه حیاتی و مبارزات حزب توده از دیدگاه مارکسیستی مورد بررسی قرار گرفته و اپورتونیزم درونی این حزب مورد مطالعه قرار میگیرد.
* ثانیاً - حزب توده در طول دوازده سال از یک حزب دمکراتیک بیک حزب طبقه کارگر تکامل یافت ولی این حزب طبقه کارگر فاقد خصوصیات انقلابی بود و اپورتونیزم در رهبری و صفوف حزب ریشه عمیقی داشت.
* ثالثاً - با از دست رفتن نفوذ حزب توده در میان مردم و از جمله در صفوف زحمتکشان و با قطع فعالیت سازمانی و سیاسی این حزب در داخل کشور، نقش این حزب بمثابه پیشاهنگ طبقه کارگر، اگر چه فرصت طلبانه و غیر انقلابی بود، خاتمه یافته است. بقایای حزب در داخل کشور و خارج از کشور به هیچوجه به منزلهٔ ادامهٔ حیات پروسهٔ پیشاهنگ طبقه کارگر تلقی نمیشود. اینک قبل از اینکه به ادامهٔ حیات حزب توده و دیگر جریانهای پس از ۲۸ مرداد بپردازیم، باید پروسهٔ جبهه ملی و مبارزات مصدق را مورد مطالعه قرار دهیم:
{{plainlist/e}}
{{ته}}<noinclude></noinclude>
ddbwxlr2t5lp0w8yzu4oixhm21nim9u
الگو:پیشنهاده
10
95573
299733
2026-09-19T16:12:12Z
Hanooz
17889
صفحهای تازه حاوی «{{ombox | type = notice | image = [[پرونده:Blue question mark.png|30px]] | text = '''این صفحه یک {{{type|[[ویکینبشته:سیاستها و رهنمودها|سیاست، رهنمود]] یا فرایند}}} ''پیشنهادی'' در ویکینبشته است.''' این پیشنهاد ممکن است هنوز در دست تدوین باشد، [[{{TALKPAGENAME}}|مورد بحث]] قرار داش...» ایجاد کرد
299733
wikitext
text/x-wiki
{{ombox
| type = notice
| image = [[پرونده:Blue question mark.png|30px]]
| text = '''این صفحه یک {{{type|[[ویکینبشته:سیاستها و رهنمودها|سیاست، رهنمود]] یا فرایند}}} ''پیشنهادی'' در ویکینبشته است.''' این پیشنهاد ممکن است هنوز در دست تدوین باشد، [[{{TALKPAGENAME}}|مورد بحث]] قرار داشته باشد یا در مرحلهٔ جلب [[w:Wikipedia:Consensus|اجماع]] برای پذیرش باشد. در ارجاعها یا پیوندها به این صفحه نباید آن را «سیاست» یا «رهنمود» نامید.
| image right = {{#if:{{{1|}}}|{{shortcut|{{{1}}}}}|}}
}}
[[رده:سیاستهای پیشنهادی ویکینبشته|{{PAGENAME}}]]<noinclude>
{{documentation|content=
برای درج میانبر، پارامتری بدهید: <nowiki>{{</nowiki>{{PAGENAME}}<nowiki>|WP:SHORT}}</nowiki>.
==همچنین ببینید==
* [[الگو:سیاست]]
* [[الگو:رهنمود]]
* [[الگو:پیشنهاد]]
* [[الگو:تاریخی]]
}}</noinclude>
9qx0teiuzsluhyi9a8ng1yw9izdyypr
299735
299733
2026-09-19T16:13:15Z
Hanooz
17889
ترجمه هوش مصنوعی
299735
wikitext
text/x-wiki
{{ombox
| type = notice
| image = [[پرونده:Blue question mark.png|30px]]
| text = '''این صفحه یک {{{type|[[ویکینبشته:سیاستها و رهنمودها|سیاست، رهنمود]] یا فرایند}}} ''پیشنهادی'' در ویکینبشته است.''' این پیشنهاد ممکن است هنوز در دست تدوین باشد، [[{{TALKPAGENAME}}|مورد بحث]] قرار داشته باشد یا در مرحلهٔ جلب [[w:Wikipedia:Consensus|اجماع]] برای پذیرش باشد. در ارجاعها یا پیوندها به این صفحه نباید آن را «سیاست» یا «رهنمود» نامید.
| image right = {{#if:{{{1|}}}|{{shortcut|{{{1}}}}}|}}
}}
[[رده:سیاستهای پیشنهادی ویکینبشته|{{PAGENAME}}]]<noinclude>
{{documentation|content=
برای درج میانبر، پارامتری بدهید: <nowiki>{{</nowiki>{{PAGENAME}}<nowiki>|WP:SHORT}}</nowiki>.
==همچنین ببینید==
* [[الگو:سیاست]]
* [[الگو:رهنمود]]
* [[الگو:پیشنهاد]]
* [[الگو:تاریخی]]
}}</noinclude>
g5qzloohyhx2wgfj68hj8m17n7hexty
الگو:پیشنهاد
10
95574
299734
2026-09-19T16:12:39Z
Hanooz
17889
تغییرمسیر به [[الگو:پیشنهاده]]
299734
wikitext
text/x-wiki
#تغییر_مسیر [[الگو:پیشنهاده]]
nscvlp60m5gd0cpsjkxbgfrxlol7t37
ویکینبشته:آثار چندجلدی
4
95575
299736
2026-09-19T17:14:34Z
Hanooz
17889
ترجمه هوش مصنوعی با کمی تغییرات
299736
wikitext
text/x-wiki
{{پیشنهاده}}
{{رهنمود}}
{{process header
| title = آثار چندجلدی
| section =
| previous =
| next =
| shortcut =
| notes = رهنمودهایی دربارهٔ میزبانی و صفحهآرایی آثار چندجلدی در ویکینبشته.
}}
== صفحهآرایی ==
آثاری که در چند جلد منتشر شدهاند، معمولاً باید در ویکینبشته بهصورت یک صفحهٔ پایهٔ کلی در [[راهنما:فضاهای نام|فضای نام]] اصلی میزبانی شوند. هر جلد باید زیرصفحهای از این صفحهٔ واحد باشد. هر فصل یا بخش باید زیرصفحهای از جلد مربوط به خود باشد. صفحهٔ پایه باید عنوان کلیِ اثر باشد.
=== در تئوری ===
این یک طرح کلی از ساختار صفحات است که میتوان آن را برای اثری چندجلدی به کار برد. در صورت نیاز، میتوان آن را برای هر مورد بهطور جداگانه تطبیق داد.
* صفحهٔ پایه
** صفحهٔ پایه/جلد ۱
*** صفحهٔ پایه/جلد ۱/فصل ۱
*** صفحهٔ پایه/جلد ۱/فصل ۲
*** صفحهٔ پایه/جلد ۱/فصل ۳
** صفحهٔ پایه/جلد ۲
*** صفحهٔ پایه/جلد ۲/فصل ۱
*** صفحهٔ پایه/جلد ۲/فصل ۲
*** صفحهٔ پایه/جلد ۲/فصل ۳
** صفحهٔ پایه/جلد ۳
*** صفحهٔ پایه/جلد ۳/فصل ۱
*** صفحهٔ پایه/جلد ۳/فصل ۲
*** صفحهٔ پایه/جلد ۳/فصل ۳
=== در عمل ===
این نمونهای عملی از اثری در ویکینبشته است که از این طرح بندی و ساختار صفحات استفاده میکند. همهٔ زیرصفحهها در اینجا نمایش داده نشدهاند، اما باید ایدهای از چگونگی جای گرفتن هر صفحه در کل مجموعه به دست دهد.
* [[:en:The Works of the Rev. Jonathan Swift|The Works of the Rev. Jonathan Swift]]
** [[:en:The Works of the Rev. Jonathan Swift/Volume 1|The Works of the Rev. Jonathan Swift/Volume 1]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 1/Dedication|The Works of the Rev. Jonathan Swift/Volume 1/Dedication]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 1/Introduction|The Works of the Rev. Jonathan Swift/Volume 1/Introduction]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 1/Life of Dr. Swift, Section I|The Works of the Rev. Jonathan Swift/Volume 1/Life of Dr. Swift, Section I]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 1/Life of Dr. Swift, Section II|The Works of the Rev. Jonathan Swift/Volume 1/Life of Dr. Swift, Section II]]
*** و غیره...
** [[:en:The Works of the Rev. Jonathan Swift/Volume 2|The Works of the Rev. Jonathan Swift/Volume 2]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 2/General Preface|The Works of the Rev. Jonathan Swift/Volume 2/General Preface]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 2/A Tale of a Tub, &c.|The Works of the Rev. Jonathan Swift/Volume 2/A Tale of a Tub, &c.]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 2/Advertisement|The Works of the Rev. Jonathan Swift/Volume 2/Advertisement]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 2/Analytical Table|The Works of the Rev. Jonathan Swift/Volume 2/Analytical Table]]
*** و غیره...
** [[:en:The Works of the Rev. Jonathan Swift/Volume 3|The Works of the Rev. Jonathan Swift/Volume 3]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 3/The Examiner|The Works of the Rev. Jonathan Swift/Volume 3/The Examiner]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 3/Some Advice to the Members of the October Club|The Works of the Rev. Jonathan Swift/Volume 3/Some Advice to the Members of the October Club]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 3/The Publick Spirit of the Whigs|The Works of the Rev. Jonathan Swift/Volume 3/The Publick Spirit of the Whigs]]
*** و غیره...
** و غیره...
== مزایا ==
این روش همهچیز را یکجا و در قالب یک واحد منسجم نگه میدارد. این کار امکان پیمایش و نگهداریِ بسیار آسانتر کل اثر را فراهم میکند. در صورت لزوم، یک مدیر میتواند نام کل اثر را، شامل همهٔ جلدها و فصلهای آن، طی یک عملیات واحد تغییر دهد (یعنی آن را منتقل کند). پیوندهای نسبی را میتوان بهراحتی در سرتاسر اثر جای داد تا خوانندگان بتوانند در آن جابهجا شوند؛ در صورت نیاز، اصلاح یا بهروزرسانی این پیوندها نیز آسان است. حفظ این روش استاندارد طرح بندی در سرتاسر پروژهٔ ویکینبشته، خواندن و رونویسیِ آثار چندجلدی را برای کاربرانی که با عرفهای ویکینبشته آشنا هستند، بسیار سادهتر و قابلدرکتر میکند.
ابزار ''اطلاعات صفحه'' (نگاه کنید به جعبهابزار در نوار کناری) و صفحهٔ ویژهٔ [[ویژه:PrefixIndex]] را میتوان برای فهرست کردن همهٔ زیرصفحههای موجود به کار برد؛ این کار همهٔ بخشهای یک اثر کامل را در یک صفحهٔ واحد و آسان برای بررسی نشان میدهد.
== مروری بر پیوندهای نسبی ==
پیوندهای ویکیِ نسبی را میتوان در این طرح بندی برای پیوند دادن بین صفحات به کار برد. این روش از واردکردن نام کامل صفحه در هر بار سادهتر است. همچنین به این معناست که این پیوندهای ویکی در صورت انتقال صفحه، بدون نیاز به ویرایش اضافی، همچنان کار خواهند کرد.
در هر یک از مثالهای زیر، فرض کنید که پیوند در صفحهٔ Foo/Bar/Baz قرار دارد.
* شروع یک پیوند ویکی با یک اسلش، پیوندی به یک زیرصفحه ایجاد میکند. برای نمونه: <code><nowiki>[[/Qux]]</nowiki></code> به زیرصفحهٔ Qux (یعنی Foo/Bar/Baz/Qux) پیوند میدهد.
* یک پیوند ویکیِ نسبی همیشه نیازی به کاراکتر لوله (|) ندارد. با قرار دادن یک فاصله و یک اسلش در پایان، نام صفحه بدون آن اسلش نمایش داده میشود. برای نمونه: <code><nowiki>[[/Qux /]]</nowiki></code> فقط بهصورت '''Qux''' نمایش داده میشود.
* شروع یک پیوند ویکی با دو نقطه و یک اسلش، پیوندی به صفحهٔ والد ایجاد میکند. برای نمونه: <code><nowiki>[[../]]</nowiki></code> به صفحهٔ والد Bar پیوند میدهد.
* این روش را میتوان تکرار کرد تا از میان چند صفحهٔ والد به بالا پیوند داد. برای نمونه: <code><nowiki>[[../../]]</nowiki></code> مستقیماً از Baz به Foo پیوند میدهد.
* پیوند دادن به یک زیرصفحهٔ خواهر (همسطح) را میتوان با ترکیب این پیوندها انجام داد. برای نمونه: <code><nowiki>[[../Nee]]</nowiki></code> (ترکیبی از یک پیوند به بالا و یک پیوند به زیرصفحه) از Foo/Bar/Baz به Foo/Bar/Nee پیوند میدهد.
== نمونهها ==
* [[:en:The Works of the Rev. Jonathan Swift|The Works of the Rev. Jonathan Swift]]، ۱۸۰۱، در ۱۹ جلد
* [[:en:The Statutes at Large (Ruffhead)|The Statutes at Large (Ruffhead)]]، ۱۷۶۳-۶۵، در ۹ جلد
== همچنین ببینید ==
* [[ویکینبشته:رهنمودهای نشریات ادواری]]
1crf0u1bs3wqzst70v6q3yzpxdoxp26
299738
299736
2026-09-19T17:16:39Z
Hanooz
17889
/* مزایا */
299738
wikitext
text/x-wiki
{{پیشنهاده}}
{{رهنمود}}
{{process header
| title = آثار چندجلدی
| section =
| previous =
| next =
| shortcut =
| notes = رهنمودهایی دربارهٔ میزبانی و صفحهآرایی آثار چندجلدی در ویکینبشته.
}}
== صفحهآرایی ==
آثاری که در چند جلد منتشر شدهاند، معمولاً باید در ویکینبشته بهصورت یک صفحهٔ پایهٔ کلی در [[راهنما:فضاهای نام|فضای نام]] اصلی میزبانی شوند. هر جلد باید زیرصفحهای از این صفحهٔ واحد باشد. هر فصل یا بخش باید زیرصفحهای از جلد مربوط به خود باشد. صفحهٔ پایه باید عنوان کلیِ اثر باشد.
=== در تئوری ===
این یک طرح کلی از ساختار صفحات است که میتوان آن را برای اثری چندجلدی به کار برد. در صورت نیاز، میتوان آن را برای هر مورد بهطور جداگانه تطبیق داد.
* صفحهٔ پایه
** صفحهٔ پایه/جلد ۱
*** صفحهٔ پایه/جلد ۱/فصل ۱
*** صفحهٔ پایه/جلد ۱/فصل ۲
*** صفحهٔ پایه/جلد ۱/فصل ۳
** صفحهٔ پایه/جلد ۲
*** صفحهٔ پایه/جلد ۲/فصل ۱
*** صفحهٔ پایه/جلد ۲/فصل ۲
*** صفحهٔ پایه/جلد ۲/فصل ۳
** صفحهٔ پایه/جلد ۳
*** صفحهٔ پایه/جلد ۳/فصل ۱
*** صفحهٔ پایه/جلد ۳/فصل ۲
*** صفحهٔ پایه/جلد ۳/فصل ۳
=== در عمل ===
این نمونهای عملی از اثری در ویکینبشته است که از این طرح بندی و ساختار صفحات استفاده میکند. همهٔ زیرصفحهها در اینجا نمایش داده نشدهاند، اما باید ایدهای از چگونگی جای گرفتن هر صفحه در کل مجموعه به دست دهد.
* [[:en:The Works of the Rev. Jonathan Swift|The Works of the Rev. Jonathan Swift]]
** [[:en:The Works of the Rev. Jonathan Swift/Volume 1|The Works of the Rev. Jonathan Swift/Volume 1]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 1/Dedication|The Works of the Rev. Jonathan Swift/Volume 1/Dedication]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 1/Introduction|The Works of the Rev. Jonathan Swift/Volume 1/Introduction]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 1/Life of Dr. Swift, Section I|The Works of the Rev. Jonathan Swift/Volume 1/Life of Dr. Swift, Section I]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 1/Life of Dr. Swift, Section II|The Works of the Rev. Jonathan Swift/Volume 1/Life of Dr. Swift, Section II]]
*** و غیره...
** [[:en:The Works of the Rev. Jonathan Swift/Volume 2|The Works of the Rev. Jonathan Swift/Volume 2]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 2/General Preface|The Works of the Rev. Jonathan Swift/Volume 2/General Preface]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 2/A Tale of a Tub, &c.|The Works of the Rev. Jonathan Swift/Volume 2/A Tale of a Tub, &c.]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 2/Advertisement|The Works of the Rev. Jonathan Swift/Volume 2/Advertisement]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 2/Analytical Table|The Works of the Rev. Jonathan Swift/Volume 2/Analytical Table]]
*** و غیره...
** [[:en:The Works of the Rev. Jonathan Swift/Volume 3|The Works of the Rev. Jonathan Swift/Volume 3]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 3/The Examiner|The Works of the Rev. Jonathan Swift/Volume 3/The Examiner]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 3/Some Advice to the Members of the October Club|The Works of the Rev. Jonathan Swift/Volume 3/Some Advice to the Members of the October Club]]
*** [[:en:The Works of the Rev. Jonathan Swift/Volume 3/The Publick Spirit of the Whigs|The Works of the Rev. Jonathan Swift/Volume 3/The Publick Spirit of the Whigs]]
*** و غیره...
** و غیره...
== مزایا ==
این روش همهچیز را یکجا و در قالب یک واحد منسجم نگه میدارد. این کار امکان پیمایش و نگهداریِ بسیار آسانتر کل اثر را فراهم میکند. در صورت لزوم، یک مدیر میتواند نام کل اثر را، شامل همهٔ جلدها و فصلهای آن، طی یک عملیات واحد تغییر دهد (یعنی آن را منتقل کند). پیوندهای نسبی را میتوان بهراحتی در سرتاسر اثر جای داد تا خوانندگان بتوانند در آن جابهجا شوند؛ در صورت نیاز، اصلاح یا بهروزرسانی این پیوندها نیز آسان است. حفظ این روش استاندارد طرح بندی در سرتاسر پروژهٔ ویکینبشته، خواندن و رونویسیِ آثار چندجلدی را برای کاربرانی که با عرفهای ویکینبشته آشنا هستند، بسیار سادهتر و قابلدرکتر میکند.
ابزار ''اطلاعات صفحه'' (نگاه کنید به جعبهابزار در نوار کناری) و صفحهٔ ویژهٔ [[ویژه:نمایه پیشوندی]] را میتوان برای فهرست کردن همهٔ زیرصفحههای موجود به کار برد؛ این کار همهٔ بخشهای یک اثر کامل را در یک صفحهٔ واحد و آسان برای بررسی نشان میدهد.
== مروری بر پیوندهای نسبی ==
پیوندهای ویکیِ نسبی را میتوان در این طرح بندی برای پیوند دادن بین صفحات به کار برد. این روش از واردکردن نام کامل صفحه در هر بار سادهتر است. همچنین به این معناست که این پیوندهای ویکی در صورت انتقال صفحه، بدون نیاز به ویرایش اضافی، همچنان کار خواهند کرد.
در هر یک از مثالهای زیر، فرض کنید که پیوند در صفحهٔ Foo/Bar/Baz قرار دارد.
* شروع یک پیوند ویکی با یک اسلش، پیوندی به یک زیرصفحه ایجاد میکند. برای نمونه: <code><nowiki>[[/Qux]]</nowiki></code> به زیرصفحهٔ Qux (یعنی Foo/Bar/Baz/Qux) پیوند میدهد.
* یک پیوند ویکیِ نسبی همیشه نیازی به کاراکتر لوله (|) ندارد. با قرار دادن یک فاصله و یک اسلش در پایان، نام صفحه بدون آن اسلش نمایش داده میشود. برای نمونه: <code><nowiki>[[/Qux /]]</nowiki></code> فقط بهصورت '''Qux''' نمایش داده میشود.
* شروع یک پیوند ویکی با دو نقطه و یک اسلش، پیوندی به صفحهٔ والد ایجاد میکند. برای نمونه: <code><nowiki>[[../]]</nowiki></code> به صفحهٔ والد Bar پیوند میدهد.
* این روش را میتوان تکرار کرد تا از میان چند صفحهٔ والد به بالا پیوند داد. برای نمونه: <code><nowiki>[[../../]]</nowiki></code> مستقیماً از Baz به Foo پیوند میدهد.
* پیوند دادن به یک زیرصفحهٔ خواهر (همسطح) را میتوان با ترکیب این پیوندها انجام داد. برای نمونه: <code><nowiki>[[../Nee]]</nowiki></code> (ترکیبی از یک پیوند به بالا و یک پیوند به زیرصفحه) از Foo/Bar/Baz به Foo/Bar/Nee پیوند میدهد.
== نمونهها ==
* [[:en:The Works of the Rev. Jonathan Swift|The Works of the Rev. Jonathan Swift]]، ۱۸۰۱، در ۱۹ جلد
* [[:en:The Statutes at Large (Ruffhead)|The Statutes at Large (Ruffhead)]]، ۱۷۶۳-۶۵، در ۹ جلد
== همچنین ببینید ==
* [[ویکینبشته:رهنمودهای نشریات ادواری]]
t7binaia6yy8skyjvmq09f96ztwahcu
ویکینبشته:رهنمودهای نشریات ادواری
4
95576
299737
2026-09-19T17:15:38Z
Hanooz
17889
تغییرمسیر به [[ویکینبشته:نشریات ادواری]]
299737
wikitext
text/x-wiki
#تغییر_مسیر [[ویکینبشته:نشریات ادواری]]
l2wiaddlkd33v4jk1zuwhc70lbk3myh
راهنما:درونمایه
12
95577
299740
2026-09-19T17:41:42Z
Hanooz
17889
تغییرمسیر به [[راهنما:درونمایه]]
299740
wikitext
text/x-wiki
#تغییر_مسیر [[راهنما:درونمایه]]
qtkcu6wqt78fudpmypvo87tklwbzg4m
راهنما:فضای نام
12
95578
299741
2026-09-19T17:50:54Z
Hanooz
17889
تغییرمسیر به [[راهنما:فضاهای نام]]
299741
wikitext
text/x-wiki
#تغییر_مسیر [[راهنما:فضاهای نام]]
1hg4rkcxj4ya3uii9i75sy8v72rmkbf
الگو:Font-size-x
10
95579
299742
2026-09-19T18:15:33Z
Hanooz
17889
صفحهای تازه حاوی «<includeonly>{{font-size-x/s|{{{1|}}}|lh={{{lh|1.50em}}}}}<!-- Inline content to be resized: -->{{{2}}}{{font-size-x/e}}</includeonly><noinclude> {{documentation}} </noinclude>» ایجاد کرد
299742
wikitext
text/x-wiki
<includeonly>{{font-size-x/s|{{{1|}}}|lh={{{lh|1.50em}}}}}<!-- Inline content to be resized: -->{{{2}}}{{font-size-x/e}}</includeonly><noinclude>
{{documentation}}
</noinclude>
mxf1tj6ukp6dfrwyb8leprfo3q3plhm
الگو:Font-size-x/s
10
95580
299743
2026-09-19T18:16:28Z
Hanooz
17889
صفحهای تازه حاوی «<includeonly><span {{optional style | display = inline-block <!-- Support multi-line enclosures (without this line line-height fails to propagate over line-wrap) --> | font-size = {{{1|}}} <!-- The basic resizing factor --> | line-height = {{{lh|1.50em}}} <!-- Allow for custom line-spacing tweakage (default probably OK most cases) --> }}></includeonly><noinclude> {{documentation|Template:Font-size-x/doc}} </noinclude>» ایجاد کرد
299743
wikitext
text/x-wiki
<includeonly><span {{optional style
| display = inline-block <!-- Support multi-line enclosures (without this line line-height fails to propagate over line-wrap) -->
| font-size = {{{1|}}} <!-- The basic resizing factor -->
| line-height = {{{lh|1.50em}}} <!-- Allow for custom line-spacing tweakage (default probably OK most cases) -->
}}></includeonly><noinclude>
{{documentation|Template:Font-size-x/doc}}
</noinclude>
b1x49wo2j1pq31uj9fvioam2aptp13n
الگو:Font-size-x/e
10
95581
299744
2026-09-19T18:18:03Z
Hanooz
17889
تغییرمسیر به [[الگو:Span end]]
299744
wikitext
text/x-wiki
#تغییر_مسیر [[الگو:Span end]]
af7vqlxjyntdh9z2gzydqi5uybnb5iv
ویکینبشته:نامهای پدیدآورندگان
4
95582
299746
2026-09-19T18:52:35Z
Hanooz
17889
ترجمه هوش مصنوعی
299746
wikitext
text/x-wiki
{{process header
| title = نامهای پدیدآورندگان
| section =
| previous = [[ویکینبشته:جستارها]]
| next =
| shortcut =
| notes = خلاصهای کوتاه از دیدگاهها دربارهٔ نام نویسندگان، قراردادهای نامگذاری، نامهای مستعار و استفاده از حروف اول نام.
}}{{essay}}
تعیین نام درستی که باید برای صفحهٔ یک نویسنده در فضای نام نویسنده به کار برد، در برخی موارد که نویسندهای با نامهای متفاوتی شناخته میشود — خواه با نام مستعار یا با گونههای مختلفی از نام واقعیاش — میتواند چندان ساده نباشد. هیچ خطمشی ثابتی دربارهٔ اینکه کدام نام باید استفاده شود وجود ندارد. در حال حاضر، بهکارگیری قراردادها و شیوههای گوناگون به این معناست که در فضای نویسندگانِ ویکینبشته یکدستی وجود ندارد. این صفحه برخی از دیدگاهها را دربارهٔ استفاده از نام نویسندگان در ویکینبشته خلاصه میکند.
این بحث در نهایت به تقابل میان قراردادهای استاندارد کتابخانهای و مسائل مرتبسازی، در برابر شهرت عمومی و خواست نویسنده باز میگردد.
==نامهای کامل==
استفاده از حروف اول نام در نام یک نویسنده گاهی در ویکینبشته مورد مخالفت قرار میگیرد. استفاده از نام کامل نویسندگان استاندارد شناختهشدهٔ بینالمللی برای کتابخانههاست. کتابخانهها برای فهرستنویسیِ آثار خود باید تعداد زیادی از نویسندگان را ردهبندی کنند. اگر از حروف اول نام استفاده شود، ممکن است باعث ردهبندی نادرست نویسندگان شود (در مورد ویکینبشته، ممکن است در صفحات رده و در [[ویکینبشته:نویسندگان]] به ترتیب نادرست فهرست شوند). همچنین ممکن است در میان همهٔ نویسندگان، نامها و حروف اول تکراری وجود داشته باشد که سردرگمی غیرضروری ایجاد میکند. در این مورد اخیر، ویکینبشته میتواند از صفحات ابهامزدایی استفاده کند، هرچند این کار ممکن است غیرضروری باشد یا تنها بهعنوان روشی پشتیبان، در کنار استفاده از نام درست، ترجیح داده شود.
ویکیپدیا از این قرارداد نامگذاری استفاده نمیکند، چون یک دانشنامه است نه یک کتابخانه، و بهطور استاندارد حروف اول نام را در عنوان مقالههای خود میگنجاند. این موضوع میتواند پیونددهی میان پروژهها را با مشکل مواجه کند.
برخی نویسندگان ممکن است ترجیح داده باشند به شیوهای خاص شناخته شوند و بیشتر با همان نام معروفاند. برخی از کاربران ویکینبشته بر این باورند که پراستفادهترین نام باید در اولویت نخست قرار گیرد و سایر نامها بهصورت تغییرمسیر درآیند. کاربران دیگر معتقدند خواستهٔ نویسنده دربارهٔ چگونگی شناختهشدنش باید محترم شمرده شود.
{| class=wikitable width="70%" {{ts|mc}}
! style="width:50%;" | نام کامل
! style="width:50%;" | نام رایج
|-
| [[نویسنده:جیمز متیو بری]]
| [[نویسنده:جی. ام. بری]]
|-
| [[نویسنده:توماس استرنز الیوت]]
| [[نویسنده:تی. اس. الیوت]]
|-
| [[نویسنده:کلارنس مایکل جیمز استانیسلاوس دنیس]]
| [[نویسنده:سی. جی. دنیس]]
|-
| [[نویسنده:ادیت نزبیت]]
| [[نویسنده:ای. نزبیت]]
|-
| [[نویسنده:ویلیام متیو فلیندرز پیتری]]
| [[نویسنده:فلیندرز پیتری]]
|-
| [[نویسنده:ادلین ویرجینیا وولف]]
| [[نویسنده:ویرجینیا وولف]]
|-
|
| [[نویسنده:هومر]]
|}
===فنی===
الگوی {{tlx|initials}} را میتوان در صفحات نویسندگان قرار داد تا نشان دهد در عنوان صفحه از حرف اول نام استفاده شده و چنانچه بازکردن آن حرف اول ممکن شود، صفحه باید جابهجا شود. اینگونه نمایش داده میشود:
{{initials|nocat=yes}}
اگر صفحهٔ یک نویسنده با اطلاعات نام کامل بهروزرسانی شده، لطفاً در [[ویکینبشته:دفترخانه|دفترخانه]] اطلاع دهید تا جابهجا شود.
==نامهای دیگر==
بسیاری از نویسندگان از نام مستعار، نام قلمی، لقب یا دیگر نامهای جعلی استفاده میکنند. برخی به دلایل گوناگون بیش از یک نام جایگزین به کار میبرند. برخی نویسندگان به نام مستعار خود بیش از نام کاملشان شهرت دارند. این وضعیت شرایطی مشابه با استفاده از نامهای کامل ایجاد میکند.
{| class=wikitable width="70%" {{ts|mc}}
! style="width:50%;" | نام کامل
! style="width:50%;" | نام رایج
|-
| [[نویسنده:ساموئل لنگهورن کلمنز]]
| rowspan="2" | [[نویسنده:مارک تواین]]
|-
| [[نویسنده:ساموئل کلمنز]]
|-
| [[نویسنده:اریک آرتور بلر]]
| [[نویسنده:جورج اورول]]
|}
در مواردی که یک نویسنده چند نام مستعار دارد، میتوان نامهای دیگر را به نام کامل تغییرمسیر داد. در جایی که تنها یک نام مستعار وجود دارد، انتخاب همچنان میان نام کامل و نام مورداستناد محل بحث است. ویکیپدیا و دیگر پروژههای خواهر از نام رایج استفاده میکنند. بااینحال، نامهای مستعار مشکل مرتبسازی را در ویکینبشته حتی بزرگتر میکنند، چون ممکن است نام خانوادگی یکسان نباشد و این کار نام مستعار و نام واقعی را — بهجای صرفاً نامرتببودن در یک صفحه — بهطور کامل در صفحات جداگانه قرار میدهد.
عنوانها (مانند «پاپ»، «شاه»، «لرد»، «سر» و مانند آن) نباید در عنوان صفحه استفاده شوند، حتی اگر نام رایج نویسنده باشند. در این موارد، عنوان همچنان میتواند در الگوی نویسنده به کار رود یا در توضیحات ذکر شود.
{| class=wikitable width="70%" {{ts|mc}}
! style="width:50%;" | نام بدون عنوان
! style="width:50%;" | نام رایج
|-
| [[نویسنده:جورج گوردون بایرون]]
| [[نویسنده:لرد بایرون]]
|-
| [[نویسنده:پیوس دوم]]
| [[نویسنده:پاپ پیوس دوم]]
|-
| [[نویسنده:ویکتوریای بریتانیا]]
| [[نویسنده:ملکه ویکتوریا]]
|}
==یادداشتهای تکمیلی==
* بهصورت اختیاری، نامی که در سربرگ یک اثر استفاده میشود میتواند همان نامی باشد که در خودِ اثر آمده، حتی اگر با عنوان صفحهٔ نویسنده یکسان نباشد. باید از یک تغییرمسیر برای پیونددادن نام پیوندشدهٔ ویکی به صفحهٔ درست استفاده کرد.
* هر نامی که برای صفحهٔ نویسنده انتخاب شود، همهٔ نامهای دیگر باید بهصورت صفحات تغییرمسیر به صفحهٔ اصلی نویسنده ساخته شوند.
* هنگام ابهامزدایی میان دو نویسنده با نام کامل یکسان با استفاده از اطلاعات درونپرانتز، تاریخهای شناختهشدهٔ تولد و مرگ را بر دیگر اطلاعات ترجیح دهید؛ برای نمونه Author:William Ellery Channing ('''1818-1901''')، بهجای Author:William Ellery Channing (poet). برای چنین عنوانهایی، میان تاریخها از یک خطتیرهٔ ساده استفاده کنید.
==همچنین ببینید==
*[[ویکینبشته:راهنمای سبک#صفحات نویسنده]]
*[[الگو:نویسنده]]
*[[:رده:نویسندگان با حروف اول ناشناخته]]
===نمایهها===
*[[ویکینبشته:نویسندگان]]
*[[:رده:نویسندگان]]
[[رده:نویسندگان با حروف اول ناشناخته| ]]
934ww0rv2xpet1wjezpgtkdbuq0k4ty
299747
299746
2026-09-19T19:23:28Z
Hanooz
17889
299747
wikitext
text/x-wiki
{{process header
| title = نامهای پدیدآورندگان
| section =
| previous = [[ویکینبشته:جستارها]]
| next =
| shortcut =
| notes = خلاصهای کوتاه از دیدگاهها دربارهٔ نام پدیدآورندگان، قراردادهای نامگذاری، نامهای مستعار و استفاده از حروف اول نام.
}}{{essay}}
تعیین نام درستی که باید برای صفحهٔ یک پدیدآورنده در فضای نام پدیدآورنده به کار برد، در برخی موارد که پدیدآورندهای با نامهای متفاوتی شناخته میشود — خواه با نام مستعار یا با گونههای مختلفی از نام واقعیاش — میتواند چندان ساده نباشد. هیچ سیاست ثابتی دربارهٔ اینکه کدام نام باید استفاده شود وجود ندارد. در حال حاضر، بهکارگیری قراردادها و شیوههای گوناگون به این معناست که در فضای پدیدآورندگانِ ویکینبشته یکدستی وجود ندارد. این صفحه برخی از دیدگاهها را دربارهٔ استفاده از نام پدیدآورندگان در ویکینبشته خلاصه میکند.
این بحث در نهایت به تقابل میان قراردادهای استاندارد کتابخانهای و مسائل مرتبسازی، در برابر شهرت عمومی و خواست پدیدآورنده باز میگردد.
==نامهای کامل==
استفاده از حروف اول نام در نام یک پدیدآورنده گاهی در ویکینبشته مورد مخالفت قرار میگیرد. استفاده از نام کامل پدیدآورندگان استاندارد شناختهشدهٔ بینالمللی برای کتابخانههاست. کتابخانهها برای فهرستنویسیِ آثار خود باید تعداد زیادی از پدیدآورندگان را ردهبندی کنند. اگر از حروف اول نام استفاده شود، ممکن است باعث ردهبندی نادرست پدیدآورندگان شود (در مورد ویکینبشته، ممکن است در صفحات رده و در [[ویکینبشته:پدیدآورندگان]] به ترتیب نادرست فهرست شوند). همچنین ممکن است در میان همهٔ پدیدآورندگان، نامها و حروف اول تکراری وجود داشته باشد که سردرگمی غیرضروری ایجاد میکند. در این مورد اخیر، ویکینبشته میتواند از صفحات ابهامزدایی استفاده کند، هرچند این کار ممکن است غیرضروری باشد یا تنها بهعنوان روشی پشتیبان، در کنار استفاده از نام درست، ترجیح داده شود.
ویکیپدیا از این قرارداد نامگذاری استفاده نمیکند، چون یک دانشنامه است نه یک کتابخانه، و بهطور استاندارد حروف اول نام را در عنوان مقالههای خود میگنجاند. این موضوع میتواند پیونددهی میان پروژهها را با مشکل مواجه کند.
برخی پدیدآورندگان ممکن است ترجیح داده باشند به شیوهای خاص شناخته شوند و بیشتر با همان نام معروفاند. برخی از کاربران ویکینبشته بر این باورند که پراستفادهترین نام باید در اولویت نخست قرار گیرد و سایر نامها بهصورت تغییرمسیر درآیند. کاربران دیگر معتقدند خواستهٔ پدیدآورنده دربارهٔ چگونگی شناختهشدنش باید محترم شمرده شود.
{| class=wikitable width="70%" {{ts|mc}}
! style="width:50%;" | نام کامل
! style="width:50%;" | نام رایج
|-
| [[پدیدآورنده:جیمز متیو بری]]
| [[پدیدآورنده:جی. ام. بری]]
|-
| [[پدیدآورنده:توماس استرنز الیوت]]
| [[پدیدآورنده:تی. اس. الیوت]]
|-
| [[پدیدآورنده:کلارنس مایکل جیمز استانیسلاوس دنیس]]
| [[پدیدآورنده:سی. جی. دنیس]]
|-
| [[پدیدآورنده:ادیت نزبیت]]
| [[پدیدآورنده:ای. نزبیت]]
|-
| [[پدیدآورنده:ویلیام متیو فلیندرز پیتری]]
| [[پدیدآورنده:فلیندرز پیتری]]
|-
| [[پدیدآورنده:ادلین ویرجینیا وولف]]
| [[پدیدآورنده:ویرجینیا وولف]]
|-
|
| [[پدیدآورنده:هومر]]
|}
===فنی===
الگوی {{tlx|initials}} را میتوان در صفحات پدیدآورندگان قرار داد تا نشان دهد در عنوان صفحه از حرف اول نام استفاده شده و چنانچه بازکردن آن حرف اول ممکن شود، صفحه باید جابهجا شود. اینگونه نمایش داده میشود:
{{initials|nocat=yes}}
اگر صفحهٔ یک پدیدآورنده با اطلاعات نام کامل بهروزرسانی شده، لطفاً در [[ویکینبشته:دفترخانه|دفترخانه]] اطلاع دهید تا جابهجا شود.
==نامهای دیگر==
بسیاری از پدیدآورندگان از نام مستعار، نام قلمی، لقب یا دیگر نامهای جعلی استفاده میکنند. برخی به دلایل گوناگون بیش از یک نام جایگزین به کار میبرند. برخی پدیدآورندگان به نام مستعار خود بیش از نام کاملشان شهرت دارند. این وضعیت شرایطی مشابه با استفاده از نامهای کامل ایجاد میکند.
{| class=wikitable width="70%" {{ts|mc}}
! style="width:50%;" | نام کامل
! style="width:50%;" | نام رایج
|-
| [[پدیدآورنده:ساموئل لنگهورن کلمنز]]
| rowspan="2" | [[پدیدآورنده:مارک تواین]]
|-
| [[پدیدآورنده:ساموئل کلمنز]]
|-
| [[پدیدآورنده:اریک آرتور بلر]]
| [[پدیدآورنده:جورج اورول]]
|}
در مواردی که یک پدیدآورنده چند نام مستعار دارد، میتوان نامهای دیگر را به نام کامل تغییرمسیر داد. در جایی که تنها یک نام مستعار وجود دارد، انتخاب همچنان میان نام کامل و نام مورداستناد محل بحث است. ویکیپدیا و دیگر پروژههای خواهر از نام رایج استفاده میکنند. بااینحال، نامهای مستعار مشکل مرتبسازی را در ویکینبشته حتی بزرگتر میکنند، چون ممکن است نام خانوادگی یکسان نباشد و این کار نام مستعار و نام واقعی را — بهجای صرفاً نامرتببودن در یک صفحه — بهطور کامل در صفحات جداگانه قرار میدهد.
عنوانها (مانند «پاپ»، «شاه»، «لرد»، «سر» و مانند آن) نباید در عنوان صفحه استفاده شوند، حتی اگر نام رایج پدیدآورنده باشند. در این موارد، عنوان همچنان میتواند در الگوی پدیدآورنده به کار رود یا در توضیحات ذکر شود.
{| class=wikitable width="70%" {{ts|mc}}
! style="width:50%;" | نام بدون عنوان
! style="width:50%;" | نام رایج
|-
| [[پدیدآورنده:جورج گوردون بایرون]]
| [[پدیدآورنده:لرد بایرون]]
|-
| [[پدیدآورنده:پیوس دوم]]
| [[پدیدآورنده:پاپ پیوس دوم]]
|-
| [[پدیدآورنده:ویکتوریای بریتانیا]]
| [[پدیدآورنده:ملکه ویکتوریا]]
|}
==یادداشتهای تکمیلی==
* بهصورت اختیاری، نامی که در سربرگ یک اثر استفاده میشود میتواند همان نامی باشد که در خودِ اثر آمده، حتی اگر با عنوان صفحهٔ پدیدآورنده یکسان نباشد. باید از یک تغییرمسیر برای پیونددادن نام پیوندشدهٔ ویکی به صفحهٔ درست استفاده کرد.
* هر نامی که برای صفحهٔ پدیدآورنده انتخاب شود، همهٔ نامهای دیگر باید بهصورت صفحات تغییرمسیر به صفحهٔ اصلی پدیدآورنده ساخته شوند.
* هنگام ابهامزدایی میان دو پدیدآورنده با نام کامل یکسان با استفاده از اطلاعات درونپرانتز، تاریخهای شناختهشدهٔ تولد و مرگ را بر دیگر اطلاعات ترجیح دهید؛ برای نمونه Author:William Ellery Channing ('''1818-1901''')، بهجای Author:William Ellery Channing (poet). برای چنین عنوانهایی، میان تاریخها از یک خطتیرهٔ ساده استفاده کنید.
==همچنین ببینید==
*[[ویکینبشته:شیوهنامه#صفحات پدیدآورندگان]]
*[[الگو:پدیدآورنده]]
*[[:رده:پدیدآورندگان با حروف اول ناشناخته]]
===نمایهها===
*[[ویکینبشته:پدیدآورندگان]]
*[[:رده:پدیدآورندگان]]
[[رده:پدیدآورندگان با حروف اول ناشناخته| ]]
pm80ztqx9c65uq37id2z1sr3amjgyjc
برگه:فرهنگ جغرافیایی ایران جلد دوم.pdf/۳۲۸
104
95583
299749
2026-09-19T19:37:09Z
~2026-50420-40
40019
/* نمونهخوانینشده */ صفحهای تازه حاوی «» ایجاد کرد
299749
proofread-page
text/x-wiki
<noinclude><pagequality level="1" user="204.18.193.198" /></noinclude><noinclude><references/></noinclude>
0oxtbn975y5lchilfuuya71ctdtpo1e
برگه:Jondi Shapour Magazine, no. 3.pdf/۱۷۱
104
95584
299766
2026-09-20T11:21:52Z
Darafsh
3597
/* نمونهخوانیشده */
299766
proofread-page
text/x-wiki
<noinclude><pagequality level="3" user="Darafsh" /></noinclude>{{فمخ|22}}
{| width=100%|
|-
| width=25%| || width=50% align=left| [[پرونده:Logo of Jondi Shapour Journal.png|200px]]{{سخ}} [[پرونده:Jondi Shapour Magazine, no. 1 (page 139 crop).jpg|50px]] {{سخ}} JSMagazine.ir🌐 {{سخ}} ✉ info@JSMagazine.ir {{سخ}} عناوین و مقالات مجله را به صورت آنلاین ببینید || width=25%|{{عرچ|title=1|شاپا۲۴۷۶-۵۲۰۱ :}}
|}<noinclude>{{پانویس-کوچک}}</noinclude>
7zenjfdbpcor6bdpgx06vqrh0s0s9d8