チェンジセット 831

差分発生行の前後
無視リスト:
コミット日時:
2008/07/12 02:42:23 (4 年前)
コミッタ:
tera
ログメッセージ:

色々間違いに気づいて直しながらついでに機能追加。
if文がキモくなってゲンナリ。

ファイル:

凡例:

変更無し
追加
削除
更新
コピー
移動
  • as3/Utils/src/org/libspark/utils/LineReader.as

    r830 r831  
    8181                private var _buffer:ByteArray = new ByteArray(); 
    8282                 
     83                // 改行コードをバッファに保存するか 
     84                private var _trimLineFeed:Boolean = false; 
     85                 
     86                // 空行をスキップするか 
     87                private var _skipBlankLine:Boolean = false; 
     88                 
    8389                /** 
    8490                 * 現在のバッファ内容を返します。 
     
    8894                public function get buffer():ByteArray { 
    8995                        return _buffer; 
     96                } 
     97                 
     98                /** 
     99                 * 改行コードをバッファに保存するかを設定します。 
     100                 *  
     101                 * @param flag 現在の設定 
     102                 */ 
     103                public function set trimLineFeed(flag:Boolean):void { 
     104                        _trimLineFeed = flag; 
     105                } 
     106                 
     107                /** 
     108                 * 改行コードをバッファに保存するかを返します。 
     109                 *  
     110                 * @return 現在の設定 
     111                 */ 
     112                public function get trimLineFeed():Boolean { 
     113                        return _trimLineFeed; 
     114                } 
     115                 
     116                /** 
     117                 * 空行をスキップするかを設定します。 
     118                 *  
     119                 * @param flag 現在の設定 
     120                 */ 
     121                public function set skipBlankLine(flag:Boolean):void { 
     122                        _skipBlankLine = flag; 
     123                } 
     124                 
     125                /** 
     126                 * 空行をスキップするかを返します。 
     127                 *  
     128                 * @return 現在の設定 
     129                 */ 
     130                public function get skipBlankLine():Boolean { 
     131                        return _skipBlankLine; 
    90132                } 
    91133                 
     
    105147                                // 1バイトずつ読み込む 
    106148                                byte = dataInput.readByte(); 
    107                                 // CRを検出した場合 
    108                                 if (byte == CARRIAGE_RETURN) { 
    109                                         // 次byteのLFをスキップ 
     149                                 
     150                                if (_skipNextLineFeed) { 
     151                                        _skipNextLineFeed = false; 
     152                                        if (byte == LINE_FEED) { 
     153                                                if (!_trimLineFeed) { 
     154                                                        _buffer.writeByte(byte); 
     155                                                        if (!_skipBlankLine || _buffer.length > 2) { 
     156                                                                dispatchEvent(new ProgressEvent( ProgressEvent.PROGRESS, false, false, e.bytesLoaded-dataInput.bytesAvailable, e.bytesTotal)); 
     157                                                        } 
     158                                                } else { 
     159                                                        if (!_skipBlankLine || _buffer.length > 1) { 
     160                                                                dispatchEvent(new ProgressEvent( ProgressEvent.PROGRESS, false, false, e.bytesLoaded-dataInput.bytesAvailable, e.bytesTotal)); 
     161                                                        } 
     162                                                } 
     163                                        } else { 
     164                                                if (!_skipBlankLine || _buffer.length > 1) { 
     165                                                        dispatchEvent(new ProgressEvent( ProgressEvent.PROGRESS, false, false, e.bytesLoaded-dataInput.bytesAvailable-1, e.bytesTotal)); 
     166                                                } 
     167                                        } 
     168                                        _buffer = new ByteArray(); 
     169                                        continue; 
     170 
     171                                } else if (byte == LINE_FEED) { 
     172                                        if (!_trimLineFeed) { 
     173                                                _buffer.writeByte(byte); 
     174                                        } 
     175                                        if (!_skipBlankLine || _buffer.length > 1) { 
     176                                                dispatchEvent(new ProgressEvent( ProgressEvent.PROGRESS, false, false, e.bytesLoaded-dataInput.bytesAvailable, e.bytesTotal)); 
     177                                        } 
     178                                        _buffer = new ByteArray(); 
     179                                        continue; 
     180                                } else if (byte == CARRIAGE_RETURN) { 
     181                                        if (!_trimLineFeed) { 
     182                                                _buffer.writeByte(byte); 
     183                                        } 
    110184                                        _skipNextLineFeed = true; 
    111185                                        continue; 
    112186                                } 
    113                                  
    114                                 // _skipNextLineFeedフラグが立っていた場合 
    115                                 if (_skipNextLineFeed) { 
    116                                         // 進捗を通知 
    117                                         dispatchEvent(new ProgressEvent( ProgressEvent.PROGRESS, false, false, e.bytesLoaded-dataInput.bytesAvailable, e.bytesTotal)); 
    118                                         _buffer = new ByteArray(); 
    119                                         // _skipNextLineFeedフラグを解除 
    120                                         _skipNextLineFeed = false; 
    121                                         // LFを検出したらスキップ 
    122                                         if (byte == LINE_FEED) { 
    123                                                 continue; 
    124                                         } 
    125                                 } else if (byte == LINE_FEED) { 
    126                                         // 進捗を通知 
    127                                         dispatchEvent(new ProgressEvent( ProgressEvent.PROGRESS, false, false, e.bytesLoaded-dataInput.bytesAvailable, e.bytesTotal)); 
    128                                         _buffer = new ByteArray(); 
    129                                         continue; 
    130                                 } 
     187                                trace(byte); 
    131188                                 
    132189                                _buffer.writeByte(byte);