The previous tutorial introduced custom types. In Tutorial04, they will be used to change how they are autocompleted in the editor.
For details, see also
<!doctype html>
<html>
  <body>
    <!-- The HTML element that will hold the editor -->
    <div id="nls-container"></div>
    <!-- The only javascript file needed for nlScript -->
    <script src="https://cdn.jsdelivr.net/npm/@nlscript/nlscript@0.3.0/dist/umd/nlScript.js"></script>
    <!-- Load the library for the actual processing -->
    <script src="preprocessing.js"></script>
    <script>
      let preprocessing = new Preprocessing("output");
      
      let parser = new nlScript.Parser();
      // In contrast to the previous tutorial, a third parameter is given, which specifies whether to
      // insert the entire sequence when auto-completing or not.
      //
      // The default is false, which means that once the user input reaches the filter size, the editor will wait
      // until a number is entered. This might be unintuitive, because it might not be clear to the user what is
      // expected (e.g. in which units to enter the value).
      //
      // If set to 'true', the entire sequence will be inserted, i.e. a placeholder for 'stddev' (which is selected
      // so that the user can readily overwrite it), concatenated with the literal 'pixel(s)'.
      parser.defineType(
        "filter-size",
        "{stddev:float} pixel(s)",
        pn => pn.evaluate("stddev"),
        true);
      
      parser.defineSentence(
        "Apply Gaussian blurring with a standard deviation of {stddev:filter-size}.",
        pn => {
          let stdDev = pn.evaluate("stddev");
          preprocessing.gaussianBlur(stdDev);
          preprocessing.show("output");
          return undefined;
        });
      new nlScript.ACEditor(parser, document.getElementById("nls-container"));
    </script>
  </body>
</html>
 
