میڈیاویکی: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 میں جائیں اور کیش صاف کریں
اس اسکرپٹ کی دستاویزی تفصیلات میڈیاویکی:Gadget-Extra-Editbuttons-urdutools پر درج کی جا سکتی ہیں۔ |
// <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;
}