ts-budgie
Version:
Converts TypeScript code to Budgie.
92 lines • 3.84 kB
JavaScript
;
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