text: /**
   * Parse PO buffer to JSON
   *
   * @param {Buffer|String} buffer - Buffer PO object or unicode string with PO data
   * @param {Object} [options]
   * @return {Object|String} Translation JSON
   */
  
  module.exports = function(buffer, options) {
  
    // Setup options and load in defaults
    options = options || {};
    var defaults = {
      pretty: false,
      fuzzy: false,
      stringify: false,
      format: 'raw',
      domain: 'messages',
      charset: 'utf8'
    };
  
    for (var property in defaults) {
      options[property] = 'undefined' !== typeof options[property] ? options[property] : defaults[property];
    }
  
    // Parse the PO file
    var parsed = require('gettext-parser').po.parse( buffer, defaults.charset );
  
    // Create gettext/Jed compatible JSON from parsed data
    var result = {},
        contexts = parsed.translations;
  
    Object.keys(contexts).forEach(function (context) {
      var translations = parsed.translations[context];
      var pluralForms = parsed.headers ? parsed.headers['plural-forms'] : '';
  
      Object.keys(translations).forEach(function (key, i) {
        var t = translations[key],
            translationKey = context.length ? context + '\u0004' + key : key,
            fuzzy = t.comments && t.comments.flag && t.comments.flag.match(/fuzzy/) !== null;
  
        if (!fuzzy || options.fuzzy) {
          if (options.format === 'mf') {
            result[translationKey] = t.msgstr[0];
          } else if (options.format === 'jed1.x') {
            result[translationKey] = [ t.msgid_plural ? t.msgid_plural : null ].concat(t.msgstr);
          } else {
            if(pluralForms == 'nplurals=1; plural=0;') {
              msgstr = t.msgid_plural ? [t.msgstr] : t.msgstr
              result[translationKey] = [ t.msgid_plural ? t.msgid_plural : null ].concat(msgstr);
            } else {
              result[translationKey] = [ t.msgid_plural ? t.msgid_plural : null ].concat(t.msgstr);
            }
          }
        }
  
        // In the case of fuzzy or empty messages, use msgid(/msgid_plural)
        if (options['fallback-to-msgid'] && (fuzzy && !options.fuzzy || t.msgstr[0] === '')) {
          if (options.format === 'mf') {
            result[translationKey] = key;
          } else {
            result[translationKey] = [ t.msgid_plural ? t.msgid_plural : null ]
                .concat(t.msgid_plural ? [key, t.msgid_plural] : [key]);
          }
        }
  
      });
    });
  
    // Attach headers (overwrites any empty translation keys that may have somehow gotten in)
    if (parsed.headers) {
      result[''] = parsed.headers;
    }
  
    if (options.format === 'mf') {
      delete result[''];
    }
  
    // Make JSON fully Jed-compatible
    if (options.format.indexOf('jed') === 0) {
      var jed = {
        domain: options.domain,
        locale_data: {}
      };
      if (options.format === 'jed1.x'){
        for (var key in result) {
          if (result.hasOwnProperty(key) && key !== ''){
            for (var i = 2; i < result[key].length; i++){
              if ('' === result[key][i]){
                result[key][i] = result[key][0];
              }
            }
            result[key].shift();
          }
        }
      }
      jed.locale_data[options.domain] = result;
      jed.locale_data[options.domain][''] = {
        domain: options.domain,
        plural_forms: result['']['plural-forms'],
        lang: result['']['language']
      };
  
      result = jed;
    }
  
    return options.stringify ? JSON.stringify( result, null, options.pretty ? '   ' : null ) : result;
  }
  