@@ -14,6 +14,8 @@ abstract class CodeScanner extends Scanner
1414{
1515 protected $ ignoreInvalidFunctions = false ;
1616
17+ protected $ commentsPrefixes = [];
18+
1719 protected $ functions = [
1820 'gettext ' => 'gettext ' ,
1921 '__ ' => 'gettext ' ,
@@ -60,6 +62,13 @@ public function ignoreInvalidFunctions($ignore = true): self
6062 return $ this ;
6163 }
6264
65+ public function extractCommentsStartingWith (string ...$ prefixes ): self
66+ {
67+ $ this ->commentsPrefixes = $ prefixes ;
68+
69+ return $ this ;
70+ }
71+
6372 public function scanString (string $ string , string $ filename ): void
6473 {
6574 $ functionsScanner = $ this ->getFunctionsScanner ();
@@ -94,7 +103,11 @@ protected function gettext(ParsedFunction $function): ?Translation
94103 return null ;
95104 }
96105 list ($ original ) = $ function ->getArguments ();
97- return $ this ->saveTranslation (null , null , $ original );
106+
107+ return $ this ->addComments (
108+ $ function ,
109+ $ this ->saveTranslation (null , null , $ original )
110+ );
98111 }
99112
100113 protected function ngettext (ParsedFunction $ function ): ?Translation
@@ -103,7 +116,11 @@ protected function ngettext(ParsedFunction $function): ?Translation
103116 return null ;
104117 }
105118 list ($ original , $ plural ) = $ function ->getArguments ();
106- return $ this ->saveTranslation (null , null , $ original , $ plural );
119+
120+ return $ this ->addComments (
121+ $ function ,
122+ $ this ->saveTranslation (null , null , $ original , $ plural )
123+ );
107124 }
108125
109126 protected function pgettext (ParsedFunction $ function ): ?Translation
@@ -112,7 +129,11 @@ protected function pgettext(ParsedFunction $function): ?Translation
112129 return null ;
113130 }
114131 list ($ context , $ original ) = $ function ->getArguments ();
115- return $ this ->saveTranslation (null , $ context , $ original );
132+
133+ return $ this ->addComments (
134+ $ function ,
135+ $ this ->saveTranslation (null , $ context , $ original )
136+ );
116137 }
117138
118139 protected function dgettext (ParsedFunction $ function ): ?Translation
@@ -121,7 +142,11 @@ protected function dgettext(ParsedFunction $function): ?Translation
121142 return null ;
122143 }
123144 list ($ domain , $ original ) = $ function ->getArguments ();
124- return $ this ->saveTranslation ($ domain , null , $ original );
145+
146+ return $ this ->addComments (
147+ $ function ,
148+ $ this ->saveTranslation ($ domain , null , $ original )
149+ );
125150 }
126151
127152 protected function dpgettext (ParsedFunction $ function ): ?Translation
@@ -130,7 +155,11 @@ protected function dpgettext(ParsedFunction $function): ?Translation
130155 return null ;
131156 }
132157 list ($ domain , $ context , $ original ) = $ function ->getArguments ();
133- return $ this ->saveTranslation ($ domain , $ context , $ original );
158+
159+ return $ this ->addComments (
160+ $ function ,
161+ $ this ->saveTranslation ($ domain , $ context , $ original )
162+ );
134163 }
135164
136165 protected function npgettext (ParsedFunction $ function ): ?Translation
@@ -139,7 +168,11 @@ protected function npgettext(ParsedFunction $function): ?Translation
139168 return null ;
140169 }
141170 list ($ context , $ original , $ plural ) = $ function ->getArguments ();
142- return $ this ->saveTranslation (null , $ context , $ original , $ plural );
171+
172+ return $ this ->addComments (
173+ $ function ,
174+ $ this ->saveTranslation (null , $ context , $ original , $ plural )
175+ );
143176 }
144177
145178 protected function dngettext (ParsedFunction $ function ): ?Translation
@@ -148,7 +181,11 @@ protected function dngettext(ParsedFunction $function): ?Translation
148181 return null ;
149182 }
150183 list ($ domain , $ original , $ plural ) = $ function ->getArguments ();
151- return $ this ->saveTranslation ($ domain , null , $ original , $ plural );
184+
185+ return $ this ->addComments (
186+ $ function ,
187+ $ this ->saveTranslation ($ domain , null , $ original , $ plural )
188+ );
152189 }
153190
154191 protected function dnpgettext (ParsedFunction $ function ): ?Translation
@@ -157,7 +194,26 @@ protected function dnpgettext(ParsedFunction $function): ?Translation
157194 return null ;
158195 }
159196 list ($ domain , $ context , $ original , $ plural ) = $ function ->getArguments ();
160- return $ this ->saveTranslation ($ domain , $ context , $ original , $ plural );
197+
198+ return $ this ->addComments (
199+ $ function ,
200+ $ this ->saveTranslation ($ domain , $ context , $ original , $ plural )
201+ );
202+ }
203+
204+ protected function addComments (ParsedFunction $ function , Translation $ translation ): Translation
205+ {
206+ if (empty ($ this ->commentsPrefixes )) {
207+ return $ translation ;
208+ }
209+
210+ foreach ($ function ->getComments () as $ comment ) {
211+ if ($ this ->checkComment ($ comment )) {
212+ $ translation ->getExtractedComments ()->add ($ comment );
213+ }
214+ }
215+
216+ return $ translation ;
161217 }
162218
163219 protected function checkFunction (ParsedFunction $ function , int $ minLength ): bool
@@ -195,4 +251,15 @@ protected function checkFunction(ParsedFunction $function, int $minLength): bool
195251
196252 return true ;
197253 }
254+
255+ protected function checkComment (string $ comment ): bool
256+ {
257+ foreach ($ this ->commentsPrefixes as $ prefix ) {
258+ if (strpos ($ comment , $ prefix ) === 0 ) {
259+ return true ;
260+ }
261+ }
262+
263+ return false ;
264+ }
198265}
0 commit comments