💎
RBS::Location について
RBS::Locationが持つ位置情報を整理する。なぜこの設計が嬉しいのか、までは書かない(自分の中で整理されていないため)。
Position
RBS では文字列中の1点を表すためにIntegerの値を1つ使う。これは「文字列中のカーソルの位置」を示す。
|をカーソルとすると、|abcの位置は0であり、a|bcの位置は1である。
行
次に行を考える。なおCRLFのことは一旦無視する。
RBS では行は1-originで表される。|abc\ndefの位置の行は1であり、abc\nd|efの位置の行は2である。
では改行記号前後の行はどう捉えるべきか考える。
abc|\ndefの行は1で、abc\n|defの行は2であると捉えると良いだろう。
次に、文書末尾の行はどう捉えるべきか。文書末尾に改行コードがある場合のない場合に分けて考える。
文書末尾に改行コードがある場合、abc\n|の行は2とする。
文書末尾に改行コードがない場合、abc|の行は1とする。
列
列は「カーソル位置から改行コードまたは文書先頭の位置までに存在する文字の数」で表される。これは「カーソル前の文字に対する1-originの列」と考えることもできる。
|abcの列は0である。
abc|の列は3である。
abc\n|defの列は0である。
Discussion