] by
dhkolf
2014-04-28 21:14:03.
0000: 44 20 32 30 31 34 2d 30 34 2d 32 38 54 32 31 3a D 2014-04-28T21:
0010: 31 34 3a 30 33 2e 32 30 37 0a 4c 20 44 6f 63 75 14:03.207.L Docu
0020: 6d 65 6e 74 61 74 69 6f 6e 0a 4e 20 74 65 78 74 mentation.N text
0030: 2f 78 2d 6d 61 72 6b 64 6f 77 6e 0a 50 20 63 33 /x-markdown.P c3
0040: 38 65 36 34 37 33 62 66 37 36 64 31 37 37 39 37 8e6473bf76d17797
0050: 66 32 37 39 32 38 66 62 39 30 39 32 64 63 34 30 f27928fb9092dc40
0060: 36 33 62 66 36 31 0a 55 20 64 68 6b 6f 6c 66 0a 63bf61.U dhkolf.
0070: 57 20 37 38 34 30 0a 44 61 76 69 64 20 4b 6f 6c W 7840.David Kol
0080: 66 27 73 20 4a 53 4f 4e 20 6d 6f 64 75 6c 65 20 f's JSON module
0090: 66 6f 72 20 4c 75 61 20 35 2e 31 2f 35 2e 32 0d for Lua 5.1/5.2.
00a0: 0a 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d .===============
00b0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d 3d ================
00c0: 3d 3d 3d 3d 3d 3d 3d 3d 3d 0d 0a 0d 0a 2a 56 65 =========....*Ve
00d0: 72 73 69 6f 6e 20 32 2e 35 2a 0d 0a 0d 0a 49 6e rsion 2.5*....In
00e0: 20 74 68 65 20 64 65 66 61 75 6c 74 20 63 6f 6e the default con
00f0: 66 69 67 75 72 61 74 69 6f 6e 20 74 68 69 73 20 figuration this
0100: 6d 6f 64 75 6c 65 20 77 72 69 74 65 73 20 6e 6f module writes no
0110: 20 67 6c 6f 62 61 6c 20 76 61 6c 75 65 73 2c 20 global values,
0120: 6e 6f 74 20 65 76 65 6e 0d 0a 74 68 65 20 6d 6f not even..the mo
0130: 64 75 6c 65 20 74 61 62 6c 65 2e 20 49 6d 70 6f dule table. Impo
0140: 72 74 20 69 74 20 75 73 69 6e 67 0d 0a 0d 0a 20 rt it using....
0150: 20 20 20 6a 73 6f 6e 20 3d 20 72 65 71 75 69 72 json = requir
0160: 65 20 28 22 64 6b 6a 73 6f 6e 22 29 0d 0a 0d 0a e ("dkjson")....
0170: 49 6e 20 65 6e 76 69 72 6f 6e 6d 65 6e 74 73 20 In environments
0180: 77 68 65 72 65 20 60 72 65 71 75 69 72 65 60 20 where `require`
0190: 6f 72 20 61 20 73 69 6d 69 6c 69 61 72 20 66 75 or a similiar fu
01a0: 6e 63 74 69 6f 6e 20 61 72 65 20 6e 6f 74 20 61 nction are not a
01b0: 76 61 69 6c 61 62 6c 65 0d 0a 61 6e 64 20 79 6f vailable..and yo
01c0: 75 20 63 61 6e 6e 6f 74 20 72 65 63 65 69 76 65 u cannot receive
01d0: 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 the return valu
01e0: 65 20 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2c e of the module,
01f0: 20 79 6f 75 20 63 61 6e 20 73 65 74 20 74 68 65 you can set the
0200: 0d 0a 6f 70 74 69 6f 6e 20 60 72 65 67 69 73 74 ..option `regist
0210: 65 72 5f 67 6c 6f 62 61 6c 5f 6d 6f 64 75 6c 65 er_global_module
0220: 5f 74 61 62 6c 65 60 20 74 6f 20 60 74 72 75 65 _table` to `true
0230: 60 2e 20 20 54 68 65 20 6d 6f 64 75 6c 65 20 74 `. The module t
0240: 61 62 6c 65 20 77 69 6c 6c 0d 0a 74 68 65 6e 20 able will..then
0250: 62 65 20 73 61 76 65 64 20 69 6e 20 74 68 65 20 be saved in the
0260: 67 6c 6f 62 61 6c 20 76 61 72 69 61 62 6c 65 20 global variable
0270: 77 69 74 68 20 74 68 65 20 6e 61 6d 65 20 67 69 with the name gi
0280: 76 65 6e 20 62 79 20 74 68 65 20 6f 70 74 69 6f ven by the optio
0290: 6e 0d 0a 60 67 6c 6f 62 61 6c 5f 6d 6f 64 75 6c n..`global_modul
02a0: 65 5f 6e 61 6d 65 60 2e 0d 0a 0d 0a 45 78 70 6f e_name`.....Expo
02b0: 72 74 65 64 20 66 75 6e 63 74 69 6f 6e 73 20 61 rted functions a
02c0: 6e 64 20 76 61 6c 75 65 73 3a 0d 0a 0d 0a 60 6a nd values:....`j
02d0: 73 6f 6e 2e 65 6e 63 6f 64 65 20 28 6f 62 6a 65 son.encode (obje
02e0: 63 74 20 5b 2c 20 73 74 61 74 65 5d 29 60 0d 0a ct [, state])`..
02f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0300: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0310: 0d 0a 0d 0a 43 72 65 61 74 65 20 61 20 73 74 72 ....Create a str
0320: 69 6e 67 20 72 65 70 72 65 73 65 6e 74 69 6e 67 ing representing
0330: 20 74 68 65 20 6f 62 6a 65 63 74 2e 20 60 4f 62 the object. `Ob
0340: 6a 65 63 74 60 20 63 61 6e 20 62 65 20 61 20 74 ject` can be a t
0350: 61 62 6c 65 2c 0d 0a 61 20 73 74 72 69 6e 67 2c able,..a string,
0360: 20 61 20 6e 75 6d 62 65 72 2c 20 61 20 62 6f 6f a number, a boo
0370: 6c 65 61 6e 2c 20 60 6e 69 6c 60 2c 20 60 6a 73 lean, `nil`, `js
0380: 6f 6e 2e 6e 75 6c 6c 60 20 6f 72 20 61 6e 79 20 on.null` or any
0390: 6f 62 6a 65 63 74 20 77 69 74 68 0d 0a 61 20 66 object with..a f
03a0: 75 6e 63 74 69 6f 6e 20 60 5f 5f 74 6f 6a 73 6f unction `__tojso
03b0: 6e 60 20 69 6e 20 69 74 73 20 6d 65 74 61 74 61 n` in its metata
03c0: 62 6c 65 2e 20 41 20 74 61 62 6c 65 20 63 61 6e ble. A table can
03d0: 20 6f 6e 6c 79 20 75 73 65 20 73 74 72 69 6e 67 only use string
03e0: 73 0d 0a 61 6e 64 20 6e 75 6d 62 65 72 73 20 61 s..and numbers a
03f0: 73 20 6b 65 79 73 20 61 6e 64 20 69 74 73 20 76 s keys and its v
0400: 61 6c 75 65 73 20 68 61 76 65 20 74 6f 20 62 65 alues have to be
0410: 20 76 61 6c 69 64 20 6f 62 6a 65 63 74 73 20 61 valid objects a
0420: 73 0d 0a 77 65 6c 6c 2e 20 49 74 20 72 61 69 73 s..well. It rais
0430: 65 73 20 61 6e 20 65 72 72 6f 72 20 66 6f 72 20 es an error for
0440: 61 6e 79 20 69 6e 76 61 6c 69 64 20 64 61 74 61 any invalid data
0450: 20 74 79 70 65 73 20 6f 72 20 72 65 66 65 72 65 types or refere
0460: 6e 63 65 0d 0a 63 79 63 6c 65 73 2e 0d 0a 0d 0a nce..cycles.....
0470: 60 73 74 61 74 65 60 20 69 73 20 61 6e 20 6f 70 `state` is an op
0480: 74 69 6f 6e 61 6c 20 74 61 62 6c 65 20 77 69 74 tional table wit
0490: 68 20 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 h the following
04a0: 66 69 65 6c 64 73 3a 0d 0a 0d 0a 20 20 2d 20 60 fields:.... - `
04b0: 69 6e 64 65 6e 74 60 20 20 0d 0a 20 20 20 20 57 indent` .. W
04c0: 68 65 6e 20 60 69 6e 64 65 6e 74 60 20 28 61 20 hen `indent` (a
04d0: 62 6f 6f 6c 65 61 6e 29 20 69 73 20 73 65 74 2c boolean) is set,
04e0: 20 74 68 65 20 63 72 65 61 74 65 64 20 73 74 72 the created str
04f0: 69 6e 67 20 77 69 6c 6c 20 63 6f 6e 74 61 69 6e ing will contain
0500: 0d 0a 20 20 20 20 6e 65 77 6c 69 6e 65 73 20 61 .. newlines a
0510: 6e 64 20 69 6e 64 65 6e 74 61 74 69 6f 6e 73 2e nd indentations.
0520: 20 4f 74 68 65 72 77 69 73 65 20 69 74 20 77 69 Otherwise it wi
0530: 6c 6c 20 62 65 20 6f 6e 65 20 6c 6f 6e 67 20 6c ll be one long l
0540: 69 6e 65 2e 0d 0a 20 20 2d 20 60 6b 65 79 6f 72 ine... - `keyor
0550: 64 65 72 60 20 20 0d 0a 20 20 20 20 60 6b 65 79 der` .. `key
0560: 6f 72 64 65 72 60 20 69 73 20 61 6e 20 61 72 72 order` is an arr
0570: 61 79 20 74 6f 20 73 70 65 63 69 66 79 20 74 68 ay to specify th
0580: 65 20 6f 72 64 65 72 69 6e 67 20 6f 66 20 6b 65 e ordering of ke
0590: 79 73 20 69 6e 20 74 68 65 0d 0a 20 20 20 20 65 ys in the.. e
05a0: 6e 63 6f 64 65 64 20 6f 75 74 70 75 74 2e 20 49 ncoded output. I
05b0: 66 20 61 6e 20 6f 62 6a 65 63 74 20 68 61 73 20 f an object has
05c0: 6b 65 79 73 20 77 68 69 63 68 20 61 72 65 20 6e keys which are n
05d0: 6f 74 20 69 6e 20 74 68 69 73 20 61 72 72 61 79 ot in this array
05e0: 0d 0a 20 20 20 20 74 68 65 79 20 61 72 65 20 77 .. they are w
05f0: 72 69 74 74 65 6e 20 61 66 74 65 72 20 74 68 65 ritten after the
0600: 20 73 6f 72 74 65 64 20 6b 65 79 73 2e 0d 0a 20 sorted keys...
0610: 20 2d 20 60 6c 65 76 65 6c 60 20 20 0d 0a 20 20 - `level` ..
0620: 20 20 54 68 69 73 20 69 73 20 74 68 65 20 69 6e This is the in
0630: 69 74 69 61 6c 20 6c 65 76 65 6c 20 6f 66 20 69 itial level of i
0640: 6e 64 65 6e 74 61 74 69 6f 6e 20 75 73 65 64 20 ndentation used
0650: 77 68 65 6e 20 60 69 6e 64 65 6e 74 60 20 69 73 when `indent` is
0660: 0d 0a 20 20 20 20 73 65 74 2e 20 46 6f 72 20 65 .. set. For e
0670: 61 63 68 20 6c 65 76 65 6c 20 74 77 6f 20 73 70 ach level two sp
0680: 61 63 65 73 20 61 72 65 20 61 64 64 65 64 2e 20 aces are added.
0690: 57 68 65 6e 20 61 62 73 65 6e 74 20 69 74 20 69 When absent it i
06a0: 73 20 73 65 74 0d 0a 20 20 20 20 74 6f 20 30 2e s set.. to 0.
06b0: 0d 0a 20 20 2d 20 60 62 75 66 66 65 72 60 20 20 .. - `buffer`
06c0: 0d 0a 20 20 20 20 60 62 75 66 66 65 72 60 20 69 .. `buffer` i
06d0: 73 20 61 6e 20 61 72 72 61 79 20 74 6f 20 73 74 s an array to st
06e0: 6f 72 65 20 74 68 65 20 73 74 72 69 6e 67 73 20 ore the strings
06f0: 66 6f 72 20 74 68 65 20 72 65 73 75 6c 74 20 73 for the result s
0700: 6f 20 74 68 65 79 0d 0a 20 20 20 20 63 61 6e 20 o they.. can
0710: 62 65 20 63 6f 6e 63 61 74 65 6e 61 74 65 64 20 be concatenated
0720: 61 74 20 6f 6e 63 65 2e 20 57 68 65 6e 20 69 74 at once. When it
0730: 20 69 73 6e 27 74 20 67 69 76 65 6e 2c 20 74 68 isn't given, th
0740: 65 20 65 6e 63 6f 64 65 0d 0a 20 20 20 20 66 75 e encode.. fu
0750: 6e 63 74 69 6f 6e 20 77 69 6c 6c 20 63 72 65 61 nction will crea
0760: 74 65 20 69 74 20 74 65 6d 70 6f 72 61 72 79 20 te it temporary
0770: 61 6e 64 20 77 69 6c 6c 20 72 65 74 75 72 6e 20 and will return
0780: 74 68 65 0d 0a 20 20 20 20 63 6f 6e 63 61 74 65 the.. concate
0790: 6e 61 74 65 64 20 72 65 73 75 6c 74 2e 0d 0a 20 nated result...
07a0: 20 2d 20 60 62 75 66 66 65 72 6c 65 6e 60 20 20 - `bufferlen`
07b0: 0d 0a 20 20 20 20 57 68 65 6e 20 60 62 75 66 66 .. When `buff
07c0: 65 72 6c 65 6e 60 20 69 73 20 73 65 74 2c 20 69 erlen` is set, i
07d0: 74 20 68 61 73 20 74 6f 20 62 65 20 74 68 65 20 t has to be the
07e0: 69 6e 64 65 78 20 6f 66 20 74 68 65 20 6c 61 73 index of the las
07f0: 74 0d 0a 20 20 20 20 65 6c 65 6d 65 6e 74 20 6f t.. element o
0800: 66 20 60 62 75 66 66 65 72 60 2e 0d 0a 20 20 2d f `buffer`... -
0810: 20 60 74 61 62 6c 65 73 60 20 20 0d 0a 20 20 20 `tables` ..
0820: 20 60 74 61 62 6c 65 73 60 20 69 73 20 61 20 73 `tables` is a s
0830: 65 74 20 74 6f 20 64 65 74 65 63 74 20 72 65 66 et to detect ref
0840: 65 72 65 6e 63 65 20 63 79 63 6c 65 73 2e 20 49 erence cycles. I
0850: 74 20 69 73 20 63 72 65 61 74 65 64 0d 0a 20 20 t is created..
0860: 20 20 74 65 6d 70 6f 72 61 72 79 20 77 68 65 6e temporary when
0870: 20 61 62 73 65 6e 74 2e 20 45 76 65 72 79 20 74 absent. Every t
0880: 61 62 6c 65 20 74 68 61 74 20 69 73 20 63 75 72 able that is cur
0890: 72 65 6e 74 6c 79 20 70 72 6f 63 65 73 73 65 64 rently processed
08a0: 0d 0a 20 20 20 20 69 73 20 75 73 65 64 20 61 73 .. is used as
08b0: 20 6b 65 79 2c 20 74 68 65 20 76 61 6c 75 65 20 key, the value
08c0: 69 73 20 60 74 72 75 65 60 2e 0d 0a 20 20 2d 20 is `true`... -
08d0: 60 65 78 63 65 70 74 69 6f 6e 60 20 20 0d 0a 20 `exception` ..
08e0: 20 20 20 57 68 65 6e 20 60 65 78 63 65 70 74 69 When `excepti
08f0: 6f 6e 60 20 69 73 20 67 69 76 65 6e 2c 20 69 74 on` is given, it
0900: 20 77 69 6c 6c 20 62 65 20 63 61 6c 6c 65 64 20 will be called
0910: 77 68 65 6e 65 76 65 72 20 74 68 65 20 65 6e 63 whenever the enc
0920: 6f 64 65 72 0d 0a 20 20 20 20 63 61 6e 6e 6f 74 oder.. cannot
0930: 20 65 6e 63 6f 64 65 20 61 20 67 69 76 65 6e 20 encode a given
0940: 76 61 6c 75 65 2e 20 20 0d 0a 20 20 20 20 54 68 value. .. Th
0950: 65 20 70 61 72 61 6d 65 74 65 72 73 20 61 72 65 e parameters are
0960: 20 60 72 65 61 73 6f 6e 60 2c 20 60 76 61 6c 75 `reason`, `valu
0970: 65 60 2c 20 60 73 74 61 74 65 60 20 61 6e 64 20 e`, `state` and
0980: 60 64 65 66 61 75 6c 74 6d 65 73 73 61 67 65 60 `defaultmessage`
0990: 2e 0d 0a 20 20 20 20 60 72 65 61 73 6f 6e 60 20 ... `reason`
09a0: 69 73 20 65 69 74 68 65 72 20 60 22 72 65 66 65 is either `"refe
09b0: 72 65 6e 63 65 20 63 79 63 6c 65 22 60 2c 20 60 rence cycle"`, `
09c0: 22 63 75 73 74 6f 6d 20 65 6e 63 6f 64 65 72 20 "custom encoder
09d0: 66 61 69 6c 65 64 22 60 20 6f 72 0d 0a 20 20 20 failed"` or..
09e0: 20 60 22 75 6e 73 75 70 70 6f 72 74 65 64 20 74 `"unsupported t
09f0: 79 70 65 22 60 2e 20 60 76 61 6c 75 65 60 20 69 ype"`. `value` i
0a00: 73 20 74 68 65 20 6f 72 69 67 69 6e 61 6c 20 76 s the original v
0a10: 61 6c 75 65 20 74 68 61 74 20 63 61 75 73 65 64 alue that caused
0a20: 20 74 68 65 0d 0a 20 20 20 20 65 78 63 65 70 74 the.. except
0a30: 69 6f 6e 2c 20 60 73 74 61 74 65 60 20 69 73 20 ion, `state` is
0a40: 74 68 69 73 20 73 74 61 74 65 20 74 61 62 6c 65 this state table
0a50: 2c 20 60 64 65 66 61 75 6c 74 6d 65 73 73 61 67 , `defaultmessag
0a60: 65 60 20 69 73 20 74 68 65 20 6d 65 73 73 61 67 e` is the messag
0a70: 65 0d 0a 20 20 20 20 6f 66 20 74 68 65 20 65 72 e.. of the er
0a80: 72 6f 72 20 74 68 61 74 20 77 6f 75 6c 64 20 75 ror that would u
0a90: 73 75 61 6c 6c 79 20 62 65 20 72 61 69 73 65 64 sually be raised
0aa0: 2e 20 20 0d 0a 20 20 20 20 59 6f 75 20 63 61 6e . .. You can
0ab0: 20 65 69 74 68 65 72 20 72 65 74 75 72 6e 20 60 either return `
0ac0: 74 72 75 65 60 20 61 6e 64 20 61 64 64 20 64 69 true` and add di
0ad0: 72 65 63 74 6c 79 20 74 6f 20 74 68 65 20 62 75 rectly to the bu
0ae0: 66 66 65 72 20 6f 72 20 79 6f 75 20 63 61 6e 0d ffer or you can.
0af0: 0a 20 20 20 20 72 65 74 75 72 6e 20 74 68 65 20 . return the
0b00: 73 74 72 69 6e 67 20 64 69 72 65 63 74 6c 79 2e string directly.
0b10: 20 54 6f 20 6b 65 65 70 20 72 61 69 73 69 6e 67 To keep raising
0b20: 20 61 6e 20 65 72 72 6f 72 20 72 65 74 75 72 6e an error return
0b30: 20 60 6e 69 6c 60 20 61 6e 64 0d 0a 20 20 20 20 `nil` and..
0b40: 74 68 65 20 64 65 73 69 72 65 64 20 65 72 72 6f the desired erro
0b50: 72 20 6d 65 73 73 61 67 65 2e 20 20 0d 0a 20 20 r message. ..
0b60: 20 20 41 6e 20 65 78 61 6d 70 6c 65 20 69 6d 70 An example imp
0b70: 6c 65 6d 65 6e 74 61 74 69 6f 6e 20 66 6f 72 20 lementation for
0b80: 61 6e 20 65 78 63 65 70 74 69 6f 6e 20 66 75 6e an exception fun
0b90: 63 74 69 6f 6e 20 69 73 20 67 69 76 65 6e 20 69 ction is given i
0ba0: 6e 0d 0a 20 20 20 20 60 6a 73 6f 6e 2e 65 6e 63 n.. `json.enc
0bb0: 6f 64 65 65 78 63 65 70 74 69 6f 6e 60 2e 0d 0a odeexception`...
0bc0: 0d 0a 57 68 65 6e 20 60 73 74 61 74 65 2e 62 75 ..When `state.bu
0bd0: 66 66 65 72 60 20 77 61 73 20 73 65 74 2c 20 74 ffer` was set, t
0be0: 68 65 20 72 65 74 75 72 6e 20 76 61 6c 75 65 20 he return value
0bf0: 77 69 6c 6c 20 62 65 20 60 74 72 75 65 60 20 6f will be `true` o
0c00: 6e 0d 0a 73 75 63 63 65 73 73 2e 20 57 69 74 68 n..success. With
0c10: 6f 75 74 20 60 73 74 61 74 65 2e 62 75 66 66 65 out `state.buffe
0c20: 72 60 20 74 68 65 20 72 65 74 75 72 6e 20 76 61 r` the return va
0c30: 6c 75 65 20 77 69 6c 6c 20 62 65 20 61 20 73 74 lue will be a st
0c40: 72 69 6e 67 2e 0d 0a 0d 0a 60 6a 73 6f 6e 2e 64 ring.....`json.d
0c50: 65 63 6f 64 65 20 28 73 74 72 69 6e 67 20 5b 2c ecode (string [,
0c60: 20 70 6f 73 69 74 69 6f 6e 20 5b 2c 20 6e 75 6c position [, nul
0c70: 6c 5d 5d 29 60 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d l]])`..---------
0c80: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0c90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0ca0: 2d 2d 2d 0d 0a 0d 0a 44 65 63 6f 64 65 20 60 73 ---....Decode `s
0cb0: 74 72 69 6e 67 60 20 73 74 61 72 74 69 6e 67 20 tring` starting
0cc0: 61 74 20 60 70 6f 73 69 74 69 6f 6e 60 20 6f 72 at `position` or
0cd0: 20 61 74 20 31 20 69 66 20 60 70 6f 73 69 74 69 at 1 if `positi
0ce0: 6f 6e 60 20 77 61 73 0d 0a 6f 6d 69 74 74 65 64 on` was..omitted
0cf0: 2e 0d 0a 0d 0a 60 6e 75 6c 6c 60 20 69 73 20 61 .....`null` is a
0d00: 6e 20 6f 70 74 69 6f 6e 61 6c 20 76 61 6c 75 65 n optional value
0d10: 20 74 6f 20 62 65 20 72 65 74 75 72 6e 65 64 20 to be returned
0d20: 66 6f 72 20 6e 75 6c 6c 20 76 61 6c 75 65 73 2e for null values.
0d30: 20 54 68 65 0d 0a 64 65 66 61 75 6c 74 20 69 73 The..default is
0d40: 20 60 6e 69 6c 60 2c 20 62 75 74 20 79 6f 75 20 `nil`, but you
0d50: 63 6f 75 6c 64 20 73 65 74 20 69 74 20 74 6f 20 could set it to
0d60: 60 6a 73 6f 6e 2e 6e 75 6c 6c 60 20 6f 72 20 61 `json.null` or a
0d70: 6e 79 20 6f 74 68 65 72 0d 0a 76 61 6c 75 65 2e ny other..value.
0d80: 0d 0a 0d 0a 54 68 65 20 72 65 74 75 72 6e 20 76 ....The return v
0d90: 61 6c 75 65 73 20 61 72 65 20 74 68 65 20 6f 62 alues are the ob
0da0: 6a 65 63 74 20 6f 72 20 60 6e 69 6c 60 2c 20 74 ject or `nil`, t
0db0: 68 65 20 70 6f 73 69 74 69 6f 6e 20 6f 66 20 74 he position of t
0dc0: 68 65 20 6e 65 78 74 0d 0a 63 68 61 72 61 63 74 he next..charact
0dd0: 65 72 20 74 68 61 74 20 64 6f 65 73 6e 27 74 20 er that doesn't
0de0: 62 65 6c 6f 6e 67 20 74 6f 20 74 68 65 20 6f 62 belong to the ob
0df0: 6a 65 63 74 2c 20 61 6e 64 20 69 6e 20 63 61 73 ject, and in cas
0e00: 65 20 6f 66 20 65 72 72 6f 72 73 0d 0a 61 6e 20 e of errors..an
0e10: 65 72 72 6f 72 20 6d 65 73 73 61 67 65 2e 0d 0a error message...
0e20: 0d 0a 54 77 6f 20 6d 65 74 61 74 61 62 6c 65 73 ..Two metatables
0e30: 20 61 72 65 20 63 72 65 61 74 65 64 2e 20 45 76 are created. Ev
0e40: 65 72 79 20 61 72 72 61 79 20 6f 72 20 6f 62 6a ery array or obj
0e50: 65 63 74 20 74 68 61 74 20 69 73 20 64 65 63 6f ect that is deco
0e60: 64 65 64 20 67 65 74 73 0d 0a 61 20 6d 65 74 61 ded gets..a meta
0e70: 74 61 62 6c 65 20 77 69 74 68 20 74 68 65 20 60 table with the `
0e80: 5f 5f 6a 73 6f 6e 74 79 70 65 60 20 66 69 65 6c __jsontype` fiel
0e90: 64 20 73 65 74 20 74 6f 20 65 69 74 68 65 72 20 d set to either
0ea0: 60 61 72 72 61 79 60 20 6f 72 0d 0a 60 6f 62 6a `array` or..`obj
0eb0: 65 63 74 60 2e 20 49 66 20 79 6f 75 20 77 61 6e ect`. If you wan
0ec0: 74 20 74 6f 20 70 72 6f 76 69 64 65 20 79 6f 75 t to provide you
0ed0: 72 20 6f 77 6e 20 6d 65 74 61 74 61 62 6c 65 73 r own metatables
0ee0: 20 75 73 65 20 74 68 65 20 73 79 6e 74 61 78 0d use the syntax.
0ef0: 0a 0d 0a 20 20 20 20 6a 73 6f 6e 2e 64 65 63 6f ... json.deco
0f00: 64 65 20 28 73 74 72 69 6e 67 2c 20 70 6f 73 69 de (string, posi
0f10: 74 69 6f 6e 2c 20 6e 75 6c 6c 2c 20 6f 62 6a 65 tion, null, obje
0f20: 63 74 6d 65 74 61 2c 20 61 72 72 61 79 6d 65 74 ctmeta, arraymet
0f30: 61 29 0d 0a 0d 0a 54 6f 20 70 72 65 76 65 6e 74 a)....To prevent
0f40: 20 74 68 65 20 61 73 73 69 67 6e 69 6e 67 20 6f the assigning o
0f50: 66 20 6d 65 74 61 74 61 62 6c 65 73 20 70 61 73 f metatables pas
0f60: 73 20 60 6e 69 6c 60 3a 0d 0a 0d 0a 20 20 20 20 s `nil`:....
0f70: 6a 73 6f 6e 2e 64 65 63 6f 64 65 20 28 73 74 72 json.decode (str
0f80: 69 6e 67 2c 20 70 6f 73 69 74 69 6f 6e 2c 20 6e ing, position, n
0f90: 75 6c 6c 2c 20 6e 69 6c 29 0d 0a 0d 0a 60 3c 6d ull, nil)....`<m
0fa0: 65 74 61 74 61 62 6c 65 3e 2e 5f 5f 6a 73 6f 6e etatable>.__json
0fb0: 6f 72 64 65 72 60 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d order`..--------
0fc0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
0fd0: 2d 0d 0a 0d 0a 60 5f 5f 6a 73 6f 6e 6f 72 64 65 -....`__jsonorde
0fe0: 72 60 20 63 61 6e 20 6f 76 65 72 77 72 69 74 65 r` can overwrite
0ff0: 20 74 68 65 20 60 6b 65 79 6f 72 64 65 72 60 20 the `keyorder`
1000: 66 6f 72 20 61 20 73 70 65 63 69 66 69 63 20 74 for a specific t
1010: 61 62 6c 65 2e 0d 0a 0d 0a 60 3c 6d 65 74 61 74 able.....`<metat
1020: 61 62 6c 65 3e 2e 5f 5f 6a 73 6f 6e 74 79 70 65 able>.__jsontype
1030: 60 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d `..-------------
1040: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 60 -----------....`
1050: 5f 5f 6a 73 6f 6e 74 79 70 65 60 20 63 61 6e 20 __jsontype` can
1060: 62 65 20 65 69 74 68 65 72 20 60 22 61 72 72 61 be either `"arra
1070: 79 22 60 20 6f 72 20 60 22 6f 62 6a 65 63 74 22 y"` or `"object"
1080: 60 2e 20 54 68 69 73 20 76 61 6c 75 65 20 69 73 `. This value is
1090: 20 6f 6e 6c 79 0d 0a 63 68 65 63 6b 65 64 20 66 only..checked f
10a0: 6f 72 20 65 6d 70 74 79 20 74 61 62 6c 65 73 2e or empty tables.
10b0: 20 28 54 68 65 20 64 65 66 61 75 6c 74 20 66 6f (The default fo
10c0: 72 20 65 6d 70 74 79 20 74 61 62 6c 65 73 20 69 r empty tables i
10d0: 73 20 60 22 61 72 72 61 79 22 60 29 2e 0d 0a 0d s `"array"`)....
10e0: 0a 60 3c 6d 65 74 61 74 61 62 6c 65 3e 2e 5f 5f .`<metatable>.__
10f0: 74 6f 6a 73 6f 6e 20 28 73 65 6c 66 2c 20 73 74 tojson (self, st
1100: 61 74 65 29 60 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d ate)`..---------
1110: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1120: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 59 -----------....Y
1130: 6f 75 20 63 61 6e 20 70 72 6f 76 69 64 65 20 79 ou can provide y
1140: 6f 75 72 20 6f 77 6e 20 60 5f 5f 74 6f 6a 73 6f our own `__tojso
1150: 6e 60 20 66 75 6e 63 74 69 6f 6e 20 69 6e 20 61 n` function in a
1160: 20 6d 65 74 61 74 61 62 6c 65 2e 20 49 6e 20 74 metatable. In t
1170: 68 69 73 0d 0a 66 75 6e 63 74 69 6f 6e 20 79 6f his..function yo
1180: 75 20 63 61 6e 20 65 69 74 68 65 72 20 61 64 64 u can either add
1190: 20 64 69 72 65 63 74 6c 79 20 74 6f 20 74 68 65 directly to the
11a0: 20 62 75 66 66 65 72 20 61 6e 64 20 72 65 74 75 buffer and retu
11b0: 72 6e 20 74 72 75 65 2c 0d 0a 6f 72 20 79 6f 75 rn true,..or you
11c0: 20 63 61 6e 20 72 65 74 75 72 6e 20 61 20 73 74 can return a st
11d0: 72 69 6e 67 2e 20 4f 6e 20 65 72 72 6f 72 73 20 ring. On errors
11e0: 6e 69 6c 20 61 6e 64 20 61 20 6d 65 73 73 61 67 nil and a messag
11f0: 65 20 73 68 6f 75 6c 64 20 62 65 0d 0a 72 65 74 e should be..ret
1200: 75 72 6e 65 64 2e 0d 0a 0d 0a 60 6a 73 6f 6e 2e urned.....`json.
1210: 6e 75 6c 6c 60 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d null`..---------
1220: 2d 2d 0d 0a 0d 0a 59 6f 75 20 63 61 6e 20 75 73 --....You can us
1230: 65 20 74 68 69 73 20 76 61 6c 75 65 20 66 6f 72 e this value for
1240: 20 73 65 74 74 69 6e 67 20 65 78 70 6c 69 63 69 setting explici
1250: 74 20 60 6e 75 6c 6c 60 20 76 61 6c 75 65 73 2e t `null` values.
1260: 0d 0a 0d 0a 60 6a 73 6f 6e 2e 76 65 72 73 69 6f ....`json.versio
1270: 6e 60 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d n`..------------
1280: 2d 2d 0d 0a 0d 0a 53 65 74 20 74 6f 20 60 22 64 --....Set to `"d
1290: 6b 6a 73 6f 6e 20 32 2e 35 22 60 2e 0d 0a 0d 0a kjson 2.5"`.....
12a0: 60 6a 73 6f 6e 2e 71 75 6f 74 65 73 74 72 69 6e `json.quotestrin
12b0: 67 20 28 73 74 72 69 6e 67 29 60 0d 0a 2d 2d 2d g (string)`..---
12c0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
12d0: 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 51 75 6f 74 --------....Quot
12e0: 65 20 61 20 55 54 46 2d 38 20 73 74 72 69 6e 67 e a UTF-8 string
12f0: 20 61 6e 64 20 65 73 63 61 70 65 20 63 72 69 74 and escape crit
1300: 69 63 61 6c 20 63 68 61 72 61 63 74 65 72 73 20 ical characters
1310: 75 73 69 6e 67 20 4a 53 4f 4e 0d 0a 65 73 63 61 using JSON..esca
1320: 70 65 20 73 65 71 75 65 6e 63 65 73 2e 20 54 68 pe sequences. Th
1330: 69 73 20 66 75 6e 63 74 69 6f 6e 20 69 73 20 6f is function is o
1340: 6e 6c 79 20 6e 65 63 65 73 73 61 72 79 20 77 68 nly necessary wh
1350: 65 6e 20 79 6f 75 20 62 75 69 6c 64 0d 0a 79 6f en you build..yo
1360: 75 72 20 6f 77 6e 20 60 5f 5f 74 6f 6a 73 6f 6e ur own `__tojson
1370: 60 20 66 75 6e 63 74 69 6f 6e 73 2e 0d 0a 0d 0a ` functions.....
1380: 60 6a 73 6f 6e 2e 61 64 64 6e 65 77 6c 69 6e 65 `json.addnewline
1390: 20 28 73 74 61 74 65 29 60 0d 0a 2d 2d 2d 2d 2d (state)`..-----
13a0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
13b0: 2d 2d 2d 2d 0d 0a 0d 0a 57 68 65 6e 20 60 73 74 ----....When `st
13c0: 61 74 65 2e 69 6e 64 65 6e 74 60 20 69 73 20 73 ate.indent` is s
13d0: 65 74 2c 20 61 64 64 20 61 20 6e 65 77 6c 69 6e et, add a newlin
13e0: 65 20 74 6f 20 60 73 74 61 74 65 2e 62 75 66 66 e to `state.buff
13f0: 65 72 60 20 61 6e 64 20 73 70 61 63 65 73 0d 0a er` and spaces..
1400: 61 63 63 6f 72 64 69 6e 67 20 74 6f 20 60 73 74 according to `st
1410: 61 74 65 2e 6c 65 76 65 6c 60 2e 0d 0a 0d 0a 60 ate.level`.....`
1420: 6a 73 6f 6e 2e 65 6e 63 6f 64 65 65 78 63 65 70 json.encodeexcep
1430: 74 69 6f 6e 20 28 72 65 61 73 6f 6e 2c 20 76 61 tion (reason, va
1440: 6c 75 65 2c 20 73 74 61 74 65 2c 20 64 65 66 61 lue, state, defa
1450: 75 6c 74 6d 65 73 73 61 67 65 29 60 0d 0a 2d 2d ultmessage)`..--
1460: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1470: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1480: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1490: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d 0a 54 -----------....T
14a0: 68 69 73 20 66 75 6e 63 74 69 6f 6e 20 63 61 6e his function can
14b0: 20 62 65 20 75 73 65 64 20 61 73 20 76 61 6c 75 be used as valu
14c0: 65 20 74 6f 20 74 68 65 20 60 65 78 63 65 70 74 e to the `except
14d0: 69 6f 6e 60 20 6f 70 74 69 6f 6e 2e 20 49 6e 73 ion` option. Ins
14e0: 74 65 61 64 20 6f 66 0d 0a 72 61 69 73 69 6e 67 tead of..raising
14f0: 20 61 6e 20 65 72 72 6f 72 20 74 68 69 73 20 66 an error this f
1500: 75 6e 63 74 69 6f 6e 20 65 6e 63 6f 64 65 73 20 unction encodes
1510: 74 68 65 20 65 72 72 6f 72 20 6d 65 73 73 61 67 the error messag
1520: 65 20 61 73 20 61 20 73 74 72 69 6e 67 2e 20 54 e as a string. T
1530: 68 69 73 0d 0a 63 61 6e 20 68 65 6c 70 20 74 6f his..can help to
1540: 20 64 65 62 75 67 20 6d 61 6c 66 6f 72 6d 65 64 debug malformed
1550: 20 69 6e 70 75 74 20 64 61 74 61 2e 0d 0a 0d 0a input data.....
1560: 20 20 20 20 78 20 3d 20 6a 73 6f 6e 2e 65 6e 63 x = json.enc
1570: 6f 64 65 28 76 61 6c 75 65 2c 20 7b 20 65 78 63 ode(value, { exc
1580: 65 70 74 69 6f 6e 20 3d 20 6a 73 6f 6e 2e 65 6e eption = json.en
1590: 63 6f 64 65 65 78 63 65 70 74 69 6f 6e 20 7d 29 codeexception })
15a0: 0d 0a 0d 0a 4c 50 65 67 20 73 75 70 70 6f 72 74 ....LPeg support
15b0: 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a ..------------..
15c0: 0d 0a 57 68 65 6e 20 74 68 65 20 6c 6f 63 61 6c ..When the local
15d0: 20 63 6f 6e 66 69 67 75 72 61 74 69 6f 6e 20 76 configuration v
15e0: 61 72 69 61 62 6c 65 20 60 61 6c 77 61 79 73 5f ariable `always_
15f0: 74 72 79 5f 75 73 69 6e 67 5f 6c 70 65 67 60 20 try_using_lpeg`
1600: 69 73 20 73 65 74 2c 0d 0a 74 68 69 73 20 6d 6f is set,..this mo
1610: 64 75 6c 65 20 74 72 69 65 73 20 74 6f 20 6c 6f dule tries to lo
1620: 61 64 20 4c 50 65 67 20 74 6f 20 72 65 70 6c 61 ad LPeg to repla
1630: 63 65 20 74 68 65 20 60 64 65 63 6f 64 65 60 20 ce the `decode`
1640: 66 75 6e 63 74 69 6f 6e 2e 20 54 68 65 0d 0a 73 function. The..s
1650: 70 65 65 64 20 69 6e 63 72 65 61 73 65 20 69 73 peed increase is
1660: 20 73 69 67 6e 69 66 69 63 61 6e 74 2e 20 59 6f significant. Yo
1670: 75 20 63 61 6e 20 67 65 74 20 74 68 65 20 4c 50 u can get the LP
1680: 65 67 20 6d 6f 64 75 6c 65 20 61 74 0d 0a 20 20 eg module at..
1690: 3c 68 74 74 70 3a 2f 2f 77 77 77 2e 69 6e 66 2e <http://www.inf.
16a0: 70 75 63 2d 72 69 6f 2e 62 72 2f 7e 72 6f 62 65 puc-rio.br/~robe
16b0: 72 74 6f 2f 6c 70 65 67 2f 3e 2e 0d 0a 57 68 65 rto/lpeg/>...Whe
16c0: 6e 20 4c 50 65 67 20 63 6f 75 6c 64 6e 27 74 20 n LPeg couldn't
16d0: 62 65 20 6c 6f 61 64 65 64 2c 20 74 68 65 20 70 be loaded, the p
16e0: 75 72 65 20 4c 75 61 20 66 75 6e 63 74 69 6f 6e ure Lua function
16f0: 73 20 73 74 61 79 20 61 63 74 69 76 65 2e 0d 0a s stay active...
1700: 0d 0a 49 6e 20 63 61 73 65 20 79 6f 75 20 64 6f ..In case you do
1710: 6e 27 74 20 77 61 6e 74 20 74 68 69 73 20 6d 6f n't want this mo
1720: 64 75 6c 65 20 74 6f 20 72 65 71 75 69 72 65 20 dule to require
1730: 4c 50 65 67 20 6f 6e 20 69 74 73 20 6f 77 6e 2c LPeg on its own,
1740: 0d 0a 64 69 73 61 62 6c 65 20 74 68 65 20 6f 70 ..disable the op
1750: 74 69 6f 6e 20 60 61 6c 77 61 79 73 5f 74 72 79 tion `always_try
1760: 5f 75 73 69 6e 67 5f 6c 70 65 67 60 20 69 6e 20 _using_lpeg` in
1770: 74 68 65 20 6f 70 74 69 6f 6e 73 20 73 65 63 74 the options sect
1780: 69 6f 6e 20 61 74 0d 0a 74 68 65 20 74 6f 70 20 ion at..the top
1790: 6f 66 20 74 68 65 20 6d 6f 64 75 6c 65 2e 0d 0a of the module...
17a0: 0d 0a 49 6e 20 74 68 69 73 20 63 61 73 65 20 79 ..In this case y
17b0: 6f 75 20 63 61 6e 20 6c 61 74 65 72 20 6c 6f 61 ou can later loa
17c0: 64 20 4c 50 65 67 20 73 75 70 70 6f 72 74 20 75 d LPeg support u
17d0: 73 69 6e 67 0d 0a 0d 0a 23 23 23 20 60 6a 73 6f sing....### `jso
17e0: 6e 2e 75 73 65 5f 6c 70 65 67 20 28 29 60 0d 0a n.use_lpeg ()`..
17f0: 0d 0a 52 65 71 75 69 72 65 20 74 68 65 20 4c 50 ..Require the LP
1800: 65 67 20 6d 6f 64 75 6c 65 20 61 6e 64 20 72 65 eg module and re
1810: 70 6c 61 63 65 20 74 68 65 20 66 75 6e 63 74 69 place the functi
1820: 6f 6e 73 20 60 71 75 6f 74 65 73 74 72 69 6e 67 ons `quotestring
1830: 60 20 61 6e 64 0d 0a 61 6e 64 20 60 64 65 63 6f ` and..and `deco
1840: 64 65 60 20 77 69 74 68 20 66 75 6e 63 74 69 6f de` with functio
1850: 6e 73 20 74 68 61 74 20 75 73 65 20 4c 50 65 67 ns that use LPeg
1860: 20 70 61 74 74 65 72 6e 73 2e 0d 0a 54 68 69 73 patterns...This
1870: 20 66 75 6e 63 74 69 6f 6e 20 72 65 74 75 72 6e function return
1880: 73 20 74 68 65 20 6d 6f 64 75 6c 65 20 74 61 62 s the module tab
1890: 6c 65 2c 20 73 6f 20 79 6f 75 20 63 61 6e 20 6c le, so you can l
18a0: 6f 61 64 20 74 68 65 20 6d 6f 64 75 6c 65 0d 0a oad the module..
18b0: 75 73 69 6e 67 3a 0d 0a 0d 0a 20 20 20 20 6a 73 using:.... js
18c0: 6f 6e 20 3d 20 72 65 71 75 69 72 65 20 22 64 6b on = require "dk
18d0: 6a 73 6f 6e 22 2e 75 73 65 5f 6c 70 65 67 28 29 json".use_lpeg()
18e0: 0d 0a 0d 0a 41 6c 74 65 72 6e 61 74 69 76 65 6c ....Alternativel
18f0: 79 20 79 6f 75 20 63 61 6e 20 75 73 65 20 60 70 y you can use `p
1900: 63 61 6c 6c 60 20 73 6f 20 74 68 65 20 4a 53 4f call` so the JSO
1910: 4e 20 6d 6f 64 75 6c 65 20 73 74 69 6c 6c 20 77 N module still w
1920: 6f 72 6b 73 20 77 68 65 6e 0d 0a 4c 50 65 67 20 orks when..LPeg
1930: 69 73 6e 27 74 20 66 6f 75 6e 64 2e 0d 0a 0d 0a isn't found.....
1940: 20 20 20 20 6a 73 6f 6e 20 3d 20 72 65 71 75 69 json = requi
1950: 72 65 20 22 64 6b 6a 73 6f 6e 22 0d 0a 20 20 20 re "dkjson"..
1960: 20 70 63 61 6c 6c 20 28 6a 73 6f 6e 2e 75 73 65 pcall (json.use
1970: 5f 6c 70 65 67 29 0d 0a 0d 0a 23 23 23 20 60 6a _lpeg)....### `j
1980: 73 6f 6e 2e 75 73 69 6e 67 5f 6c 70 65 67 60 0d son.using_lpeg`.
1990: 0a 0d 0a 54 68 69 73 20 76 61 72 69 61 62 6c 65 ...This variable
19a0: 20 69 73 20 73 65 74 20 74 6f 20 60 74 72 75 65 is set to `true
19b0: 60 20 77 68 65 6e 20 4c 50 65 67 20 77 61 73 20 ` when LPeg was
19c0: 6c 6f 61 64 65 64 20 73 75 63 63 65 73 73 66 75 loaded successfu
19d0: 6c 6c 79 2e 0d 0a 0d 0a 2d 2d 2d 2d 2d 2d 2d 2d lly.....--------
19e0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
19f0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a00: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1a10: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 0d 0a 0d -------------...
1a20: 0a 43 6f 6e 74 61 63 74 0d 0a 2d 2d 2d 2d 2d 2d .Contact..------
1a30: 2d 0d 0a 0d 0a 59 6f 75 20 63 61 6e 20 63 6f 6e -....You can con
1a40: 74 61 63 74 20 74 68 65 20 61 75 74 68 6f 72 20 tact the author
1a50: 62 79 20 73 65 6e 64 69 6e 67 20 61 6e 20 65 2d by sending an e-
1a60: 6d 61 69 6c 20 74 6f 20 27 64 61 76 69 64 27 20 mail to 'david'
1a70: 61 74 20 74 68 65 0d 0a 64 6f 6d 61 69 6e 20 27 at the..domain '
1a80: 64 6b 6f 6c 66 2e 64 65 27 2e 0d 0a 0d 0a 2d 2d dkolf.de'.....--
1a90: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1aa0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ab0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ac0: 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d 2d ----------------
1ad0: 2d 2d 2d 0d 0a 0d 0a 2a 43 6f 70 79 72 69 67 68 ---....*Copyrigh
1ae0: 74 20 28 43 29 20 32 30 31 30 2d 32 30 31 34 20 t (C) 2010-2014
1af0: 44 61 76 69 64 20 48 65 69 6b 6f 20 4b 6f 6c 66 David Heiko Kolf
1b00: 2a 0d 0a 0d 0a 50 65 72 6d 69 73 73 69 6f 6e 20 *....Permission
1b10: 69 73 20 68 65 72 65 62 79 20 67 72 61 6e 74 65 is hereby grante
1b20: 64 2c 20 66 72 65 65 20 6f 66 20 63 68 61 72 67 d, free of charg
1b30: 65 2c 20 74 6f 20 61 6e 79 20 70 65 72 73 6f 6e e, to any person
1b40: 20 6f 62 74 61 69 6e 69 6e 67 0d 0a 61 20 63 6f obtaining..a co
1b50: 70 79 20 6f 66 20 74 68 69 73 20 73 6f 66 74 77 py of this softw
1b60: 61 72 65 20 61 6e 64 20 61 73 73 6f 63 69 61 74 are and associat
1b70: 65 64 20 64 6f 63 75 6d 65 6e 74 61 74 69 6f 6e ed documentation
1b80: 20 66 69 6c 65 73 20 28 74 68 65 0d 0a 22 53 6f files (the.."So
1b90: 66 74 77 61 72 65 22 29 2c 20 74 6f 20 64 65 61 ftware"), to dea
1ba0: 6c 20 69 6e 20 74 68 65 20 53 6f 66 74 77 61 72 l in the Softwar
1bb0: 65 20 77 69 74 68 6f 75 74 20 72 65 73 74 72 69 e without restri
1bc0: 63 74 69 6f 6e 2c 20 69 6e 63 6c 75 64 69 6e 67 ction, including
1bd0: 0d 0a 77 69 74 68 6f 75 74 20 6c 69 6d 69 74 61 ..without limita
1be0: 74 69 6f 6e 20 74 68 65 20 72 69 67 68 74 73 20 tion the rights
1bf0: 74 6f 20 75 73 65 2c 20 63 6f 70 79 2c 20 6d 6f to use, copy, mo
1c00: 64 69 66 79 2c 20 6d 65 72 67 65 2c 20 70 75 62 dify, merge, pub
1c10: 6c 69 73 68 2c 0d 0a 64 69 73 74 72 69 62 75 74 lish,..distribut
1c20: 65 2c 20 73 75 62 6c 69 63 65 6e 73 65 2c 20 61 e, sublicense, a
1c30: 6e 64 2f 6f 72 20 73 65 6c 6c 20 63 6f 70 69 65 nd/or sell copie
1c40: 73 20 6f 66 20 74 68 65 20 53 6f 66 74 77 61 72 s of the Softwar
1c50: 65 2c 20 61 6e 64 20 74 6f 0d 0a 70 65 72 6d 69 e, and to..permi
1c60: 74 20 70 65 72 73 6f 6e 73 20 74 6f 20 77 68 6f t persons to who
1c70: 6d 20 74 68 65 20 53 6f 66 74 77 61 72 65 20 69 m the Software i
1c80: 73 20 66 75 72 6e 69 73 68 65 64 20 74 6f 20 64 s furnished to d
1c90: 6f 20 73 6f 2c 20 73 75 62 6a 65 63 74 20 74 6f o so, subject to
1ca0: 0d 0a 74 68 65 20 66 6f 6c 6c 6f 77 69 6e 67 20 ..the following
1cb0: 63 6f 6e 64 69 74 69 6f 6e 73 3a 0d 0a 0d 0a 54 conditions:....T
1cc0: 68 65 20 61 62 6f 76 65 20 63 6f 70 79 72 69 67 he above copyrig
1cd0: 68 74 20 6e 6f 74 69 63 65 20 61 6e 64 20 74 68 ht notice and th
1ce0: 69 73 20 70 65 72 6d 69 73 73 69 6f 6e 20 6e 6f is permission no
1cf0: 74 69 63 65 20 73 68 61 6c 6c 20 62 65 0d 0a 69 tice shall be..i
1d00: 6e 63 6c 75 64 65 64 20 69 6e 20 61 6c 6c 20 63 ncluded in all c
1d10: 6f 70 69 65 73 20 6f 72 20 73 75 62 73 74 61 6e opies or substan
1d20: 74 69 61 6c 20 70 6f 72 74 69 6f 6e 73 20 6f 66 tial portions of
1d30: 20 74 68 65 20 53 6f 66 74 77 61 72 65 2e 0d 0a the Software...
1d40: 0d 0a 54 48 45 20 53 4f 46 54 57 41 52 45 20 49 ..THE SOFTWARE I
1d50: 53 20 50 52 4f 56 49 44 45 44 20 22 41 53 20 49 S PROVIDED "AS I
1d60: 53 22 2c 20 57 49 54 48 4f 55 54 20 57 41 52 52 S", WITHOUT WARR
1d70: 41 4e 54 59 20 4f 46 20 41 4e 59 20 4b 49 4e 44 ANTY OF ANY KIND
1d80: 2c 0d 0a 45 58 50 52 45 53 53 20 4f 52 20 49 4d ,..EXPRESS OR IM
1d90: 50 4c 49 45 44 2c 20 49 4e 43 4c 55 44 49 4e 47 PLIED, INCLUDING
1da0: 20 42 55 54 20 4e 4f 54 20 4c 49 4d 49 54 45 44 BUT NOT LIMITED
1db0: 20 54 4f 20 54 48 45 20 57 41 52 52 41 4e 54 49 TO THE WARRANTI
1dc0: 45 53 20 4f 46 0d 0a 4d 45 52 43 48 41 4e 54 41 ES OF..MERCHANTA
1dd0: 42 49 4c 49 54 59 2c 20 46 49 54 4e 45 53 53 20 BILITY, FITNESS
1de0: 46 4f 52 20 41 20 50 41 52 54 49 43 55 4c 41 52 FOR A PARTICULAR
1df0: 20 50 55 52 50 4f 53 45 20 41 4e 44 0d 0a 4e 4f PURPOSE AND..NO
1e00: 4e 49 4e 46 52 49 4e 47 45 4d 45 4e 54 2e 20 49 NINFRINGEMENT. I
1e10: 4e 20 4e 4f 20 45 56 45 4e 54 20 53 48 41 4c 4c N NO EVENT SHALL
1e20: 20 54 48 45 20 41 55 54 48 4f 52 53 20 4f 52 20 THE AUTHORS OR
1e30: 43 4f 50 59 52 49 47 48 54 20 48 4f 4c 44 45 52 COPYRIGHT HOLDER
1e40: 53 0d 0a 42 45 20 4c 49 41 42 4c 45 20 46 4f 52 S..BE LIABLE FOR
1e50: 20 41 4e 59 20 43 4c 41 49 4d 2c 20 44 41 4d 41 ANY CLAIM, DAMA
1e60: 47 45 53 20 4f 52 20 4f 54 48 45 52 20 4c 49 41 GES OR OTHER LIA
1e70: 42 49 4c 49 54 59 2c 20 57 48 45 54 48 45 52 20 BILITY, WHETHER
1e80: 49 4e 20 41 4e 0d 0a 41 43 54 49 4f 4e 20 4f 46 IN AN..ACTION OF
1e90: 20 43 4f 4e 54 52 41 43 54 2c 20 54 4f 52 54 20 CONTRACT, TORT
1ea0: 4f 52 20 4f 54 48 45 52 57 49 53 45 2c 20 41 52 OR OTHERWISE, AR
1eb0: 49 53 49 4e 47 20 46 52 4f 4d 2c 20 4f 55 54 20 ISING FROM, OUT
1ec0: 4f 46 20 4f 52 20 49 4e 0d 0a 43 4f 4e 4e 45 43 OF OR IN..CONNEC
1ed0: 54 49 4f 4e 20 57 49 54 48 20 54 48 45 20 53 4f TION WITH THE SO
1ee0: 46 54 57 41 52 45 20 4f 52 20 54 48 45 20 55 53 FTWARE OR THE US
1ef0: 45 20 4f 52 20 4f 54 48 45 52 20 44 45 41 4c 49 E OR OTHER DEALI
1f00: 4e 47 53 20 49 4e 20 54 48 45 0d 0a 53 4f 46 54 NGS IN THE..SOFT
1f10: 57 41 52 45 2e 0d 0a 0a 5a 20 65 62 38 31 62 34 WARE....Z eb81b4
1f20: 66 61 63 34 66 39 35 63 64 33 31 37 62 61 33 39 fac4f95cd317ba39
1f30: 66 65 32 38 37 31 31 35 35 65 0a fe2871155e.