Skip to content

Commit 9e8f122

Browse files
committed
custom map
1 parent e10f78f commit 9e8f122

File tree

4 files changed

+85
-14
lines changed

4 files changed

+85
-14
lines changed

README.md

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,15 @@ bc.betaCodeToGreek('mh=nin a)/eide qea\\ *phlhi+a/dew *)axilh=os');
3939

4040
```
4141

42+
### With additional mappings
43+
44+
```javascript
45+
import { betaCodeToGreek } from 'beta-code-js';
46+
47+
betaCodeToGreek('f2a/nac', { f2: 'ϝ' })
48+
// => 'ϝάναξ'
49+
```
50+
4251
## Usage in Browser
4352

4453
```html

bundle/beta-code.js

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -42,19 +42,40 @@ function normalize(string) {
4242
return string;
4343
}
4444

45-
const maxBetaCodeCharacterLength = longestKeyLength(betaCodeToUnicode);
45+
function mergeObjects(obj1, obj2) {
46+
const keys1 = Object.keys(obj1);
47+
const keys2 = Object.keys(obj2);
48+
const retObj = {};
49+
let key;
50+
let ii;
51+
52+
for (ii = 0; ii < keys1.length; ii += 1) {
53+
key = keys1[ii];
54+
55+
retObj[key] = obj1[key];
56+
}
57+
58+
for (ii = 0; ii < keys2.length; ii += 1) {
59+
key = keys2[ii];
60+
61+
retObj[key] = obj2[key];
62+
}
63+
64+
return retObj;
65+
}
4666

47-
function greekToBetaCode(greek) {
67+
function greekToBetaCode(greek, customMap) {
4868
const greekCharacters = normalize(greek).split('');
4969
const betaCodeCharacters = [];
70+
const map = mergeObjects(unicodeToBetaCode, customMap || {});
5071
let currentCharacter;
5172
let ii;
5273

5374
for (ii = 0; ii < greekCharacters.length; ii += 1) {
5475
currentCharacter = greekCharacters[ii];
5576

56-
if (Object.prototype.hasOwnProperty.call(unicodeToBetaCode, currentCharacter)) {
57-
betaCodeCharacters.push(unicodeToBetaCode[currentCharacter]);
77+
if (Object.prototype.hasOwnProperty.call(map, currentCharacter)) {
78+
betaCodeCharacters.push(map[currentCharacter]);
5879
} else {
5980
betaCodeCharacters.push(currentCharacter);
6081
}
@@ -63,9 +84,11 @@ function greekToBetaCode(greek) {
6384
return betaCodeCharacters.join('');
6485
}
6586

66-
function betaCodeToGreek(betaCode) {
87+
function betaCodeToGreek(betaCode, customMap) {
6788
const betaCodeCharacters = normalize(betaCode).split('');
6889
const greekCharacters = [];
90+
const map = mergeObjects(betaCodeToUnicode, customMap || {});
91+
const maxBetaCodeCharacterLength = longestKeyLength(map);
6992
let start = 0;
7093
let end;
7194
let slice;
@@ -84,8 +107,8 @@ function betaCodeToGreek(betaCode) {
84107
for (end = newStart; end <= maxLength; end += 1) {
85108
slice = betaCodeCharacters.slice(start, end).join('');
86109

87-
if (Object.prototype.hasOwnProperty.call(betaCodeToUnicode, slice)) {
88-
currentCharacter = betaCodeToUnicode[slice];
110+
if (Object.prototype.hasOwnProperty.call(map, slice)) {
111+
currentCharacter = map[slice];
89112
newStart = end;
90113
}
91114
}

index.js

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -41,19 +41,40 @@ function normalize(string) {
4141
return string;
4242
}
4343

44-
const maxBetaCodeCharacterLength = longestKeyLength(betaCodeToUnicode);
44+
function mergeObjects(obj1, obj2) {
45+
const keys1 = Object.keys(obj1);
46+
const keys2 = Object.keys(obj2);
47+
const retObj = {};
48+
let key;
49+
let ii;
50+
51+
for (ii = 0; ii < keys1.length; ii += 1) {
52+
key = keys1[ii];
53+
54+
retObj[key] = obj1[key];
55+
}
56+
57+
for (ii = 0; ii < keys2.length; ii += 1) {
58+
key = keys2[ii];
59+
60+
retObj[key] = obj2[key];
61+
}
62+
63+
return retObj;
64+
}
4565

46-
function greekToBetaCode(greek) {
66+
function greekToBetaCode(greek, customMap) {
4767
const greekCharacters = normalize(greek).split('');
4868
const betaCodeCharacters = [];
69+
const map = mergeObjects(unicodeToBetaCode, customMap || {});
4970
let currentCharacter;
5071
let ii;
5172

5273
for (ii = 0; ii < greekCharacters.length; ii += 1) {
5374
currentCharacter = greekCharacters[ii];
5475

55-
if (Object.prototype.hasOwnProperty.call(unicodeToBetaCode, currentCharacter)) {
56-
betaCodeCharacters.push(unicodeToBetaCode[currentCharacter]);
76+
if (Object.prototype.hasOwnProperty.call(map, currentCharacter)) {
77+
betaCodeCharacters.push(map[currentCharacter]);
5778
} else {
5879
betaCodeCharacters.push(currentCharacter);
5980
}
@@ -62,9 +83,11 @@ function greekToBetaCode(greek) {
6283
return betaCodeCharacters.join('');
6384
}
6485

65-
function betaCodeToGreek(betaCode) {
86+
function betaCodeToGreek(betaCode, customMap) {
6687
const betaCodeCharacters = normalize(betaCode).split('');
6788
const greekCharacters = [];
89+
const map = mergeObjects(betaCodeToUnicode, customMap || {});
90+
const maxBetaCodeCharacterLength = longestKeyLength(map);
6891
let start = 0;
6992
let end;
7093
let slice;
@@ -83,8 +106,8 @@ function betaCodeToGreek(betaCode) {
83106
for (end = newStart; end <= maxLength; end += 1) {
84107
slice = betaCodeCharacters.slice(start, end).join('');
85108

86-
if (Object.prototype.hasOwnProperty.call(betaCodeToUnicode, slice)) {
87-
currentCharacter = betaCodeToUnicode[slice];
109+
if (Object.prototype.hasOwnProperty.call(map, slice)) {
110+
currentCharacter = map[slice];
88111
newStart = end;
89112
}
90113
}

test/test.js

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,14 @@ describe('#greekToBetaCode', () => {
3636

3737
expect(bc.greekToBetaCode(greek)).to.equal(betaCode);
3838
});
39+
40+
it('should be able to use a custom map', () => {
41+
const greek = 'μοῡς';
42+
const betaCode = 'mou_s';
43+
const customMap = { : 'a_', : 'i_', : 'u_' };
44+
45+
expect(bc.greekToBetaCode(greek, customMap)).to.equal(betaCode);
46+
});
3947
});
4048

4149
describe('#betaCodeToGreek', () => {
@@ -77,4 +85,12 @@ describe('#betaCodeToGreek', () => {
7785
expect(bc.betaCodeToGreek(betaCode1)).to.equal(greek);
7886
expect(bc.betaCodeToGreek(betaCode2)).to.equal(greek);
7987
});
88+
89+
it('should be able to use a custom map', () => {
90+
const greek = 'μοῡς';
91+
const betaCode = 'mou_s';
92+
const customMap = { a_: 'ᾱ', i_: 'ῑ', u_: 'ῡ' };
93+
94+
expect(bc.betaCodeToGreek(betaCode, customMap)).to.equal(greek);
95+
});
8096
});

0 commit comments

Comments
 (0)