comparison core/src/luan/impl/ParseException.java @ 171:3dcb0f9bee82

add core component git-svn-id: https://luan-java.googlecode.com/svn/trunk@172 21e917c8-12df-6dd8-5cb6-c86387c605b9
author fschmidt@gmail.com <fschmidt@gmail.com@21e917c8-12df-6dd8-5cb6-c86387c605b9>
date Sun, 22 Jun 2014 05:41:22 +0000
parents src/luan/impl/ParseException.java@4eaee12f6c65
children 859c0dedc8b6
comparison
equal deleted inserted replaced
170:7c792a328a83 171:3dcb0f9bee82
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 }