docs: function processFile(out, fileName, fileInfos) {
      fileName = fileName.replace(/\\/g, '/'); // use only forward slashes
      out.push('SF:' + fileName);
      var statements = fileInfos.code.src;
      var execCount;
      var realLines = {};
      var lineNumber = 0;
      var statementDetails = fileInfos.statements.detail;
      for (var i = 1, l = statements.length; i <= l; i++) {
          var curStatement = statements[i - 1];
          var statementKey = curStatement.l;
          if (statementKey) {
              execCount = statementDetails[statementKey];
  
              // TODO: perhaps replace this with something smarter (by changing node-coverage):
              var matchLineNumber = /^[^0-9]*([0-9]+)_[0-9]+$/.exec(statementKey);
              lineNumber = 1 + parseInt(matchLineNumber[1], 10);
  
              var currentNumber = realLines[lineNumber];
  
              if (currentNumber == null || execCount < currentNumber) {
                  // if several instructions are on the same line, keep the lowest execution count
                  realLines[lineNumber] = execCount;
              }
          }
      }
      var linesInstrumented = 0;
      var linesCovered = 0;
      for (lineNumber in realLines) {
          execCount = realLines[lineNumber];
          if (execCount > 0) {
              linesCovered++;
          }
          linesInstrumented++;
          out.push('DA:' + lineNumber + ',' + execCount);
      }
      out.push('LH:' + linesCovered);
      out.push('LF:' + linesInstrumented);
      out.push('end_of_record');
  }