bot18
Version:
A high-frequency cryptocurrency trading bot by Zenbot creator @carlos8f
72 lines (59 loc) • 1.55 kB
JavaScript
var EventEmitter = require('events').EventEmitter
var inherits = require('inherits')
var Element = require('./Element')
var LtxParser = require('./parsers/ltx')
var Parser = function (options) {
EventEmitter.call(this)
var ParserInterface = this.Parser = (options && options.Parser) || this.DefaultParser
var ElementInterface = this.Element = (options && options.Element) || this.DefaultElement
this.parser = new ParserInterface()
var el
var self = this
this.parser.on('startElement', function (name, attrs) {
var child = new ElementInterface(name, attrs)
if (!el) {
el = child
} else {
el = el.cnode(child)
}
})
this.parser.on('endElement', function (name) {
if (!el) {
/* Err */
} else if (name === el.name) {
if (el.parent) {
el = el.parent
} else if (!self.tree) {
self.tree = el
el = undefined
}
}
})
this.parser.on('text', function (str) {
if (el) {
el.t(str)
}
})
this.parser.on('error', function (e) {
self.error = e
self.emit('error', e)
})
}
inherits(Parser, EventEmitter)
Parser.prototype.DefaultParser = LtxParser
Parser.prototype.DefaultElement = Element
Parser.prototype.write = function (data) {
this.parser.write(data)
}
Parser.prototype.end = function (data) {
this.parser.end(data)
if (!this.error) {
if (this.tree) {
this.emit('tree', this.tree)
} else {
this.emit('error', new Error('Incomplete document'))
}
}
}
module.exports = Parser