function _views_geojson_encode_formatted in Views GeoJSON 7
Same name and namespace in other branches
- 6 views_geojson.module \_views_geojson_encode_formatted()
Encodes GeoJSON in a pretty-printed fashion.
1 call to _views_geojson_encode_formatted()
- views_plugin_style_geojson::render in views/
views_plugin_style_geojson.inc - Implementation of view_style_plugin::render().
File
- ./
views_geojson.helpers.inc, line 11 - Included from: https://github.com/GerHobbelt/nicejson-php.
Code
function _views_geojson_encode_formatted($json) {
if (!is_string($json)) {
if (PHP_VERSION && PHP_VERSION >= 5.4) {
return json_encode($json, JSON_PRETTY_PRINT);
}
$json = json_encode($json);
}
$result = '';
// Indentation level.
$pos = 0;
$strLen = mb_strlen($json);
$indentStr = "\t";
$newLine = "\n";
$prevChar = '';
$outOfQuotes = TRUE;
for ($i = 0; $i < $strLen; ++$i) {
// Speedup: copy blocks of input which don't matter re string detection and formatting.
$copyLen = strcspn($json, $outOfQuotes ? " \t\r\n\",:[{}]" : '\\"', $i);
if ($copyLen >= 1) {
$copyStr = mb_substr($json, $i, $copyLen);
// Also reset the tracker for escapes: we won't be hitting any right now
// and the next round is the first time an 'escape' character can be seen again at the input.
$prevChar = '';
$result .= $copyStr;
// Correct for the for(;;) loop.
$i += $copyLen - 1;
continue;
}
// Grab the next character in the string.
$char = mb_substr($json, $i, 1);
// Are we inside a quoted string encountering an escape sequence?
if (!$outOfQuotes && $prevChar === '\\') {
// Add the escaped character to the result string and ignore it for the string enter/exit detection:
$result .= $char;
$prevChar = '';
continue;
}
// Are we entering/exiting a quoted string?
if ($char === '"' && $prevChar !== '\\') {
$outOfQuotes = !$outOfQuotes;
}
else {
if ($outOfQuotes && ($char === '}' || $char === ']')) {
$result .= $newLine;
--$pos;
for ($j = 0; $j < $pos; ++$j) {
$result .= $indentStr;
}
}
else {
if ($outOfQuotes && mb_strpos(" \t\r\n", $char) !== FALSE) {
continue;
}
}
}
// Add the character to the result string.
$result .= $char;
// Always add a space after a field colon:
if ($outOfQuotes && $char === ':') {
$result .= ' ';
}
else {
if ($outOfQuotes && ($char === ',' || $char === '{' || $char === '[')) {
$result .= $newLine;
if ($char === '{' || $char === '[') {
++$pos;
}
for ($j = 0; $j < $pos; ++$j) {
$result .= $indentStr;
}
}
}
$prevChar = $char;
}
return $result;
}