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 <[email protected]>
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 [...]

Reply via email to