about summary refs log tree commit diff stats
path: root/data/maps/the_unyielding/rooms/Cyan Alcove.txtpb
blob: b29f786536c601d8d973ab88108ac9aac783bffd (plain) (blame)
1
2
3
4
5
6
7
8
name: "Cyan Alcove"
panels {
  name: "CAN"
  path: "Panels/Door Openers/cyan_nw"
  clue: "can"
  answer: "cyan"
  symbols: SPARKLES
}
al.String.Other */ .highlight .sr { color: #008800; background-color: #fff0ff } /* Literal.String.Regex */ .highlight .s1 { color: #dd2200; background-color: #fff0f0 } /* Literal.String.Single */ .highlight .ss { color: #aa6600; background-color: #fff0f0 } /* Literal.String.Symbol */ .highlight .bp { color: #003388 } /* Name.Builtin.Pseudo */ .highlight .fm { color: #0066bb; font-weight: bold } /* Name.Function.Magic */ .highlight .vc { color: #336699 } /* Name.Variable.Class */ .highlight .vg { color: #dd7700 } /* Name.Variable.Global */ .highlight .vi { color: #3333bb } /* Name.Variable.Instance */ .highlight .vm { color: #336699 } /* Name.Variable.Magic */ .highlight .il { color: #0000DD; font-weight: bold } /* Literal.Number.Integer.Long */
#include "frame.h"
#include "database.h"
#include "field.h"

namespace verbly {
  namespace generator {

    int frame::nextId_ = 0;

    frame::frame() : id_(nextId_++)
    {
    }

    void frame::push_back(part fp)
    {
      parts_.push_back(std::move(fp));
    }

    database& operator<<(database& db, const frame& arg)
    {
      std::list<field> fields;
      fields.emplace_back("frame_id", arg.getId());

      nlohmann::json jsonParts;
      for (const part& p : arg)
      {
        nlohmann::json jsonPart;
        jsonPart["type"] = static_cast<int>(p.getType());

        switch (p.getType())
        {
          case part::type::noun_phrase:
          {
            jsonPart["role"] = p.getNounRole();
            jsonPart["selrestrs"] = p.getNounSelrestrs().toJson();
            jsonPart["synrestrs"] = p.getNounSynrestrs();

            break;
          }

          case part::type::preposition:
          {
            jsonPart["choices"] = p.getPrepositionChoices();
            jsonPart["literal"] = p.isPrepositionLiteral();

            break;
          }

          case part::type::literal:
          {
            jsonPart["value"] = p.getLiteralValue();

            break;
          }

          case part::type::verb:
          case part::type::adjective:
          case part::type::adverb:
          {
            break;
          }

          case part::type::invalid:
          {
            // Invalid parts should not be serialized.
            assert(false);

            break;
          }
        }

        jsonParts.push_back(std::move(jsonPart));
      }

      fields.emplace_back("data", jsonParts.dump());

      db.insertIntoTable("frames", std::move(fields));

      return db;
    }

  };
};