1: <?php
 2: 
 3: /*
 4:  * This file is part of the Symfony package.
 5:  *
 6:  * (c) Fabien Potencier <fabien@symfony.com>
 7:  *
 8:  * For the full copyright and license information, please view the LICENSE
 9:  * file that was distributed with this source code.
10:  */
11: 
12: namespace Symfony\Component\Config\Definition\Builder;
13: 
14: /**
15:  * This class builds normalization conditions.
16:  *
17:  * @author Johannes M. Schmitt <schmittjoh@gmail.com>
18:  */
19: class NormalizationBuilder
20: {
21:     protected $node;
22:     public $before;
23:     public $remappings;
24: 
25:     /**
26:      * Constructor
27:      *
28:      * @param NodeDefinition $node The related node
29:      */
30:     public function __construct(NodeDefinition $node)
31:     {
32:         $this->node = $node;
33:         $this->keys = false;
34:         $this->remappings = array();
35:         $this->before = array();
36:     }
37: 
38:     /**
39:      * Registers a key to remap to its plural form.
40:      *
41:      * @param string $key    The key to remap
42:      * @param string $plural The plural of the key in case of irregular plural
43:      *
44:      * @return NormalizationBuilder
45:      */
46:     public function remap($key, $plural = null)
47:     {
48:         $this->remappings[] = array($key, null === $plural ? $key.'s' : $plural);
49: 
50:         return $this;
51:     }
52: 
53:     /**
54:      * Registers a closure to run before the normalization or an expression builder to build it if null is provided.
55:      *
56:      * @param \Closure $closure
57:      *
58:      * @return ExprBuilder|NormalizationBuilder
59:      */
60:     public function before(\Closure $closure = null)
61:     {
62:         if (null !== $closure) {
63:             $this->before[] = $closure;
64: 
65:             return $this;
66:         }
67: 
68:         return $this->before[] = new ExprBuilder($this->node);
69:     }
70: }
71: