Files
documentation/node_modules/rtl-detect/lib/rtl-detect.js
2024-03-22 03:47:51 +05:30

172 lines
5.3 KiB
JavaScript

/**
* Copyright 2015, Yahoo! Inc.
* Copyrights licensed under the New BSD License. See the accompanying LICENSE file for terms.
*/
'use strict';
var self;
var RtlDetectLib = self = { // eslint-disable-line consistent-this
// Private vars - star
_regexEscape: /([\.\*\+\^\$\[\]\\\(\)\|\{\}\,\-\:\?])/g, // eslint-disable-line no-useless-escape
_regexParseLocale: /^([a-zA-Z]*)([_\-a-zA-Z]*)$/,
// Private vars - end
// Private functions - star
_escapeRegExpPattern: function (str) {
if (typeof str !== 'string') {
return str;
}
return str.replace(self._regexEscape, '\\$1');
},
_toLowerCase: function (str, reserveReturnValue) {
if (typeof str !== 'string') {
return reserveReturnValue && str;
}
return str.toLowerCase();
},
_toUpperCase: function (str, reserveReturnValue) {
if (typeof str !== 'string') {
return reserveReturnValue && str;
}
return str.toUpperCase();
},
_trim: function (str, delimiter, reserveReturnValue) {
var patterns = [];
var regexp;
var addPatterns = function (pattern) {
// Build trim RegExp pattern and push it to patterns array
patterns.push('^' + pattern + '+|' + pattern + '+$');
};
// fix reserveReturnValue value
if (typeof delimiter === 'boolean') {
reserveReturnValue = delimiter;
delimiter = null;
}
if (typeof str !== 'string') {
return reserveReturnValue && str;
}
// Trim based on delimiter array values
if (Array.isArray(delimiter)) {
// Loop through delimiter array
delimiter.map(function (item) {
// Escape delimiter to be valid RegExp Pattern
var pattern = self._escapeRegExpPattern(item);
// Push pattern to patterns array
addPatterns(pattern);
});
}
// Trim based on delimiter string value
if (typeof delimiter === 'string') {
// Escape delimiter to be valid RegExp Pattern
var patternDelimiter = self._escapeRegExpPattern(delimiter);
// push pattern to patterns array
addPatterns(patternDelimiter);
}
// If delimiter is not defined, Trim white spaces
if (!delimiter) {
// Push white space pattern to patterns array
addPatterns('\\s');
}
// Build RegExp pattern
var pattern = '(' + patterns.join('|') + ')';
// Build RegExp object
regexp = new RegExp(pattern, 'g');
// trim string for all patterns
while (str.match(regexp)) {
str = str.replace(regexp, '');
}
// Return trim string
return str;
},
_parseLocale : function (strLocale) {
var matches = self._regexParseLocale.exec(strLocale); // exec regex
var parsedLocale;
var lang;
var countryCode;
if (!strLocale || !matches) {
return;
}
// fix countryCode string by trimming '-' and '_'
matches[2] = self._trim(matches[2], ['-', '_']);
lang = self._toLowerCase(matches[1]);
countryCode = self._toUpperCase(matches[2]) || countryCode;
// object with lang, countryCode properties
parsedLocale = {
lang: lang,
countryCode: countryCode
};
// return parsed locale object
return parsedLocale;
},
// Private functions - End
// Public functions - star
isRtlLang: function (strLocale) {
var objLocale = self._parseLocale(strLocale);
if (!objLocale) {
return;
}
// return true if the intel string lang exists in the BID RTL LANGS array else return false
return (self._BIDI_RTL_LANGS.indexOf(objLocale.lang) >= 0);
},
getLangDir: function (strLocale) {
// return 'rtl' if the intel string lang exists in the BID RTL LANGS array else return 'ltr'
return self.isRtlLang(strLocale) ? 'rtl' : 'ltr';
}
// Public functions - End
};
// Const BIDI_RTL_LANGS Array
// BIDI_RTL_LANGS ref: http://en.wikipedia.org/wiki/Right-to-left
// Table of scripts in Unicode: https://en.wikipedia.org/wiki/Script_(Unicode)
Object.defineProperty(self, '_BIDI_RTL_LANGS', {
value: [
'ae', /* Avestan */
'ar', /* 'العربية', Arabic */
'arc', /* Aramaic */
'bcc', /* 'بلوچی مکرانی', Southern Balochi */
'bqi', /* 'بختياري', Bakthiari */
'ckb', /* 'Soranî / کوردی', Sorani */
'dv', /* Dhivehi */
'fa', /* 'فارسی', Persian */
'glk', /* 'گیلکی', Gilaki */
'he', /* 'עברית', Hebrew */
'ku', /* 'Kurdî / كوردی', Kurdish */
'mzn', /* 'مازِرونی', Mazanderani */
'nqo', /* N'Ko */
'pnb', /* 'پنجابی', Western Punjabi */
'prs', /* 'دری', Darī */
'ps', /* 'پښتو', Pashto, */
'sd', /* 'سنڌي', Sindhi */
'ug', /* 'Uyghurche / ئۇيغۇرچە', Uyghur */
'ur', /* 'اردو', Urdu */
'yi' /* 'ייִדיש', Yiddish */
],
writable: false,
enumerable: true,
configurable: false
});
module.exports = RtlDetectLib;