@podlite/schema
Version:
AST tools for Podlite markup language
85 lines • 1.98 kB
JavaScript
/**
* Default writer
*/
import * as Events from 'events';
class Writer extends Events.EventEmitter {
INDEXTERMS;
FOOTNOTES;
output;
errors;
out;
ons;
// write: (p: any) => void;
// getStr: () => { errors: any; toString: () => any; valueOf: () => any; };
// errors: any;
// out: any;
// startWrite: () => void;
// ons: any[];
// endWrite: () => void;
constructor(output) {
super();
// save X<> entries
this.INDEXTERMS = [];
// save N<> annotates
this.FOOTNOTES = [];
this.output = output;
this.ons = [];
this.emit('ready');
}
// escape function for output
escape(p) {
return p;
}
// write with escape special symbols
write(p) {
return this.writeRaw(this.escape(p));
}
// raw write as is
writeRaw(str) {
if ('function' === typeof this.output) {
this.output(str);
}
else {
console.log(str);
}
}
getStr() {
return {
errors: this.errors,
toString: () => this.out,
valueOf: () => this.out,
};
}
startWrite(tree) {
// setup events
;
(this.ons || []).map(a =>
//@ts-ignore
super.on(...a));
this.emit('start', tree);
this.addListener('errors', err => {
this.errors = this.errors || [];
this.errors.push(err);
});
}
on(...params) {
// overload 'on' method for reverse setup handlers
this.ons = this.ons || [];
this.ons.unshift([...params]);
return this;
}
endWrite = () => {
this.emit('end');
};
// nesting methods
_add_nesting(n) { }
_remove_nesting(n) { }
addLevel(n) {
this._add_nesting(n);
}
removeLevel(n) {
this._remove_nesting(n);
}
}
export default Writer;
//# sourceMappingURL=writer.js.map