@abaplint/transpiler
Version:
53 lines • 1.99 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.StringTemplateSourceTranspiler = void 0;
const core_1 = require("@abaplint/core");
const _1 = require(".");
const chunk_1 = require("../chunk");
class StringTemplateSourceTranspiler {
transpile(node, traversal) {
let ret = "";
const pre = "abap.templateFormatting(";
let post = ")";
const formatting = node.findDirectExpression(core_1.Expressions.StringTemplateFormatting);
if (formatting) {
const options = this.build(formatting, traversal);
if (options) {
post = "," + options + ")";
}
}
const c = node.findDirectExpression(core_1.Expressions.Source);
if (c === undefined) {
throw new Error("StringTemplateSourceTranspiler, Source not found");
}
ret += pre + new _1.SourceTranspiler().transpile(c, traversal).getCode() + post;
return new chunk_1.Chunk(ret);
}
build(node, traversal) {
let option = "";
let count = 0;
for (const c of node.getChildren()) {
count++;
if (c instanceof core_1.Nodes.TokenNode) {
if (c.getFirstToken().getStr() === "=") {
option += ":";
}
else {
if (count > 3 && (count - 1) % 3 === 0) {
option += ",";
}
option += `"` + c.concatTokens().toLowerCase() + `"`;
}
}
else if (c.get() instanceof core_1.Expressions.Source) {
option += new _1.SourceTranspiler(true).transpile(c, traversal).getCode();
}
}
if (option !== "") {
return "{" + option + "}";
}
return undefined;
}
}
exports.StringTemplateSourceTranspiler = StringTemplateSourceTranspiler;
//# sourceMappingURL=string_template_source.js.map