From 7078bef77a5ca062fd2039e79446154682deda7a Mon Sep 17 00:00:00 2001 From: Javier Cejudo Date: Mon, 29 Feb 2016 09:12:23 +1100 Subject: [PATCH] wip --- src/R.js | 2 ++ src/U.js | 22 ++++++++++++++++++++++ src/index.js | 48 ++++++++++++++++++------------------------------ src/translate.js | 15 +++++++++++++++ 4 files changed, 57 insertions(+), 30 deletions(-) create mode 100644 src/U.js create mode 100644 src/translate.js diff --git a/src/R.js b/src/R.js index 76cbd0a..ccfecab 100644 --- a/src/R.js +++ b/src/R.js @@ -4,6 +4,7 @@ module.exports = Object.freeze({ __: require('ramda/src/__'), + adjust: require('ramda/src/adjust'), curryN: require('ramda/src/curryN'), identical: require('ramda/src/identical'), identity: require('ramda/src/identity'), @@ -15,5 +16,6 @@ module.exports = Object.freeze({ nth: require('ramda/src/nth'), pipe: require('ramda/src/pipe'), reverse: require('ramda/src/reverse'), + split: require('ramda/src/split'), unfold: require('ramda/src/unfold') }); diff --git a/src/U.js b/src/U.js new file mode 100644 index 0000000..24fedb1 --- /dev/null +++ b/src/U.js @@ -0,0 +1,22 @@ +/*jshint node:true */ + +'use strict'; + +var R = require('./R'); + +module.exports = Object.freeze({ + indexOfSymbol: R.memoize(function(symbols) { + return R.memoize(R.indexOf(R.__, symbols)); + }), + + joinWithoutSep: R.join(''), + joinWithDot: R.join('.'), + + nthSymbol: R.memoize(function(symbols) { + return R.memoize(R.nth(R.__, symbols)); + }), + + splitByDot: R.split('.'), + + toString: R.invoker(0, 'toString') +}); diff --git a/src/index.js b/src/index.js index 1e0de84..5e1d4cb 100644 --- a/src/index.js +++ b/src/index.js @@ -6,48 +6,36 @@ var posNotation = require('positional-notation'); var toBigFactory = require('to-decimal-arbitrary-precision'); var R = require('./R'); +var U = require('./U'); +var translate = require('./translate'); +// var fracUnfolder = require('./fracUnfolder'); -var defaultB = toBigFactory(require('./Big')); +var defaultBig = toBigFactory(require('./Big')); var defaultSymbols = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz'; -var joinWithoutSep = R.join(''); -var toString = R.invoker(0, 'toString'); -var indexOfSymbol = R.memoize(function(symbols) { - return R.memoize(R.indexOf(R.__, symbols)); -}); - -var nthSymbol = R.memoize(function(symbols) { - return R.memoize(R.nth(R.__, symbols)); -}); - -var preprocess = R.memoize(function(symbols) { - return R.identical(symbols, defaultSymbols) ? - R.identity : - R.pipe( - toString, - R.map(indexOfSymbol(symbols)), - joinWithoutSep - ); -}); - -var fromDecimalRaw = R.curryN(4, function(b, symbols, base, n) { +var fromDecimalRaw = R.curryN(4, function(big, symbols, base, n) { return R.pipe( - preprocess(symbols), - R.unfold(posNotation.unfolder(b, base)), - R.map(nthSymbol(symbols)), - R.reverse, - joinWithoutSep + U.toString, + translate(defaultSymbols, symbols), + U.splitByDot, + R.adjust(R.unfold(posNotation.unfolder(big, base)), 0), + // R.adjust(fracUnfolder(posNotation.unfolder(big, base)), 1), + R.adjust(R.reverse, 0), + R.map(R.map(U.nthSymbol(symbols))), + R.adjust(U.joinWithoutSep, 0), + U.joinWithDot )(n); }); -var fromDecimal = fromDecimalRaw(defaultB, defaultSymbols); +var fromDecimal = fromDecimalRaw(defaultBig, defaultSymbols); fromDecimal.big = fromDecimalRaw(R.__, defaultSymbols); -fromDecimal.symbols = fromDecimalRaw(defaultB); +fromDecimal.symbols = fromDecimalRaw(defaultBig); fromDecimal.raw = fromDecimalRaw; fromDecimal.defaultSymbols = defaultSymbols; -fromDecimal.defaultB = defaultB; +fromDecimal.defaultBig = defaultBig; +fromDecimal.__ = R.__; module.exports = fromDecimal; diff --git a/src/translate.js b/src/translate.js new file mode 100644 index 0000000..7d2216c --- /dev/null +++ b/src/translate.js @@ -0,0 +1,15 @@ +/*jshint node:true */ + +'use strict'; + +var R = require('./R'); +var U = require('./U'); + +module.exports = R.memoize(function(defaultSymbols, symbols) { + return R.identical(symbols, defaultSymbols) ? + R.identity : + R.pipe( + R.map(U.indexOfSymbol(symbols)), + U.joinWithoutSep + ); +});