From 5eab9d7672422b889b67ff425c2c8be0944bd248 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Linus=20Unneb=C3=A4ck?= Date: Tue, 28 Jun 2016 13:44:24 +0200 Subject: [PATCH] Add support for browsers --- browser.js | 8 +++++ index.js | 22 +++++++++++++ package.json | 3 +- sie-reader.js => parser.js | 64 +++++++++++++------------------------- test/test.js | 2 +- 5 files changed, 55 insertions(+), 44 deletions(-) create mode 100644 browser.js create mode 100644 index.js rename sie-reader.js => parser.js (87%) diff --git a/browser.js b/browser.js new file mode 100644 index 0000000..32d701b --- /dev/null +++ b/browser.js @@ -0,0 +1,8 @@ +var cp437 = require('./cp437.js'); +var parser = require('./parser.js'); +var sie = { + readBuffer: function(original_data) { + return parser.parse(cp437.convert(original_data).toString()); + } +}; +module.exports = sie; diff --git a/index.js b/index.js new file mode 100644 index 0000000..e26d989 --- /dev/null +++ b/index.js @@ -0,0 +1,22 @@ +var fs = require('fs'); +var cp437 = require('./cp437.js'); +var parser = require('./parser.js'); +var sie = { + readFile: function(fileName, callback) { + fs.readFile(fileName, function(err, original_data){ + if (!err) { + try { + callback(null, sie.readBuffer(original_data)); + } catch(ex) { + callback(ex); + } + } else { + callback(err); + } + }); + }, + readBuffer: function(original_data) { + return parser.parse(cp437.convert(original_data).toString()); + } +}; +module.exports = sie; diff --git a/package.json b/package.json index 313d7f5..2840b9c 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,8 @@ "name": "sie-reader", "version": "0.1.0", "description": "SIE file reader", - "main": "sie-reader.js", + "main": "index.js", + "browser": "browser.js", "repository": { "type": "git", "url": "https://github.com/holar2b/node-sie-reader.git" diff --git a/sie-reader.js b/parser.js similarity index 87% rename from sie-reader.js rename to parser.js index 3941f65..f98f6fd 100644 --- a/sie-reader.js +++ b/parser.js @@ -1,24 +1,4 @@ -var fs = require('fs'); -var cp437 = require('./cp437.js'); -var sie = { - readFile: function(fileName, callback) { - fs.readFile(fileName, function(err, original_data){ - if (!err) { - try { - callback(null, sie.readBuffer(original_data)); - } catch(ex) { - callback(ex); - } - } else { - callback(err); - } - }); - }, - readBuffer: function(original_data) { - return parser.parse(cp437.convert(original_data).toString()); - } -} -var parser = { +var parser = { parse: function(sieFileData) { var root = new SieFile(); var lines = sieFileData.split(/\r?\n/); @@ -37,7 +17,7 @@ var parser = { } return root; }, - _parseLine: function(line) { + _parseLine: function(line) { var tokens = parser._tokenizer(line); var etikett = tokens[0].value.replace(/^#/,'').toLowerCase(); var row = { @@ -59,7 +39,7 @@ var parser = { quoted = consume = (line[i] != '"'); if (consume) { tokens[tokens.length-1].value += line[i]; - } + } } } else { consume = (line[i] != ' ' && line[i] != '\t' && line[i] != '}' ); @@ -103,7 +83,7 @@ var parser = { }, _parseArray: function(tokens, start, attrDef) { for (var i=start+1; i < tokens.length; i++) { - if (tokens[i].type == parser._Tokens.ENDARRAY) { + if (tokens[i].type == parser._Tokens.ENDARRAY) { tokens[start] = { type: parser._Tokens.ARRAY, value: parser._valuesOnly(tokens.splice(start, i-start).slice(1)) } var a = []; for (var j=0; j<(tokens[start].value.length-attrDef.type.length+1); j += attrDef.type.length) { @@ -118,7 +98,7 @@ var parser = { } }, _addAttr: function(obj, attr, tokens, pos) { - if (pos < tokens.length) { + if (pos < tokens.length) { obj[attr] = tokens[pos].value; } }, @@ -140,8 +120,8 @@ var parser = { "format": [ 'PC8' ], "ftyp": [ 'Företagstyp' ], "gen": [ 'datum', 'sign' ], - "ib": [ 'årsnr', 'konto', 'saldo', 'kvantitet' ], - "konto": [ 'kontonr', 'kontonamn' ], + "ib": [ 'årsnr', 'konto', 'saldo', 'kvantitet' ], + "konto": [ 'kontonr', 'kontonamn' ], "kptyp": [ 'typ' ], "ktyp": [ 'kontonr', 'kontotyp' ], "objekt": [ 'dimensionsnr', 'objektnr', 'objektnamn' ], @@ -161,29 +141,29 @@ var parser = { "trans": [ 'kontonr', { name: 'objektlista', type: [ 'dimensionsnr', 'objektnr' ], many: true }, 'belopp', 'transdat', 'transtext', 'kvantitet', 'sign' ], "rtrans": [ 'kontonr', { name: 'objektlista', type: [ 'dimensionsnr', 'objektnr' ], many: true }, 'belopp', 'transdat', 'transtext', 'kvantitet', 'sign' ], "btrans": [ 'kontonr', { name: 'objektlista', type: [ 'dimensionsnr', 'objektnr' ], many: true }, 'belopp', 'transdat', 'transtext', 'kvantitet', 'sign' ], - "ub": [ 'årsnr', 'konto', 'saldo', 'kvantitet' ], + "ub": [ 'årsnr', 'konto', 'saldo', 'kvantitet' ], "underdim": [ 'dimensionsnr', 'namn', 'superdimension' ], "valuta": [ 'valutakod' ], "ver": [ 'serie', 'vernr', 'verdatum', 'vertext', 'regdatum', 'sign' ] }, Universal: [ - { etikett: 'dim', 'dimensionsnr': '1', 'namn': 'Kostnadsställe / resultatenhet' }, + { etikett: 'dim', 'dimensionsnr': '1', 'namn': 'Kostnadsställe / resultatenhet' }, { etikett: 'underdim', 'dimensionsnr': '2', 'namn': 'Kostnadsbärare', 'superdimension': '1' }, - { etikett: 'dim', 'dimensionsnr': '6', 'namn': 'Projekt' }, - { etikett: 'dim', 'dimensionsnr': '7', 'namn': 'Anställd' }, - { etikett: 'dim', 'dimensionsnr': '8', 'namn': 'Kund' }, - { etikett: 'dim', 'dimensionsnr': '9', 'namn': 'Leverantör' }, + { etikett: 'dim', 'dimensionsnr': '6', 'namn': 'Projekt' }, + { etikett: 'dim', 'dimensionsnr': '7', 'namn': 'Anställd' }, + { etikett: 'dim', 'dimensionsnr': '8', 'namn': 'Kund' }, + { etikett: 'dim', 'dimensionsnr': '9', 'namn': 'Leverantör' }, { etikett: 'dim', 'dimensionsnr': '10', 'namn': 'Faktura' } ], list: function(scan, etikett /* attribute name value pairs */) { - var list = []; + var list = []; var fel = etikett.replace(/^#/,'').toLowerCase(); for (var i in scan) { if (scan[i].etikett == fel) { var add = true; for (var j=2; j 0) { return list[0]; } @@ -241,14 +221,14 @@ SieFile.prototype = { } return { etikett: 'objekt', - 'dimensionsnr': olist[0]['dimensionsnr'], - 'objektnr': olist[0]['objektnr'], + 'dimensionsnr': olist[0]['dimensionsnr'], + 'objektnr': olist[0]['objektnr'], 'objektnamn': olist[0]['objektnamn'], 'namn': name }; } }, - list: function(etikett /* attribute name value pairs */) { + list: function(etikett /* attribute name value pairs */) { var args = []; args[args.length] = this.poster; for (var i=0; i