💎
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