49using std::istream, std::endl;
58 _is(&is), _atEOL(false), _atEOF(false), _prefix(
""), _punct(
"()[]<>|/\\:?.,=+-&^%$#@!`~")
68 _is(&is), _atEOL(false), _atEOF(false), _prefix(errorPrefix), _punct(
"()[]<>|/\\:?.,=+-&^%$#@!`~")
78 return (nc==
'\n'||nc==-1) ;
121 bool quotedString(
false);
122 bool lineCont(
false);
127 bool haveINF(
false) ;
131 if (
_is->eof() ||
_is->fail()) {
137 if (
_is->peek()==
'\n') {
141 while (
_is->peek()==
'#') {
149 if (bufptr >= 63999) {
150 oocoutW(
nullptr, InputArguments)
151 <<
"RooStreamParser::readToken: token length exceeds buffer capacity, terminating token early" << endl;
161 if (
_is->eof() ||
_is->fail() ||
c==
'\n') break ;
167 }
else if (!quotedString) {
173 if (
c ==
'.' ||
c==
'-' ||
c==
'+' ||
c==
'/' ||
c==
'\\') {
177 if (cnext==
'I' || cnext==
'i') {
184 haveINF = ((cnext ==
'I' && tmp1 ==
'N' && tmp2 ==
'F') || (cnext ==
'i' && tmp1 ==
'n' && tmp2 ==
'f'));
189 _is->putback(cnext) ;
194 if (
c==
'\\' && cnext==
'\\') {
203 if (
c==
'/' && cnext==
'/') {
212 }
else if (!quotedString) {
221 if (
isPunctChar(
c) && !(
c==
'.' && (isdigit(cnext)||isdigit(cprev)))
222 && !((
c==
'-'||
c==
'+') && isdigit(cnext) && (cprev ==
'e' || cprev ==
'E'))
223 && (!first || !((
c==
'-'||
c==
'+') && (isdigit(cnext)||cnext==
'.'||haveINF)))) {
239 if (
c==
'"' && !first) {
252 if (
_is->eof() ||
_is->bad()) {
258 oocoutW(
nullptr,InputArguments) <<
"RooStreamParser::readToken: closing quote (\") missing" << endl ;
269 while ((isspace(
c) ||
c==
'/') &&
c !=
'\n') {
272 if (
_is->peek()==
'/') {
286 if (bufptr==0 && lineCont) {
308 if (
_is->peek() ==
'\n')
312 _is->getline(buffer, nfree,
'\n');
315 char *pcontseq = strstr(buffer,
"\\\\");
317 nfree -= (pcontseq - buffer);
319 _is->getline(pcontseq, nfree,
'\n');
321 char *nextpcontseq = strstr(pcontseq,
"\\\\");
323 nfree -= (nextpcontseq - pcontseq);
324 pcontseq = nextpcontseq;
328 char *pcomment = strstr(buffer,
"//");
333 char *pstart = buffer;
334 while (isspace(*pstart)) {
337 char *pend = buffer + strlen(buffer) - 1;
339 while (isspace(*pend)) {
344 if (
_is->eof() ||
_is->fail()) {
362 if (
_is->peek()!=
'\n') {
368 _is->getline(buffer, nfree,
'\n');
372 char *pcontseq = strstr(buffer,
"\\\\");
374 nfree -= (pcontseq - buffer);
376 _is->getline(pcontseq, nfree,
'\n');
378 char *nextpcontseq = strstr(pcontseq,
"\\\\");
380 nfree -= (nextpcontseq - pcontseq);
381 pcontseq = nextpcontseq;
401 oocoutW(
nullptr,InputArguments) <<
_prefix <<
": parse error, expected '"
402 << expected <<
"'" <<
", got '" << token <<
"'" << endl ;
417 if (token.
IsNull())
return true ;
429 char *endptr =
nullptr;
433 if (!strcasecmp(
data,
"inf") || !strcasecmp(
data + 1,
"inf")) {
439 bool error = (endptr -
data != token.
Length());
442 oocoutE(
nullptr, InputArguments) <<
_prefix <<
": parse error, cannot convert '" << token <<
"'"
443 <<
" to double precision" << endl;
457 if (token.
IsNull())
return true ;
469 char* endptr =
nullptr;
475 oocoutE(
nullptr,InputArguments)<<
_prefix <<
": parse error, cannot convert '"
476 << token <<
"'" <<
" to integer" << endl ;
491 if (token.
IsNull())
return true ;
505 strncpy(buffer, token.
Data(), 63999);
506 if (token.
Length() >= 63999) {
507 oocoutW(
nullptr, InputArguments) <<
"RooStreamParser::convertToString: token length exceeds 63999, truncated"
511 int len = strlen(buffer) ;
514 if ((
len) && (buffer[
len-1]==
'"'))
518 ptr=(buffer[0]==
'"') ? buffer+1 : buffer ;
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void data
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void value
Option_t Option_t TPoint TPoint const char GetTextMagnitude GetFillStyle GetLineColor GetLineWidth GetMarkerStyle GetTextAlign GetTextColor GetTextSize void char Point_t Rectangle_t WindowAttributes_t Float_t Float_t Float_t Int_t Int_t UInt_t UInt_t Rectangle_t Int_t Int_t Window_t TString Int_t GCValues_t GetPrimarySelectionOwner GetDisplay GetScreen GetColormap GetNativeEvent const char const char dpyName wid window const char font_name cursor keysym reg const char only_if_exist regb h Point_t winding char text const char depth char const char Int_t count const char ColorStruct_t color const char Pixmap_t Pixmap_t PictureAttributes_t attr const char char ret_data h unsigned char height h Atom_t Int_t ULong_t ULong_t unsigned char prop_list Atom_t Atom_t Atom_t Time_t UChar_t len
static constexpr double infinity()
Return internal infinity representation.
bool convertToInteger(const TString &token, Int_t &value)
Convert given string to an Int_t.
bool readString(TString &value, bool zapOnError=false)
Read a string token.
void setPunctuation(const TString &punct)
Change list of characters interpreted as punctuation.
bool isPunctChar(char c) const
Check if given char is considered punctuation.
bool expectToken(const TString &expected, bool zapOnError=false)
Read the next token and return true if it is identical to the given 'expected' token.
bool convertToDouble(const TString &token, double &value)
Convert given string to a double. Return true if the conversion fails.
bool atEOL()
If true, parser is at end of line in stream.
TString readLine()
Read an entire line from the stream and return as TString This method recognizes the use of '\' in th...
bool readDouble(double &value, bool zapOnError=false)
Read the next token and convert it to a double.
TString readToken()
Read one token separated by any of the know punctuation characters This function recognizes and handl...
bool readInteger(Int_t &value, bool zapOnError=false)
Read a token and convert it to an Int_t.
void zapToEnd(bool inclContLines=false)
Eat all characters up to and including then end of the current line.
bool convertToString(const TString &token, TString &string)
Convert given token to a string (i.e. remove eventual quotation marks)
RooStreamParser(std::istream &is)
Construct parser on given input stream.
int CompareTo(const char *cs, ECaseCompare cmp=kExact) const
Compare a string to char *cs2.
const char * Data() const