UNPKG

r2-navigator-js

Version:

Readium 2 'navigator' for NodeJS (TypeScript)

92 lines 3.69 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.EpubCfiStringifier = void 0; const Utils_js_1 = require("../common/Utils.js"); const EpubCfiOffsetType_js_1 = require("../model/offset/EpubCfiOffsetType.js"); class EpubCfiStringifier { static stringifyRootNode(rootNode) { let output = ['epubcfi(']; if (rootNode.parentPath) { EpubCfiStringifier.processPath(rootNode.parentPath, output); } if (rootNode.rangeStartPath || rootNode.rangeEndPath) { output.push(','); if (rootNode.rangeStartPath) { EpubCfiStringifier.processPath(rootNode.rangeStartPath, output); } if (rootNode.rangeEndPath) { output.push(','); EpubCfiStringifier.processPath(rootNode.rangeEndPath, output); } } output.push(')'); return output.join(''); } static processAssertion(assertionNode, output) { output.push('['); const escapedValues = assertionNode.values.map(escape); output.push(escapedValues.join(',')); for (const parameter of assertionNode.parameters) { output.push(';', escape(parameter.name), '='); const escapedParameterValues = parameter.values.map(escape); output.push(escapedParameterValues.join(',')); } output.push(']'); } static processLocalPath(localPathNode, output) { if (localPathNode.indirection) { output.push('!'); } for (const stepNode of localPathNode.steps) { EpubCfiStringifier.processStep(stepNode, output); } } static processOffset(offsetNode, output) { switch (offsetNode.type) { case EpubCfiOffsetType_js_1.EpubCfiOffsetType.CHARACTER: EpubCfiStringifier.processOffsetCharacter(offsetNode, output); break; case EpubCfiOffsetType_js_1.EpubCfiOffsetType.SPATIAL: EpubCfiStringifier.processOffsetSpatial(offsetNode, output); break; case EpubCfiOffsetType_js_1.EpubCfiOffsetType.TEMPORAL: EpubCfiStringifier.processOffsetTemporal(offsetNode, output); break; } if (offsetNode.assertion) { EpubCfiStringifier.processAssertion(offsetNode.assertion, output); } } static processOffsetCharacter(offsetNode, output) { output.push(':', offsetNode.characterOffset); } static processOffsetSpatial(offsetNode, output) { output.push('@', offsetNode.x, ':', offsetNode.y); } static processOffsetTemporal(offsetNode, output) { output.push('~', offsetNode.seconds); if ((0, Utils_js_1.isNumber)(offsetNode.x) && (0, Utils_js_1.isNumber)(offsetNode.y)) { output.push('@', offsetNode.x, ':', offsetNode.y); } } static processPath(pathNode, output) { for (let i = 0; i < pathNode.localPaths.length; i++) { let localPath = pathNode.localPaths[i]; EpubCfiStringifier.processLocalPath(localPath, output); } if (pathNode.offset) { EpubCfiStringifier.processOffset(pathNode.offset, output); } } static processStep(stepNode, output) { output.push('/', stepNode.stepValue); if (stepNode.assertion) { EpubCfiStringifier.processAssertion(stepNode.assertion, output); } } } exports.EpubCfiStringifier = EpubCfiStringifier; function escape(value) { return value.replace(/[\^\[\](),;=]/g, match => '^' + match); } //# sourceMappingURL=EpubCfiStringifier.js.map