۸٬۱۶۰
ویرایش
Nazarzadeh (بحث | مشارکتها) بدون خلاصۀ ویرایش |
Nazarzadeh (بحث | مشارکتها) بدون خلاصۀ ویرایش |
||
(۱۱ نسخهٔ میانی ویرایش شده توسط ۲ کاربر نشان داده نشد) | |||
خط ۳۹: | خط ۳۹: | ||
.replace(/([\w])[\u200B-\u200D\uFEFF]/g, '$1') | .replace(/([\w])[\u200B-\u200D\uFEFF]/g, '$1') | ||
// Clean ZWNJs before and after Persian characters | // Clean ZWNJs before and after Persian characters | ||
.replace(new RegExp('\[\\u200b\-\\u200d\\uFEFF\]([' + vowels + arabicIndicDigits + persianDigits + hamza+'])','g'), '$1') | .replace(new RegExp('\[\\u200b\-\\u200d\\uFEFF\]([' + vowels + arabicIndicDigits + persianDigits + hamza + '])','g'), '$1') | ||
.replace(new RegExp('(['+arabicIndicDigits+'])\[\\u200b\-\\u200d\\uFEFF\]','g'), '$1') | .replace(new RegExp('(['+arabicIndicDigits+'])\[\\u200b\-\\u200d\\uFEFF\]','g'), '$1') | ||
// Clean ZWNJs after and before punctuation | // Clean ZWNJs after and before punctuation | ||
.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 | // 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'); | ||
خط ۱۵۲: | خط ۱۵۲: | ||
// جایگزینی ۀ غیراستاندار+حرف بعدی بدون فاصله به ه+همزه+فاصله | // جایگزینی ۀ غیراستاندار+حرف بعدی بدون فاصله به ه+همزه+فاصله | ||
.replace(/[ۂۀ](?![\s\n])/g, 'هٔ ') | .replace(/[ۂۀ](?![\s\n])/g, 'هٔ ') | ||
// Replace ه followed by ARABIC LETTER HIGH HAMZA with the correct one, ARABIC HAMZA ABOVE | |||
.replace(/هٴ([\s\n])/g, 'هٔ$1') | |||
// Replace ه followed by (space|ZWNJ|lrm) follow by ی with هٔ | // Replace ه followed by (space|ZWNJ|lrm) follow by ی with هٔ | ||
.replace(/ه[\u200c\u200e\s]+ی([\s\n])/g, 'هٔ$1') | .replace(/ه[\u200c\u200e\s]+ی([\s\n])/g, 'هٔ$1') | ||
خط ۱۷۲: | خط ۱۷۴: | ||
//.replace(/وء/g, 'ؤ')//bug on سوء | //.replace(/وء/g, 'ؤ')//bug on سوء | ||
.replace(/سؤ ?استفاده/g, 'سوءاستفاده')//bug on سوءاستفاده و سوء | .replace(/سؤ ?استفاده/g, 'سوءاستفاده')//bug on سوءاستفاده و سوء | ||
.replace(/ و یا /g, ' یا ')// replace «و یا» with «یا» | .replace(/ و یا /g, ' یا ');// replace «و یا» with «یا» | ||
//افزودن همزه | //افزودن همزه | ||
//.replace(/درباره (ام|ات|اش|مان|تان|شان|ای)(\s|$)/g, 'درباره$1$2')//i برای جلوگیری از باگ احتمالی برای افزودن همزه به درباره | //.replace(/درباره (ام|ات|اش|مان|تان|شان|ای)(\s|$)/g, 'درباره$1$2')//i برای جلوگیری از باگ احتمالی برای افزودن همزه به درباره | ||
خط ۱۸۲: | خط ۱۸۴: | ||
* 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 | 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 | function persianSort(array) { | ||
return | return array.sort(function (x, y) { | ||
var keyX = | var keyX = prepareForArabicSort(x), | ||
keyY = | keyY = prepareForArabicSort(y); | ||
return keyX < keyY ? -1 : keyX > keyY ? 1 : 0; | |||
}); | |||
} | |||
} | } | ||
خط ۳۱۶: | خط ۳۱۵: | ||
'$1$2\u200c$3$4$5' | '$1$2\u200c$3$4$5' | ||
) | ) | ||
// ماضی نقلی | // ماضی نقلی | ||
.replace( | .replace( | ||
new RegExp('(^|[^' + persianCharacters + '])(ن|)' + persianPastVerbs + | new RegExp('(^|[^' + persianCharacters + '])(ن|)' + persianPastVerbs + | ||
خط ۳۷۰: | خط ۳۶۹: | ||
.replace(/ویکیپدیا/g, 'ویکیپدیا') | .replace(/ویکیپدیا/g, 'ویکیپدیا') | ||
.replace(new RegExp('می\u200cگوی($|[^' + persianCharacters + '\u200c])', 'g'), 'میگوی$1') // for میگوی دریایی | .replace(new RegExp('می\u200cگوی($|[^' + persianCharacters + '\u200c])', 'g'), 'میگوی$1') // for میگوی دریایی | ||
.replace(new RegExp('می\u200cدوی($|[^' + persianCharacters + '\u200c])', 'g'), 'میدوی$1')// for [[میدوی (ابهامزدایی)]] | .replace(new RegExp('می\u200cدوی($|[^' + persianCharacters + '\u200c])', 'g'), 'میدوی$1');// for [[میدوی (ابهامزدایی)]] | ||
} | } | ||
خط ۳۹۷: | خط ۳۸۹: | ||
.replace(/(. ) +(?=[^= ])/g, '$1') | .replace(/(. ) +(?=[^= ])/g, '$1') | ||
//فاصله بعد از سجاوندی به جز ! به دلیل (<!-- و !! در بالای جدولها) | //فاصله بعد از سجاوندی به جز ! به دلیل (<!-- و !! در بالای جدولها) | ||
.replace(/([،\.\؛\؟»])([^\ | .replace(/([،\.\؛\؟»])([^\s،\.\(\)«»\"\[\]<>\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(/ ([\)»\ | .replace(/ ([\)»])/g, '$1') | ||
//.replace(/ (\])/g, '$1') // فاصله پیش از پراکت را حذف نکن زیرا در ویکی کاربرد مهمی دارد | |||
// افزودن فاصله قبل از گیومه باز | // افزودن فاصله قبل از گیومه باز | ||
.replace(/([^ \(\[\|\r\n>'])(«)/g, '$1 $2') | .replace(/([^ \(\[\|\r\n>'])(«)/g, '$1 $2') | ||
خط ۴۳۷: | خط ۴۳۰: | ||
.replace(new RegExp('([' + persianCharacters + '])(\\s|)[\\.،؛](\\s|)(\\))', 'g'), '$1$2$3$4') | .replace(new RegExp('([' + persianCharacters + '])(\\s|)[\\.،؛](\\s|)(\\))', 'g'), '$1$2$3$4') | ||
// در صورت وابستگی معنی جملات بهتر است نقطهویرگول فارسی قرار گیرد | // در صورت وابستگی معنی جملات بهتر است نقطهویرگول فارسی قرار گیرد | ||
.replace(new RegExp('([' + persianCharacters + '])(\\s|)(\\.)(\\s|)( | .replace(new RegExp('([' + persianCharacters + '])(\\s|)(\\.)(\\s|)(مثلاً|فرضاً|زیرا|یعنی|بنابراین|لذا)', 'g'), '$1؛ $5') | ||
/// Question & exclamation mark | /// Question & exclamation mark | ||
// علامت تعجب تکراری به دلیل وجود !! در عنوان جدولهای مدیاویکی نباید اصلاح شود. | // علامت تعجب تکراری به دلیل وجود !! در عنوان جدولهای مدیاویکی نباید اصلاح شود. | ||
خط ۴۵۲: | خط ۴۴۵: | ||
.replace(/(\(|)ه\. (ق|خ|ش)([\n\/ ]|\))/g, 'ه.$2$3')//iاصلاح تاریخ هجری | .replace(/(\(|)ه\. (ق|خ|ش)([\n\/ ]|\))/g, 'ه.$2$3')//iاصلاح تاریخ هجری | ||
// حذف فاصلهٔ میان دو عبارت مختصر که دارای نقطهٔ اختصار باشند | // حذف فاصلهٔ میان دو عبارت مختصر که دارای نقطهٔ اختصار باشند | ||
.replace(new RegExp('(\^|\\||\\(|«|\\}|"|\\s|\\*|\\#)(([' + persianCharacters + ']\{1,2\})\\. \?)\{2,6\}', 'g'), function (m) { return m.replace(/\. (.)/g, '.$1'); }); | .replace(new RegExp('(\^|\\||\\(|«|\\}|"|\\s|\\*|\\#)(([' + persianCharacters + ']\{1,2\})\\. \?)\{2,6\}', 'g'), function (m) { return m.replace(/\. (.)/g, '.$1'); }) | ||
//ویکی پاسخ | |||
.replace(/به\[\[/g, 'به [[') | |||
.replace(/ \(ع\)/g, '(ع)') | |||
.replace(/ \(ص\)/g, '(ص)') | |||
.replace(/ \(س\)/g, '(س)') | |||
.replace(/ \(عج\)/g, '(عج)'); | |||
} | } | ||
return { | return { | ||
خط ۴۵۸: | خط ۴۵۷: | ||
applyZwnj: applyZwnj, | applyZwnj: applyZwnj, | ||
normalizeZwnj: normalizeZwnj, | normalizeZwnj: normalizeZwnj, | ||
persianSort: persianSort, | |||
punctuation: punctuation, | punctuation: punctuation, | ||
toPersianDigits: toPersianDigits, | toPersianDigits: toPersianDigits, |