From 438a90fa4fc4d488ffcae6bba3fa12e0180aeed1 Mon Sep 17 00:00:00 2001 From: Eddie Antonio Santos Date: Mon, 27 Apr 2020 16:19:25 -0600 Subject: [PATCH] feat(common/lmlayer): compile join decorator --- .../lexical-model-compiler/lexical-model-compiler.ts | 10 +++++++++- .../js/source/lexical-model-compiler/lexical-model.ts | 7 +++++++ 2 files changed, 16 insertions(+), 1 deletion(-) diff --git a/developer/js/source/lexical-model-compiler/lexical-model-compiler.ts b/developer/js/source/lexical-model-compiler/lexical-model-compiler.ts index 6ff0b36db5..29aa435e15 100644 --- a/developer/js/source/lexical-model-compiler/lexical-model-compiler.ts +++ b/developer/js/source/lexical-model-compiler/lexical-model-compiler.ts @@ -93,11 +93,19 @@ export class ModelSourceError extends Error { * breaking function. */ function compileWordBreaker(spec: WordBreakerSpec): string { - return compileInnerWordBreaker(spec.use); + let baseWordBreakerCode = compileInnerWordBreaker(spec.use); + + if (spec.joinWordsAt == undefined) { + // No need to decorate; return it as-is + return baseWordBreakerCode; + } + // Let's decorate it with the join word breaker! + return `wordBreakers.join_(${baseWordBreakerCode},${JSON.stringify(spec.joinWordsAt)})`; } /** * Compiles the base word breaker, that may be decorated later. + * Returns the source code of a JavaScript expression. */ function compileInnerWordBreaker(spec: SimpleWordBreakerSpec): string { if (typeof spec === "string") { diff --git a/developer/js/source/lexical-model-compiler/lexical-model.ts b/developer/js/source/lexical-model-compiler/lexical-model.ts index b705ced2fa..f1767cd8de 100644 --- a/developer/js/source/lexical-model-compiler/lexical-model.ts +++ b/developer/js/source/lexical-model-compiler/lexical-model.ts @@ -17,6 +17,13 @@ interface LexicalModelDeclaration { */ interface WordBreakerSpec { readonly use: SimpleWordBreakerSpec; + /** + * If present, joins words that were split by the word breaker + * together at the given strings. e.g., + * + * joinWordsAt: ['-'] // to keep hyphenated items together + */ + readonly joinWordsAt?: string[]; } /**