| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697 | 
							- var xhr = require('xhr')
 
- var noop = function(){}
 
- var parseASCII = require('parse-bmfont-ascii')
 
- var parseXML = require('parse-bmfont-xml')
 
- var readBinary = require('parse-bmfont-binary')
 
- var isBinaryFormat = require('./lib/is-binary')
 
- var xtend = require('xtend')
 
- var xml2 = (function hasXML2() {
 
-   return self.XMLHttpRequest && "withCredentials" in new XMLHttpRequest
 
- })()
 
- module.exports = function(opt, cb) {
 
-   cb = typeof cb === 'function' ? cb : noop
 
-   if (typeof opt === 'string')
 
-     opt = { uri: opt }
 
-   else if (!opt)
 
-     opt = {}
 
-   var expectBinary = opt.binary
 
-   if (expectBinary)
 
-     opt = getBinaryOpts(opt)
 
-   xhr(opt, function(err, res, body) {
 
-     if (err)
 
-       return cb(err)
 
-     if (!/^2/.test(res.statusCode))
 
-       return cb(new Error('http status code: '+res.statusCode))
 
-     if (!body)
 
-       return cb(new Error('no body result'))
 
-     var binary = false 
 
-     //if the response type is an array buffer,
 
-     //we need to convert it into a regular Buffer object
 
-     if (isArrayBuffer(body)) {
 
-       var array = new Uint8Array(body)
 
-       body = Buffer.from(array, 'binary')
 
-     }
 
-     //now check the string/Buffer response
 
-     //and see if it has a binary BMF header
 
-     if (isBinaryFormat(body)) {
 
-       binary = true
 
-       //if we have a string, turn it into a Buffer
 
-       if (typeof body === 'string') 
 
-         body = Buffer.from(body, 'binary')
 
-     } 
 
-     //we are not parsing a binary format, just ASCII/XML/etc
 
-     if (!binary) {
 
-       //might still be a buffer if responseType is 'arraybuffer'
 
-       if (Buffer.isBuffer(body))
 
-         body = body.toString(opt.encoding)
 
-       body = body.trim()
 
-     }
 
-     var result
 
-     try {
 
-       var type = res.headers['content-type']
 
-       if (binary)
 
-         result = readBinary(body)
 
-       else if (/json/.test(type) || body.charAt(0) === '{')
 
-         result = JSON.parse(body)
 
-       else if (/xml/.test(type)  || body.charAt(0) === '<')
 
-         result = parseXML(body)
 
-       else
 
-         result = parseASCII(body)
 
-     } catch (e) {
 
-       cb(new Error('error parsing font '+e.message))
 
-       cb = noop
 
-     }
 
-     cb(null, result)
 
-   })
 
- }
 
- function isArrayBuffer(arr) {
 
-   var str = Object.prototype.toString
 
-   return str.call(arr) === '[object ArrayBuffer]'
 
- }
 
- function getBinaryOpts(opt) {
 
-   //IE10+ and other modern browsers support array buffers
 
-   if (xml2)
 
-     return xtend(opt, { responseType: 'arraybuffer' })
 
-   
 
-   if (typeof self.XMLHttpRequest === 'undefined')
 
-     throw new Error('your browser does not support XHR loading')
 
-   //IE9 and XML1 browsers could still use an override
 
-   var req = new self.XMLHttpRequest()
 
-   req.overrideMimeType('text/plain; charset=x-user-defined')
 
-   return xtend({
 
-     xhr: req
 
-   }, opt)
 
- }
 
 
  |