docs: function () {
                  var c, i, snippet;
  
                  for (;;) {
                      while (!source_row) {
                          if (!next_line()) {
                              return it('(end)');
                          }
                      }
                      while (xmode === 'outer') {
                          i = source_row.search(ox);
                          if (i === 0) {
                              break;
                          } else if (i > 0) {
                              character += i;
                              source_row = source_row.slice(i);
                              break;
                          } else {
                              if (!next_line()) {
                                  return it('(end)', '');
                              }
                          }
                      }
                      snippet = match(rx[xmode] || tx);
                      if (!snippet) {
                          if (source_row) {
                              if (source_row.charAt(0) === ' ') {
                                  if (!option.white) {
                                      warn_at('unexpected_a', line, character,
                                          '(space)');
                                  }
                                  character += 1;
                                  source_row = '';
                              } else {
                                  stop_at('unexpected_a', line, character,
                                      source_row.charAt(0));
                              }
                          }
                      } else {
  
  //      identifier
  
                          c = snippet.charAt(0);
                          if (c.isAlpha() || c === '_' || c === '$') {
                              return it('(identifier)', snippet);
                          }
  
  //      number
  
                          if (c.isDigit()) {
                              return number(snippet);
                          }
                          switch (snippet) {
  
  //      string
  
                          case '"':
                          case "'":
                              return string(snippet);
  
  //      // comment
  
                          case '//':
                              comment(source_row);
                              source_row = '';
                              break;
  
  //      /* comment
  
                          case '/*':
                              for (;;) {
                                  i = source_row.search(lx);
                                  if (i >= 0) {
                                      break;
                                  }
                                  comment(source_row);
                                  if (!next_line()) {
                                      stop_at('unclosed_comment', line, character);
                                  }
                              }
                              comment(source_row.slice(0, i));
                              character += i + 2;
                              if (source_row.charAt(i) === '/') {
                                  stop_at('nested_comment', line, character);
                              }
                              source_row = source_row.slice(i + 2);
                              break;
  
                          case '':
                              break;
  //      /
                          case '/':
                              if (token.id === '/=') {
                                  stop_at(
                                      bundle.slash_equal,
                                      line,
                                      from
                                  );
                              }
                              return prereg
                                  ? regexp()
                                  : it('(punctuator)', snippet);
  
  //      punctuator
  
                          case '<!--':
                              length = line;
  //                            c = character;
                              for (;;) {
                                  i = source_row.indexOf('--');
                                  if (i >= 0) {
                                      break;
                                  }
                                  i = source_row.indexOf('<!');
                                  if (i >= 0) {
                                      stop_at('nested_comment',
                                          line, character + i);
                                  }
                                  if (!next_line()) {
                                      stop_at('unclosed_comment', length, c);
                                  }
                              }
                              length = source_row.indexOf('<!');
                              if (length >= 0 && length < i) {
                                  stop_at('nested_comment',
                                      line, character + length);
                              }
                              character += i;
                              if (source_row.charAt(i + 2) !== '>') {
                                  stop_at('expected_a', line, character, '-->');
                              }
                              character += 3;
                              source_row = source_row.slice(i + 3);
                              break;
                          case '#':
                              if (xmode === 'html' || xmode === 'styleproperty') {
                                  for (;;) {
                                      c = source_row.charAt(0);
                                      if ((c < '0' || c > '9') &&
                                              (c < 'a' || c > 'f') &&
                                              (c < 'A' || c > 'F')) {
                                          break;
                                      }
                                      character += 1;
                                      source_row = source_row.slice(1);
                                      snippet += c;
                                  }
                                  if (snippet.length !== 4 && snippet.length !== 7) {
                                      warn_at('bad_color_a', line,
                                          from + length, snippet);
                                  }
                                  return it('(color)', snippet);
                              }
                              return it('(punctuator)', snippet);
  
                          default:
                              if (xmode === 'outer' && c === '&') {
                                  character += 1;
                                  source_row = source_row.slice(1);
                                  for (;;) {
                                      c = source_row.charAt(0);
                                      character += 1;
                                      source_row = source_row.slice(1);
                                      if (c === ';') {
                                          break;
                                      }
                                      if (!((c >= '0' && c <= '9') ||
                                              (c >= 'a' && c <= 'z') ||
                                              c === '#')) {
                                          stop_at('bad_entity', line, from + length,
                                              character);
                                      }
                                  }
                                  break;
                              }
                              return it('(punctuator)', snippet);
                          }
                      }
                  }
              }