You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@nlpcraft.apache.org by ar...@apache.org on 2021/09/04 04:53:17 UTC

[incubator-nlpcraft-website] branch web-site updated: Update.

This is an automated email from the ASF dual-hosted git repository.

aradzinski pushed a commit to branch web-site
in repository https://gitbox.apache.org/repos/asf/incubator-nlpcraft-website.git


The following commit(s) were added to refs/heads/web-site by this push:
     new a5f2b1b  Update.
a5f2b1b is described below

commit a5f2b1b350f1c5c8e1e829b48e59592cc88676f5
Author: Aaron Radzinski <ar...@apache.org>
AuthorDate: Fri Sep 3 21:52:30 2021 -0700

    Update.
---
 .gitignore                                         |  11 -
 assets/css/style.css                               |   2 +-
 assets/css/style.css.map                           |   6 +-
 blogs/nlpcraft-idl-intent-definition-language.html |  23 +-
 blogs/quick_intro_apache_nlpcraft.html             |   2 +-
 blogs/short_term_memory.html                       |   2 +-
 data-model.html                                    | 272 ++++++++++------
 examples/alarm_clock.html                          |   2 +-
 examples/light_switch.html                         |   2 +-
 feed.xml                                           |   2 +-
 first-example.html                                 |   2 +-
 intent-matching.html                               | 354 +++++++++++----------
 short-term-memory.html                             |   2 +-
 13 files changed, 388 insertions(+), 294 deletions(-)

diff --git a/.gitignore b/.gitignore
deleted file mode 100644
index 97239ea..0000000
--- a/.gitignore
+++ /dev/null
@@ -1,11 +0,0 @@
-.jekyll-metadata
-**/*.iml
-*.iml
-.idea/
-_site/
-.sass-cache/
-.jekyll-cache/
-target
-out
-Gemfile.lock
-
diff --git a/assets/css/style.css b/assets/css/style.css
index 11069ff..982966a 100644
--- a/assets/css/style.css
+++ b/assets/css/style.css
@@ -1,3 +1,3 @@
-@font-face{font-family:'CanaroBlack';src:url("../../fonts/rene_bieder_-_canaro_black-webfont.eot");src:url("../../fonts/rene_bieder_-_canaro_black-webfont.eot?#iefix") format("embedded-opentype"),url("../../fonts/rene_bieder_-_canaro_black-webfont.woff") format("woff"),url("../../fonts/rene_bieder_-_canaro_black-webfont.ttf") format("truetype"),url("../../fonts/rene_bieder_-_canaro_black-webfont.svg#canaroblack") format("svg");font-weight:normal;font-style:normal}@font-face{font-family:' [...]
+@font-face{font-family:'CanaroBlack';src:url("../../fonts/rene_bieder_-_canaro_black-webfont.eot");src:url("../../fonts/rene_bieder_-_canaro_black-webfont.eot?#iefix") format("embedded-opentype"),url("../../fonts/rene_bieder_-_canaro_black-webfont.woff") format("woff"),url("../../fonts/rene_bieder_-_canaro_black-webfont.ttf") format("truetype"),url("../../fonts/rene_bieder_-_canaro_black-webfont.svg#canaroblack") format("svg");font-weight:normal;font-style:normal}@font-face{font-family:' [...]
 
 /*# sourceMappingURL=style.css.map */
\ No newline at end of file
diff --git a/assets/css/style.css.map b/assets/css/style.css.map
index 7b63d77..5179cd1 100644
--- a/assets/css/style.css.map
+++ b/assets/css/style.css.map
@@ -30,7 +30,7 @@
 		"/*\n * Licensed to the Apache Software Foundation (ASF) under one or more\n * contributor license agreements.  See the NOTICE file distributed with\n * this work for additional information regarding copyright ownership.\n * The ASF licenses this file to You under the Apache License, Version 2.0\n * (the \"License\"); you may not use this file except in compliance with\n * the License.  You may obtain a copy of the License at\n *\n *      http://www.apache.org/licenses/LICENSE-2.0\n *\ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
-		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
+		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
@@ -39,7 +39,7 @@
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
-		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
+		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
@@ -52,5 +52,5 @@
 		"/*\r\n * Licensed to the Apache Software Foundation (ASF) under one or more\r\n * contributor license agreements.  See the NOTICE file distributed with\r\n * this work for additional information regarding copyright ownership.\r\n * The ASF licenses this file to You under the Apache License, Version 2.0\r\n * (the \"License\"); you may not use this file except in compliance with\r\n * the License.  You may obtain a copy of the License at\r\n *\r\n *      http://www.apache.org/licenses/ [...]
 	],
 	"names": [],
-	"mappings": "ACiBA,UAAU,CACN,WAAW,CAAE,aAAa,CAC1B,GAAG,CAAE,yDAAyD,CAC9D,GAAG,CAAE,gEAAgE,CAAC,2BAA2B,CAC7F,0DAA0D,CAAC,cAAc,CACzE,yDAAyD,CAAC,kBAAkB,CAC5E,qEAAqE,CAAC,aAAa,CACvF,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CAGtB,UAAU,CACN,WAAW,CAAE,YAAY,CACzB,GAAG,CAAE,wDAAwD,CAC7D,GAAG,CAAE,+DAA+D,CAAC,2BAA2B,CAC5F,yDAAyD,CAAC,cAAc,CACxE,wDAAwD,CAAC,kBAAkB,CAC3E,wEAAwE,CAAC,aAAa,CAC1F,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CAGtB,UAAU,CACN,WAAW,CAAE,YAAY,CACzB,GAAG,CAAE,wDAAwD,CAC7D,GAAG,CAAE,+DAA [...]
+	"mappings": "ACiBA,UAAU,CACN,WAAW,CAAE,aAAa,CAC1B,GAAG,CAAE,yDAAyD,CAC9D,GAAG,CAAE,gEAAgE,CAAC,2BAA2B,CAC7F,0DAA0D,CAAC,cAAc,CACzE,yDAAyD,CAAC,kBAAkB,CAC5E,qEAAqE,CAAC,aAAa,CACvF,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CAGtB,UAAU,CACN,WAAW,CAAE,YAAY,CACzB,GAAG,CAAE,wDAAwD,CAC7D,GAAG,CAAE,+DAA+D,CAAC,2BAA2B,CAC5F,yDAAyD,CAAC,cAAc,CACxE,wDAAwD,CAAC,kBAAkB,CAC3E,wEAAwE,CAAC,aAAa,CAC1F,WAAW,CAAE,MAAM,CACnB,UAAU,CAAE,MAAM,CAGtB,UAAU,CACN,WAAW,CAAE,YAAY,CACzB,GAAG,CAAE,wDAAwD,CAC7D,GAAG,CAAE,+DAA [...]
 }
\ No newline at end of file
diff --git a/blogs/nlpcraft-idl-intent-definition-language.html b/blogs/nlpcraft-idl-intent-definition-language.html
index 616e453..aab7a16 100644
--- a/blogs/nlpcraft-idl-intent-definition-language.html
+++ b/blogs/nlpcraft-idl-intent-definition-language.html
@@ -19,18 +19,17 @@
         intent=xa
            flow="^(?:login)(^:logout)*$"
            meta={'enabled': true}
-           term(a)={!(tok_id()) != "z"}[1,3]
+           term(a)={# != "z"}[1,3]
            term(b)={
               meta_intent('enabled') == true && // Must be active.
-              month() == 1 // January.
+              month == 1 // January.
            }
            term(c)~{
                 // Variables.
-                @tokId = tok_id()
                 @usrTypes = meta_model('user_types')
 
                 // Predicate.
-                (tokId == 'order' || tokId == 'order_cancel') &&
+                (# == 'order' || # == 'order_cancel') &&
                 has_all(@usrTypes, list(1, 2, 3) &&
                 abs(meta_tok('order:size')) > 10)
     </pre><p><b>NOTES:</b></p><ul class="fixed"><li> The intent name is <code>xa</code>.<li> The intent contains three terms. Term is an element that defines a predicate, each of which must pass for the intent to be selected:<ul class="fixed"><li> <code>term(a)</code> - the parsed request must contain between one and three tokens with identifiers other than <code>z</code>, without taking into account data from the dialogue history (term type <code>=</code>).<li> <code>term(b)</code> - th [...]
@@ -55,7 +54,7 @@
         intent=xa
            flow="^(?:login)(^:logout)*$"
            meta={'enabled': true}
-           term(a)={!(tok_id()) != "z"}[1,3]
+           term(a)={# != "z"}[1,3]
     </pre><p> Every intent statement consists of the following elements:</p><ul class="fixed"><li><p><b>Intent Name</b></p><p> Required element. The name is a unique identifier within the model. Below is an example of using a reference to the <code>xa</code> intent.</p><pre class="brush: java">
                 @NCIntentRef("xa")
                 fun onTimeMatch(
@@ -63,18 +62,18 @@
                     @NCIntentTerm("a") tok: NCToken
                 ): NCResult { ... }
             </pre><li><p><b>Intent Terms</b></p><p> At least one term is required. Term is the main element of the intent definition. Term consists of the predicate over a token (term body). The constituent parts of the predicate can be based on the token or on some other factors.</p><p> Here's how an intent's term is defined:</p><ul class="fixed"><li>The <code>term</code> keyword. Required element.<li> Name in parentheses. Optional. Used to create references to the found token in the ca [...]
-                        term(nums)~{tok_id() == 'nlpcraft:num'} // Conversational '~' term.
-                        term(nums)={tok_id() != 'z'} // Non-conversational '=' term.
+                        term(nums)~{# == 'nlpcraft:num'} // Conversational '~' term.
+                        term(nums)={# != 'z'} // Non-conversational '=' term.
                     </pre><li><p> The term body. Required element. There are two ways to define the term body: using IDL script with built-in functions or in external Java-based code:</p><pre class="brush: idl">
-                        term(nums)={tok_id() == 'nlpcraft:num'} // IDL script.
+                        term(nums)={# == 'nlpcraft:num'} // IDL script.
                         term(yes)~{true} // IDL script.
                         term~/org.mypackage.MyClass#termMethod/? // Reference to external code.
                     </pre><p> Note the special syntax for the last term. The existing set of built-in functions are typically enough to define many terms of the intent. But, if necessary, the programmer can create her own predicates in Java, Scala, Kotlin, Groovy or any other Java based language and write them in the term body. That is, NLPCraft IDL can have snippets of code written entirely in other languages:</p><pre class="brush: idl">
                         term~/org.mypackage.MyClass#termMethod/? // Reference to external code.
                     </pre><p> This function <code>termMethod</code> receives an argument that contains all the necessary data on the user's request, and as the output it should return the value of a specific type.</p><li><p> Quantifier. Optional. The default value is <code>[1, 1]</code>. The following types of quantifiers are supported:</p><ul class="fixed"><li><code>[M, N]</code> - the term must be found from <code>N</code> to <code>M</code> times.<li><code>*</code> - the term must be f [...]
-                        term(nums)={tok_id() == 'nlpcraft:num'}[1,2] // The request must contain one or two tokens with the ID “nlpcraft: num”.
-                        term(nums)={tok_id() == 'nlpcraft:num'}* // The request must contain zero or more tokens with the ID “nlpcraft: num”.
-                    </pre></ul><li><p><b>IDL Built-In Functions</b></p><p> NLPCraft IDL provides over 140 <a href="/intent-matching.html#idl_functions">built-in functions</a> that can be used in term definition. These functions can be conventionally classified into the following categories:</p><ul class="fixed"><li>Based on base tokens properties - token IDs, groups, parent, hierarchy, etc. Examples: <code>tok_id()</code>, <code>tok_groups()</code>, <code>tok_parent()</code>.<li>NLP-base [...]
+                        term(nums)={# == 'nlpcraft:num'}[1,2] // The request must contain one or two tokens with the ID “nlpcraft: num”.
+                        term(nums)={# == 'nlpcraft:num'}* // The request must contain zero or more tokens with the ID “nlpcraft: num”.
+                    </pre></ul><li><p><b>IDL Built-In Functions</b></p><p> NLPCraft IDL provides over 140 <a href="/intent-matching.html#idl_functions">built-in functions</a> that can be used in term definition. These functions can be conventionally classified into the following categories:</p><ul class="fixed"><li>Based on base tokens properties - token IDs, groups, parent, hierarchy, etc. Examples: <code>tok_id</code>, <code>tok_groups</code>, <code>tok_parent</code>.<li>NLP-based toke [...]
                 term(t2)={
                     @a = meta_model('a')
                     @list = list(1, 2, 3, 4)
@@ -86,7 +85,7 @@
             </pre><p> This rule means that for the intent to be matched, it is necessary that within the current session the intent with the <code>login</code> identifier has already been matched before, and not with identifier <code>logout</code>.</p><p> If it is necessary to define more complex logic, it can also be moved into user code written in any Java-based language, like the term body:</p><pre class="brush: scala">
                 @NCIntent("intent=x
                     flow=/com.company.dialog.Flow#customFlow/
-                    term~{tok_id() == 'some_id'}"
+                    term~{# == 'some_id'}"
                 )
                 def onX(): NCResult = { .. }
             </pre><p> The predicate defined in the method <code>customFlow()</code> receives at the input a list with all intents information, previously matched within the current session, and returns a boolean value.</p><li><p><b>Intent Metadata</b></p><p> Optional element. A additional dataset that can be used by term predicates presented in JSON format.</p></ul></section><section><h2 class="section-title">Why Do We Need NLPCraft IDL? <a href="#"><i class="top-link fas fa-fw fa-angle- [...]
diff --git a/blogs/quick_intro_apache_nlpcraft.html b/blogs/quick_intro_apache_nlpcraft.html
index 19d63be..2e127c3 100644
--- a/blogs/quick_intro_apache_nlpcraft.html
+++ b/blogs/quick_intro_apache_nlpcraft.html
@@ -53,7 +53,7 @@
               - "{&lt;ACTION&gt;|shut|kill|stop|eliminate} {off|out} &lt;LIGHT&gt;"
               - "no &lt;LIGHT&gt;"
         intents:
-          - "intent=ls term(act)={has(tok_groups(), 'act')} term(loc)={tok_id() == 'ls:loc'}*"
+          - "intent=ls term(act)={has(tok_groups, 'act')} term(loc)={# == 'ls:loc'}*"
     </pre><p><b>NOTES:</b></p><ul><li> We define 3 model elements (corresponding to the NEs we’ve come up with earlier):<ul><li><code>"ls:loc"</code> to define the location.<li><code>"ls:on"</code> to define ON action.<li><code>"ls:off"</code> to define OFF action.</ul><li> We grouped <code>"ls:on"</code> and <code>"ls:off"</code> into group <code>"act"</code> for easier use in the intent.<li> Each model element is defined through synonyms using <a href="/data-model.html#macros">Macro DS [...]
         package org.apache.nlpcraft.examples.lightswitch
 
diff --git a/blogs/short_term_memory.html b/blogs/short_term_memory.html
index 6bb391c..3e482eb 100644
--- a/blogs/short_term_memory.html
+++ b/blogs/short_term_memory.html
@@ -15,4 +15,4 @@
  limitations under the License.
 -->
 
-<!doctype html><html lang="en"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-180663034-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-180663034-1'); </script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open sourc [...]
+<!doctype html><html lang="en"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-180663034-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-180663034-1'); </script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open sourc [...]
diff --git a/data-model.html b/data-model.html
index b2a9a2c..d0cf209 100644
--- a/data-model.html
+++ b/data-model.html
@@ -15,7 +15,7 @@
  limitations under the License.
 -->
 
-<!doctype html><html lang="en"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-180663034-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-180663034-1'); </script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open sourc [...]
+<!doctype html><html lang="en"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-180663034-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-180663034-1'); </script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open sourc [...]
 package org.apache.nlpcraft.examples.lightswitch
 
 import org.apache.nlpcraft.model.{NCIntentTerm, _}
@@ -54,15 +54,74 @@ class LightSwitchModel extends NCModelFileAdapter("lightswitch_model.yaml") {
         NCResult.text(s"Lights are [$status] in [${locations.toLowerCase}].")
     }
 }
-                </pre></div><div class="tab-pane fade show" id="java-model-ex" role="tabpanel"><pre class="brush: java">
+                </pre></div><div class="tab-pane fade show" id="lightswitch_yaml_model" role="tabpanel"><pre class="brush: js">
+id: "nlpcraft.lightswitch.ex"
+name: "Light Switch Example Model"
+version: "1.0"
+description: "NLI-powered light switch example model."
+macros:
+  - name: "&lt;ACTION&gt;"
+    macro: "{turn|switch|dial|let|set|get|put}"
+  - name: "&lt;KILL&gt;"
+    macro: "{shut|kill|stop|eliminate}"
+  - name: "&lt;ENTIRE_OPT&gt;"
+    macro: "{entire|full|whole|total|_}"
+  - name: "&lt;FLOOR_OPT&gt;"
+    macro: "{upstairs|downstairs|{1st|first|2nd|second|3rd|third|4th|fourth|5th|fifth|top|ground} floor|_}"
+  - name: "&lt;TYPE&gt;"
+    macro: "{room|closet|attic|loft|{store|storage} {room|_}}"
+  - name: "&lt;LIGHT&gt;"
+    macro: "{all|_} {it|them|light|illumination|lamp|lamplight}"
+enabledBuiltInTokens: [] # This example doesn't use any built-in tokens.
+
+#
+# Allows for multi-word synonyms in this entire model
+# to be sparse and permutate them for better detection.
+# These two properties generally enable a free-form
+# natural language comprehension.
+#
+permutateSynonyms: true
+sparse: true
+
+elements:
+  - id: "ls:loc"
+    description: "Location of lights."
+    synonyms:
+      - "&lt;ENTIRE_OPT&gt; &lt;FLOOR_OPT&gt; {kitchen|library|closet|garage|office|playroom|{dinning|laundry|play} &lt;TYPE&gt;}"
+      - "&lt;ENTIRE_OPT&gt; &lt;FLOOR_OPT&gt; {master|kid|children|child|guest|_} {bedroom|bathroom|washroom|storage} {&lt;TYPE&gt;|_}"
+      - "&lt;ENTIRE_OPT&gt; {house|home|building|{1st|first} floor|{2nd|second} floor}"
+
+  - id: "ls:on"
+    groups:
+      - "act"
+    description: "Light switch ON action."
+    synonyms:
+      - "&lt;ACTION&gt; {on|up|_} &lt;LIGHT&gt; {on|up|_}"
+      - "&lt;LIGHT&gt; {on|up}"
+
+  - id: "ls:off"
+    groups:
+      - "act"
+    description: "Light switch OFF action."
+    synonyms:
+      - "&lt;ACTION&gt; &lt;LIGHT&gt; {off|out|down}"
+      - "{&lt;ACTION&gt;|&lt;KILL&gt;} {off|out|down} &lt;LIGHT&gt;"
+      - "&lt;KILL&gt; &lt;LIGHT&gt;"
+      - "&lt;LIGHT&gt; &lt;KILL&gt;"
+      - "{out|no|off|down} &lt;LIGHT&gt;"
+      - "&lt;LIGHT&gt; {out|off|down}"
+
+intents:
+  - "intent=ls term(act)={has(tok_groups, 'act')} term(loc)={# == 'ls:loc'}*"                            
+                        </pre></div></div></div><div class="tab-pane fade show" id="alarm" role="tabpanel"><nav><div class="nav nav-tabs" role="tablist"> <a class="nav-item nav-link active" data-toggle="tab" href="#alarm_java_model" role="tab"><code>AlarmModel.java</code></a> <a class="nav-item nav-link" data-toggle="tab" href="#alarm_intents_idl" role="tab"><code>intents.idl</code></a> <a class="nav-item nav-link" data-toggle="tab" href="#alarm_json_model" role="tab"><code>alarm_model.j [...]
 package org.apache.nlpcraft.examples.alarm;
 
 import org.apache.nlpcraft.model.*;
+
 import java.time.*;
-import java.time.format.*;
 import java.util.*;
 
-import static java.time.temporal.ChronoUnit.*;
+import static java.time.temporal.ChronoUnit.MILLIS;
 
 public class AlarmModel extends NCModelFileAdapter {
     private static final DateTimeFormatter FMT =
@@ -71,28 +130,42 @@ public class AlarmModel extends NCModelFileAdapter {
     private final Timer timer = new Timer();
 
     public AlarmModel() {
-        // Loading the model from the file in the classpath.
+        // Loading the model from the file.
         super("alarm_model.json");
     }
 
-    @NCIntentRef("alarm")
-    @NCIntentSample({
-        "Ping me in 3 minutes",
-        "Buzz me in an hour and 15mins",
-        "Set my alarm for 30s"
-    })
+    @NCIntentRef("alarm") // Intent is defined in JSON model file (alarm_model.json and intents.idl).
+    @NCIntentSampleRef("alarm_samples.txt") // Samples supplied in an external file.
     NCResult onMatch(
         NCIntentMatch ctx,
         @NCIntentTerm("nums") List&lt;NCToken&gt; numToks
     ) {
-        if (ctx.isAmbiguous())
-            throw new NCRejection("Not exact match.");
+        long ms = calculateTime(numToks);
+
+        assert ms >= 0;
+
+        timer.schedule(
+            new TimerTask() {
+                @Override
+                public void run() {
+                    System.out.println(
+                        "BEEP BEEP BEEP for: " + ctx.getContext().getRequest().getNormalizedText() + ""
+                    );
+                }
+            },
+            ms
+        );
 
-        long unitsCnt = numToks.stream().map(tok -&gt; (String)tok.meta("num:unit")).distinct().count();
+        return NCResult.text("Timer set for: " + FMT.format(LocalDateTime.now().plus(ms, MILLIS)));
+    }
 
-        if (unitsCnt != numToks.size())
-            throw new NCRejection("Ambiguous time units.");
+    @Override
+    public void onDiscard() {
+        // Clean up when model gets discarded (e.g. during testing).
+        timer.cancel();
+    }
 
+    public static long calculateTime(List&lt;NCToken&gt; numToks) {
         LocalDateTime now = LocalDateTime.now();
         LocalDateTime dt = now;
 
@@ -115,37 +188,54 @@ public class AlarmModel extends NCModelFileAdapter {
                 case "year": { dt = dt.plusYears(v); break; }
 
                 default:
-                    // It shouldn't be assert, because 'datetime' unit can be extended.
+                    // It shouldn't be an assertion, because 'datetime' unit can be extended outside.
                     throw new NCRejection("Unsupported time unit: " + unit);
             }
         }
 
-        long ms = now.until(dt, MILLIS);
-
-        assert ms &gt;= 0;
-
-        timer.schedule(
-            new TimerTask() {
-                @Override
-                public void run() {
-                    System.out.println(
-                        "BEEP BEEP BEEP for: " + ctx.getContext().getRequest().getNormalizedText() + ""
-                    );
-                }
-            },
-            ms
-        );
-
-        return NCResult.text("Timer set for: " + FMT.format(dt));
+        return now.until(dt, MILLIS);
     }
+}
+                        </pre></div><div class="tab-pane fade show" id="alarm_intents_idl" role="tabpanel"><pre class="brush: idl">
+// Fragments (mostly for demo purposes here).
+fragment=buzz term~{# == 'x:alarm'}
+fragment=when
+    term(nums)~{
+        // Demonstrating term variables.
+        @type = meta_tok('nlpcraft:num:unittype')
+        @iseq = meta_tok('nlpcraft:num:isequalcondition') // Excludes conditional statements.
 
-    @Override
-    public void onDiscard() {
-        // Clean up when model gets discarded (e.g. during testing).
-        timer.cancel();
-    }
+        # == 'nlpcraft:num' && @type == 'datetime' && @iseq == true
+    }[1,7]
+
+// Intents (using fragments).
+intent=alarm
+    fragment(buzz)
+    fragment(when)
+                        </pre></div><div class="tab-pane fade show" id="alarm_json_model" role="tabpanel"><pre class="brush: js">
+{
+    "id": "nlpcraft.alarm.ex",
+    "name": "Alarm Example Model",
+    "version": "1.0",
+    "description": "Alarm example model.",
+    "enabledBuiltInTokens": [
+        "nlpcraft:num"
+    ],
+    "elements": [
+        {
+            "id": "x:alarm",
+            "description": "Alarm token indicator.",
+            "synonyms": [
+                "{ping|buzz|wake|call|hit} {me|up|me up|_}",
+                "{set|_} {my|_} {wake|wake up|_} {alarm|timer|clock|buzzer|call} {clock|_} {up|_}"
+            ]
+        }
+    ],
+    "intents": [
+        "import('intents.idl')" // Import intents from external file.
+    ]
 }
-                </pre></div></div><p> Further sub-sections will provide details on model's static configuration and dynamic programmable logic implementation.</p></section><section id="dataflow"><h2 class="section-title">Model Dataflow <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2><figure> <img alt="data model dataflow" class="img-fluid" src="/images/homepage-fig1.1.png"><figcaption><b>Fig 1.</b> NLPCraft Architecture</figcaption></figure><p> Let's review the  [...]
+                        </pre></div></div></div></div><p> Further sub-sections will provide details on model's static configuration and dynamic programmable logic implementation.</p></section><section id="dataflow"><h2 class="section-title">Model Dataflow <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2><figure> <img alt="data model dataflow" class="img-fluid" src="/images/homepage-fig1.1.png"><figcaption><b>Fig 1.</b> NLPCraft Architecture</figcaption></figure>< [...]
 {
      "id": "user.defined.id",
      "name": "User Defined Name",
@@ -202,47 +292,7 @@ intents:
                 }
             ]
             ...
-        </pre><p> While adding multi-word synonyms looks somewhat trivial - in real models, the naive approach can lead to thousands and even tens of thousands of possible synonyms due to words, grammar, and linguistic permutations - which quickly becomes untenable if performed manually.</p><p> NLPCraft provides an effective tool for a compact synonyms representation. Instead of listing all possible multi-word synonyms one by one you can use combination of following techniques:</p><ul><l [...]
-            "macros": [
-                {
-                    "name": "&lt;A&gt;",
-                    "macro": "aaa"
-                },
-                {
-                    "name": "&lt;B&gt;",
-                    "macro": "&lt;A&gt; bbb"
-                },
-                {
-                    "name": "&lt;C&gt;",
-                    "macro": "&lt;A&gt; bbb {z|w}"
-                }
-             ]
-        </pre><span id="option-groups" class="section-sub-title">Option Groups <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></span><p> Option groups are similar to wildcard patterns that operates on a single word base. One line of option group expands into one or more individual synonyms. Option groups is the key mechanism for shortened synonyms notation. The following examples demonstrate how to use option groups.</p><p> Consider the following macros defined belo [...]
-            ...
-            "macros": [
-                {
-                    "name": "&lt;TRUCK_TYPE&gt;",
-                    "macro": "{ {light|super|heavy|medium} duty|half ton|1/2 ton|3/4 ton|one ton}"
-                }
-             ]
-            "elements": [
-                {
-                    "id": "transport.vehicle",
-                    "description": "Transportation vehicle",
-                    "synonyms": [
-                        "car",
-                        "{&lt;TRUCK_TYPE&gt;|_} {pickup|_} truck"
-                        "sedan",
-                        "coupe"
-                    ]
-                }
-            ]
-            ...
-        </pre><span id="regex" class="section-sub-title">Regular Expressions <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></span><p> Any individual synonym word that starts and ends with <code>//</code> (two forward slashes) is considered to be Java regular expression as defined in <code>java.util.regex.Pattern</code>. Note that regular expression can only span a single word, i.e. only individual words from the user input will be matched against given regular expr [...]
-        "synonyms": [
-            "{foo|//[bar].+//}}"
-        ]
-        </pre><p> will match word <code>foo</code> or any other strings that start with <code>bar</code> as long as this string doesn't contain whitespaces.</p><div class="bq info"> <b>Regular Expressions Performance</b><p> It's important to note that regular expressions can significantly affect the performance of the NLPCraft processing if used uncontrolled. Use it with caution and test the performance of your model to ensure it meets your requirements.</p></div><span id="values" class= [...]
+        </pre><p> While adding multi-word synonyms looks somewhat trivial - in real models, the naive approach can lead to thousands and even tens of thousands of possible synonyms due to words, grammar, and linguistic permutations - which quickly becomes untenable if performed manually.</p><p> NLPCraft provides an effective tool for a compact synonyms representation. Instead of listing all possible multi-word synonyms one by one you can use combination of following techniques:</p><ul><l [...]
             ...
             "macros": [
                 {
@@ -289,10 +339,50 @@ intents:
 |     |   |-- hatchback
 |     |   +-- wagon
         </pre><p> Then in our intent, for example, we could look for any token with root parent ID <code>vehicle</code> or immediate parent ID <code>truck</code> or <code>car</code> without a need to match on all current and future individual sub-IDs. For example:</p><pre class="brush: idl">
-            intent=vehicle.intent term~{has(tok_ancestors(), 'vehicle')}
-            intent=truck.intent term~{tok_parent() == 'truck'}
-            intent=car.intent term~{tok_parent() == 'car'}
-        </pre></section><section id="dsl" ><h2 class="section-title">IDL Expressions <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2><p> Any individual synonym word that that starts and ends with <code>^^</code> is a <a href="/intent-matching.html#idl">IDL expression.</a> IDL expression inside of <code>^^ ... ^^</code> markers allows you to define a predicate on already parsed and detected token. It is very important to note that unlike all other synonyms the ID [...]
+            intent=vehicle.intent term~{has(tok_ancestors, 'vehicle')}
+            intent=truck.intent term~{tok_parent == 'truck'}
+            intent=car.intent term~{tok_parent == 'car'}
+        </pre></section><section id="syns-tools"> <span id="macros" class="section-sub-title">Macros <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></span><p> Listing all possible multi-word synonyms for a given element can be a time-consuming task. Macros together with option groups allow for significant simplification of this task. Macros allow you to give a name to an often used set of words or option groups and reuse it without repeating those words or option gr [...]
+            "macros": [
+                {
+                    "name": "&lt;A&gt;",
+                    "macro": "aaa"
+                },
+                {
+                    "name": "&lt;B&gt;",
+                    "macro": "&lt;A&gt; bbb"
+                },
+                {
+                    "name": "&lt;C&gt;",
+                    "macro": "&lt;A&gt; bbb {z|w}"
+                }
+             ]
+        </pre><span id="option-groups" class="section-sub-title">Option Groups <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></span><p> Option groups are similar to wildcard patterns that operates on a single word base. One line of option group expands into one or more individual synonyms. Option groups is the key mechanism for shortened synonyms notation. The following examples demonstrate how to use option groups.</p><p> Consider the following macros defined belo [...]
+            ...
+            "macros": [
+                {
+                    "name": "&lt;TRUCK_TYPE&gt;",
+                    "macro": "{ {light|super|heavy|medium} duty|half ton|1/2 ton|3/4 ton|one ton}"
+                }
+             ]
+            "elements": [
+                {
+                    "id": "transport.vehicle",
+                    "description": "Transportation vehicle",
+                    "synonyms": [
+                        "car",
+                        "{&lt;TRUCK_TYPE&gt;|_} {pickup|_} truck"
+                        "sedan",
+                        "coupe"
+                    ]
+                }
+            ]
+            ...
+        </pre><span id="regex" class="section-sub-title">Regular Expressions <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></span><p> Any individual synonym word that starts and ends with <code>//</code> (two forward slashes) is considered to be Java regular expression as defined in <code>java.util.regex.Pattern</code>. Note that regular expression can only span a single word, i.e. only individual words from the user input will be matched against given regular expr [...]
+        "synonyms": [
+            "{foo|//[bar].+//}}"
+        ]
+        </pre><p> will match word <code>foo</code> or any other strings that start with <code>bar</code> as long as this string doesn't contain whitespaces.</p><div class="bq info"> <b>Regular Expressions Performance</b><p> It's important to note that regular expressions can significantly affect the performance of the NLPCraft processing if used uncontrolled. Use it with caution and test the performance of your model to ensure it meets your requirements.</p></div><h2 id="dsl" class="sect [...]
             ...
             "elements": [
                 {
@@ -310,13 +400,13 @@ intents:
                     "id": "race.vehicle",
                     "description": "Race vehicle",
                     "synonyms": [
-                        "{race|speed|track} ^^{tok_id() == 'transport.vehicle'}^^"
+                        "{race|speed|track} ^^{# == 'transport.vehicle'}^^"
                     ]
                 }
 
             ]
             ...
-        </pre><div class="bq warn"><p> <b>Greedy NERs <span class="amp">&</span> Synonyms Conflicts</b></p><p> Note that in the above example you need to ensure that words <code>race</code>, <code>speed</code> or <code>track</code> are not part of the <code>transport.vehicle</code> token. It is particular important for the 3rd party NERs where specific rules about what words can or cannot be part of the token are unclear or undefined. In such cases the only remedy is to extensively test  [...]
+        </pre><div class="bq warn"><p> <b>Greedy NERs <span class="amp">&</span> Synonyms Conflicts</b></p><p> Note that in the above example you need to ensure that words <code>race</code>, <code>speed</code> or <code>track</code> are not part of the <code>transport.vehicle</code> token. It is particular important for the 3rd party NERs where specific rules about what words can or cannot be part of the token are unclear or undefined. In such cases the only remedy is to extensively test  [...]
             ...
             "elements": [
                 {
@@ -324,13 +414,13 @@ intents:
                     "description": "Wrapper for google location",
                     "groups": ["my_group"],
                     "synonyms": [
-                        "^^{tok_id() == 'google:location'}^^"
+                        "^^{# == 'google:location'}^^"
                     ]
                 }
             ]
             ...
-        </pre><span id="dsl-syntax" class="section-sub-title">IDL Expression Syntax <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></span><p> IDL expressions are a subset of overall <a href="/intent-matching.html#idl">IDL syntax</a>. You can review formal <a target="github" href="https://github.com/apache/incubator-nlpcraft/blob/master/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.g4">ANTLR4 grammar</a> but basically an IDL expressio [...]
+        </pre><b>IDL Expression Syntax</b><p> IDL expressions are a subset of overall <a href="/intent-matching.html#idl">IDL syntax</a>. You can review formal <a target="github" href="https://github.com/apache/incubator-nlpcraft/blob/master/nlpcraft/src/main/scala/org/apache/nlpcraft/model/intent/compiler/antlr4/NCIdl.g4">ANTLR4 grammar</a> but basically an IDL expression for synonym is a term expression with the optional alias at the beginning. Here's an example of IDL expression defin [...]
             "synonyms": [
-                "population {of|for} ^^[city]{tok_id() == 'nlpcraft:city' && lowercase(meta_tok('city:country')) == 'france'}^^"
+                "population {of|for} ^^[city]{# == 'nlpcraft:city' && lowercase(meta_tok('city:country')) == 'france'}^^"
             ]
-        </pre><b>NOTES:</b><ul><li>Optional alias <code>city</code> can be used to access a constituent part token (with ID <code>nlpcraft:city</code>).<li> The expression between <code>{</code> and <code>}</code> brackets is a standard IDL term expression.</ul></section><section id="programmable_ners"><h2 class="section-title">Programmable NERs <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2><p> By default, the data model detects its elements by their synonyms, [...]
+        </pre><b>NOTES:</b><ul><li>Optional alias <code>city</code> can be used to access a constituent part token (with ID <code>nlpcraft:city</code>).<li> The expression between <code>{</code> and <code>}</code> brackets is a standard IDL term expression.</ul><h2 id="custom_ners" class="section-sub-title">Custom NERs <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2><p> By default, the data model detects its elements by their synonyms, regexp or IDL expressions. [...]
diff --git a/examples/alarm_clock.html b/examples/alarm_clock.html
index 394619b..dcd269b 100644
--- a/examples/alarm_clock.html
+++ b/examples/alarm_clock.html
@@ -37,7 +37,7 @@
         }
     ],
     "intents": [
-        "intent=alarm term~{tok_id() == 'x:alarm'} term(nums)~{tok_id() == 'nlpcraft:num' && meta_token('nlpcraft:num:unittype') == 'datetime' && meta_token('nlpcraft:num:isequalcondition') == true}[0,7]"
+        "intent=alarm term~{# == 'x:alarm'} term(nums)~{# == 'nlpcraft:num' && meta_token('nlpcraft:num:unittype') == 'datetime' && meta_token('nlpcraft:num:isequalcondition') == true}[0,7]"
     ]
 }
         </pre><p>There are number of important points here:</p><ul><li> <code>Line 7</code> indicates that we'll be using built-in token <code>nlpcraft:num</code> (and therefore it needs to be explicitly enabled).<li> <code>Line 11</code> defines the only custom model element we'll need. It's ID is <code>x:alarm</code> and it is defined through synonyms. It basically means a verb to set up an alarm clock.<li> On <code>line 20</code> we define an intent <code>alarm</code> that we are goin [...]
diff --git a/examples/light_switch.html b/examples/light_switch.html
index 62d16c5..35b7d71 100644
--- a/examples/light_switch.html
+++ b/examples/light_switch.html
@@ -70,7 +70,7 @@ elements:
       - "no &lt;LIGHT&gt;"
 
 intents:
-  - "intent=ls term(act)={has(tok_groups(), 'act')} term(loc)={tok_id() == 'ls:loc'}*"
+  - "intent=ls term(act)={has(tok_groups, 'act')} term(loc)={# == 'ls:loc'}*"
         </pre><p>There are number of important points here:</p><ul><li> <code>Line 6</code> defines several macros that are used later on throughout the model's elements to shorten the synonym declarations. Note how macros coupled with option groups shorten overall synonym declarations 1000:1 vs. manually listing all possible word permutations.<li> <code>Lines 22, 23</code> define model properties that allow for multi-word synonyms in this model to be <a class="not-code" target="javadoc" [...]
 package demo
 
diff --git a/feed.xml b/feed.xml
index 675eef2..c7b9d6c 100644
--- a/feed.xml
+++ b/feed.xml
@@ -1 +1 @@
-<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.1.1">Jekyll</generator><link href="http://localhost:4000/feed.xml" rel="self" type="application/atom+xml" /><link href="http://localhost:4000/" rel="alternate" type="text/html" /><updated>2021-08-22T13:42:27-07:00</updated><id>http://localhost:4000/feed.xml</id><title type="html">Apache NLPCraft</title></feed>
\ No newline at end of file
+<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom" ><generator uri="https://jekyllrb.com/" version="4.2.0">Jekyll</generator><link href="/feed.xml" rel="self" type="application/atom+xml" /><link href="/" rel="alternate" type="text/html" /><updated>2021-09-03T21:46:18-07:00</updated><id>/feed.xml</id><title type="html">Apache NLPCraft</title></feed>
\ No newline at end of file
diff --git a/first-example.html b/first-example.html
index 84010ce..64c0b4a 100644
--- a/first-example.html
+++ b/first-example.html
@@ -70,7 +70,7 @@ elements:
       - "no &lt;LIGHT&gt;"
 
 intents:
-  - "intent=ls term(act)={has(tok_groups(), 'act')} term(loc)={tok_id() == 'ls:loc'}*"
+  - "intent=ls term(act)={has(tok_groups, 'act')} term(loc)={# == 'ls:loc'}*"
         </pre><p>There are number of important points here:</p><ul><li> <code>Line 6</code> defines several macros that are used later on throughout the model's elements to shorten the synonym declarations. Note how macros coupled with option groups shorten overall synonym declarations 1000:1 vs. manually listing all possible word permutations.<li> <code>Lines 22, 23</code> define model properties that allow for multi-word synonyms in this model to be <a class="not-code" target="javadoc" [...]
 package demo
 
diff --git a/intent-matching.html b/intent-matching.html
index 4fc65c2..e1d9295 100644
--- a/intent-matching.html
+++ b/intent-matching.html
@@ -15,20 +15,19 @@
  limitations under the License.
 -->
 
-<!doctype html><html lang="en"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-180663034-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-180663034-1'); </script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open sourc [...]
+<!doctype html><html lang="en"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-180663034-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-180663034-1'); </script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open sourc [...]
             intent=x
-                term(a)~{tok_id() == 'my_elm'}
-                term(b)={has(tok_groups(), "my_group")}
-        </pre><p> IDL intent defines a match between the parsed user input represented as the collection of <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html">tokens</a>, and the user-define callback method. IDL intents are <a href="#binding">bound</a> to their callbacks via <a href="#binding">Java annotation</a> and can be <a href="#idl_location">located</a> in the same Java annotations or placed in model YAML/JSON file as well as in external [...]
+                term(a)~{# == 'my_elm'}
+                term(b)={has(tok_groups, "my_group")}
+        </pre><p> IDL intent defines a match between the parsed user input represented as the collection of <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html">tokens</a>, and the user-define callback method. IDL intents are <a href="#binding">bound</a> to their callbacks via <a href="#binding">Java annotation</a> and can be <a href="#idl_location">located</a> in the same Java annotations or placed in model YAML/JSON file as well as in external [...]
                     intent=xa
                         flow="^(?:login)(^:logout)*$"
                         meta={'enabled': true}
-                        term(a)={month() >= 6 && !(tok_id()) != "z" && meta_intent('enabled') == true}[1,3]
+                        term(a)={month >= 6 && !# != "z" && meta_intent('enabled') == true}[1,3]
                         term(b)~{
-                            @tokId = tok_id()
                             @usrTypes = meta_model('user_types')
 
-                            (tokId == 'order' || tokId == 'order_cancel') && has_all(@usrTypes, list(1, 2, 3))
+                            (# == 'order' || # == 'order_cancel') && has_all(@usrTypes, list(1, 2, 3))
                         }
 
                     intent=xb
@@ -42,7 +41,7 @@
                         flow=/#flowModelMethod/
                         term(a)=/org.mypackage.MyClass#termMethod/?
                         fragment(frag, {'p1': 25, 'p2': {'a': false}})
-                </pre><p><b>NOTES:</b></p><dl><dt> <code>intent=xa</code> <sup><small>line 1</small></sup><br/> <code>intent=xb</code> <sup><small>line 12</small></sup><dd> <code>xa</code> and <code>xb</code> are the mandatory intent IDs. Intent ID is any arbitrary unique string matching the following lexer template: <code>(UNI_CHAR|UNDERSCORE|LETTER|DOLLAR)+(UNI_CHAR|DOLLAR|LETTER|[0-9]|COLON|MINUS|UNDERSCORE)*</code><dt><code>options={...}</code> <sup><small>line 13</small></sup><dd> < [...]
+                </pre><p><b>NOTES:</b></p><dl><dt> <code>intent=xa</code> <sup><small>line 1</small></sup><br/> <code>intent=xb</code> <sup><small>line 12</small></sup><dd> <code>xa</code> and <code>xb</code> are the mandatory intent IDs. Intent ID is any arbitrary unique string matching the following lexer template: <code>(UNI_CHAR|UNDERSCORE|LETTER|DOLLAR)+(UNI_CHAR|DOLLAR|LETTER|[0-9]|COLON|MINUS|UNDERSCORE)*</code><dt><code>options={...}</code> <sup><small>line 13</small></sup><dd> < [...]
                                     term(b)~{
                                         @a = meta_model('a')
                                         @lst = list(1, 2, 3, 4)
@@ -71,14 +70,14 @@
                                     term(a)=/org.mypackage.MyClass#termMethod/?
                                 </pre><p> Class name is optional in which case the model class will be used by default. Note that if the custom class is in fact specified, the instance of this class will be created for each term evaluation. This class must have a no-arg constructor to instantiate via standard Java reflection and its creation must be as light as possible to avoid performance degradation during its instantiation. For this reason it is recommended to have user-defined term  [...]
                     // Fragments.
-                    fragment=buzz term~{tok_id() == meta_frag('id')}
+                    fragment=buzz term~{# == meta_frag('id')}
                     fragment=when
                         term(nums)~{
                             // Term variable.
                             @type = meta_tok('nlpcraft:num:unittype')
                             @iseq = meta_tok('nlpcraft:num:isequalcondition')
 
-                            tok_id() == 'nlpcraft:num' && @type == 'datetime' && @iseq == true
+                            # == 'nlpcraft:num' && @type == 'datetime' && @iseq == true
                         }[0,7]
 
                     // Intents.
@@ -97,15 +96,15 @@
 
                     // Import using URL.
                     import('ftp://user:password@myhost:22/opt/globals.idl')
-                </pre><p> <b>NOTES:</b></p><ul class="recover-bottom-margin"><li> The effect of importing is the same as if the imported declarations were inserted in place of import statement.<li> Recursive and cyclic imports are detected and safely ignored.<li> Import statement starts with <code>import</code> keyword and has a string parameter that indicates the location of the resource to import.<li> For the classpath resource you don't need to specify leading forward slash.</ul><p></ [...]
+                </pre><p> <b>NOTES:</b></p><ul class="recover-bottom-margin"><li> The effect of importing is the same as if the imported declarations were inserted in place of import statement.<li> Recursive and cyclic imports are detected and safely ignored.<li> Import statement starts with <code>import</code> keyword and has a string parameter that indicates the location of the resource to import.<li> For the classpath resource you don't need to specify leading forward slash.</ul><p></ [...]
         intent=a
-            term~{tok_id() == 'x:id'}
-            term(nums)~{tok_id() == 'nlpcraft:num' && lowercase(meta_tok('nlpcraft:num:unittype')) == 'datetime'}[0,2]
+            term~{# == 'x:id'}
+            term(nums)~{# == 'nlpcraft:num' && lowercase(meta_tok('nlpcraft:num:unittype')) == 'datetime'}[0,2]
         </pre><p><b>NOTES:</b></p><ul><li> Intent has ID <code>a</code>.<li> Intent uses default conversational support (<code>true</code>) and default order (<code>false</code>).<li> Intent has two conversational terms (<code>~</code>) that have to be found for the intent to match. Note that second term is optional as it has <code>[0,2]</code> quantifier.<li> Both terms have to be found in the user input for the intent to match.<li> First term matches any single token with ID <code>x:id [...]
         intent=id2
             flow='id1 id2'
-            term={tok_id() == 'mytok' && signum(get(meta_tok('score'), 'best')) != -1}
-            term={has_any(tok_groups(), list('actors', 'owners')) && size(meta_part('partAlias, 'text')) > 10}
+            term={# == 'mytok' && signum(get(meta_tok('score'), 'best')) != -1}
+            term={has_any(tok_groups, list('actors', 'owners')) && size(meta_part('partAlias, 'text')) > 10}
         </pre><p><b>NOTES:</b></p><ul><li> Intent has ID <code>id2</code>.<li> Intent has dialog flow pattern: <code>'id1 id2'</code>. It expects the sequence of intents <code>id1</code> and <code>id2</code> somewhere in the history of previously matched intents in the course of the current conversation.<li> Intent has two non-conversational terms (<code>=</code>). Both terms have to be present only once (their implicit quantifiers are <code>[1,1]</code>).<li> Both terms have to be found [...]
 ;(function()
 {
@@ -143,122 +142,137 @@
 })();
                 </pre><p> Make sure to include this script in your page:</p><pre class="brush: js">
 &lt;script src="/path/to/your/scripts/shBrushIdl.js" type="text/javascript"&gt;&lt;/script&gt;
-                </pre><p> And then you can use it to display IDL code from HTML using <code>&lt;pre&gt;</code> tag and <code>brush: idl</code> CSS class:</p><pre class="brush: html">
+                </pre><p> And then you can use it to display IDL code from HTML using <code>&lt;pre&gt;</code> tag and <code>brush: idl</code> CSS class:</p><pre class="brush: html, highlight: [1]">
 &lt;pre class="brush: idl"&gt;
     intent=xa
         flow="^(?:login)(^:logout)*$"
         meta={'enabled': true}
-        term(a)={month() >= 6 && !(tok_id()) != "z" && meta_intent('enabled') == true}[1,3]
+        term(a)={month >= 6 && # != "z" && meta_intent('enabled') == true}[1,3]
         term(b)~{
-            @tokId = tok_id()
             @usrTypes = meta_model('user_types')
 
-            (tokId == 'order' || tokId == 'order_cancel') && has_all(@usrTypes, list(1, 2, 3))
+            (# == 'order' || # == 'order_cancel') && has_all(@usrTypes, list(1, 2, 3))
         }
 &lt;/pre&gt;
-                </pre></div></div></section><section id="idl_functions" ><h2 class="section-title">IDL Functions <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2><p> IDL provides over 140 built-in functions that can be used in IDL intent definitions. IDL function call takes on traditional <code><b>fun_name</b>(p1, p2, ... pk)</code> syntax form. IDL function operates on stack - its parameters are taken from the stack and its result is put back onto stack which in [...]
-tok_id() == 'my_id'
-tok_id(tok_this()) == 'my_id'
+                </pre></div></div></section><section id="idl_functions" ><h2 class="section-title">IDL Functions <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2><p> IDL provides over 150 built-in functions that can be used in IDL intent definitions. IDL function call takes on traditional <code><b>fun_name</b>(p1, p2, ... pk)</code> syntax form. If function has no parameters, the brackets are optional. IDL function operates on stack - its parameters are taken fro [...]
+                tok_id() == 'id'
+                tok_id == 'id' // Remember - empty parens are optional.
+                # == 'id'
+            </pre></div><p> When chaining the function calls IDL uses mathematical notation (a-la Python) rather than object-oriented one: IDL <code>length(trim(" text "))</code> vs. OOP-style <code>" text ".trim().length()</code>.</p><p> IDL functions operate with the following types:</p><table class="gradient-table"><thead><tr><th>JVM Type<th>IDL Name<th>Notes<tbody><tr><td><code>java.lang.String</code><td><code>String</code><td><tr><td> <code>java.lang.Long</code><br/> <code>java.lang [...]
+tok_id == 'my_id'
+# == 'my_id'
+tok_id(tok_this) == 'my_id'
+#(tok_this) == 'my_id'
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_lemma"> <span><code><b>tok_lemma</b>(t: Token<em><sub>opt</sub></em>) ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getLemma()">token lemma</a> </span> </button></h2></div><div id="fn_tok_lem [...]
-tok_lemma() == 'work'
-tok_lemma(tok_this()) == 'work'
+tok_lemma == 'work'
+tok_lemma(tok_this) == 'work'
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_stem"> <span><code><b>tok_stem</b>(t: Token<em><sub>opt</sub></em>) ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getStem()">token stem</a></span> </button></h2></div><div id="fn_tok_stem" cl [...]
-tok_stem() == 'work'
-tok_stem(tok_this()) == 'work'
+tok_stem == 'work'
+tok_stem(tok_this) == 'work'
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_pos"> <span><code><b>tok_pos</b>(t: Token<em><sub>opt</sub></em>) ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getPos()">token PoS</a> tag</span> </button></h2></div><div id="fn_tok_pos" cla [...]
-tok_pos() == 'NN'
-tok_pos(tok_this()) == 'NN'
+tok_pos == 'NN'
+tok_pos(tok_this) == 'NN'
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_sparsity"> <span><code><b>tok_sparsity</b>(t: Token<em><sub>opt</sub></em>) ⇒ Long </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getSparsity()">token sparsity</a> value</span> </button></h2></div><div [...]
-tok_sparsity()
-tok_sparsity(tok_this())
+tok_sparsity
+tok_sparsity(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_unid"> <span><code><b>tok_unid</b>(t: Token<em><sub>opt</sub></em>) ⇒ String </code></span> <span class="fn-short-desc">Returns internal <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getUnid()">token globally unique ID</a></span> </button></h2></div>< [...]
-tok_unid()
-tok_unid(tok_this())
+tok_unid
+tok_unid(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_abstract"> <span><code><b>tok_is_abstract</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isAbstract()">token abstract</a> flag</span> </button></h2></d [...]
-tok_is_abstract()
-tok_is_abstract(tok_this())
+tok_is_abstract
+tok_is_abstract(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_bracketed"> <span><code><b>tok_is_bracketed</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isBracketed()">token bracketed</a> flag</span> </button></h2 [...]
-tok_is_bracketed()
-tok_is_bracketed(tok_this())
+tok_is_bracketed
+tok_is_bracketed(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_direct"> <span><code><b>tok_is_direct</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isDirect()">token direct</a> flag</span> </button></h2></div><div  [...]
-tok_is_direct()
-tok_is_direct(tok_this())
+tok_is_direct
+tok_is_direct(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_permutated"> <span><code><b>tok_is_permutated</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isPermutated()">token permutated</a> flag</span> </button> [...]
-tok_is_permutated()
-tok_is_permutated(tok_this())
+tok_is_permutated
+tok_is_permutated(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_english"> <span><code><b>tok_is_english</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isEnglish()">token English</a> detection flag</span> </button></ [...]
-tok_is_english()
-tok_is_english(tok_this())
+tok_is_english
+tok_is_english(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_freeword"> <span><code><b>tok_is_freeword</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isFreeWord()">token freeword</a> flag</span> </button></h2></d [...]
-tok_is_freeword()
-tok_is_freeword(tok_this())
+tok_is_freeword
+tok_is_freeword(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_quoted"> <span><code><b>tok_is_quoted</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isQuoted()">token quoted</a> flag</span> </button></h2></div><div  [...]
-tok_is_quoted()
-tok_is_quoted(tok_this())
+tok_is_quoted
+tok_is_quoted(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_stopword"> <span><code><b>tok_is_stopword</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isStopWord()">token stopword</a> flag</span> </button></h2></d [...]
-tok_is_stopword()
-tok_is_stopword(tok_this())
+tok_is_stopword
+tok_is_stopword(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_swear"> <span><code><b>tok_is_swear</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isSwearWord()">token swear word</a> flag</span> </button></h2></div> [...]
-tok_is_swear()
-tok_is_swear(tok_this())
+tok_is_swear
+tok_is_swear(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_user"> <span><code><b>tok_is_user</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns if this token is <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isUserDefined()">user-defined</a></span> </button></h [...]
-tok_is_user()
-tok_is_user(tok_this())
+tok_is_user
+tok_is_user(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_wordnet"> <span><code><b>tok_is_wordnet</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns if this token is part of <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#isWordnet()">WordNet</a> dictionary</sp [...]
-tok_is_wordnet()
-tok_is_wordnet(tok_this())
+tok_is_wordnet
+tok_is_wordnet(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_ancestors"> <span><code><b>tok_ancestors</b>(t: Token<em><sub>opt</sub></em>) ⇒ List[String] </code></span> <span class="fn-short-desc">Gets the <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getAncestors()">list of all parent IDs</a> for this token</s [...]
-tok_ancestors()
-tok_ancestors(tok_this())
+tok_ancestors
+tok_ancestors(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_parent"> <span><code><b>tok_parent</b>(t: Token<em><sub>opt</sub></em>) ⇒ String </code></span> <span class="fn-short-desc">Gets optional <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getParentId()">parent ID</a> for this token</span> </button></h2></ [...]
-tok_parent()
-tok_parent(tok_this())
+tok_parent
+tok_parent(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_groups"> <span><code><b>tok_groups</b>(t: Token<em><sub>opt</sub></em>) ⇒ List[String] </code></span> <span class="fn-short-desc">Gets the list of <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getGroups()">groups</a> this token belongs to</span> </but [...]
-tok_groups()
-tok_groups(tok_this())
+tok_groups
+tok_groups(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_value"> <span><code><b>tok_value</b>(t: Token<em><sub>opt</sub></em>) ⇒ String </code></span> <span class="fn-short-desc">Gets the <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getValue()">value</a> if this token was detected via element's value</span [...]
-tok_value()
-tok_value(tok_this())
+tok_value
+tok_value(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_aliases"> <span><code><b>tok_aliases</b>(t: Token<em><sub>opt</sub></em>) ⇒ List[String] </code></span> <span class="fn-short-desc">Gets optional <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getAliases()">list of aliases</a> this token is known by</s [...]
-has(tok_aliases(), 'alias')
-has(tok_aliases(tok_this()), 'alias')
+has(tok_aliases, 'alias')
+has(tok_aliases(tok_this), 'alias')
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_start_idx"> <span><code><b>tok_start_idx</b>(t: Token<em><sub>opt</sub></em>) ⇒ Long </code></span> <span class="fn-short-desc">Gets <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getStartCharIndex()">start character index</a> of this token in the orig [...]
-tok_start_idx()
-tok_start_idx(tok_this())
+tok_start_idx
+tok_start_idx(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_end_idx"> <span><code><b>tok_end_idx</b>(t: Token<em><sub>opt</sub></em>) ⇒ Long </code></span> <span class="fn-short-desc">Gets <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getEndCharIndex()">end character index</a> of this token in the original tex [...]
-tok_end_idx()
-tok_end_idx(tok_this())
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_this"> <span><code><b>tok_this</b>() ⇒ Token </code></span> <span class="fn-short-desc">Returns current token.</span> </button></h2></div><div id="fn_tok_this" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current token.</p><p  [...]
-tok_this()
+tok_end_idx
+tok_end_idx(tok_this)
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_this"> <span><code><b>tok_this</b> ⇒ Token </code></span> <span class="fn-short-desc">Returns current token.</span> </button></h2></div><div id="fn_tok_this" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current token.</p><p cl [...]
+tok_this
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_find_part"> <span><code><b>tok_find_part</b>(t: Token, a: String) ⇒ Token </code></span> <span class="fn-short-desc">Finds part token with given alias or ID.</span> </button></h2></div><div id="fn_tok_find_part" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <em [...]
 //         if any, or throws runtime exception.
-tok_find_part(tok_this(), 'alias')
+tok_find_part(tok_this, 'alias')
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_has_part"> <span><code><b>tok_has_part</b>(t: Token, a: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Checks if part token with given alias or ID exists.</span> </button></h2></div><div id="fn_tok_has_part" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn- [...]
-tok_has_part(tok_this(), 'alias')
+tok_has_part(tok_this, 'alias')
 
 // Result: part token 'alias' if it exists or the current token if it does not.
-@this = tok_this()
+@this = tok_this
 @tok = if(tok_has_part(@this, 'alias'), tok_find_part(@this, 'alias'), @this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_find_parts"> <span><code><b>tok_find_parts</b>(t: Token, a: String) ⇒ List[Token] </code></span> <span class="fn-short-desc">Finds part tokens with given alias or ID.</span> </button></h2></div><div id="fn_tok_find_parts" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn- [...]
-tok_find_parts(tok_this(), 'alias')
+tok_find_parts(tok_this, 'alias')
 
 // Result: part token 'alias' if it exists or the current token if it does not.
-@this = tok_this()
+@this = tok_this
 @parts = tok_find_parts(@this, 'alias')
 @tok = if(is_empty(@parts), @this, first(@parts))
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_txt"> <span><code><b>tok_txt</b>(t: Token<em><sub>opt</sub></em>) ⇒ String </code></span> <span class="fn-short-desc">Returns token's original text</span> </button></h2></div><div id="fn_tok_txt" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</e [...]
+tok_txt
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_norm_txt"> <span><code><b>tok_norm_txt</b>(t: Token<em><sub>opt</sub></em>) ⇒ String </code></span> <span class="fn-short-desc">Returns token's normalized text</span> </button></h2></div><div id="fn_tok_norm_txt" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <e [...]
+tok_norm_txt
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_index"> <span><code><b>tok_index</b>(t: Token<em><sub>opt</sub></em>) ⇒ Long </code></span> <span class="fn-short-desc">Returns token's index in the original input</span> </button></h2></div><div id="fn_tok_index" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> < [...]
-tok_index() == 1
-tok_index(tok_this()) == 1
+tok_index == 1
+tok_index(tok_this) == 1
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_first"> <span><code><b>tok_is_first</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if this token is the first in the original input</span> </button></h2></div><div id="fn_tok_is_first" class="collapse" data-parent="#token_fns">< [...]
-tok_is_first()
-tok_is_first(tok_this())
+tok_is_first
+tok_is_first(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_last"> <span><code><b>tok_is_last</b>(t: Token<em><sub>opt</sub></em>) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if this token is the last in the original input</span> </button></h2></div><div id="fn_tok_is_last" class="collapse" data-parent="#token_fns"><div  [...]
-tok_is_last()
-tok_is_last(tok_this())
+tok_is_last
+tok_is_last(tok_this)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_before_id"> <span><code><b>tok_is_before_id</b>(id: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if there is a token with ID <code>id</code> after this token</span> </button></h2></div><div id="fn_tok_is_before_id" class="collapse" data-parent="#token_fns [...]
 tok_is_before_id('a')
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_after_id"> <span><code><b>tok_is_after_id</b>(id: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if there is a token with ID <code>id</code> before this token</span> </button></h2></div><div id="fn_tok_is_after_id" class="collapse" data-parent="#token_fns"> [...]
 tok_is_after_id('a')
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_between_ids"> <span><code><b>tok_is_between_ids</b>(id1: String, id2: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if this token is located between tokens with IDs <code>id1</code> and <code>id2</code>.</span> </button></h2></div><div id="fn_tok_is_betwee [...]
+tok_is_between_ids('before', 'after')
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_between_groups"> <span><code><b>tok_is_between_groups</b>(grp1: String, grp2: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if this token is located between tokens with group IDs <code>grp1</code> and <code>grp2</code>.</span> </button></h2></div><div id=" [...]
+tok_is_between_groups('before', 'after')
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_between_parents"> <span><code><b>tok_is_between_parents</b>(id1: String, id2: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if this token is located between tokens with parent IDs <code>id1</code> and <code>id2</code>.</span> </button></h2></div><div id="f [...]
+tok_is_between_parents('before', 'after')
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_before_group"> <span><code><b>tok_is_before_group</b>(grp: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if there is a token that belongs to the <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getGroups()">gro [...]
 tok_is_before_group('grp')
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_after_group"> <span><code><b>tok_is_after_group</b>(grp: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if there is a token that belongs to the <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getGroups()">group [...]
@@ -267,45 +281,47 @@ tok_is_after_group('grp')
 tok_is_after_parent('owner')
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_is_before_parent"> <span><code><b>tok_is_before_parent</b>(parentId: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <code>true</code> if there is a token with <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCToken.html#getParentId()">parent ID [...]
 tok_is_before_parent('owner')
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_all"> <span><code><b>tok_all</b>() ⇒ List[Token] </code></span> <span class="fn-short-desc">Returns all tokens from the original input </span> </button></h2></div><div id="fn_tok_all" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Retur [...]
-tok_all()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_count"> <span><code><b>tok_count</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns number of tokens from the original input </span> </button></h2></div><div id="fn_tok_count" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br>  [...]
-tok_count()
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_all"> <span><code><b>tok_all</b> ⇒ List[Token] </code></span> <span class="fn-short-desc">Returns all tokens from the original input </span> </button></h2></div><div id="fn_tok_all" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns [...]
+tok_all
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_count"> <span><code><b>tok_count</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns number of tokens from the original input </span> </button></h2></div><div id="fn_tok_count" class="collapse" data-parent="#token_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Re [...]
+tok_count
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_all_for_id"> <span><code><b>tok_all_for_id</b>(id: String) ⇒ List[Token] </code></span> <span class="fn-short-desc">Returns list of tokens from the original input with ID <code>id</code> </span> </button></h2></div><div id="fn_tok_all_for_id" class="collapse" data-parent="#token_fns"><div class="car [...]
 tok_all_for_id('id')
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_all_for_parent"> <span><code><b>tok_all_for_id</b>(parentId: String) ⇒ List[Token] </code></span> <span class="fn-short-desc">Returns list of tokens from the original input with parent ID <code>parentId</code> </span> </button></h2></div><div id="fn_tok_all_for_parent" class="collapse" data-parent=" [...]
 tok_all_for_parent('id')
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_tok_all_for_group"> <span><code><b>tok_all_for_group</b>(grp: String) ⇒ List[Token] </code></span> <span class="fn-short-desc">Returns list of tokens from the original input that belong to the group <code>grp</code> </span> </button></h2></div><div id="fn_tok_all_for_group" class="collapse" data-parent= [...]
 tok_all_for_group('grp')
-</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_text" role="tabpanel"><div class="accordion" id="text_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_length"> <span><code><b>length</b>(p: {String|List|Map}) ⇒ Long </code></span> <span class="fn-short-desc">Returns size or length of the given string, list or map</span> </button></h2></div><div [...]
+</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_text" role="tabpanel"><div class="accordion" id="text_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_length"> <span><code><b>length</b>(p: {String|List|Map}) ⇒ Long </code></span> <span class="fn-short-desc">Returns size or length of the given string, list or map</span> </button></h2></div><div [...]
 length("some text")
 
 // Result: 3
 @lst = list(1, 2, 3)
 size(@lst)
 count(@lst)
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_trim"> <span><code><b>trim</b>(p: String) ⇒ Long </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html#trim()"><code>String.trim()</code></a></span> </button></h2></div><div id="fn_trim" class="collap [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_regex"> <span><code><b>regex</b>(s: String, rx: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Checks whether string <code>s</code> matches Java regular expression <code>rx</code></span> </button></h2></div><div id="fn_regex" class="collapse" data-parent="#text_fns"><div class="card-body"> [...]
+regex('_textabc', '^text.*$') // Returns 'false'.
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_trim"> <span><code><b>trim</b>(p: String) ⇒ Long </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html#trim()"><code>String.trim()</code></a></span> </button></h2></div><div id="fn_trim" class="collap [...]
 trim(" text ")
 strip(" text ")
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_uppercase"> <span><code><b>uppercase</b>(p: String) ⇒ String </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html#toUpperCase()"><code>String.toUpperCase()</code></a></span> </button></h2></div><div  [...]
 uppercase("text")
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_lowercase"> <span><code><b>lowercase</b>(p: String) ⇒ String </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html#toLowerCase()"><code>String.toLowerCase()</code></a></span> </button></h2></div><div  [...]
 lowercase("TeXt")
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_alpha"> <span><code><b>is_alpha</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAlpha-java.lang.CharSequence-"><code>StringUtils.isAlpha()</code></a></ [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_alpha"> <span><code><b>is_alpha</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAlpha-java.lang.CharSequence-"><code>StringUtils.isAlpha()</code></a>< [...]
 is_alpha("text")
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_alphanum"> <span><code><b>is_alphanum</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAlphanumeric-java.lang.CharSequence-"><code>StringUtils.isAlphanu [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_alphanum"> <span><code><b>is_alphanum</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAlphanumeric-java.lang.CharSequence-"><code>StringUtils.isAlphan [...]
 is_alphanum("text123")
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_whitespace"> <span><code><b>is_whitespace</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isWhitespace-java.lang.CharSequence-"><code>StringUtils.isWhite [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_whitespace"> <span><code><b>is_whitespace</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isWhitespace-java.lang.CharSequence-"><code>StringUtils.isWhit [...]
 is_whitespace("text123")
 // Result: true
 is_whitespace("   ")
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_num"> <span><code><b>is_num</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isNumeric-java.lang.CharSequence-"><code>StringUtils.isNumeric()</code></a></ [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_num"> <span><code><b>is_num</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isNumeric-java.lang.CharSequence-"><code>StringUtils.isNumeric()</code></a>< [...]
 is_num("123")
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_numspace"> <span><code><b>is_numspace</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isNumericSpace-java.lang.CharSequence-"><code>StringUtils.isNumeric [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_numspace"> <span><code><b>is_numspace</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isNumericSpace-java.lang.CharSequence-"><code>StringUtils.isNumeri [...]
 is_numspace("  123")
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_alphaspace"> <span><code><b>is_alphaspace</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAlphaSpace-java.lang.CharSequence-"><code>StringUtils.isAlpha [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_alphaspace"> <span><code><b>is_alphaspace</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAlphaSpace-java.lang.CharSequence-"><code>StringUtils.isAlph [...]
 is_alphaspace("  text  ")
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_alphanumspace"> <span><code><b>is_alphanumspace</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="http://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAlphaNumericSpace-java.lang.CharSequence-"><code>String [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_is_alphanumspace"> <span><code><b>is_alphanumspace</b>(p: String) ⇒ Boolean </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://commons.apache.org/proper/commons-lang/apidocs/org/apache/commons/lang3/StringUtils.html#isAlphaNumericSpace-java.lang.CharSequence-"><code>Strin [...]
 is_alphanumspace(" 123 text  ")
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_split"> <span><code><b>split</b>(p1: String, p2: String) ⇒ List[String] </code></span> <span class="fn-short-desc">Calls <code><b>p1</b></code>.<a target="javadoc" href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/String.html#split(java.lang.String)"><code>split(<b>p2</b>)</co [...]
 split("a|b|c", "|")
@@ -367,10 +383,10 @@ cbrt(-27.0)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_square"> <span><code><b>square</b>(x: {Long|Double}) ⇒ {Long|Double} </code></span> <span class="fn-short-desc">Returns square of <code>><b>x</b></code></span> </button></h2></div><div id="fn_square" class="collapse" data-parent="#math_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em [...]
 square(2)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_log1p"> <span><code><b>log1p</b>(d: Double) ⇒ Double </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Math.html#log1p(double)"><code>Math.log1p(<b>d</b>)</code></a></span> </button></h2></div><div id="fn_log [...]
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_pi"> <span><code><b>pi</b>() ⇒ Double </code></span> <span class="fn-short-desc">Returns PI constant</span> </button></h2></div><div id="fn_pi" class="collapse" data-parent="#math_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns PI constant.</p><p class="fn-usage"> <em>U [...]
-pi()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_euler"> <span><code><b>pi</b>() ⇒ Double </code></span> <span class="fn-short-desc">Returns Euler constant</span> </button></h2></div><div id="fn_euler" class="collapse" data-parent="#math_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns Euler constant.</p><p class="fn-u [...]
-euler()
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_pi"> <span><code><b>pi</b> ⇒ Double </code></span> <span class="fn-short-desc">Returns PI constant</span> </button></h2></div><div id="fn_pi" class="collapse" data-parent="#math_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns PI constant.</p><p class="fn-usage"> <em>Usa [...]
+pi
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_euler"> <span><code><b>pi</b> ⇒ Double </code></span> <span class="fn-short-desc">Returns Euler constant</span> </button></h2></div><div id="fn_euler" class="collapse" data-parent="#math_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns Euler constant.</p><p class="fn-usa [...]
+euler
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_max"> <span><code><b>max</b>(c: List) ⇒ Any </code></span> <span class="fn-short-desc">Returns maximum value for given list</span> </button></h2></div><div id="fn_max" class="collapse" data-parent="#math_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns maximum value for  [...]
 max(list(1, 2, 3))
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_min"> <span><code><b>min</b>(c: List) ⇒ Any </code></span> <span class="fn-short-desc">Returns minimum value for given list</span> </button></h2></div><div id="fn_min" class="collapse" data-parent="#math_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns minimum value for  [...]
@@ -384,7 +400,7 @@ stdev(list("1.0", 2, "3"))
 pow(2.0, 2.0)
 </pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_hypot"> <span><code><b>hypot</b>(d1: Double, d2: Double) ⇒ Double </code></span> <span class="fn-short-desc">Calls <a target="javadoc" href="https://docs.oracle.com/en/java/javase/15/docs/api/java.base/java/lang/Math.html#hypot(double, double)"><code>Math.hypot(<b>d2</b>, <b>d2</b>)</code></a></span> </ [...]
 </pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_collection" role="tabpanel"><div class="accordion" id="collections_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_list"> <span><code><b>list</b>(t: Any...<em><sub>opt</sub></em>) ⇒ List[Any] </code></span> <span class="fn-short-desc">Returns new list with given parameters</span> </button></h2>< [...]
-list()
+list
 // Result: [1, 2, 3]
 list(1, 2, 3)
 // Result: ["1", true, 1.25]
@@ -445,68 +461,68 @@ meta_frag('my:prop')
 meta_sys('java.home')
 // Result: 'HOME' environment variable.
 meta_sys('HOME')
-</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_datetime" role="tabpanel"><div class="accordion" id="datetime_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_year"> <span><code><b>year</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current year</span> </button></h2></div><div id="fn_year" class="collapse" data-parent="#dateti [...]
-year()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_month"> <span><code><b>month</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current month: 1 ... 12 </span> </button></h2></div><div id="fn_month" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current month: 1 . [...]
-month()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_day_of_month"> <span><code><b>day_of_month</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current day of the month: 1 ... 31 </span> </button></h2></div><div id="fn_day_of_month" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em [...]
-day_of_month()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_day_of_week"> <span><code><b>day_of_week</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current day of the week: 1 ... 7 </span> </button></h2></div><div id="fn_day_of_week" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> [...]
-day_of_week()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_day_of_year"> <span><code><b>day_of_year</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current day of the year: 1 ... 365 </span> </button></h2></div><div id="fn_day_of_year" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><b [...]
-day_of_year()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_hour"> <span><code><b>hour</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current hour: 0 ... 23 </span> </button></h2></div><div id="fn_hour" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current hour: 0 ... 23 [...]
-hour()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_minute"> <span><code><b>minute</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current minute: 0 ... 59 </span> </button></h2></div><div id="fn_minute" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current minute [...]
-minute()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_second"> <span><code><b>second</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current second: 0 ... 59 </span> </button></h2></div><div id="fn_second" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current second [...]
-second()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_week_of_month"> <span><code><b>week_of_month</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current week of the month: 1 ... 4 </span> </button></h2></div><div id="fn_week_of_month" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:< [...]
-week_of_month()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_week_of_year"> <span><code><b>week_of_year</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current week of the year: 1 ... 56 </span> </button></h2></div><div id="fn_week_of_year" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em [...]
-week_of_year()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_quarter"> <span><code><b>quarter</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current quarter: 1 ...4 </span> </button></h2></div><div id="fn_quarter" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current quar [...]
-quarter()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_now"> <span><code><b>now</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns current time in milliseconds </span> </button></h2></div><div id="fn_now" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current time in mil [...]
-now()
-</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_req" role="tabpanel"><div class="accordion" id="req_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_id"> <span><code><b>req_id</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#ge [...]
-req_id()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_normtext"> <span><code><b>req_normtext</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns request <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getNormalizedText()">normalied text</a></span> </button></h2></div><div id="fn_req_normtex [...]
-req_normtext()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_tstamp"> <span><code><b>req_tstamp</b>() ⇒ Long </code></span> <span class="fn-short-desc">Gets UTC/GMT receive <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getNormalizedText()">timestamp</a></span> </button></h2></div><div id="fn_req_tstamp" class [...]
-req_tstamp()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_addr"> <span><code><b>req_addr</b>() ⇒ String </code></span> <span class="fn-short-desc">Gets remote client <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getRemoteAddress()">address</a></span> </button></h2></div><div id="fn_req_addr" class="collaps [...]
-req_addr()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_agent"> <span><code><b>req_agent</b>() ⇒ String </code></span> <span class="fn-short-desc">Gets remote client <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getClientAgent()">agent</a></span> </button></h2></div><div id="fn_req_agent" class="collapse [...]
-req_agent()
-</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_user" role="tabpanel"><div class="accordion" id="user_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_id"> <span><code><b>user_id</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#g [...]
-user_id()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_fname"> <span><code><b>user_fname</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#getFirstName()">user first name</a></span> </button></h2></div><div id="fn_user_fname" class="collapse" d [...]
-user_fname()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_lname"> <span><code><b>user_lname</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#getLastName()">user last name</a></span> </button></h2></div><div id="fn_user_lname" class="collapse" dat [...]
-user_lname()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_email"> <span><code><b>user_email</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#getEmail()">user email</a></span> </button></h2></div><div id="fn_user_email" class="collapse" data-paren [...]
-user_email()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_admin"> <span><code><b>user_admin</b>() ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#isAdmin()">user admin</a> flag</span> </button></h2></div><div id="fn_user_admin" class="collapse" data- [...]
-user_admin()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_signup_tstamp"> <span><code><b>user_signup_tstamp</b>() ⇒ Long </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#getSignupTimestamp()">user signup timestamp</a></span> </button></h2></div><div id="fn_user [...]
-user_signup_tstamp()
-</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_company" role="tabpanel"><div class="accordion" id="company_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_id"> <span><code><b>comp_id</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompa [...]
-comp_id()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_name"> <span><code><b>comp_name</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getName()">company name</a></span> </button></h2></div><div id="fn_comp_name" class="collapse" data-pare [...]
-comp_name()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_website"> <span><code><b>comp_website</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getWebsite()">company website</a></span> </button></h2></div><div id="fn_comp_website" class="coll [...]
-comp_website()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_country"> <span><code><b>comp_country</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getCountry()">company country</a></span> </button></h2></div><div id="fn_comp_country" class="coll [...]
-comp_country()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_region"> <span><code><b>comp_region</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getRegion()">company region</a></span> </button></h2></div><div id="fn_comp_region" class="collapse" [...]
-comp_region()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_city"> <span><code><b>comp_city</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getCity()">company city</a></span> </button></h2></div><div id="fn_comp_city" class="collapse" data-pare [...]
-comp_city()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_addr"> <span><code><b>comp_addr</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getAddress()">company address</a></span> </button></h2></div><div id="fn_comp_addr" class="collapse" dat [...]
-comp_addr()
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_postcode"> <span><code><b>comp_postcode</b>() ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getPostalCode()">company postal code</a></span> </button></h2></div><div id="fn_comp_postcode" c [...]
-comp_postcode()
+</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_datetime" role="tabpanel"><div class="accordion" id="datetime_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_year"> <span><code><b>year</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current year</span> </button></h2></div><div id="fn_year" class="collapse" data-parent="#datetime [...]
+year
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_month"> <span><code><b>month</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current month: 1 ... 12 </span> </button></h2></div><div id="fn_month" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current month: 1 ... [...]
+month
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_day_of_month"> <span><code><b>day_of_month</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current day of the month: 1 ... 31 </span> </button></h2></div><div id="fn_day_of_month" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em>< [...]
+day_of_month
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_day_of_week"> <span><code><b>day_of_week</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current day of the week: 1 ... 7 </span> </button></h2></div><div id="fn_day_of_week" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> R [...]
+day_of_week
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_day_of_year"> <span><code><b>day_of_year</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current day of the year: 1 ... 365 </span> </button></h2></div><div id="fn_day_of_year" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> [...]
+day_of_year
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_hour"> <span><code><b>hour</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current hour: 0 ... 23 </span> </button></h2></div><div id="fn_hour" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current hour: 0 ... 23.< [...]
+hour
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_minute"> <span><code><b>minute</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current minute: 0 ... 59 </span> </button></h2></div><div id="fn_minute" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current minute:  [...]
+minute
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_second"> <span><code><b>second</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current second: 0 ... 59 </span> </button></h2></div><div id="fn_second" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current second:  [...]
+second
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_week_of_month"> <span><code><b>week_of_month</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current week of the month: 1 ... 4 </span> </button></h2></div><div id="fn_week_of_month" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</e [...]
+week_of_month
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_week_of_year"> <span><code><b>week_of_year</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current week of the year: 1 ... 56 </span> </button></h2></div><div id="fn_week_of_year" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em>< [...]
+week_of_year
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_quarter"> <span><code><b>quarter</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current quarter: 1 ...4 </span> </button></h2></div><div id="fn_quarter" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current quarte [...]
+quarter
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_now"> <span><code><b>now</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns current time in milliseconds </span> </button></h2></div><div id="fn_now" class="collapse" data-parent="#datetime_fns"><div class="card-body"><p class="fn-desc"> <em>Description:</em><br> Returns current time in milli [...]
+now
+</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_req" role="tabpanel"><div class="accordion" id="req_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_id"> <span><code><b>req_id</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getS [...]
+req_id
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_normtext"> <span><code><b>req_normtext</b> ⇒ String </code></span> <span class="fn-short-desc">Returns request <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getNormalizedText()">normalied text</a></span> </button></h2></div><div id="fn_req_normtext" [...]
+req_normtext
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_tstamp"> <span><code><b>req_tstamp</b> ⇒ Long </code></span> <span class="fn-short-desc">Gets UTC/GMT receive <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getNormalizedText()">timestamp</a></span> </button></h2></div><div id="fn_req_tstamp" class=" [...]
+req_tstamp
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_addr"> <span><code><b>req_addr</b> ⇒ String </code></span> <span class="fn-short-desc">Gets remote client <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getRemoteAddress()">address</a></span> </button></h2></div><div id="fn_req_addr" class="collapse" [...]
+req_addr
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_req_agent"> <span><code><b>req_agent</b> ⇒ String </code></span> <span class="fn-short-desc">Gets remote client <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCRequest.html#getClientAgent()">agent</a></span> </button></h2></div><div id="fn_req_agent" class="collapse"  [...]
+req_agent
+</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_user" role="tabpanel"><div class="accordion" id="user_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_id"> <span><code><b>user_id</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#get [...]
+user_id
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_fname"> <span><code><b>user_fname</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#getFirstName()">user first name</a></span> </button></h2></div><div id="fn_user_fname" class="collapse" dat [...]
+user_fname
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_lname"> <span><code><b>user_lname</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#getLastName()">user last name</a></span> </button></h2></div><div id="fn_user_lname" class="collapse" data- [...]
+user_lname
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_email"> <span><code><b>user_email</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#getEmail()">user email</a></span> </button></h2></div><div id="fn_user_email" class="collapse" data-parent= [...]
+user_email
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_admin"> <span><code><b>user_admin</b> ⇒ Boolean </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#isAdmin()">user admin</a> flag</span> </button></h2></div><div id="fn_user_admin" class="collapse" data-pa [...]
+user_admin
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_user_signup_tstamp"> <span><code><b>user_signup_tstamp</b> ⇒ Long </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCUser.html#getSignupTimestamp()">user signup timestamp</a></span> </button></h2></div><div id="fn_user_s [...]
+user_signup_tstamp
+</pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_company" role="tabpanel"><div class="accordion" id="company_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_id"> <span><code><b>comp_id</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany [...]
+comp_id
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_name"> <span><code><b>comp_name</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getName()">company name</a></span> </button></h2></div><div id="fn_comp_name" class="collapse" data-parent [...]
+comp_name
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_website"> <span><code><b>comp_website</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getWebsite()">company website</a></span> </button></h2></div><div id="fn_comp_website" class="collap [...]
+comp_website
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_country"> <span><code><b>comp_country</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getCountry()">company country</a></span> </button></h2></div><div id="fn_comp_country" class="collap [...]
+comp_country
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_region"> <span><code><b>comp_region</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getRegion()">company region</a></span> </button></h2></div><div id="fn_comp_region" class="collapse" d [...]
+comp_region
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_city"> <span><code><b>comp_city</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getCity()">company city</a></span> </button></h2></div><div id="fn_comp_city" class="collapse" data-parent [...]
+comp_city
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_addr"> <span><code><b>comp_addr</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getAddress()">company address</a></span> </button></h2></div><div id="fn_comp_addr" class="collapse" data- [...]
+comp_addr
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_comp_postcode"> <span><code><b>comp_postcode</b> ⇒ String </code></span> <span class="fn-short-desc">Returns <a class="not-code" target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCCompany.html#getPostalCode()">company postal code</a></span> </button></h2></div><div id="fn_comp_postcode" cla [...]
+comp_postcode
 </pre></div></div></div></div></div><div class="tab-pane fade show" id="fn_other" role="tabpanel"><div class="accordion" id="other_fns"><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_if"> <span><code><b>if</b>(c: Boolean, then: Any: else: Any) ⇒ Any </code></span> <span class="fn-short-desc">This function provides 'if-then-else' equivalent</span> </button></h2></div><div i [...]
 //  - 'list(1, 2, 3)' if 1st parameter is 'true'.
 //  - 'null' if 1st parameter is 'false'.
@@ -517,12 +533,12 @@ json('{"a": 2, "b": [1, 2, 3]}')
 to_string(1.25)
 // Result: list("1", "2", "3")
 to_string(list(1, 2, 3))
-</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_or_else"> <span><code><b>or_else</b>(p: Any, a: Any) ⇒ Any </code></span> <span class="fn-short-desc">Returns <code><b>p</b></code> if it is not <code>null</code>, <code><b>a</b></code> otherwise</span> </button></h2></div><div id="fn_or_else" class="collapse" data-parent="#other_fns"><div class="card-b [...]
+</pre></div></div></div><div class="card"><div class="card-header"><h2 class="mb-0"> <button class="btn btn-link btn-block text-left" type="button" data-toggle="collapse" data-target="#fn_or_else"> <span><code><b>or_else</b>(p: Any, a: Any) ⇒ Any </code></span> <span class="fn-short-desc">Returns <code><b>p</b></code> if it is not <code>null</code>, <code><b>a</b></code> otherwise</span> </button></h2></div><div id="fn_or_else" class="collapse" data-parent="#other_fns"><div class="card-b [...]
 @dflt = 'text'
 or_else(meta_model('some_prop'), @dflt)
 </pre></div></div></div></div></div></div></section><section id="idl_location" ><h2 class="section-title">IDL Location <a href="#"><i class="top-link fas fa-fw fa-angle-double-up"></i></a></h2><p> IDL declarations can be placed in different locations based on user preferences:</p><ul><li><p> <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCIntent.html">@NCIntent</a> annotation takes a string as its parameter that should be a valid IDL declaration. For example, Scala cod [...]
                 &#64;NCIntent("import('/opt/myproj/global_fragments.idl')") // Importing.
-                &#64;NCIntent("intent=act term(act)={has(tok_groups(), 'act')} fragment(f1)") // Defining in place.
+                &#64;NCIntent("intent=act term(act)={has(tok_groups, 'act')} fragment(f1)") // Defining in place.
                 def onMatch(
                     &#64;NCIntentTerm("act") actTok: NCToken,
                     &#64;NCIntentTerm("loc") locToks: List[NCToken]
@@ -539,7 +555,7 @@ or_else(meta_model('some_prop'), @dflt)
                     "intents": [
                         "import('/opt/myproj/global_fragments.idl')", // Importing.
                         "import('/opt/myproj/my_intents.idl')", // Importing.
-                        "intent=alarm term~{tok_id()=='x:alarm'}" // Defining in place.
+                        "intent=alarm term~{#=='x:alarm'}" // Defining in place.
                     ]
                 }
             </pre><li> External <code>*.idl</code> files contain IDL declarations and can be imported in any other places where IDL declarations are allowed. See <code>import()</code> statement explanation below. For example:<pre class="brush: idl">
@@ -552,14 +568,14 @@ or_else(meta_model('some_prop'), @dflt)
 
                     // Fragments.
                     // ----------
-                    fragment=buzz term~{tok_id() == 'x:alarm'}
+                    fragment=buzz term~{# == 'x:alarm'}
                     fragment=when
                         term(nums)~{
                             // Term variables.
                             @type = meta_tok('nlpcraft:num:unittype')
                             @iseq = meta_tok('nlpcraft:num:isequalcondition')
 
-                            tok_id() == 'nlpcraft:num' && @type != 'datetime' && @iseq == true
+                            # == 'nlpcraft:num' && @type != 'datetime' && @iseq == true
                         }[0,7]
 
                     // Intents.
@@ -607,7 +623,7 @@ or_else(meta_model('some_prop'), @dflt)
                     }
                 ],
                 "intents": [
-                    "intent=alarm term~{tok_id()=='x:alarm'} term(nums)~{tok_id() == 'nlpcraft:num' && meta_tok('nlpcraft:num:unittype') == 'datetime' && meta_tok('nlpcraft:num:isequalcondition') == true}[0,7]"
+                    "intent=alarm term~{# == 'x:alarm'} term(nums)~{# == 'nlpcraft:num' && meta_tok('nlpcraft:num:unittype') == 'datetime' && meta_tok('nlpcraft:num:isequalcondition') == true}[0,7]"
                 ]
             }
         </pre><pre class="brush: java, highlight: [1]">
@@ -639,10 +655,10 @@ or_else(meta_model('some_prop'), @dflt)
                     }
                 ],
                 </pre><p> All of these elements will be detected but since two of them are overlapping (<code>elm1</code> and <code>elm2</code>) there should be <b>two</b> parsing variants at the output of this step:</p><ol><li><code>elm1</code>('A', 'B') <code>freeword</code>('C') <code>elm3</code>('D')<li><code>freeword</code>('A') <code>elm2</code>('B', 'C') <code>elm3</code>('D')</ol><p></p><p> Note that at this point the <em>system cannot determine which of these variants is the bes [...]
-            &#64;NCIntent("intent=id term(termId)~{tok_id() == 'my_token'}?")
+            &#64;NCIntent("intent=id term(termId)~{# == 'my_token'}?")
             private NCResult onMatch(
                &#64;NCIntentTerm("termId") Optional&lt;NCToken&gt; myTok
             ) {
                ...
             }
-        </pre><p><b>NOTES:</b></p><ul><li> Conversational term <code>termId</code> has <code>[0,1]</code> quantifier (it's optional).<li> The formal parameter on the callback has a type of <code>Optional&lt;NCToken&gt;</code> because the term's quantifier is <code>[0,1]</code>.<li> Note that callback doesn't have an optional <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCIntentMatch.html">NCIntentMatch</a> parameter.</ul><h2 class="section-sub-title"><code>NCRejection [...]
+        </pre><p><b>NOTES:</b></p><ul><li> Conversational term <code>termId</code> has <code>[0,1]</code> quantifier (it's optional).<li> The formal parameter on the callback has a type of <code>Optional&lt;NCToken&gt;</code> because the term's quantifier is <code>[0,1]</code>.<li> Note that callback doesn't have an optional <a target="javadoc" href="/apis/latest/org/apache/nlpcraft/model/NCIntentMatch.html">NCIntentMatch</a> parameter.</ul><h2 class="section-sub-title"><code>NCRejection [...]
diff --git a/short-term-memory.html b/short-term-memory.html
index 1fe15ec..4162537 100644
--- a/short-term-memory.html
+++ b/short-term-memory.html
@@ -15,4 +15,4 @@
  limitations under the License.
 -->
 
-<!doctype html><html lang="en"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-180663034-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-180663034-1'); </script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open sourc [...]
+<!doctype html><html lang="en"> <script async src="https://www.googletagmanager.com/gtag/js?id=UA-180663034-1"></script> <script> window.dataLayer = window.dataLayer || []; function gtag(){dataLayer.push(arguments);} gtag('js', new Date()); gtag('config', 'UA-180663034-1'); </script><meta charset="utf-8"><meta http-equiv="X-UA-Compatible" content="IE=edge"><meta name="viewport" content="width=device-width, initial-scale=1, shrink-to-fit=no"><meta name="description" content="An open sourc [...]