Skip to content

Commit

Permalink
feat: add support for Hebrew
Browse files Browse the repository at this point in the history
  • Loading branch information
Trott committed Oct 11, 2020
1 parent c9cb5da commit 04851c4
Show file tree
Hide file tree
Showing 2 changed files with 124 additions and 5 deletions.
70 changes: 65 additions & 5 deletions slug.js
Original file line number Diff line number Diff line change
Expand Up @@ -142,17 +142,25 @@
if (lengths.indexOf(len) === -1) { lengths.push(len) }
}

// We want to match the longest string if there are multiple matches, so
// sort lengths in descending order.
lengths = lengths.sort(function (a, b) { return b - a })

var result = ''
for (let char, i = 0, l = string.length; i < l; i++) {
char = string[i]
if (!lengths.some(function (len) {
let matchedMultichar = false
for (let j = 0; j < lengths.length; j++) {
const len = lengths[j]
var str = string.substr(i, len)
if (opts.multicharmap[str]) {
i += len - 1
char = opts.multicharmap[str]
return true
} else return false
})) {
matchedMultichar = true
break
}
}
if (!matchedMultichar) {
if (localeMap[char]) {
char = localeMap[char]
} else if (opts.charmap[char]) {
Expand Down Expand Up @@ -190,7 +198,31 @@
ड़: 'ugDha',
ढ़: 'ugDhha',
य़: 'Yi',
ज़: 'Za'
ज़: 'Za',
// hebrew
// Refs: http://www.eki.ee/wgrs/rom1_he.pdf
// Refs: https://en.wikipedia.org/wiki/Niqqud
בִי: 'i',
בֵ: 'e',
בֵי: 'e',
בֶ: 'e',
בַ: 'a',
בָ: 'a',
בֹ: 'o',
וֹ: 'o',
בֻ: 'u',
וּ: 'u',
בּ: 'b',
כּ: 'k',
ךּ: 'k',
פּ: 'p',
שׁ: 'sh',
שׂ: 's',
בְ: 'e',
חֱ: 'e',
חֲ: 'a',
חֳ: 'o',
בִ: 'i'
}

// https://github.com/django/django/blob/master/django/contrib/admin/static/admin/js/urlify.js
Expand Down Expand Up @@ -768,6 +800,34 @@
: 'kh',
: 'j',
: 'h',
// hebrew
ב: 'v',
גּ: 'g',
ג: 'g',
ד: 'd',
דּ: 'd',
ה: 'h',
ו: 'v',
ז: 'z',
ח: 'h',
ט: 't',
י: 'y',
כ: 'kh',
ך: 'kh',
ל: 'l',
מ: 'm',
ם: 'm',
נ: 'n',
ן: 'n',
ס: 's',
פ: 'f',
ף: 'f',
ץ: 'ts',
צ: 'ts',
ק: 'k',
ר: 'r',
תּ: 't',
ת: 't',
// currency
'€': 'euro',
'₢': 'cruzeiro',
Expand Down
59 changes: 59 additions & 0 deletions test/slug.test.js
Original file line number Diff line number Diff line change
Expand Up @@ -1074,4 +1074,63 @@ describe('slug', function () {
slug.reset()
checkAll(charmap, multicharmap, assert.deepStrictEqual)
})

it('should replace hebrew', function () {
const charMap = {
א: '',
בּ: 'b',
ב: 'v',
גּ: 'g',
ג: 'g',
ד: 'd',
דּ: 'd',
ה: 'h',
ו: 'v',
ז: 'z',
ח: 'h',
ט: 't',
י: 'y',
כּ: 'k',
ךּ: 'k',
כ: 'kh',
ך: 'kh',
ל: 'l',
מ: 'm',
ם: 'm',
נ: 'n',
ן: 'n',
ס: 's',
ע: '',
פּ: 'p',
פ: 'f',
ף: 'f',
ץ: 'ts',
צ: 'ts',
ק: 'k',
ר: 'r',
שׁ: 'sh',
שׂ: 's',
תּ: 't',
ת: 't',
בְ: 'e',
חֱ: 'e',
חֲ: 'a',
חֳ: 'o',
בִ: 'i',
בִי: 'i',
בֵ: 'e',
בֵי: 'e',
בֶ: 'e',
בַ: 'a',
בָ: 'a',
בֹ: 'o',
וֹ: 'o',
בֻ: 'u',
וּ: 'u'
}
for (let char in charMap) { // eslint-disable-line prefer-const
const replacement = charMap[char]
assert.strictEqual(slug('foo' + char + ' bar baz'), 'foo' + replacement.toLowerCase() + '-bar-baz', 'replacing \'' + char + '\'')
}
})
})

0 comments on commit 04851c4

Please sign in to comment.