UNPKG

@abaplint/transpiler

Version:
53 lines 1.99 kB
"use strict"; 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