part of mustache.impl;

class _Token {
  
  _Token(this.type, this.value, this.start, this.end, {this.indent : ''});
  
  final int type;
  final String value;
  
  final int start;
  final int end;
  
  // Used to store the preceding whitespace before a partial tag, so that
  // it's content can be correctly indented.
  final String indent;
  
  toString() => "${_tokenTypeString(type)}: "
    "\"${value.replaceAll('\n', '\\n')}\"";
}

//FIXME use enums
const int _TEXT = 1;
const int _VARIABLE = 2;
const int _PARTIAL = 3;
const int _OPEN_SECTION = 4;
const int _OPEN_INV_SECTION = 5;
const int _CLOSE_SECTION = 6;
const int _COMMENT = 7;
const int _UNESC_VARIABLE = 8;
const int _WHITESPACE = 9; // Should be filtered out, before returned by scan.
const int _LINE_END = 10; // Should be filtered out, before returned by scan.
const int _CHANGE_DELIMITER = 11;

_tokenTypeString(int type) => [
  '?', 
  'Text',
  'Var',
  'Par',
  'Open',
  'OpenInv',
  'Close',
  'Comment',
  'UnescVar',
  'Whitespace',
  'LineEnd',
  'ChangeDelimiter'][type];
