| import number from "./number.js"; |
|
|
| var reA = /[-+]?(?:\d+\.?\d*|\.?\d+)(?:[eE][-+]?\d+)?/g, |
| reB = new RegExp(reA.source, "g"); |
|
|
| function zero(b) { |
| return function() { |
| return b; |
| }; |
| } |
|
|
| function one(b) { |
| return function(t) { |
| return b(t) + ""; |
| }; |
| } |
|
|
| export default function(a, b) { |
| var bi = reA.lastIndex = reB.lastIndex = 0, |
| am, |
| bm, |
| bs, |
| i = -1, |
| s = [], |
| q = []; |
|
|
| |
| a = a + "", b = b + ""; |
|
|
| |
| while ((am = reA.exec(a)) |
| && (bm = reB.exec(b))) { |
| if ((bs = bm.index) > bi) { |
| bs = b.slice(bi, bs); |
| if (s[i]) s[i] += bs; |
| else s[++i] = bs; |
| } |
| if ((am = am[0]) === (bm = bm[0])) { |
| if (s[i]) s[i] += bm; |
| else s[++i] = bm; |
| } else { |
| s[++i] = null; |
| q.push({i: i, x: number(am, bm)}); |
| } |
| bi = reB.lastIndex; |
| } |
|
|
| |
| if (bi < b.length) { |
| bs = b.slice(bi); |
| if (s[i]) s[i] += bs; |
| else s[++i] = bs; |
| } |
|
|
| |
| |
| return s.length < 2 ? (q[0] |
| ? one(q[0].x) |
| : zero(b)) |
| : (b = q.length, function(t) { |
| for (var i = 0, o; i < b; ++i) s[(o = q[i]).i] = o.x(t); |
| return s.join(""); |
| }); |
| } |
|
|