diff --git a/src/Enum/CTypeEnum.php b/src/Enum/CTypeEnum.php
index 12c2517..37e070f 100644
--- a/src/Enum/CTypeEnum.php
+++ b/src/Enum/CTypeEnum.php
@@ -18,4 +18,5 @@ class CTypeEnum {
const DOUBLE_SQUARE_BRACKETS = 'x-double-square-brackets';
const DOLLAR_CURLY_BRACKETS = 'x-dollar-curly-brackets';
const DOUBLE_UNDERSCORE = 'x-double-underscore';
+ const SQUARE_SPRINTF = 'x-square-sprintf';
}
\ No newline at end of file
diff --git a/src/Filters/SquareSprintf.php b/src/Filters/SquareSprintf.php
new file mode 100644
index 0000000..feb7956
--- /dev/null
+++ b/src/Filters/SquareSprintf.php
@@ -0,0 +1,42 @@
+ $percentSnailVariable ) {
+
+ $segment = preg_replace(
+ '/' . preg_quote( $percentSnailVariable[ 0 ], '/' ) . '/',
+ '',
+ $segment,
+ 1
+ );
+ }
+
+ return $segment;
+ }
+}
\ No newline at end of file
diff --git a/src/MateCatFilter.php b/src/MateCatFilter.php
index cff6819..f42713c 100644
--- a/src/MateCatFilter.php
+++ b/src/MateCatFilter.php
@@ -36,6 +36,7 @@
use Matecat\SubFiltering\Filters\SpacesToNBSPForView;
use Matecat\SubFiltering\Filters\SplitPlaceholder;
use Matecat\SubFiltering\Filters\SprintfToPH;
+use Matecat\SubFiltering\Filters\SquareSprintf;
use Matecat\SubFiltering\Filters\StandardPHToMateCatCustomPH;
use Matecat\SubFiltering\Filters\SubFilteredPhToHtml;
use Matecat\SubFiltering\Filters\TwigToPh;
@@ -167,6 +168,7 @@ public function fromLayer0ToLayer1( $segment ) {
$channel->addLast( new PercentSnail() );
$channel->addLast( new PercentNumberSnail() );
$channel->addLast( new Percentages() );
+ $channel->addLast( new SquareSprintf() );
$channel->addLast( new SprintfToPH() );
$channel->addLast( new RestoreXliffTagsContent() );
$channel->addLast( new RestorePlaceHoldersToXLIFFLtGt() );
diff --git a/src/MyMemoryFilter.php b/src/MyMemoryFilter.php
index bc544fd..72e84ab 100644
--- a/src/MyMemoryFilter.php
+++ b/src/MyMemoryFilter.php
@@ -31,6 +31,7 @@
use Matecat\SubFiltering\Filters\Snails;
use Matecat\SubFiltering\Filters\SplitPlaceholder;
use Matecat\SubFiltering\Filters\SprintfToPH;
+use Matecat\SubFiltering\Filters\SquareSprintf;
use Matecat\SubFiltering\Filters\StandardPHToMateCatCustomPH;
use Matecat\SubFiltering\Filters\SubFilteredPhToHtml;
use Matecat\SubFiltering\Filters\TwigToPh;
@@ -76,9 +77,11 @@ public function fromLayer0ToLayer1( $segment, $cid = null ) {
$channel->addLast( new DoubleSquareBrackets() );
//$channel->addLast( new DoubleUnderscore() );
$channel->addLast( new DollarCurlyBrackets() );
+
$channel->addLast( new PercentSnail() );
$channel->addLast( new PercentNumberSnail() );
$channel->addLast( new Percentages() );
+ $channel->addLast( new SquareSprintf() );
$channel->addLast( new SprintfToPH() );
$channel->addLast( new RestoreXliffTagsContent() );
$channel->addLast( new RestorePlaceHoldersToXLIFFLtGt() );
diff --git a/tests/MateCatSubFilteringTest.php b/tests/MateCatSubFilteringTest.php
index 1a4ad54..1f0e449 100644
--- a/tests/MateCatSubFilteringTest.php
+++ b/tests/MateCatSubFilteringTest.php
@@ -951,4 +951,14 @@ public function testWithDollarCurlyBrackets() {
$this->assertEquals( $segment_from_UI, $filter->fromLayer0ToLayer1( $db_segment ) );
}
+ public function testWithSquareSprintf() {
+ $filter = $this->getFilterInstance();
+
+ $db_segment = 'This string contains [%s]';
+ $segment_from_UI = 'This string contains ';
+
+ $this->assertEquals( $db_segment, $filter->fromLayer1ToLayer0( $segment_from_UI ) );
+ $this->assertEquals( $segment_from_UI, $filter->fromLayer0ToLayer1( $db_segment ) );
+ }
+
}
diff --git a/tests/MyMemorySubFilteringTest.php b/tests/MyMemorySubFilteringTest.php
index f075810..b90a7c3 100644
--- a/tests/MyMemorySubFilteringTest.php
+++ b/tests/MyMemorySubFilteringTest.php
@@ -205,4 +205,13 @@ public function testWithDollarCurlyBrackets()
$this->assertEquals( $segment_from_UI, $filter->fromLayer0ToLayer1( $db_segment ) );
}
+ public function testWithSquareSprintf() {
+ $filter = $this->getFilterInstance();
+
+ $db_segment = 'This string contains [%s]';
+ $segment_from_UI = 'This string contains ';
+
+ $this->assertEquals( $db_segment, $filter->fromLayer1ToLayer0( $segment_from_UI ) );
+ $this->assertEquals( $segment_from_UI, $filter->fromLayer0ToLayer1( $db_segment ) );
+ }
}
\ No newline at end of file