Namespaces

  • Latte
    • Loaders
    • Macros
    • Runtime
  • Nette
    • Application
      • Responses
      • Routers
      • UI
    • Bridges
      • ApplicationDI
      • ApplicationLatte
      • ApplicationTracy
      • CacheDI
      • CacheLatte
      • DatabaseDI
      • DatabaseTracy
      • DITracy
      • FormsDI
      • FormsLatte
      • Framework
      • HttpDI
      • HttpTracy
      • MailDI
      • ReflectionDI
      • SecurityDI
      • SecurityTracy
    • Caching
      • Storages
    • ComponentModel
    • Database
      • Conventions
      • Drivers
      • Table
    • DI
      • Config
        • Adapters
      • Extensions
    • Forms
      • Controls
      • Rendering
    • Http
    • Iterators
    • Loaders
    • Localization
    • Mail
    • Neon
    • PhpGenerator
      • Traits
    • Reflection
    • Security
    • Tokenizer
    • Utils
  • Tracy
    • Bridges
      • Nette
  • none

Classes

  • Decoder
  • Encoder
  • Entity
  • Neon

Exceptions

  • Exception
  • Overview
  • Namespace
  • Class
  • Tree
  • Deprecated
  • Other releases
 1: <?php
 2: 
 3: /**
 4:  * This file is part of the Nette Framework (https://nette.org)
 5:  * Copyright (c) 2004 David Grudl (https://davidgrudl.com)
 6:  */
 7: 
 8: namespace Nette\Neon;
 9: 
10: 
11: /**
12:  * Simple generator for Nette Object Notation.
13:  */
14: class Encoder
15: {
16:     const BLOCK = 1;
17: 
18: 
19:     /**
20:      * Returns the NEON representation of a value.
21:      * @param  mixed  $var
22:      * @param  int  $options
23:      * @return string
24:      */
25:     public function encode($var, $options = null)
26:     {
27:         if ($var instanceof \DateTimeInterface) {
28:             return $var->format('Y-m-d H:i:s O');
29: 
30:         } elseif ($var instanceof Entity) {
31:             if ($var->value === Neon::CHAIN) {
32:                 return implode('', array_map([$this, 'encode'], $var->attributes));
33:             }
34:             return $this->encode($var->value) . '('
35:                 . (is_array($var->attributes) ? substr($this->encode($var->attributes), 1, -1) : '') . ')';
36:         }
37: 
38:         if (is_object($var)) {
39:             $obj = $var;
40:             $var = [];
41:             foreach ($obj as $k => $v) {
42:                 $var[$k] = $v;
43:             }
44:         }
45: 
46:         if (is_array($var)) {
47:             $isList = !$var || array_keys($var) === range(0, count($var) - 1);
48:             $s = '';
49:             if ($options & self::BLOCK) {
50:                 if (count($var) === 0) {
51:                     return '[]';
52:                 }
53:                 foreach ($var as $k => $v) {
54:                     $v = $this->encode($v, self::BLOCK);
55:                     $s .= ($isList ? '-' : $this->encode($k) . ':')
56:                         . (strpos($v, "\n") === false
57:                             ? ' ' . $v . "\n"
58:                             : "\n" . preg_replace('#^(?=.)#m', "\t", $v) . (substr($v, -2, 1) === "\n" ? '' : "\n"));
59:                 }
60:                 return $s;
61: 
62:             } else {
63:                 foreach ($var as $k => $v) {
64:                     $s .= ($isList ? '' : $this->encode($k) . ': ') . $this->encode($v) . ', ';
65:                 }
66:                 return ($isList ? '[' : '{') . substr($s, 0, -2) . ($isList ? ']' : '}');
67:             }
68: 
69:         } elseif (is_string($var) && !is_numeric($var)
70:             && !preg_match('~[\x00-\x1F]|^\d{4}|^(true|false|yes|no|on|off|null)\z~i', $var)
71:             && preg_match('~^' . Decoder::PATTERNS[1] . '\z~x', $var) // 1 = literals
72:         ) {
73:             return $var;
74: 
75:         } elseif (is_float($var)) {
76:             $var = json_encode($var);
77:             return strpos($var, '.') === false ? $var . '.0' : $var;
78: 
79:         } else {
80:             return json_encode($var, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
81:         }
82:     }
83: }
84: 
Nette 2.4-20180918 API API documentation generated by ApiGen 2.8.0