modelicac 1.12.1
[scilab.git] / scilab / modules / scicos / src / modelica_compiler / linenum.mll
1 (*
2  *  Modelicac
3  *
4  *  Copyright (C) 2005 - 2007 Imagine S.A.
5  *  For more information or commercial use please contact us at www.amesim.com
6  *
7  *  This program is free software; you can redistribute it and/or
8  *  modify it under the terms of the GNU General Public License
9  *  as published by the Free Software Foundation; either version 2
10  *  of the License, or (at your option) any later version.
11  *
12  *  This program is distributed in the hope that it will be useful,
13  *  but WITHOUT ANY WARRANTY; without even the implied warranty of
14  *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  *  GNU General Public License for more details.
16  *
17  *  You should have received a copy of the GNU General Public License
18  *  along with this program; if not, write to the Free Software
19  *  Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA  02110-1301, USA.
20  *
21  *)
22
23 {
24
25 let linenum = ref 0
26 let linebeg = ref 0
27
28 }
29
30 rule skip_line = parse
31   | [^ '\n' '\r']* ('\n' | '\r' | "\r\n")
32       { incr linenum;
33         linebeg := Lexing.lexeme_start lexbuf;
34         Lexing.lexeme_end lexbuf }
35   | [^ '\n' '\r']* eof
36       { incr linenum;
37         linebeg := Lexing.lexeme_start lexbuf;
38         raise End_of_file }
39
40 {
41
42 let for_position file loc =
43   let ic = open_in_bin file in
44   let lb = Lexing.from_channel ic in
45   linenum := 1;
46   linebeg := 0;
47   begin try
48     while skip_line lb <= loc do () done
49   with End_of_file -> ()
50   end;
51   close_in ic;
52   (!linenum - 1, !linebeg)
53
54 }