diff --git a/exec/fseditor.js b/exec/fseditor.js index 4656b9ec9e881634ecda3405a15f9c923ed2b957..dd1ef5a794d96acaf4287b70fa3b57aaf0dc8f5b 100644 --- a/exec/fseditor.js +++ b/exec/fseditor.js @@ -707,6 +707,8 @@ function make_lines(str, attr, nl_is_hardcr) nl=new Array(); var oldstr=str; var oldattr=attr; + var spos=0; + var apos=0; thisattr=7; /* Fix up the attr string to match str in length... @@ -714,18 +716,17 @@ function make_lines(str, attr, nl_is_hardcr) */ str=''; attr=''; - while(oldstr.length) { - if(oldattr.length) { - thisattr=ascii(oldattr.substr(0,1)); - oldattr=oldattr.substr(1); + while(spos < oldstr.length) { + if(apos < oldattr.length) { + thisattr=ascii(oldattr.charAt(apos)); + apos++; } - switch(oldstr.substr(0,1)) { + switch(oldstr.charAt(spos)) { case '\r': - oldstr=oldstr.substr(1); break; case '\x01': - oldstr=oldstr.substr(1); - switch(oldstr.substr(0,1).toUpperCase()) { + spos++; + switch(oldstr.charAt(spos).toUpperCase()) { case 'K': thisattr&=0xf8; break; @@ -784,28 +785,27 @@ function make_lines(str, attr, nl_is_hardcr) thisattr=7; break; case '\x01': - str=str+'\x01'; - attr=attr+ascii(thisattr); + str+='\x01'; + attr+=ascii(thisattr); break; default: } - oldstr=oldstr.substr(1); break; default: - str=str+oldstr.substr(0,1); - oldstr=oldstr.substr(1); + str+=oldstr.charAt(spos); attr=attr+ascii(thisattr); } + spos++; } - while(str.length>0) { + spos=0; + while(spos < str.length) { var done=false; nl[nl.length]=new Line; - while(str.length>0 && !done) { - switch(str.substr(0,1)) { + while(spos < str.length && !done) { + switch(str.charAt(spos)) { case '\n': - str=str.substr(1); - attr=attr.substr(1); + spos++; done=true; if(nl_is_hardcr) nl[nl.length-1].hardcr=true; @@ -815,11 +815,11 @@ function make_lines(str, attr, nl_is_hardcr) /* If there is room for the first word of the next line on this * line, it is hard */ /* Otherwise, it is soft. */ - if(str.substr(0,1)==' ' || str.substr(0,1)=='\t') + if(str.charAt(spos)==' ' || str.charAt(spos)=='\t') nl[nl.length-1].hardcr=true; else { var len; - for(len=0; str.length>=len && str.substr(len,1)!=' ' && str.substr(len,1)!='\t'; len++); + for(len=0; str.length>=len+spos && str.charAt(spos+len)!=' ' && str.charAt(spos+len,1)!='\t'; len++); if(nl[nl.length-1].text.length+len < 80) nl[nl.length-1].hardcr=true; } @@ -827,36 +827,32 @@ function make_lines(str, attr, nl_is_hardcr) break; case ' ': /* Whitespace... never wrap here. */ case '\t': - nl[nl.length-1].text+=str.substr(0,1); - nl[nl.length-1].attr+=attr.substr(0,1); - str=str.substr(1); - attr=attr.substr(1); + nl[nl.length-1].text+=str.charAt(spos); + nl[nl.length-1].attr+=attr.charAt(spos); + spos++; break; default: /* Printable char... may need to wrap */ if(nl[nl.length-1].text.length>79) { /* Need to have wrapped */ var offset; for(offset=nl[nl.length-1].text.length-1; offset>=0; offset--) { - if(nl[nl.length-1].text.substr(offset,1)!=' ' && nl[nl.length-1].text.substr(offset,1)!='\t') { - str=nl[nl.length-1].text.substr(offset)+str; - attr=nl[nl.length-1].attr.substr(offset)+attr; + if(nl[nl.length-1].text.charAt(offset)!=' ' && nl[nl.length-1].text.charAt(offset)!='\t') { + /* ToDo: Verify/test this... it's probobly wrong */ + spos-=nl[nl.length-1].text.length-1-offset; + spos--; break; } } if(offset==-1) { /* There were no spaces this line. */ - nl[nl.length-1].text=str.substr(0,79); - nl[nl.length-1].attr=attr.substr(0,79); nl[nl.length-1].kludged=true; - str=str.substr(79); - attr=attr.substr(79); + spos--; } done=true; } else { - nl[nl.length-1].text+=str.substr(0,1); - nl[nl.length-1].attr+=attr.substr(0,1); - str=str.substr(1); - attr=attr.substr(1); + nl[nl.length-1].text+=str.charAt(spos); + nl[nl.length-1].attr+=attr.charAt(spos); + spos++; } } }