code: function normalizeRequirement($requirement, $requirementKey = 0)
      {
          if (!is_array($requirement)) {
              $this->usageError('Requirement must be an array!');
          }
          if (!array_key_exists('condition', $requirement)) {
              $this->usageError("Requirement '{$requirementKey}' has no condition!");
          } else {
              $evalPrefix = 'eval:';
              if (is_string($requirement['condition']) && strpos($requirement['condition'], $evalPrefix) === 0) {
                  $expression = substr($requirement['condition'], strlen($evalPrefix));
                  $requirement['condition'] = $this->evaluateExpression($expression);
              }
          }
          if (!array_key_exists('name', $requirement)) {
              $requirement['name'] = is_numeric($requirementKey) ? 'Requirement #' . $requirementKey : $requirementKey;
          }
          if (!array_key_exists('mandatory', $requirement)) {
              if (array_key_exists('required', $requirement)) {
                  $requirement['mandatory'] = $requirement['required'];
              } else {
                  $requirement['mandatory'] = false;
              }
          }
          if (!array_key_exists('by', $requirement)) {
              $requirement['by'] = 'Unknown';
          }
          if (!array_key_exists('memo', $requirement)) {
              $requirement['memo'] = '';
          }
  
          return $requirement;
      }
docs: Normalizes requirement ensuring it has correct format.
  @param array $requirement raw requirement.
  @param int $requirementKey requirement key in the list.
  @return array normalized requirement.