| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | 
							- 'use strict'
 
- exports.parse = function (source, transform) {
 
-   return new ArrayParser(source, transform).parse()
 
- }
 
- class ArrayParser {
 
-   constructor (source, transform) {
 
-     this.source = source
 
-     this.transform = transform || identity
 
-     this.position = 0
 
-     this.entries = []
 
-     this.recorded = []
 
-     this.dimension = 0
 
-   }
 
-   isEof () {
 
-     return this.position >= this.source.length
 
-   }
 
-   nextCharacter () {
 
-     var character = this.source[this.position++]
 
-     if (character === '\\') {
 
-       return {
 
-         value: this.source[this.position++],
 
-         escaped: true
 
-       }
 
-     }
 
-     return {
 
-       value: character,
 
-       escaped: false
 
-     }
 
-   }
 
-   record (character) {
 
-     this.recorded.push(character)
 
-   }
 
-   newEntry (includeEmpty) {
 
-     var entry
 
-     if (this.recorded.length > 0 || includeEmpty) {
 
-       entry = this.recorded.join('')
 
-       if (entry === 'NULL' && !includeEmpty) {
 
-         entry = null
 
-       }
 
-       if (entry !== null) entry = this.transform(entry)
 
-       this.entries.push(entry)
 
-       this.recorded = []
 
-     }
 
-   }
 
-   consumeDimensions () {
 
-     if (this.source[0] === '[') {
 
-       while (!this.isEof()) {
 
-         var char = this.nextCharacter()
 
-         if (char.value === '=') break
 
-       }
 
-     }
 
-   }
 
-   parse (nested) {
 
-     var character, parser, quote
 
-     this.consumeDimensions()
 
-     while (!this.isEof()) {
 
-       character = this.nextCharacter()
 
-       if (character.value === '{' && !quote) {
 
-         this.dimension++
 
-         if (this.dimension > 1) {
 
-           parser = new ArrayParser(this.source.substr(this.position - 1), this.transform)
 
-           this.entries.push(parser.parse(true))
 
-           this.position += parser.position - 2
 
-         }
 
-       } else if (character.value === '}' && !quote) {
 
-         this.dimension--
 
-         if (!this.dimension) {
 
-           this.newEntry()
 
-           if (nested) return this.entries
 
-         }
 
-       } else if (character.value === '"' && !character.escaped) {
 
-         if (quote) this.newEntry(true)
 
-         quote = !quote
 
-       } else if (character.value === ',' && !quote) {
 
-         this.newEntry()
 
-       } else {
 
-         this.record(character.value)
 
-       }
 
-     }
 
-     if (this.dimension !== 0) {
 
-       throw new Error('array dimension not balanced')
 
-     }
 
-     return this.entries
 
-   }
 
- }
 
- function identity (value) {
 
-   return value
 
- }
 
 
  |