Commit 803af62eca94e1a31162f52261b03aacd31cd8b2
Fixes export and accepts decimal numbers
Rômulo Alves committed on 8/30/2018, 4:37:25 PMParent: 184db972620d234dffd40e51def08b91c9e9d3e5
Files changed
index.js | changed |
package-lock.json | added |
index.js | ||
---|---|---|
@@ -1,9 +1,9 @@ | ||
1 | 1 … | |
2 | 2 … | const NAME_REGEX = /^([a-z0-9\-.\/ ]+)$/i // eslint-disable-line |
3 | 3 … | const MULTIPLIER_REGEX = /^(.*?)\s+x\s+(\d+)$/ |
4 | 4 … | |
5 | -export default class Plainbudget { | |
5 … | +module.exports = class Plainbudget { | |
6 | 6 … | |
7 | 7 … | static computeSheet (sheet) { |
8 | 8 … | const pb = new Plainbudget(sheet) |
9 | 9 … | |
@@ -47,9 +47,9 @@ | ||
47 | 47 … | this.text = text |
48 | 48 … | } |
49 | 49 … | |
50 | 50 … | parseValue (line) { |
51 | - let value = line.slice(1).match(/^\s+(\d+)/) | |
51 … | + let value = line.slice(1).match(/^\s+(\d+(.\d+)?)/) | |
52 | 52 … | |
53 | 53 … | if (value) { |
54 | 54 … | value = parseFloat(value[1]) |
55 | 55 … | |
@@ -91,13 +91,12 @@ | ||
91 | 91 … | this.groups = [] |
92 | 92 … | this.lines = this.text.split(/\n/) |
93 | 93 … | |
94 | 94 … | let group = null |
95 | - let op, line | |
96 | 95 … | |
97 | 96 … | for (let i = 0; i < this.lines.length; i++) { |
98 | - line = this.lines[i].trim() | |
99 | - op = line[0] | |
97 … | + const line = this.lines[i].trim() | |
98 … | + const op = line[0] | |
100 | 99 … | |
101 | 100 … | if ('=+'.includes(op) && group === null) { |
102 | 101 … | group = [this.parseLine(line)] |
103 | 102 … | } else if ('-~+x'.includes(op)) { |
@@ -121,15 +120,15 @@ | ||
121 | 120 … | } |
122 | 121 … | |
123 | 122 … | const padding = Math.max(this.padding, this.getPadding()) |
124 | 123 … | const updated = [] |
125 | - let group, op | |
126 | 124 … | |
127 | 125 … | for (let x = 0; x < this.groups.length; x++) { |
128 | - group = this.groups[x] | |
126 … | + const group = this.groups[x] | |
129 | 127 … | |
130 | 128 … | for (let y = 0; y < group.length; y++) { |
131 | - op = group[y] | |
129 … | + const op = group[y] | |
130 … | + | |
132 | 131 … | updated.push(`${op[0]} ${op[1].toString().padStart(padding)} ${op[2]}\n`) |
133 | 132 … | } |
134 | 133 … | |
135 | 134 … | updated.push('\n') |
@@ -148,9 +147,9 @@ | ||
148 | 147 … | this.named[label] = value |
149 | 148 … | } |
150 | 149 … | } |
151 | 150 … | |
152 | - getNamed (label, value) { | |
151 … | + getNamed (label) { | |
153 | 152 … | if (label.match(MULTIPLIER_REGEX)) { |
154 | 153 … | label = label.split(/\s+x\s+/)[0] |
155 | 154 … | } |
156 | 155 … | |
@@ -211,46 +210,42 @@ | ||
211 | 210 … | if (!groupIndices.length) { |
212 | 211 … | return |
213 | 212 … | } |
214 | 213 … | |
215 | - let group, value | |
216 | - let topOps, ops | |
217 | - let topOp, op | |
218 | - let multiplier | |
219 | - let named | |
214 … | + let value | |
220 | 215 … | |
221 | 216 … | for (let g = 0; g < groupIndices.length; g++) { |
222 | - group = this.groups[groupIndices[g]] | |
217 … | + const group = this.groups[groupIndices[g]] | |
223 | 218 … | |
224 | 219 … | if ('='.includes(group[0][0])) { |
225 | 220 … | if (group[0][2] === '') { |
226 | 221 … | group[0][2] = '\n' |
227 | 222 … | } |
228 | 223 … | |
229 | 224 … | value = 0 |
230 | - topOps = group.slice(1) | |
225 … | + const topOps = group.slice(1) | |
231 | 226 … | |
232 | 227 … | for (let x = 0; x < topOps.length; x++) { |
233 | - topOp = topOps[x] | |
228 … | + const topOp = topOps[x] | |
234 | 229 … | |
235 | 230 … | if (topOp[1] === '?' || topOp[0] === 'x') { |
236 | 231 … | continue |
237 | 232 … | } |
238 | 233 … | |
239 | - multiplier = this.parseMultiplier(topOp[2]) | |
234 … | + const multiplier = this.parseMultiplier(topOp[2]) | |
240 | 235 … | |
241 | 236 … | if (multiplier) { |
242 | - value += topOp[1] * parseInt(multiplier[1]) | |
237 … | + value += topOp[1] * parseFloat(multiplier[1]) | |
243 | 238 … | } else { |
244 | 239 … | value += topOp[1] |
245 | 240 … | } |
246 | 241 … | } |
247 | 242 … | } else if (group[0][0] === '+') { |
248 | 243 … | value = group[0][1] |
249 | - ops = group.slice(1) | |
244 … | + const ops = group.slice(1) | |
250 | 245 … | |
251 | 246 … | for (let y = 0; y < ops.length; y++) { |
252 | - op = ops[y] | |
247 … | + const op = ops[y] | |
253 | 248 … | |
254 | 249 … | if (op[1] === '?' || op[0] === 'x') { |
255 | 250 … | continue |
256 | 251 … | } |
@@ -275,16 +270,15 @@ | ||
275 | 270 … | getPadding (groups) { |
276 | 271 … | groups = groups || this.groups |
277 | 272 … | |
278 | 273 … | let p = 3 |
279 | - let nlen, group | |
280 | 274 … | |
281 | 275 … | for (let x = 0; x < groups.length; x++) { |
282 | - group = groups[x] | |
276 … | + const group = groups[x] | |
283 | 277 … | |
284 | 278 … | for (let y = 0; y < group.length; y++) { |
285 | 279 … | if (group[y][1] !== null) { |
286 | - nlen = group[y][1].toString().length | |
280 … | + const nlen = group[y][1].toString().length | |
287 | 281 … | |
288 | 282 … | if (nlen > (p + 1)) { |
289 | 283 … | p = nlen + 1 |
290 | 284 … | } |
Built with git-ssb-web