X-Git-Url: http://git.tdb.fi/?p=libs%2Fdatafile.git;a=blobdiff_plain;f=source%2Ftextparser.cpp;h=d8e422ee7ff4d4d710a764a62383955f377305f5;hp=0f17d3f3cc79808a7659e291e406f6b7bb814137;hb=cbd0ddd6ee033e46646bfb85d19232c816ea1eda;hpb=6386a0ddd60b3f8f4a634c1221f29e36922605c7 diff --git a/source/textparser.cpp b/source/textparser.cpp index 0f17d3f..d8e422e 100644 --- a/source/textparser.cpp +++ b/source/textparser.cpp @@ -28,19 +28,19 @@ Statement TextParser::parse() Statement TextParser::parse_statement(const Token *t) { Statement result; - bool sub=false; - bool finish=false; + bool sub = false; + bool finish = false; while(in) { Token token; if(t) { - token=*t; - t=0; + token = *t; + t = 0; } else - token=parse_token(); + token = parse_token(); if(result.keyword.empty()) { @@ -48,21 +48,21 @@ Statement TextParser::parse_statement(const Token *t) break; else if(token.type!=Token::IDENTIFIER) throw_at(ParseError(format("Syntax error at token '%s' (expected an identifier)", token.str)), get_location()); - result.keyword=token.str; - result.valid=true; - result.source=src; - result.line=in.get_line_number(); + result.keyword = token.str; + result.valid = true; + result.source = src; + result.line = in.get_line_number(); } else if(sub) { if(token.str=="}") { - sub=false; - finish=true; + sub = false; + finish = true; } else { - Statement ss=parse_statement(&token); + Statement ss = parse_statement(&token); result.sub.push_back(ss); } } @@ -73,7 +73,7 @@ Statement TextParser::parse_statement(const Token *t) break; } else if(token.str=="{") - sub=true; + sub = true; else if(token.str==";") break; else if(token.type==Token::INTEGER) @@ -103,27 +103,27 @@ Statement TextParser::parse_statement(const Token *t) Token TextParser::parse_token() { - int c=0; - int comment=0; + int c = 0; + int comment = 0; // Skip over comments and whitespace while(in && comment>=0) { - c=in.get(); - int next=in.peek(); + c = in.get(); + int next = in.peek(); if(c=='/' && next=='/') - comment=1; + comment = 1; else if(c=='/' && next=='*') - comment=2; + comment = 2; else if(c=='\n' && comment==1) - comment=0; + comment = 0; else if(c=='*' && next=='/' && comment==2) - comment=3; + comment = 3; else if(comment==3) // Skip the second character of block comment end - comment=0; + comment = 0; else if(!isspace(c) && !comment) - comment=-1; + comment = -1; } if(comment>0) // EOF while in comment @@ -165,64 +165,64 @@ Token TextParser::parse_token() Token::IDENTIFIER }; - ParseState state=INIT; + ParseState state = INIT; string buf; - bool escape=false; + bool escape = false; while(in || state==INIT) { if(state!=INIT) - c=in.get(); - int next=in.peek(); + c = in.get(); + int next = in.peek(); - buf+=c; + buf += c; switch(state) { case INIT: if(c=='0') - state=ZERO; + state = ZERO; else if(c=='-' || c=='+') - state=SIGN; + state = SIGN; else if(c=='.') - state=FLOAT; + state = FLOAT; else if(c=='"') - state=STRING; + state = STRING; else if(c=='{' || c=='}' || c==';') return Token(Token::SPECIAL, string(1, c)); else if(isdigit(c)) - state=DECIMAL; + state = DECIMAL; else if(isalpha(c) || c=='_') - state=IDENTIFIER; + state = IDENTIFIER; else parse_error(c, "0-9A-Za-z_.\"{};+-"); break; case SIGN: if(c=='0') - state=ZERO; + state = ZERO; else if(isdigit(c)) - state=DECIMAL; + state = DECIMAL; else if(c=='.') - state=FLOAT; + state = FLOAT; else parse_error(c, "0-9."); break; case ZERO: if(c=='x') - state=HEXADECIMAL; + state = HEXADECIMAL; else if(isdigit(c)) - state=OCTAL; + state = OCTAL; else if(c=='.') - state=FLOAT; + state = FLOAT; else parse_error(c, "0-9A-Fa-f."); break; case DECIMAL: if(c=='.') - state=FLOAT; + state = FLOAT; else if(!isdigit(c)) parse_error(c, "0-9."); break; @@ -239,23 +239,23 @@ Token TextParser::parse_token() case FLOAT: if(c=='e' || c=='E') - state=FLOATEXPINIT; + state = FLOATEXPINIT; else if(!isdigit(c)) parse_error(c, "0-9Ee"); break; case FLOATEXPINIT: if(c=='+' || c=='-') - state=FLOATEXPSIGN; + state = FLOATEXPSIGN; else if(isdigit(c)) - state=FLOATEXP; + state = FLOATEXP; else parse_error(c, "0-9+-"); break; case FLOATEXPSIGN: if(isdigit(c)) - state=FLOATEXP; + state = FLOATEXP; else parse_error(c, "0-9"); break; @@ -267,7 +267,7 @@ Token TextParser::parse_token() case STRING: if(c=='\\') - escape=!escape; + escape = !escape; else if(c=='"' && !escape) { try @@ -281,7 +281,7 @@ Token TextParser::parse_token() } } else - escape=false; + escape = false; break; case IDENTIFIER: