-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathcommonblockfuncs.js
114 lines (84 loc) · 2.56 KB
/
commonblockfuncs.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
/* jshint strict:false */
/* global Buffer, module */
var util = require('./util.js');
var impExpMap = {
'[[': 's',
']]': 'S',
'","': 'd',
'"]': 'f',
'["': 'F'
};
var makeCleanBlock = function(blocks) {
var pat = [];
for (var b = 0; b < blocks; b++) {
pat[b] = '|';
}
return pat;
};
var convertNumSimple = function(num, patlen, mappings) {
mappings = (!mappings || mappings.length === 0) ? ['-', 'r', 'R', 'l', 'L'] : mappings;
patlen = patlen || 8;
var ret = exportBlocks([genericMapper(num, patlen, mappings)]);
return ret;
};
var exportBlocks = function(blocks) {
var enc = JSON.stringify(blocks);
var regex;
for (var m in impExpMap) {
regex = new RegExp(util.regexEscape(m), "g");
enc = enc.replace(regex, impExpMap[m]);
}
enc = new Buffer.from(enc);
enc = enc.toString('base64');
return enc;
};
var importBlocks = function(patid) {
var pat = new Buffer.from(patid, 'base64');
pat = pat.toString('UTF-8');
var regex;
for (var m in impExpMap) {
regex = new RegExp(util.regexEscape(impExpMap[m]), "g");
pat = pat.replace(regex, m);
}
return JSON.parse(pat);
};
var convertNumToTuple = function(num, patlen, mappings) {
mappings = (!mappings || mappings.length === 0) ? ['1', '2', '3', '4', '5'] : mappings;
mappings.sort();
if (mappings.length < 2) {
mappings.unshift(mappings[0]);
}
patlen = patlen || 8;
return genericMapper(num, patlen, mappings);
};
var getMappedTuple = function(tuple, num, mappings) {
mappings = (!mappings || mappings.length === 0) ? ['-', 'r', 'R', 'l', 'L'] : mappings;
var patlen = tuple;
return genericMapper(num, patlen, mappings);
};
var genericMapper = function(num, patlen, mappings) {
var pattern = [];
var sipattern = [];
pattern[0] = makeCleanBlock(patlen);
sipattern[0] = makeCleanBlock(patlen);
var barlen = patlen;
var notetypes = mappings.length;
var randPat = parseInt(num);
var cpat = (randPat).toString(notetypes);
cpat = util.lpad(cpat, barlen);
pattern[0] = cpat.split("");
for (var px in pattern[0]) {
pattern[0][px] = mappings[parseInt(pattern[0][px], notetypes)];
}
sipattern[0] = pattern[0];
return sipattern[0];
};
module.exports = {
convertNumSimple: convertNumSimple,
exportBlocks: exportBlocks,
importBlocks: importBlocks,
convertNumToTuple: convertNumToTuple,
getMappedTuple: getMappedTuple,
genericMapper: genericMapper,
makeCleanBlock: makeCleanBlock
};