tools: move Location in its own file
[nit.git] / src / location.nit
1 # This file is part of NIT ( http://www.nitlanguage.org ).
2 #
3 # Copyright 2009 Jean-Sebastien Gelinas <calestar@gmail.com>
4 #
5 # Licensed under the Apache License, Version 2.0 (the "License");
6 # you may not use this file except in compliance with the License.
7 # You may obtain a copy of the License at
8 #
9 # http://www.apache.org/licenses/LICENSE-2.0
10 #
11 # Unless required by applicable law or agreed to in writing, software
12 # distributed under the License is distributed on an "AS IS" BASIS,
13 # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 # See the License for the specific language governing permissions and
15 # limitations under the License.
16
17 package location
18
19 class Location
20 special Comparable
21 redef type OTHER: Location
22
23 readable var _file: String
24 readable var _line_start: Int
25 readable var _line_end: Int
26 readable var _column_start: Int
27 readable var _column_end: Int
28
29 init(f: String, line_s: Int, line_e: Int, column_s: Int, column_e: Int) do
30 _file = f
31 _line_start = line_s
32 _line_end = line_e
33 _column_start = column_s
34 _column_end = column_e
35 end
36
37 init with_file(f: String) do init(f,0,0,0,0)
38
39 redef fun to_s: String do
40 if line_start == line_end then
41 if column_start == column_end then
42 return "{file}:{line_start},{column_start}"
43 else
44 return "{file}:{line_start},{column_start}--{column_end}"
45 end
46 else
47 return "{file}:{line_start},{column_start}--{line_end}:{column_end}"
48 end
49 end
50
51 redef fun <(other: OTHER): Bool do
52 if line_start != other.line_start then return line_start < other.line_start
53 if column_start != other.column_start then return column_start < other.column_start
54 if line_end != other.line_end then return line_end < other.line_end
55
56 return column_end < other.column_end
57 end
58 end
59