Namespaces

  • Latte
    • Loaders
    • Macros
    • Runtime
  • Nette
    • Application
      • Responses
      • Routers
      • UI
    • Bridges
      • ApplicationLatte
      • ApplicationTracy
      • CacheLatte
      • DatabaseDI
      • DatabaseTracy
      • DITracy
      • FormsLatte
      • Framework
      • HttpTracy
      • SecurityTracy
    • Caching
      • Storages
    • ComponentModel
    • Database
      • Drivers
      • Reflection
      • Table
    • DI
      • Config
        • Adapters
      • Extensions
    • Diagnostics
    • Forms
      • Controls
      • Rendering
    • Http
    • Iterators
    • Latte
    • Loaders
    • Localization
    • Mail
    • Neon
    • PhpGenerator
    • Reflection
    • Security
    • Templating
    • Utils
  • NetteModule
  • none
  • Tracy

Classes

  • Encoder
  • Entity
  • Neon

Exceptions

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