bool LessParser::parseAtRuleOrVariable (LessStylesheet &stylesheet) { string keyword, import; TokenList value, rule; AtRule* atrule = NULL; if (tokenizer->getTokenType() != Token::ATKEYWORD) return false; keyword = tokenizer->getToken(); tokenizer->readNextToken(); skipWhitespace(); #ifdef WITH_LIBGLOG VLOG(2) << "Parse: keyword: " << keyword; #endif if (parseVariable(value)) { #ifdef WITH_LIBGLOG VLOG(2) << "Parse: variable"; #endif stylesheet.putVariable(keyword, value); } else { if (keyword == "@media") { parseLessMediaQuery(stylesheet); return true; } while(parseAny(rule)) {}; if (!parseBlock(rule)) { if (tokenizer->getTokenType() != Token::DELIMITER) { throw new ParseException(tokenizer->getToken(), "delimiter (';') at end of @-rule", tokenizer->getLineNumber(), tokenizer->getColumn(), tokenizer->getSource()); } tokenizer->readNextToken(); skipWhitespace(); } // parse import if (keyword == "@import") { if (rule.size() != 1 || rule.front().type != Token::STRING) throw new ParseException(rule.toString(), "A string with the \ file path", tokenizer->getLineNumber(), tokenizer->getColumn(), tokenizer->getSource()); import = rule.front(); #ifdef WITH_LIBGLOG VLOG(2) << "Import filename: " << import; #endif if (import.size() < 5 || import.substr(import.size() - 5, 4) != ".css") { if (import.size() < 6 || import.substr(import.size() - 6, 5) != ".less") import.insert(import.size() - 1, ".less"); importFile(import.substr(1, import.size() - 2), stylesheet); return true; } } atrule = stylesheet.createAtRule(keyword); atrule->setRule(rule); } return true; }