Changeset 21094

Show
Ignore:
Timestamp:
10/11/08 01:45:28 (6 years ago)
Author:
fujidig
Message:

noteadd, notedel を実装

Location:
lang/javascript/hsp-on-js/trunk/src
Files:
5 modified

Legend:

Unmodified
Added
Removed
  • lang/javascript/hsp-on-js/trunk/src/builtin-funcs.js

    r21078 r21094  
    357357                this.noteStack.push(buf); 
    358358        }, 
     359        0x23: function noteadd(line, lineNumber, overwrite) { 
     360                this.scanArgs(arguments, 'sNN'); 
     361                line = line.toStrValue(); 
     362                lineNumber = lineNumber ? lineNumber.toIntValue()._value : -1; 
     363                overwrite = (overwrite ? overwrite.toIntValue()._value : 0) != 0; 
     364                var note = this.getNote(); 
     365                var index = note.getValue().lineIndex(lineNumber); 
     366                if(index == null) { 
     367                        if(lineNumber >= 0) return; 
     368                        var str = note.getValue()._value; 
     369                        index = str.length; 
     370                        if(index != 0) { 
     371                                var c = str.charCodeAt(index - 1); 
     372                                if(c != 0x0d && c != 0x0a) { 
     373                                        note.assign(new StrValue(str + "\r\n")); 
     374                                        index += 2; 
     375                                } 
     376                        } 
     377                } 
     378                if(!overwrite) { 
     379                        note.splice(index, 0, line._value + "\r\n"); 
     380                        return; 
     381                } 
     382                var length = note.getValue().lineLength(index); 
     383                note.splice(index, length, line._value); 
     384        }, 
     385        0x24: function notedel(lineNumber) { 
     386                this.scanArgs(arguments, 'N'); 
     387                lineNumber = lineNumber ? lineNumber.toIntValue()._value : 0; 
     388                var note = this.getNote(); 
     389                var val = note.getValue(); 
     390                var index = val.lineIndex(lineNumber); 
     391                if(index == null) return; 
     392                var length = val.lineLengthIncludeCR(index); 
     393                note.splice(index, length, ''); 
     394        }, 
    359395        0x27: function randomize(seed) { 
    360396                this.scanArgs(arguments, 'N'); 
     
    371407                var str = val._value; 
    372408                var index = val.lineIndex(lineNumber); 
    373                 if(index == null) index = str.length; 
     409                if(index == null) { 
     410                        dest.assign(StrValue.EMPTY_STR); 
     411                        return; 
     412                } 
    374413                var length = val.lineLength(index); 
    375                 if(length >= 1 && str.charCodeAt(index + length - 1) == 0x0a) { 
    376                         length --; 
    377                 } 
    378                 if(length >= 1 && str.charCodeAt(index + length - 1) == 0x0d) { 
    379                         length --; 
    380                 } 
    381414                dest.assign(new StrValue(str.substr(index, length))); 
    382415        } 
  • lang/javascript/hsp-on-js/trunk/src/evaluator.js

    r20933 r21094  
    206206        getNote: function getNote() { 
    207207                if(this.noteStack.length == 0) { 
    208                         throw new HSPError(ErrorCode.ILLEGAL_FUNCTION); 
     208                        throw new HSPError(ErrorCode.ILLEGAL_FUNCTION, 'ノートパッドが選択されていません'); 
    209209                } 
    210210                return this.noteStack[this.noteStack.length - 1]; 
  • lang/javascript/hsp-on-js/trunk/src/str-buffer.js

    r20926 r21094  
    5656                if(this._str.length >= size) return; 
    5757                this._str += Utils.strTimes("\0", size - this._str.length); 
     58        }, 
     59        splice: function splice(index, length, sub) { 
     60                var str = this._str; 
     61                this._str = str.slice(0, index) + sub + str.slice(index + length); 
     62                this._valCache = null; 
    5863        } 
    5964}; 
  • lang/javascript/hsp-on-js/trunk/src/str-value.js

    r21061 r21094  
    9393        }, 
    9494        lineIndex: function lineIndex(lineNumber) { 
     95                if(lineNumber < 0) return null; 
    9596                var str = this._value; 
    9697                var i = 0; 
     
    112113        lineLength: function lineLength(index) { 
    113114                var str = this._value; 
     115                return /[\r\n]|$/.exec(str.slice(index)).index; 
     116        }, 
     117        lineLengthIncludeCR: function lineLengthIncludeCR(index) { 
     118                var str = this._value; 
    114119                var matched = /\r?\n|\r|$/.exec(str.slice(index)); 
    115120                return matched.index + matched[0].length; 
  • lang/javascript/hsp-on-js/trunk/src/t.hsp

    r21078 r21094  
    1 a = "abcdefg" 
    2 poke a, 2, "XXX" 
    3 mes a 
    4 mes strsize 
     1a = "abc\ndefg\nhijkl" 
     2notesel a 
     3noteadd "123" 
     4noteadd "456" 
     5noteadd "DEFG", 1, 1 
     6notedel 0 
     7repeat notemax + 2, -1 
     8        noteget ln, cnt 
     9        mes ""+cnt+": <"+ln+">" 
     10loop 
    511