/* PDFTree - abstract base class for name and number tree objects */ import PDFObject from './object'; class PDFTree { constructor() { this._items = {}; } add(key, val) { return (this._items[key] = val); } get(key) { return this._items[key]; } toString() { // Needs to be sorted by key const sortedKeys = Object.keys(this._items).sort((a, b) => this._compareKeys(a, b) ); const out = ['<<']; if (sortedKeys.length > 1) { const first = sortedKeys[0], last = sortedKeys[sortedKeys.length - 1]; out.push( ` /Limits ${PDFObject.convert([this._dataForKey(first), this._dataForKey(last)])}` ); } out.push(` /${this._keysName()} [`); for (let key of sortedKeys) { out.push( ` ${PDFObject.convert(this._dataForKey(key))} ${PDFObject.convert( this._items[key] )}` ); } out.push(']'); out.push('>>'); return out.join('\n'); } _compareKeys(a, b) { throw new Error('Must be implemented by subclasses'); } _keysName() { throw new Error('Must be implemented by subclasses'); } _dataForKey(k) { throw new Error('Must be implemented by subclasses'); } } export default PDFTree;