This is an automated email from the ASF dual-hosted git repository.
aradzinski pushed a commit to branch NLPCRAFT-247
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft.git
The following commit(s) were added to refs/heads/NLPCRAFT-247 by this push:
new 13b5c2e WIP.
13b5c2e is described below
commit 13b5c2ecf59c77df1fabb70e1a19defafe785d02
Author: Aaron Radzinzski <[email protected]>
AuthorDate: Mon Feb 22 19:58:21 2021 -0800
WIP.
---
.../org/apache/nlpcraft/common/makro/NCMacroCompiler.scala | 8 ++++----
.../org/apache/nlpcraft/common/makro/NCMacroParser.scala | 11 +++++------
.../apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala | 4 ++++
3 files changed, 13 insertions(+), 10 deletions(-)
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroCompiler.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroCompiler.scala
index ca6ded7..9804281 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroCompiler.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroCompiler.scala
@@ -201,8 +201,8 @@ object NCMacroCompiler extends LazyLogging {
charPos: Int,
in: String
): String = {
- val s = "_" * in.length
- val charPosPtr = s.substring(0, charPos - 1) + '^' +
s.substring(charPos)
+ val dash = "-" * in.length
+ val charPosPtr = dash.substring(0, charPos - 1) + r("^") +
dash.substring(charPos)
s"Macro compiler error at line $line:$charPos - $msg\n" +
s" |-- ${c("Macro:")} $in\n" +
@@ -217,8 +217,8 @@ object NCMacroCompiler extends LazyLogging {
def compile(in: String): Set[String] = {
// ANTLR4 armature.
val lexer = new NCMacroDslLexer(CharStreams.fromString(in))
- val tokens = new CommonTokenStream(lexer)
- val parser = new NCMacroDslParser(tokens)
+ val stream = new CommonTokenStream(lexer)
+ val parser = new NCMacroDslParser(stream)
// Set custom error handlers.
lexer.removeErrorListeners()
diff --git
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroParser.scala
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroParser.scala
index 3c18398..3266c7c 100644
---
a/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroParser.scala
+++
b/nlpcraft/src/main/scala/org/apache/nlpcraft/common/makro/NCMacroParser.scala
@@ -380,7 +380,7 @@ class NCMacroParser {
// Grab 1st macro match, if any.
var m = MACRO_REGEX.findFirstMatchIn(s)
- // Expand macros (supporting nesting).
+ // Expand macros including nested ones.
while (m.isDefined) {
val ms = m.get.toString()
@@ -396,7 +396,7 @@ class NCMacroParser {
// Check for potentially invalid macros syntax.
if (BROKEN_MACRO_REGEX1.findFirstIn(s).isDefined ||
BROKEN_MACRO_REGEX2.findFirstIn(s).isDefined)
- throw new NCE(s"Likely invalid macro: $txt")
+ throw new NCE(s"Suspicious or invalid macro in: $txt")
U.distinct(expand0(s).toList map trimDupSpaces map processEscapes)
}
@@ -409,7 +409,7 @@ class NCMacroParser {
private def checkName(name: String): Unit = {
if (name.head != '<')
throw new NCE(s"Missing macro '<' opening: $name")
- if (name.reverse.head != '>')
+ if (name.last != '>')
throw new NCE(s"Missing macro '>' closing: $name")
}
@@ -417,7 +417,7 @@ class NCMacroParser {
* Adds or overrides given macro.
*
* @param name Macro name (typically an upper case string).
- * It must start with '<' and end with '>'.
+ * It must start with '<' and end with '>'.
* @param str Value of the macro (any arbitrary string).
*/
@throws[NCE]
@@ -452,7 +452,6 @@ class NCMacroParser {
*
* @param name Name.
*/
- def hasMacro(name: String): Boolean = {
+ def hasMacro(name: String): Boolean =
macros.contains(name)
- }
}
diff --git
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala
index 6180e99..4b5baea 100644
---
a/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala
+++
b/nlpcraft/src/test/scala/org/apache/nlpcraft/common/makro/NCMacroCompilerSpec.scala
@@ -61,6 +61,10 @@ class NCMacroCompilerSpec {
checkEq("A", Seq("A"))
checkEq(" A ", Seq("A"))
checkEq("A B", Seq("A B"))
+ checkEq("""A {Москва|_|\|}""", Seq("A", "A Москва", """A \|"""))
+ checkEq("A موسكو", Seq("A موسكو"))
+ checkEq("A Moscó", Seq("A Moscó"))
+ checkEq("""A B \[ \] \< \> \_ \{ \} \, \|""", Seq("""A B \[ \] \< \>
\_ \{ \} \, \|"""))
checkEq("A B", Seq("A B"))
checkEq("{A}", Seq("A"))
checkEq("{{{A}}[1,1]}[1,1]", Seq("A"))