Main Page | Namespace List | Class Hierarchy | Alphabetical List | Compound List | File List | Namespace Members | Compound Members | File Members

StreamTokenizer.cpp

Go to the documentation of this file.
00001 //------------------------------------------------------------------------------
00002 // Lamp : Open source game middleware
00003 // Copyright (C) 2004  Junpei Ohtani ( Email : junpee@users.sourceforge.jp )
00004 //
00005 // This library is free software; you can redistribute it and/or
00006 // modify it under the terms of the GNU Lesser General Public
00007 // License as published by the Free Software Foundation; either
00008 // version 2.1 of the License, or (at your option) any later version.
00009 //
00010 // This library is distributed in the hope that it will be useful,
00011 // but WITHOUT ANY WARRANTY; without even the implied warranty of
00012 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
00013 // Lesser General Public License for more details.
00014 //
00015 // You should have received a copy of the GNU Lesser General Public
00016 // License along with this library; if not, write to the Free Software
00017 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
00018 //------------------------------------------------------------------------------
00019 
00020 /** @file
00021  * ストリームトークナイザ実装
00022  * @author Junpee
00023  */
00024 
00025 #include "LampBasic.h"
00026 #include "Core/InputOutput/StreamTokenizer.h"
00027 #include "Core/InputOutput/TextReader.h"
00028 
00029 namespace Lamp{
00030 
00031 // デフォルトデリミタ
00032 const String StreamTokenizer::defaultDelimiter(" \t\r\f");
00033 
00034 //------------------------------------------------------------------------------
00035 // コンストラクタ
00036 StreamTokenizer::StreamTokenizer(TextReader* reader, const String& delimiter) :
00037     reader_(reader), delimiter_(delimiter),
00038     slashSlash_(true), slashStar_(true), lineNumber_(0){
00039 }
00040 //------------------------------------------------------------------------------
00041 // デストラクタ
00042 StreamTokenizer::~StreamTokenizer(){
00043 }
00044 //------------------------------------------------------------------------------
00045 // 次のトークン
00046 bool StreamTokenizer::nextToken(){
00047     // トークンのが出てくるまで読み飛ばす
00048     bool check = checkTokenzier();
00049     if(!check){ return false; }
00050     // トークンの読み込み
00051     String token = tokenizer_.getNextToken();
00052     // スラッシュスラッシュコメント
00053     if(slashSlash_){
00054         if(token.startsWith("//")){
00055             while(tokenizer_.hasMoreTokens()){ tokenizer_.getNextToken(); }
00056             return nextToken();
00057         }
00058     }
00059     if(slashStar_){
00060         if(token.startsWith("/*")){
00061             while(true){
00062                 // トークンのが出てくるまで読み飛ばす
00063                 if(!checkTokenzier()){ return false; }
00064                 // 終了チェック
00065                 String endComment = tokenizer_.getNextToken();
00066                 if(endComment.endsWith("*/")){ return nextToken(); }
00067             }
00068         }
00069     }
00070 
00071     // トークンの書き出し
00072     previousToken_ = nowToken_;
00073     nowToken_ = token;
00074     return true;
00075 }
00076 //------------------------------------------------------------------------------
00077 bool StreamTokenizer::checkTokenzier(){
00078     // tokenizer_.hasMoreToken()がfalseならトークナイザ無効
00079     // かつファイルが読み終わっていればトークンなし
00080     if(tokenizer_.hasMoreTokens()){ return true; }
00081     while(true){
00082         if(reader_->isEnd()){ return false; }
00083         tokenizer_.initialize(reader_->readLine(), delimiter_);
00084         lineNumber_++;
00085         if(tokenizer_.hasMoreTokens()){ return true; }
00086     }
00087 }
00088 //------------------------------------------------------------------------------
00089 } // End of namespace Lamp
00090 //------------------------------------------------------------------------------

Generated on Wed Mar 16 10:29:36 2005 for Lamp by doxygen 1.3.2