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