<commit_before><?php
/**
 * Amathista - PHP Framework
 *
 * @author <NAME> <<EMAIL>>
 * 
 */

/**
 * -----------------------------------------------------------------------------
 * Clase para la evaluación de las rutas
 * -----------------------------------------------------------------------------
 */

final class AmRoute{

  protected static
    
    /**
     * -------------------------------------------------------------------------
     * Tipos de parámetros que puede tener la ruta
     * -------------------------------------------------------------------------
     */
    $TYPES = array(
      'id'            => '[a-zA-Z_][a-zA-Z0-9_-]*', // Identificador
      'any'           => '.*',                      // Cualquier valor
      'numeric'       => '[0-9]*',                  // Numeros
      'alphabetic'    => '[a-zA-Z]*',               // Alfabetico
      'alphanumeric'  => '[a-zA-Z0-9]*',            // Alfanumerico
    ),

    /**
     * -------------------------------------------------------------------------
     * Callbacks de preprocesamiento
     * -------------------------------------------------------------------------
     */
    $preProcessors = array(),

    /**
     * -------------------------------------------------------------------------
     * Callbacks de atención
     * -------------------------------------------------------------------------
     */
    $dispatchers = array();

  protected

    /**
     * -------------------------------------------------------------------------
     * Ruta solicitada.
     * -------------------------------------------------------------------------
     */
    $route = null,
    
    /**
     * -------------------------------------------------------------------------
     * Regex de evaluación correspondiente a la ruta.
     * -------------------------------------------------------------------------
     */
    $regex = null,

    /**
     * -------------------------------------------------------------------------
     * Parámetros detectados de la ruta
     * -------------------------------------------------------------------------
     */
    $params = array();

  /**
   * ---------------------------------------------------------------------------
   * Instanciación de una ruta.
   * ---------------------------------------------------------------------------
   * @param string $route Ruta a evaluar
   */
  public function __construct($route){

    $this->route = $route;

    // cmpila la ruta
    list($this->regex, $this->params) = self::compileRoute($route);

  }

  /**
   * ---------------------------------------------------------------------------
   * Evalua la ruta hace match con una petición.
   * ---------------------------------------------------------------------------
   * @param  [type] $request URL de la petición
   * @return array/bool      Si la URL de una petición concuerda con la ruta
   *                         devuelve un array de pares parámetros=>valor, de lo
   *                         contario retorna falso.
   */
  public function match($request){

    $params = array();

    // Si hace match
    if(preg_match($this->regex, $request, $a)){

      // Recorrer los paramétros
      foreach($this->params as $i => $paramName)
        $params[$paramName] = $a[$i + 1];

      return $params;

    }

    return false;

  }

  /**
   * ---------------------------------------------------------------------------
   * Construye la regex para una ruta.
   * ---------------------------------------------------------------------------
   * @param  string   $route  Ruta de la que se desea obtener la regex.
   * @return array(2)         Array de dos posiciones. la primera es la regex
   *                          obtenia para la ruta, la segunda un array con
   *                          los nombres de los parámetros de la ruta.
   */
  private static function compileRoute($route){<commit_msg>AmTpl Commentaries. Am::$formas included into Am::$confs to mix with formats of extensions<commit_after><?php
/**
 * Amathista - PHP Framework
 *
 * @author <NAME> <<EMAIL>>
 * 
 */

/**
 * -----------------------------------------------------------------------------
 * Clase para la evaluación de las rutas
 * -----------------------------------------------------------------------------
 */

final class AmRoute{

  protected static
    
    /**
     * -------------------------------------------------------------------------
     * Tipos de parámetros que puede tener la ruta
     * -------------------------------------------------------------------------
     */
    $TYPES = array(
      'id'            => '[a-zA-Z_][a-zA-Z0-9_-]*', // Identificador
      'any'           => '.*',                      // Cualquier valor
      'numeric'       => '[0-9]*',                  // Numeros
      'alphabetic'    => '[a-zA-Z]*',               // Alfabetico
      'alphanumeric'  => '[a-zA-Z0-9]*',            // Alfanumerico
    ),

    /**
     * -------------------------------------------------------------------------
     * Callbacks de preprocesamiento
     * -------------------------------------------------------------------------
     */
    $preProcessors = array(),

    /**
     * -------------------------------------------------------------------------
     * Callbacks de atención
     * -------------------------------------------------------------------------
     */
    $dispatchers = array();

  protected

    /**
     * -------------------------------------------------------------------------
     * Ruta solicitada.
     * -------------------------------------------------------------------------
     */
    $route = null,
    
    /**
     * -------------------------------------------------------------------------
     * Regex de evaluación correspondiente a la ruta.
     * -------------------------------------------------------------------------
     */
    $regex = null,

    /**
     * -------------------------------------------------------------------------
     * Parámetros detectados de la ruta
     * -------------------------------------------------------------------------
     */
    $params = array();

  /**
   * ---------------------------------------------------------------------------
   * Instanciación de una ruta.
   * ---------------------------------------------------------------------------
   * @param string $route Ruta a evaluar
   */
  public function __construct($route){

    $this->route = $route;

    // cmpila la ruta
    list($this->regex, $this->params) = self::compileRoute($route);

  }

  /**
   * ---------------------------------------------------------------------------
   * Evalua la ruta hace match con una petición.
   * ---------------------------------------------------------------------------
   * @param  string     $request  URL de la petición
   * @return array/bool           Si la URL de una petición concuerda con la
   *                              ruta devuelve un array de pares
   *                              parámetros=>valor, de lo contario retorna
   *                              falso.
   */
  public function match($request){

    $params = array();

    // Si hace match
    if(preg_match($this->regex, $request, $a)){

      // Recorrer los paramétros
      foreach($this->params as $i => $paramName)
        $params[$paramName] = $a[$i + 1];

      return $params;

    }

    return false;

  }

  /**
   * ---------------------------------------------------------------------------
   * Construye la regex para una ruta.
   * ---------------------------------------------------------------------------
   * @param  string   $route  Ruta de la que se desea obtener la regex.
   * @return array(2)         Array de dos posiciones. la primera es la regex
   *                          obtenia para la ruta, la segunda un array con
   *                          los nombres de los parámetros de la ruta.
   */
  private static function compileRoute($route){
{'fraction_non_alphanumeric': 0.4509190946604977, 'fraction_numerical': 0.0020007502813555083, 'mean_word_length': 0.600880704563651, 'pattern_counts': {'":': 0, '<': 11, '<?xml version=': 0, '>': 33, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 5, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '1537374', 'n_tokens_mistral': 1695, 'n_tokens_neox': 1656, 'n_words': 428}