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であるかどうかを戻す。