123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354 |
- import removeUnicode from './remove-unicode';
- import sanitize from './sanitize';
- /**
- * Determines if a given text is human friendly and interpretable
- *
- * @method isHumanInterpretable
- * @memberof axe.commons.text
- * @instance
- * @param {String} str text to be validated
- * @returns {Number} Between 0 and 1, (0 -> not interpretable, 1 -> interpretable)
- */
- function isHumanInterpretable(str) {
- /**
- * Steps:
- * 1) Check for single character edge cases
- * a) handle if character is alphanumeric & within the given icon mapping
- * eg: x (close), i (info)
- *
- * 3) handle unicode from astral (non bilingual multi plane) unicode, emoji & punctuations
- * eg: Windings font
- * eg: '💪'
- * eg: I saw a shooting 💫
- * eg: ? (help), > (next arrow), < (back arrow), need help ?
- */
- if (!str.length) {
- return 0;
- }
- // Step 1
- const alphaNumericIconMap = [
- 'x', // close
- 'i' // info
- ];
- // Step 1a
- if (alphaNumericIconMap.includes(str)) {
- return 0;
- }
- // Step 2
- const noUnicodeStr = removeUnicode(str, {
- emoji: true,
- nonBmp: true,
- punctuations: true
- });
- if (!sanitize(noUnicodeStr)) {
- return 0;
- }
- return 1;
- }
- export default isHumanInterpretable;
|