Mercurial Hosting > luan
comparison src/luan/impl/ParseException.java @ 166:4eaee12f6c65
move luan/interp to impl
git-svn-id: https://luan-java.googlecode.com/svn/trunk@167 21e917c8-12df-6dd8-5cb6-c86387c605b9
author | fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9> |
---|---|
date | Sun, 22 Jun 2014 04:17:38 +0000 |
parents | src/luan/interp/ParseException.java@94bbc4cbc106 |
children |
comparison
equal
deleted
inserted
replaced
165:94bbc4cbc106 | 166:4eaee12f6c65 |
---|---|
1 package luan.impl; | |
2 | |
3 import luan.LuanSource; | |
4 | |
5 | |
6 public final class ParseException extends Exception { | |
7 public final LuanSource src; | |
8 public final int iCurrent; | |
9 public final int iHigh; | |
10 | |
11 ParseException(String msg,LuanSource src,int iCurrent,int iHigh) { | |
12 super(msg); | |
13 this.src = src; | |
14 this.iCurrent = iCurrent; | |
15 this.iHigh = iHigh; | |
16 //System.out.println("iCurrent = "+iCurrent); | |
17 //System.out.println("iHigh = "+iHigh); | |
18 } | |
19 | |
20 private class Location { | |
21 final int line; | |
22 final int pos; | |
23 | |
24 Location(int index) { | |
25 int line = 0; | |
26 int i = -1; | |
27 while(true) { | |
28 int j = src.text.indexOf('\n',i+1); | |
29 if( j == -1 || j >= index ) | |
30 break; | |
31 i = j; | |
32 line++; | |
33 } | |
34 this.line = line; | |
35 this.pos = index - i - 1; | |
36 } | |
37 } | |
38 | |
39 private String[] lines() { | |
40 return src.text.split("\n",-1); | |
41 } | |
42 | |
43 public String getFancyMessage() { | |
44 Location loc = new Location(iCurrent); | |
45 String line = lines()[loc.line]; | |
46 String msg = getMessage() + " (line " + (loc.line+1) + ", pos " + (loc.pos+1) + ") in " + src.name + "\n"; | |
47 StringBuilder sb = new StringBuilder(msg); | |
48 sb.append( line + "\n" ); | |
49 for( int i=0; i<loc.pos; i++ ) { | |
50 sb.append( line.charAt(i)=='\t' ? '\t' : ' ' ); | |
51 } | |
52 sb.append("^\n"); | |
53 return sb.toString(); | |
54 } | |
55 } |