Hex Artifact Content — dkjson

Artifact c0a6b6712d34188aae64aefacf94c5cbcebb6014:

Wiki page [Documentation] 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.