UNPKG

ts-budgie

Version:

Converts TypeScript code to Budgie.

92 lines 3.84 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); var transformation_1 = require("../output/transformation"); var lineIndenter_1 = require("./lineIndenter"); /** * Counts the Budgie endlines within a range of text. * * @param text Range of text from a source file. * @returns How many Budgie endlines should be printed. */ var countEndlinesWithin = function (text) { var matches = text.match(/\n/g); if (matches === null) { return 0; } return matches.length - 1; }; /** * Prints series of transformations as lines of Budgie. */ var TransformationsPrinter = /** @class */ (function () { function TransformationsPrinter() { /** * Indents Budgie lines using their command metadata. */ this.lineIndenter = new lineIndenter_1.LineIndenter(); } /** * Prints a series of transformations as indented lines. * * @param sourceText Full source text from the transforming file. * @param transformations A series of transformations. * @returns The transformations' equivalent indented lines. */ TransformationsPrinter.prototype.printFile = function (sourceText, transformations) { return this.lineIndenter.indent(this.printTransformations(sourceText, transformations)); }; /** * Prints a series of transformations as lines of Budgie and literal string lines. * * @param sourceText Full source text from the transforming file. * @param transformations A series of transformations. * @returns The transformations' equivalent Budgie and literal string lines. */ TransformationsPrinter.prototype.printTransformations = function (sourceText, transformations) { var lines = []; if (transformations.length === 0) { return lines; } lines.push.apply(lines, this.printTransformation(sourceText, transformations[0])); for (var i = 1; i < transformations.length; i += 1) { var first = transformations[i - 1]; var second = transformations[i]; var linesDifference = countEndlinesWithin(sourceText.substring(first.range.end, second.range.start)); for (var j = 0; j < linesDifference; j += 1) { lines.push(""); } lines.push.apply(lines, this.printTransformation(sourceText, transformations[i])); } return lines; }; /** * Prints a series of transformations as lines of Budgie. * * @param transformation A transformations. * @returns The transformation's equivalent Budgie. */ TransformationsPrinter.prototype.printTransformation = function (sourceText, transformation) { var lines = []; var previous; for (var _i = 0, _a = transformation.output; _i < _a.length; _i++) { var transformed = _a[_i]; if (transformed instanceof transformation_1.Transformation) { if (previous !== undefined && previous instanceof transformation_1.Transformation) { var linesDifference = countEndlinesWithin(sourceText.substring(previous.range.end, transformed.range.start)); for (var j = 0; j < linesDifference; j += 1) { lines.push(""); } } lines.push.apply(lines, this.printTransformation(sourceText, transformed)); } else { lines.push(transformed); } previous = transformed; } return lines; }; return TransformationsPrinter; }()); exports.TransformationsPrinter = TransformationsPrinter; //# sourceMappingURL=transformationsPrinter.js.map