6.79. kink/program/LOCATION¶
6.79.1. location型¶
locationは、 プログラムテキスト中の、Unicodeコードポイントの位置添字である。
locationは次の属性からなる。
• Program: `program`
• Pos: 位置添字を表す整数のnum
不変条件
0 <= Pos <= Program.text.size
例
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:Program <- PROGRAM.new('foo.kn' "ping(Pong)\nfoo(Bar)\n")
:Loc <- LOCATION.new(Program 15)
stdout.print_line(Loc.program.repr) # => (program name="foo.kn")
stdout.print_line(Loc.line_num.repr) # => 2
stdout.print_line(Loc.col_num.repr) # => 5
stdout.print_line(Loc.line.repr) # => "foo(Bar)\n"
stdout.print_line(Loc.indicator.repr) # => "foo(-->Bar)"
stdout.print_line(Loc.desc.repr) # => "foo.kn L2 C5"
6.79.1.1. Loc.program¶
programは、LocのProgram属性を戻す。
6.79.1.2. Loc.pos¶
posは、LocのPos属性を戻す。
6.79.1.3. Loc.line_num¶
line_numは、Locの行番号を整数のnumとして戻す。
行番号は、プログラムテキスト中において、Locの前のLF文字の数に1を足したものである。
例
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:Program <- PROGRAM.new('foo.kn' "ping(Pong)\nfoo(Bar)\n")
:Loc <- LOCATION.new(Program 15)
stdout.print_line(Loc.line_num.repr) # => 2
6.79.1.4. Loc.col_num¶
col_numは、Locの列番号を整数のnumとして戻す。
結果は、行の中における、Locの前のコードポイントの数に1を足したものである。
例
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:Program <- PROGRAM.new('foo.kn' "ping(Pong)\nfoo(Bar)\n")
:Loc <- LOCATION.new(Program 15)
stdout.print_line(Loc.col_num.repr) # => 5
6.79.1.5. Loc.line¶
lineは、Locのある行をstrとして戻す。
lineは、プログラムテキストの[From, To)の範囲のスライスを戻す。ここで、Fromは行の先頭のコードポイント添字で、Toは次の行の先頭もしくはテキスト末尾のコードポイント添字である。したがって結果の文字列は、末尾にLF文字を含むかもしれない。
例
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:Program <- PROGRAM.new('foo.kn' "ping(Pong)\nfoo(Bar)\n")
:Loc <- LOCATION.new(Program 15)
stdout.print_line(Loc.line.repr) # => "foo(Bar)\n"
6.79.1.6. Loc.indicator¶
indicatorは、行中のLocの場所を示すstrを戻す。
結果のstrはCRやLF文字を含まない。
例
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:Program <- PROGRAM.new('foo.kn' "ping(Pong)\nfoo(Bar)\n")
:Loc <- LOCATION.new(Program 15)
stdout.print_line(Loc.indicator.repr) # => "foo(-->Bar)"
6.79.1.7. Loc.desc¶
descは、プログラム名、行番号、列番号を叙述するstrを戻す。
例
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:Program <- PROGRAM.new('foo.kn' "ping(Pong)\nfoo(Bar)\n")
:Loc <- LOCATION.new(Program 15)
stdout.print_line(Loc.desc.repr) # => "foo.kn L2 C5"
6.79.1.8. Loc1 == Loc2¶
== 演算子、つまりop_eqメソッドは、ふたつのlocation値が同値のProgram属性、Pos属性を持つかどうかを戻す。
6.79.1.9. Loc.repr¶
reprは、デバッグ用途のためにLocのstr表現を戻す。
例
:LOCATION.require_from('kink/program/')
:PROGRAM.require_from('kink/program/')
:Program <- PROGRAM.new('foo.kn' "ping(Pong)\nfoo(Bar)\n")
:Loc <- LOCATION.new(Program 15)
stdout.print_line(Loc.repr) # => (location foo.kn L2 C5)
6.79.2. LOCATION.new(Program Pos)¶
newは、与えられた属性を持つlocationを戻す。
事前条件
Programはprogramでなければならない。
Posは整数のnumでなければならない。
0 <= Pos <= Program.text.size
6.79.3. LOCATION.empty¶
emptyは、空のプログラム名、空のプログラムテキスト、Pos=0からなるlocationを戻す。
6.79.4. LOCATION.is?(Val)¶
is?は、Valがlocationであるかどうかを戻す。