protected List<String> getData() {
    List<String> dataFields = new LinkedList<String>();
    StringBuilder dataBuff = new StringBuilder();

    char c = nextChar();

    while (c == '[') {
      char prev = contents.charAt(index);
      c = nextChar();
      while ((c != ']' || (c == ']' && prev == '\\')) && index < contents.length()) {
        dataBuff.append(c);
        prev = c;
        c = nextChar();
      }

      String buffValue = dataBuff.toString();
      if (buffValue.length() != 0) {
        dataFields.add(buffValue);
        dataBuff = new StringBuilder();
      }

      c = nextChar();
    }

    pushChar();

    return dataFields;
  }