This file is indexed.

/usr/include/tulip/CSVParser.h is in libtulip-dev 4.4.0dfsg2-2.

This file is owned by root:root, with mode 0o644.

The actual contents of the file can be viewed below.

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
 32
 33
 34
 35
 36
 37
 38
 39
 40
 41
 42
 43
 44
 45
 46
 47
 48
 49
 50
 51
 52
 53
 54
 55
 56
 57
 58
 59
 60
 61
 62
 63
 64
 65
 66
 67
 68
 69
 70
 71
 72
 73
 74
 75
 76
 77
 78
 79
 80
 81
 82
 83
 84
 85
 86
 87
 88
 89
 90
 91
 92
 93
 94
 95
 96
 97
 98
 99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
/*
 *
 * This file is part of Tulip (www.tulip-software.org)
 *
 * Authors: David Auber and the Tulip development Team
 * from LaBRI, University of Bordeaux 1 and Inria Bordeaux - Sud Ouest
 *
 * Tulip is free software; you can redistribute it and/or modify
 * it under the terms of the GNU Lesser General Public License
 * as published by the Free Software Foundation, either version 3
 * of the License, or (at your option) any later version.
 *
 * Tulip is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 * See the GNU General Public License for more details.
 *
 */
///@cond DOXYGEN_HIDDEN

#ifndef CSVDATALOADER_H_
#define CSVDATALOADER_H_

#include <tulip/tulipconf.h>
#include <tulip/CSVContentHandler.h>

#include <vector>
#include <climits>

#include <QString>

class QTextCodec;

namespace tlp {

class PluginProgress;

/*
* @brief Interface for CSV data parser.
*
* Send the found tokens to the CSVContentHandler interface.
*/
class TLP_QT_SCOPE CSVParser {
public:
  virtual ~CSVParser() {}

  /**
    * @brief Parse the data and send the tokens found to the CSVContentHandler.
    *
    * Notify the progression of the parsing with the progress object.
    **/
  virtual bool parse(CSVContentHandler * handler,tlp::PluginProgress* progress=NULL) = 0;
};

/**
* @brief Parse a csv data and send each tokens to the given CSVContentHandler object.
*
* Parse a csv data and send each tokens to the given CSVContentHandler object. Get each line of the file in the given range and parse them. This object skip empty lines.
* Send the found tokens to the CSVContentHandler interface.
* \code
* CSVParser parser(fileName,";","\"","UTF-8",true);
* \/\/Automatically remove quotes.
* CSVContentHandler * handler ;
* parser.parse(handler);
* \endcode
**/
class TLP_QT_SCOPE CSVSimpleParser : public CSVParser {
public:
  /**
    * @brief Construct a csv simple file parser.
    * @param filename The path to the file to import.
    * @param separator The separator to use.
    * @param textDelimiter If a token is sourrounded by this charater we ignore all the separators found in this token. Useful if a token contains the separator.
    * @param firstLine The number of the first line to read. The first line is 0.
    * @param lastLine The number of the last line to read.
    **/
  CSVSimpleParser(const std::string& fileName,const QString &separator=";", const bool mergesep=false, char textDelimiter='"',const std::string& fileEncoding=std::string("UTF-8"),unsigned int firstLine = 0,unsigned int lastLine = UINT_MAX);

  virtual ~CSVSimpleParser();

  inline std::string fileName()const {
    return _fileName;
  }
  inline void setFileName(const std::string& fileName) {
    _fileName = fileName;
  }

  inline char textDelimiter()const {
    return _textDelimiter;
  }

  inline void setTextDelimiter(char delimiter) {
    _textDelimiter = delimiter;
  }

  inline std::string fileEncoding()const {
    return _fileEncoding;
  }

  inline void setFileEncoding(const std::string& fileEncoding) {
    _fileEncoding = fileEncoding;
  }

  bool parse(CSVContentHandler * handler,tlp::PluginProgress* progress=NULL);

protected:
  virtual std::string treatToken(const std::string& token, int row, int column);

private:
  void tokenize(const std::string& str, std::vector<std::string>& tokens,
                const QString &delimiters, const bool mergedelim, char _textDelimiter, unsigned int numberOfCol);
  std::string convertStringEncoding(const std::string& toConvert,QTextCodec* encoder);

  /**
    * @brief Function to extract a line from a istream. Can handle Linux,Mac and Windows end of line pattern.
    **/
  bool multiplatformgetline ( std::istream& is, std::string& str );

  std::string removeQuotesIfAny(const std::string &s,const std::string& rejectedChars);
  std::string _fileName;
  QString _separator;
  char _textDelimiter;
  std::string _fileEncoding;
  unsigned int _firstLine;
  unsigned int _lastLine;
  bool _mergesep;

};

/**
  *@brief CSV parser used to invert the token matrix in order to treat rows as columns.
  **/
class TLP_QT_SCOPE CSVInvertMatrixParser : public tlp::CSVParser , public tlp::CSVContentHandler {
public:
  CSVInvertMatrixParser(CSVParser* parser);
  virtual ~CSVInvertMatrixParser();

  bool parse(CSVContentHandler *handler, tlp::PluginProgress *progress=NULL);

  void begin();
  void line(unsigned int row,const std::vector<std::string>& lineTokens);
  void end(unsigned int rowNumber, unsigned int columnNumber);
private:
  CSVParser *parser;
  CSVContentHandler *handler;
  std::vector<std::vector<std::string> > columns;
  unsigned int maxLineSize;
};
}
#endif /* CSVDATALOADER_H_ */
///@endcond