@@ -48,68 +48,70 @@ public function doEnterNode(\Twig_Node $node, \Twig_Environment $env)
4848 return $ node ;
4949 }
5050
51- if ($ node instanceof \Twig_Node_Expression_Filter && 'desc ' === $ node ->getNode ('filter ' )->getAttribute ('value ' )) {
52- $ transNode = $ node ->getNode ('node ' );
53- while ($ transNode instanceof \Twig_Node_Expression_Filter
54- && 'trans ' !== $ transNode ->getNode ('filter ' )->getAttribute ('value ' )
55- && 'transchoice ' !== $ transNode ->getNode ('filter ' )->getAttribute ('value ' )) {
56- $ transNode = $ transNode ->getNode ('node ' );
57- }
51+ if (!($ node instanceof \Twig_Node_Expression_Filter && 'desc ' === $ node ->getNode ('filter ' )->getAttribute ('value ' ))) {
52+ return $ node ;
53+ }
5854
59- if (!$ transNode instanceof \Twig_Node_Expression_Filter) {
60- throw new \RuntimeException (sprintf ('The "desc" filter must be applied after a "trans", or "transchoice" filter. ' ));
61- }
55+ $ transNode = $ node ->getNode ('node ' );
56+ while ($ transNode instanceof \Twig_Node_Expression_Filter
57+ && 'trans ' !== $ transNode ->getNode ('filter ' )->getAttribute ('value ' )
58+ && 'transchoice ' !== $ transNode ->getNode ('filter ' )->getAttribute ('value ' )) {
59+ $ transNode = $ transNode ->getNode ('node ' );
60+ }
6261
63- $ wrappingNode = $ node ->getNode ('node ' );
64- $ testNode = clone $ wrappingNode ;
65- $ defaultNode = $ node ->getNode ('arguments ' )->getNode (0 );
66-
67- // if the |transchoice filter is used, delegate the call to the TranslationExtension
68- // so that we can catch a possible exception when the default translation has not yet
69- // been extracted
70- if ('transchoice ' === $ transNode ->getNode ('filter ' )->getAttribute ('value ' )) {
71- $ transchoiceArguments = new \Twig_Node_Expression_Array ([], $ transNode ->getTemplateLine ());
72- $ transchoiceArguments ->addElement ($ wrappingNode ->getNode ('node ' ));
73- $ transchoiceArguments ->addElement ($ defaultNode );
74- foreach ($ wrappingNode ->getNode ('arguments ' ) as $ arg ) {
75- $ transchoiceArguments ->addElement ($ arg );
76- }
77-
78- $ transchoiceNode = new Transchoice ($ transchoiceArguments , $ transNode ->getTemplateLine ());
79- $ node ->setNode ('node ' , $ transchoiceNode );
80-
81- return $ node ;
82- }
62+ if (!$ transNode instanceof \Twig_Node_Expression_Filter) {
63+ throw new \RuntimeException (sprintf ('The "desc" filter must be applied after a "trans", or "transchoice" filter. ' ));
64+ }
8365
84- // if the |trans filter has replacements parameters
85- // (e.g. |trans({'%foo%': 'bar'}))
86- if ($ wrappingNode ->getNode ('arguments ' )->hasNode (0 )) {
87- $ lineno = $ wrappingNode ->getTemplateLine ();
88-
89- // remove the replacements from the test node
90- $ testNode ->setNode ('arguments ' , clone $ testNode ->getNode ('arguments ' ));
91- $ testNode ->getNode ('arguments ' )->setNode (0 , new \Twig_Node_Expression_Array ([], $ lineno ));
92-
93- // wrap the default node in a |replace filter
94- $ defaultNode = new \Twig_Node_Expression_Filter (
95- clone $ node ->getNode ('arguments ' )->getNode (0 ),
96- new \Twig_Node_Expression_Constant ('replace ' , $ lineno ),
97- new \Twig_Node ([
98- clone $ wrappingNode ->getNode ('arguments ' )->getNode (0 ),
99- ]),
100- $ lineno
101- );
66+ $ wrappingNode = $ node ->getNode ('node ' );
67+ $ testNode = clone $ wrappingNode ;
68+ $ defaultNode = $ node ->getNode ('arguments ' )->getNode (0 );
69+
70+ // if the |transchoice filter is used, delegate the call to the TranslationExtension
71+ // so that we can catch a possible exception when the default translation has not yet
72+ // been extracted
73+ if ('transchoice ' === $ transNode ->getNode ('filter ' )->getAttribute ('value ' )) {
74+ $ transchoiceArguments = new \Twig_Node_Expression_Array ([], $ transNode ->getTemplateLine ());
75+ $ transchoiceArguments ->addElement ($ wrappingNode ->getNode ('node ' ));
76+ $ transchoiceArguments ->addElement ($ defaultNode );
77+ foreach ($ wrappingNode ->getNode ('arguments ' ) as $ arg ) {
78+ $ transchoiceArguments ->addElement ($ arg );
10279 }
10380
104- $ condition = new \Twig_Node_Expression_Conditional (
105- new \Twig_Node_Expression_Binary_Equal ($ testNode , $ transNode ->getNode ('node ' ), $ wrappingNode ->getTemplateLine ()),
106- $ defaultNode ,
107- clone $ wrappingNode ,
108- $ wrappingNode ->getTemplateLine ()
81+ $ transchoiceNode = new Transchoice ($ transchoiceArguments , $ transNode ->getTemplateLine ());
82+ $ node ->setNode ('node ' , $ transchoiceNode );
83+
84+ return $ node ;
85+ }
86+
87+ // if the |trans filter has replacements parameters
88+ // (e.g. |trans({'%foo%': 'bar'}))
89+ if ($ wrappingNode ->getNode ('arguments ' )->hasNode (0 )) {
90+ $ lineno = $ wrappingNode ->getTemplateLine ();
91+
92+ // remove the replacements from the test node
93+ $ testNode ->setNode ('arguments ' , clone $ testNode ->getNode ('arguments ' ));
94+ $ testNode ->getNode ('arguments ' )->setNode (0 , new \Twig_Node_Expression_Array ([], $ lineno ));
95+
96+ // wrap the default node in a |replace filter
97+ $ defaultNode = new \Twig_Node_Expression_Filter (
98+ clone $ node ->getNode ('arguments ' )->getNode (0 ),
99+ new \Twig_Node_Expression_Constant ('replace ' , $ lineno ),
100+ new \Twig_Node ([
101+ clone $ wrappingNode ->getNode ('arguments ' )->getNode (0 ),
102+ ]),
103+ $ lineno
109104 );
110- $ node ->setNode ('node ' , $ condition );
111105 }
112106
107+ $ condition = new \Twig_Node_Expression_Conditional (
108+ new \Twig_Node_Expression_Binary_Equal ($ testNode , $ transNode ->getNode ('node ' ), $ wrappingNode ->getTemplateLine ()),
109+ $ defaultNode ,
110+ clone $ wrappingNode ,
111+ $ wrappingNode ->getTemplateLine ()
112+ );
113+ $ node ->setNode ('node ' , $ condition );
114+
113115 return $ node ;
114116 }
115117
0 commit comments