| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970 | 'use strict';var error = require('pug-error');module.exports = stripComments;function unexpectedToken (type, occasion, filename, line) {  var msg = '`' + type + '` encountered when ' + occasion;  throw error('UNEXPECTED_TOKEN', msg, { filename: filename, line: line });}function stripComments (input, options) {  options = options || {};  // Default: strip unbuffered comments and leave buffered ones alone  var stripUnbuffered = options.stripUnbuffered !== false;  var stripBuffered   = options.stripBuffered   === true;  var filename        = options.filename;  var out = [];  // If we have encountered a comment token and are not sure if we have gotten  // out of the comment or not  var inComment = false;  // If we are sure that we are in a block comment and all tokens except  // `end-pipeless-text` should be ignored  var inPipelessText = false;  return input.filter(function (tok) {    switch (tok.type) {      case 'comment':        if (inComment) {          unexpectedToken(            'comment', 'already in a comment', filename, tok.line          );        } else {          inComment = tok.buffer ? stripBuffered : stripUnbuffered;          return !inComment;        }      case 'start-pipeless-text':        if (!inComment) return true;        if (inPipelessText) {          unexpectedToken(            'start-pipeless-text', 'already in pipeless text mode',            filename, tok.line          );        }        inPipelessText = true;        return false;      case 'end-pipeless-text':        if (!inComment) return true;        if (!inPipelessText) {          unexpectedToken(            'end-pipeless-text', 'not in pipeless text mode',            filename, tok.line          );        }        inPipelessText = false;        inComment = false;        return false;      // There might be a `text` right after `comment` but before      // `start-pipeless-text`. Treat it accordingly.      case 'text':        return !inComment;      default:        if (inPipelessText) return false;        inComment = false;        return true;    }  });}
 |