blob: 904c77e18f83f029c06ca1f66503de9b0a3c8142 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
|
<?php
/**
* AppleInfoPlistFfs extends the AppleFFS class and implements support for
* Apple InfoPlist .strings files.
*
* This class reads and writes only UTF-8 files.
*
* @ingroup FFS
* @since 2020.03
*/
class AppleInfoPlistFfs extends AppleFFS {
/**
* Parses non-empty strings file row to key and value.
* @param string $line
* @throws RuntimeException
* @return array array( string $key, string $val )
*/
public static function readRow( $line ) {
$match = [];
// InfoPList file does not use quoted keys, allows only basic characters without spaces
// as keys.
if ( preg_match( '/([A-Za-z ]*)\s*=\s*"((?:\\\"|[^"])*)"\s*;\s*$/', $line, $match ) ) {
// trimming to allow beginning and ending spaces but these will be removed
// during exports.
$key = parent::unescapeString( trim( $match[1] ) );
$value = parent::unescapeString( $match[2] );
if ( $key === '' ) {
throw new RuntimeException( "Empty or invalid key in line: $line" );
}
if ( strpos( $key, ' ' ) !== false ) {
throw new RuntimeException( "Key with space found in line: $line" );
}
return [ $key, $value ];
} else {
throw new RuntimeException( "Unrecognized line format: $line." );
}
}
/**
* Writes well-formed properties file row with key and value.
* @param string $key
* @param string $value
* @return string
*/
public static function writeRow( $key, $value ) {
return $key . ' = ' . parent::quoteString( $value ) . ';' . "\n";
}
}
|