میڈیاویکی:Gadget-Extra-Editbuttons-urdutools.js

تفصیل کے لیے کھولیں کے بٹن پر کلک کریں یاددہانی: محفوظ کرنے کے بعد تازہ ترین تبدیلیوں کو دیکھنے کے لیے آپ کو اپنے براؤزر کا کیش صاف کرنا ہوگا۔

  • فائرفاکس/ سفاری: جب Reload پر کلک کریں تو Shift دبا کر رکھیں، یا Ctrl-F5 یا Ctrl-R دبائیں (Mac پر R- )
  • گوگل کروم: Ctrl-Shift-R دبائیں (Mac پر Shift-R-⌘)
  • انٹرنیٹ ایکسپلورر: جب Refresh پر کلک کریں تو Ctrl یا Ctrl-F5 دبائیں
  • اوپیرا: Tools → Preferences میں جائیں اور کیش صاف کریں

// <nowiki> // DO NOT REMOVE THIS LINE EVER
/**
 * Urdu text style improvement tools
 * Tests: [[میڈیاویکی:Gadget-Extra-Editbuttons-tests.js]] [[وپ:تجربہ]]
 * See also:
 * * [[میڈیاویکی:Gadget-Extra-Editbuttons-urduwikitools.js]]
 * * [[میڈیاویکی:Gadget-Extra-Editbuttons-dictionary.js]]
 */
var urduTools = (function () {
	'use strict';
 
	var urduDigits, arabicIndicDigits, arabicDigits,
		vowels, urduCharacters, urduCharactersNoVowels, similarUrduCharacters, hamza;
 
	arabicDigits = '0123456789';
	arabicIndicDigits = '٠١٢٣٤٥٦٧٨٩';
	//نویسه‌های غیر فارسی ي-ك-ە و موارد مشابه پیش از تبدیل به نویسهٔ فارسی در سایر ریجکس‌ها باید به عنوان کاراکتر فارسی شناخته شوند۔
	similarUrduCharacters = '\u0643\uFB91\uFB90\uFB8F\uFB8E\uFEDC\uFEDB\uFEDA\uFED9\u0649\uFEEF\u064A\u06C1\u06D5\u06BE\uFEF0-\uFEF4';
	vowels = '\u064B-\u0650\u0652\u0670';
	urduCharacters = '\u0621-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2' + similarUrduCharacters;
	urduCharactersNoVowels = '\u0621-\u064A\u0653-\u0655\u067E\u0686\u0698\u06AF\u06A9\u0643\u06AA\uFED9\uFEDA\u06CC\uFEF1\uFEF2' + similarUrduCharacters;
	urduDigits = '0123456789';
	hamza = '\u0654';
 
	function normalizeZwnj(text) {
		return text
			// Replace LRM، RLM characters with ZWNJ and it will remove unneeded ZWNJ at next lines
			// .replace(/(\u202A|\u202B|\u202C|\u202D|\u202E|\u200F|\¬)/g, '\u200c')
			.replace(new RegExp('([' + urduCharacters + '] *)\u200F+( *[' + urduCharacters + '])', 'g'), '$1\u200c$2')
			// Remove more than a ZWNJs
			.replace(/\u200c{2,}/g, '\u200c')
			// Convert ¬ to zwnj in Urdu context
			.replace(new RegExp('([' + urduCharacters + '])¬(?=[' + urduCharacters + '])', 'g'), '$1\u200c')
			// Clean ZWNJs after characters that don't conncet to the next letter
			.replace(/([۰-۹0-9إأةؤورزژاآدذ،؛,\:«»\\\/@#$٪×\*\(\)ـ\-=\|])\u200c/g, '$1')
			// Clean ZWNJs before English characters
			.replace(/\u200c([\w])/g, '$1')
			.replace(/([\w])\u200c/g, '$1')
			// Clean ZWNJs after and before punctuation
			.replace(/\u200c([\n\s\[\]\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\\|])/g, '$1')
			.replace(/([\n\s\[\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\\|])\u200c/g, '$1')
			// Clean ZWNJs before brakets which have sapce after\before them
			.replace(/\u200c(\]\][\s\n])/g, '$1')
			.replace(/([\n\s]\[\[)\u200c/g, '$1');
	}
 
	function toUrduDigits(text) {
		var i = 0;
		for (i = 0; i <= 9; i = i + 1) {
			text = text.replace(new RegExp('[' + arabicIndicDigits[i] + arabicDigits[i] + ']', 'g'), urduDigits[i]);
		}
		return text
			.replace(new RegExp('([' + urduDigits + ']) ?%', 'g'), '$1٪');
	}

 
	function punctuation(text) {
		return text
			.replace(/ː/g, ':') //Replace incorrect : character
			.replace(/\r/g, '')
			// تبدیل گیومهٔ لاتین به فارسی
			// این دستور در ابتدا باشد تا فاصله‌های قبل و بعد گیومه هم اصلاح شود
			/*.replace(
				new RegExp('([' + urduCharacters + '،»؛][\\s\\n])"(.*?[' + urduCharacters + '].*?)"(.*?[\\s\\n$' + urduCharacters + '،«؛])', 'g'),
				'$1«$2» $3'
			)*/
			// Add or remove space
			//فاصله بعد از سجاوندی به جز ! به دلیل (<!-- و !! در بالای جدول‌ها)
			.replace(/([،\.\؛\؟»])([^\s\.\(\)«»\"\[\]<>\d\w\{\}\|0-9'])/g, '$1 $2') 
			// حذف فاصله بعد از گیومه، پرانتز، براکت باز
			.replace(/([\(«\[])\s/g, '$1')
			// حذف فاصله قبل از گیومه، پرانتز، براکت بسته
			.replace(/\s([\)»\]])/g, '$1')
			// افزودن فاصله قبل از گیومه باز
			.replace(/([^ \(\[\|\r\n>'])(«)/g, '$1 $2')
			.replace(/٬\s/g, '، ')
			.replace(/ +\( +/g, ' (')
			.replace(new RegExp('([' + urduCharacters + ']) *\\) *(?=[' + urduCharacters + '])', 'g'), '$1) ')
			.replace(/([^ \.]) +([؟،\:؛!\.])(\s[^ \.])/g, '$1$2$3')// Remove space preceding punctuation, except for ellipses
			// Add Space After Punctuation
			.replace(new RegExp('([' + urduCharacters + ']+)([؟،؛!\\.۔])([' + urduCharacters + ']+)', 'g'), '$1$2 $3')
			// New Line
			.replace(/\n\s{1,}\n/g, '\n\n')
			// Removes extra line between two items list
			.replace(/(\n\*.*?)\n+(?=\n\*)/g, '$1')
			// Removes extra line between two items list
			.replace(/(\n#.*?)\n+(?=\n#)/g, '$1')
			// Convert , to، if there are Urdu characters on both sides of it
			.replace(new RegExp('([' + urduCharacters + ']) ?, ?(?=[' + urduCharacters + '])', 'g'), '$1، ')
			// بعد از نقطه‌ویرگول فارسی علامتی قرار نمی‌گیرد
			.replace(/(؛)(([\s]+)?[\.،؛:!؟\-…])/g, '$1')
			// در انتهای پاراگراف نقطه‌ویرگول فارسی نمی‌آید
			.replace(/(؛)(\s|)\n\n/g, '۔\n\n')
			// سجاوندی در ابتدای علامت باز قرار نمی‌گیرد
			.replace(/([\(«])[\s]([؛\.،])/g, '$1')
			// ویرگول فارسی
			// بعد از ویرگول فارسی این علامت‌ها قرار نمی‌گیرد
			.replace(/(،)([\s]+)?([،؛!؟\-][\.،؛!؟\-]*|\.(?!\.))/g, '$1')
			// نقطه
			// باید سه نقطه باشد
			.replace(new RegExp('([' + urduCharacters + '])(\\s|)(\\.{3,})', 'g'), '$1$2...')
			// بعد از نقطه این علایم نمی‌آیند
			.replace(new RegExp('([' + urduCharacters + '])\۔( *[،؛:!؟\\?]+)', 'g'), '$1۔')
			// سجاوندی در ابتدای پرانتز و گیومه باز قرار نمی‌گیرد
			.replace(new RegExp('(\\(|«)[\\.،؛](\\s|)([' + urduCharacters + '])', 'g'), '$1$3')
			// سجاوندی در داخل پرانتز
			.replace(new RegExp('([' + urduCharacters + '])(\\s|)[\\.،؛](\\s|)(\\))', 'g'), '$1$2$3$4')
			/// Question & exclamation mark
			// علامت تعجب تکراری به دلیل وجود !! در عنوان جدول‌های مدیاویکی نباید اصلاح شود۔
			// تكرار علامت سوال فارسی
			.replace(/(؟(\s|)){2,}/g, '؟')
			//علامت‌گزاری نادرست
			.replace('؟ !', '؟!').replace('!؟', '!؟')
			/// سجاوندی غیر اردو
			// استفاده از؟ اردو
			.replace(new RegExp('([' + urduCharacters + '])[ ]*[?]', 'g'), '$1؟')
			// استفاده از ; اردو
			.replace(new RegExp('([' + urduCharacters + '])[ ]*[;]', 'g'), '$1؛')
			// استفاده از، اردو
			.replace(new RegExp('([' + urduCharacters + '])[ ]*[,]', 'g'), '$1،')
			// استفاده از۔ اردو
			.replace(new RegExp('([' + urduCharacters + '])[ ]*[\.]', 'g'), '$1۔')
			//رفع مشکل استفاده از ـــً به جای گیومه لاتین در متن اردو
			.replace(new RegExp('ا\\"([ ]*[' + urduCharacters + '])', 'g'), 'اً$1');
			// TODO: Should be limited
			//.replace(new RegExp('([' + urduCharacters + ']+)(\\d+)', 'g'), '$1 $2')
			// بين کلمات اردو و انگلیسی باید فاصله باشد
			//.replace(new RegExp('([a-zA-Z]+)([' + urduCharacters + ']+)', 'g'), '$1 $2')
			//.replace(new RegExp('([' + urduCharacters + ']+)([a-zA-Z]+)', 'g'), '$1 $2');
	}
 
	return {
		normalizeZwnj: normalizeZwnj,
		punctuation: punctuation,
		toUrduDigits: toUrduDigits,
		vowels: vowels,
		urduCharacters: urduCharacters,
		urduCharactersNoVowels: urduCharactersNoVowels
	};
}());
if (typeof window !== "undefined") {
	window.urduTools = urduTools;
}