Pre-release
AdventureJS Docs Downloads
Score: 0 Moves: 0
// printNounDisambiguation.js

(function () {
  /* global AdventureJS A */

  var p = AdventureJS.Parser.prototype;

  /**
   *
   * @memberOf AdventureJS.Parser
   * @method AdventureJS.Parser#printNounDisambiguation
   * @param {Object} params
   * @TODO support for platonics, ie
   * which did you mean, a pistachio from the pouch,
   * or the one | one that you're carrying?
   */
  p.printNounDisambiguation = function Parser_printNounDisambiguation({
    parsedNoun,
    nounIndex,
    container,
  }) {
    this.game.log(
      "L1095",
      "log",
      "high",
      `[printNounDisambiguation.js] printNounDisambiguation \n${parsedNoun.matches.qualified}`,
      "Parser"
    );
    var output_class = "";
    // var print_names = [];
    // var names = [];

    // is parsedNoun plural?
    // and we need the singular form?

    var msg = `Which did {we} mean? `;

    // present choices in ordered list
    if (this.game.settings.show_disambiguation_as_ordered_list) {
      msg += "<ol>";
      for (var i = 0; i < parsedNoun.matches.qualified.length; i++) {
        msg += `<li>${
          this.game.getAsset(parsedNoun.matches.qualified[i]).article_name
        }</li>`;
      }
      msg += "</ol>";
    }
    // present choices in paragraph
    else {
      for (var i = 0; i < parsedNoun.matches.qualified.length; i++) {
        var asset = this.game.getAsset(parsedNoun.matches.qualified[i]);
        let print_name = "";
        if (asset.id === this.game.world._player) {
          print_name = this.game.dictionary.inflect("ourself");
        } else if (asset.use_proper_name && asset.proper_name) {
          print_name = asset.proper_name;
        } else if (asset.use_definite_article) {
          print_name = asset.article_name;
        } else {
          print_name = asset.definite_name;
        }
        if (i === parsedNoun.matches.qualified.length - 1) {
          msg += "or ";
        }

        if (this.game.settings.show_disambiguation_as_numbered_paragraph) {
          msg += `<span class='ajs-choice'>${i + 1}) </span>`;
        }

        // if (i === 0) {
        // print_name = A.FX.sentencecase(print_name);
        // }
        msg += print_name;

        if (i < parsedNoun.matches.qualified.length - 1) {
          msg += ", ";
        }

        if (i === parsedNoun.matches.qualified.length - 1) {
          msg += "? ";
        }
      }
    }

    let newparams = {
      ["noun" + nounIndex]: true,
      index: nounIndex,
    };
    if (container) newparams.container = true;
    // save for next turn disambiguation
    this.input_history[0].setDisambiguate(newparams);

    if (msg) this.game.print(msg, output_class);
    return;
  };
})();