💎

RBS::Location について

2024/09/05に公開

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