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 '&lt;' and end with '&gt;'.
       * @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"))

Reply via email to