Skip to content

Commit dc92f65

Browse files
committed
fixed mulitiline extractions in jsCode #200
1 parent 93176b2 commit dc92f65

13 files changed

Lines changed: 72 additions & 14 deletions

File tree

src/Utils/JsFunctionsScanner.php

Lines changed: 54 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -37,6 +37,20 @@ public function getFunctions(array $constants = [])
3737

3838
switch ($char) {
3939
case '\\':
40+
switch ($this->status()) {
41+
case 'simple-quote':
42+
if ($next !== "'") {
43+
break 2;
44+
}
45+
break;
46+
47+
case 'double-quote':
48+
if ($next !== '"') {
49+
break 2;
50+
}
51+
break;
52+
}
53+
4054
$prev = $char;
4155
$char = $next;
4256
$pos++;
@@ -233,7 +247,46 @@ protected function upStatus()
233247
protected static function prepareArgument($argument)
234248
{
235249
if ($argument && ($argument[0] === '"' || $argument[0] === "'")) {
236-
return substr($argument, 1, -1);
250+
return static::convertString(substr($argument, 1, -1));
237251
}
238252
}
253+
254+
/**
255+
* Decodes a string with an argument.
256+
*
257+
* @param string $value
258+
*
259+
* @return string
260+
*/
261+
protected static function convertString($value)
262+
{
263+
if (strpos($value, '\\') === false) {
264+
return $value;
265+
}
266+
267+
return preg_replace_callback(
268+
'/\\\(n|r|t|v|e|f|"|\\\)/',
269+
function ($match) {
270+
switch ($match[1][0]) {
271+
case 'n':
272+
return "\n";
273+
case 'r':
274+
return "\r";
275+
case 't':
276+
return "\t";
277+
case 'v':
278+
return "\v";
279+
case 'e':
280+
return "\e";
281+
case 'f':
282+
return "\f";
283+
case '"':
284+
return '"';
285+
case '\\':
286+
return '\\';
287+
}
288+
},
289+
$value
290+
);
291+
}
239292
}

tests/AssetsTest.php

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -239,7 +239,6 @@ public function testJs2Code()
239239
$this->assertCount($countTranslations, $translations);
240240
$this->assertCount($countHeaders, $translations->getHeaders());
241241
$this->assertEquals(0, $translations->countTranslated());
242-
243242
$this->assertContent($translations, 'jscode2/Po');
244243
$this->assertContent($translations, 'jscode2/Mo');
245244
$this->assertContent($translations, 'jscode2/PhpArray');

tests/assets/jscode2/Csv.csv

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ Project-Id-Version:
88
Report-Msgid-Bugs-To:
99
"
1010
,"some message",
11-
"some context","some message in a context",
11+
"some context","some ""message"" in
12+
a context",
1213
,"%s message",
1314
,"my translate 3",
Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
"some message",
2-
"some message in a context",
2+
"some ""message"" in
3+
a context",
34
"%s message",
45
"my translate 3",

tests/assets/jscode2/Jed.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
"some message": [
99
""
1010
],
11-
"some context\\u0004some message in a context": [
11+
"some context\\u0004some \"message\" in \na context": [
1212
""
1313
],
1414
"%s message": [

tests/assets/jscode2/Json.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@
1717
]
1818
},
1919
"some context": {
20-
"some message in a context": [
20+
"some \"message\" in \na context": [
2121
""
2222
]
2323
}
Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"some message": "",
3-
"some message in a context": "",
3+
"some \"message\" in \na context": "",
44
"%s message": "",
55
"my translate 3": ""
66
}

tests/assets/jscode2/PhpArray.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,8 @@
3232
),
3333
'some context' =>
3434
array (
35-
'some message in a context' =>
35+
'some "message" in
36+
a context' =>
3637
array (
3738
0 => '',
3839
),

tests/assets/jscode2/Po.po

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,9 @@ msgstr ""
1515

1616
#: ./tests/assets/jscode2/input.js:2
1717
msgctxt "some context"
18-
msgid "some message in a context"
18+
msgid ""
19+
"some \"message\" in \n"
20+
"a context"
1921
msgstr ""
2022

2123
#: ./tests/assets/jscode2/input.js:3

tests/assets/jscode2/Xliff.xlf

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,14 @@
2121
<target></target>
2222
</segment>
2323
</unit>
24-
<unit id="79662f3fd7a86c2d14a8a9a707609a21">
24+
<unit id="c3283d194287d65de0f6978057ce535a">
2525
<notes>
2626
<note category="context">some context</note>
2727
<note category="reference">./tests/assets/jscode2/input.js:2</note>
2828
</notes>
2929
<segment>
30-
<source>some message in a context</source>
30+
<source>some "message" in
31+
a context</source>
3132
<target></target>
3233
</segment>
3334
</unit>

0 commit comments

Comments
 (0)