پرش به محتوا

مدیاویکی:Gadget-Extra-Editbuttons-persiantools.js: تفاوت میان نسخه‌ها

بدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
بدون خلاصۀ ویرایش
 
خط ۴۴: خط ۴۴:
.replace(/[\u200B\u200C\uFEFF]([ء\n\s\[\]\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\\|])/g, '$1')
.replace(/[\u200B\u200C\uFEFF]([ء\n\s\[\]\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\\|])/g, '$1')
.replace(/([\n\s\[\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\\|])[\u200B-\u200D\uFEFF]/g, '$1')
.replace(/([\n\s\[\.،«»\:\(\)\؛\؟\?\;\$\!\@\-\=\+\\\|])[\u200B-\u200D\uFEFF]/g, '$1')
// Clean ZWNJs before brakets which have sapce after\before them
// Clean ZWNJs before brackets which have space after/before them
.replace(/[\u200B-\u200D\uFEFF](\]\][\s\n])/g, '$1')
.replace(/[\u200B-\u200D\uFEFF](\]\][\s\n])/g, '$1')
.replace(/([\n\s]\[\[)[\u200B-\u200D\uFEFF]/g, '$1');
.replace(/([\n\s]\[\[)[\u200B-\u200D\uFEFF]/g, '$1');
خط ۱۸۴: خط ۱۸۴:
* Replaces Persian characters with Arabic's ones so an Arabic sorter can sort Persian lines
* Replaces Persian characters with Arabic's ones so an Arabic sorter can sort Persian lines
*/
*/
function dePersian(text) {
function prepareForArabicSort(text) {
return text
return text
.replace(/ی/g, 'ي')
.replace(/ی/g, 'ي')
خط ۱۹۱: خط ۱۹۱:
.replace(/ژ/g, 'زی')
.replace(/ژ/g, 'زی')
.replace(/چ/g, 'جی')
.replace(/چ/g, 'جی')
.replace(/پ/g, 'بی');
.replace(/پ/g, 'بی')
.replace(/و/g, 'نی')
// 1728 === '۰'.charCodeAt(0) - '0'.charCodeAt(0)
.replace(/([۰-۹])/g, function (x) { return String.fromCharCode(x.charCodeAt(0) - 1728) });
}
}


function persianSortText(text) {
function persianSort(array) {
return text.split('\n').sort(function (x, y) {
return array.sort(function (x, y) {
var keyX = dePersian(x),
var keyX = prepareForArabicSort(x),
keyY = dePersian(y);
keyY = prepareForArabicSort(y);
if (keyX < keyY) {
return keyX < keyY ? -1 : keyX > keyY ? 1 : 0;
return -1;
});
}
if (keyX > keyY) {
return 1;
}
return 0;
}).join('\n');
}
}


خط ۳۹۲: خط ۳۸۹:
.replace(/(. ) +(?=[^= ])/g, '$1')
.replace(/(. ) +(?=[^= ])/g, '$1')
//فاصله بعد از سجاوندی به جز ! به دلیل (<!-- و !! در بالای جدول‌ها)
//فاصله بعد از سجاوندی به جز ! به دلیل (<!-- و !! در بالای جدول‌ها)
.replace(/([،\.\؛\؟»])([^\s\.\(\)«»\"\[\]<>\d\w\{\}\|۰۱۲۳۴۵۶۷۸۹\'])/g, '$1 $2')
.replace(/([،\.\؛\؟»])([^\\.\(\)«»\"\[\]<>\d\w\{\}\|۰۱۲۳۴۵۶۷۸۹\'])/g, '$1 $2')
// افزودن فاصله به بعد از سجاوندی
// افزودن فاصله به بعد از سجاوندی
.replace(new RegExp('([' + persianCharacters + ']+|\\]|\\)|»)([؟،؛\\!\\.])([' + persianCharacters +persianDigits + ']+|\\[|\\(|«)', 'g'), '$1$2 $3')
.replace(new RegExp('([' + persianCharacters + ']+|\\]|\\)|»)([؟،؛\\!\\.])([' + persianCharacters +persianDigits + ']+|\\[|\\(|«)', 'g'), '$1$2 $3')
// حذف فاصله بعد از گیومه، پرانتز، براکت باز
// حذف فاصله بعد از گیومه، پرانتز، براکت باز
.replace(/([\(«\[]) /g, '$1')
.replace(/([\(«\[]) /g, '$1')
// حذف فاصله قبل از گیومه، پرانتز، براکت بسته
// حذف فاصله قبل از گیومه، پرانتز
.replace(/ ([\)»\]])/g, '$1')
.replace(/ ([\)»])/g, '$1')
//.replace(/ (\])/g, '$1') // فاصله پیش از پراکت را حذف نکن زیرا در ویکی کاربرد مهمی دارد
// افزودن فاصله قبل از گیومه باز
// افزودن فاصله قبل از گیومه باز
.replace(/([^ \(\[\|\r\n>'])(«)/g, '$1 $2')
.replace(/([^ \(\[\|\r\n>'])(«)/g, '$1 $2')
خط ۴۵۹: خط ۴۵۷:
applyZwnj: applyZwnj,
applyZwnj: applyZwnj,
normalizeZwnj: normalizeZwnj,
normalizeZwnj: normalizeZwnj,
persianSortText: persianSortText,
persianSort: persianSort,
punctuation: punctuation,
punctuation: punctuation,
toPersianDigits: toPersianDigits,
toPersianDigits: toPersianDigits,