code: function sectionBody(cps, match, dataFieldName, body, bodyArray) {
      var top = _.last(cps.stack);
  
      if (cps.emptyRows >= 2) {
          if (cps.stateStack[cps.stateStack.length - 1] === (body || SECTION_BODY)) {
              var empty = {};
              if (cps.stateStack[cps.stateStack.length - 2] === (bodyArray || SECTION_BODY_ARRAY)) {
                  cps.stack.pop();
                  cps.stateStack.pop();
                  top = cps.stack[cps.stack.length - 1];
  
                  top.push(empty);
                  cps.stack.push(empty);
                  cps.stateStack.push((body || SECTION_BODY));
  
              } else {
                  var tmp = [empty];
                  top[(dataFieldName || "data")] = tmp;
                  cps.stack.push(tmp);
                  cps.stateStack.push((bodyArray || SECTION_BODY_ARRAY));
                  cps.stack.push(empty);
                  cps.stateStack.push((body || SECTION_BODY));
              }
              top = empty;
          }
          cps.serial = 1;
      }
  
      var field = match[1].toLowerCase();
      var orig = field;
      if (top.hasOwnProperty(orig) || (cps.serial !== 1)) {
          field = orig + ' ' + (cps.serial);
          while (top.hasOwnProperty(field)) {
              field = orig + ' ' + (++cps.serial);
          }
      }
      top[field] = match[2];
  
  }
docs: /* Parse logic