示例#1
0
  /**
   * Generates a directive from a directive assembler.
   *
   * @param assembler The directive assembler.
   * @return The corresponding directive.
   * @throws AraraException Something wrong happened, to be caught in the higher levels.
   */
  public static Directive generateDirective(DirectiveAssembler assembler) throws AraraException {
    String regex = (String) ConfigurationController.getInstance().get("directives.pattern");
    Pattern pattern = Pattern.compile(regex);
    Matcher matcher = pattern.matcher(assembler.getText());
    if (matcher.find()) {
      Directive directive = new Directive();
      directive.setIdentifier(matcher.group(1));
      directive.setParameters(getParameters(matcher.group(3), assembler.getLineNumbers()));
      Conditional conditional = new Conditional();
      conditional.setType(getType(matcher.group(5)));
      conditional.setCondition(getCondition(matcher.group(6)));
      directive.setConditional(conditional);
      directive.setLineNumbers(assembler.getLineNumbers());

      logger.info(messages.getMessage(Messages.LOG_INFO_POTENTIAL_DIRECTIVE_FOUND, directive));

      return directive;
    } else {
      throw new AraraException(
          messages.getMessage(
              Messages.ERROR_VALIDATE_INVALID_DIRECTIVE_FORMAT,
              CommonUtils.getCollectionElements(assembler.getLineNumbers(), "(", ")", ", ")));
    }
  }