1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.yaml.snakeyaml.error;
17
18 import org.yaml.snakeyaml.scanner.Constant;
19
20
21
22
23
24 public final class Mark {
25 private String name;
26 private int index;
27 private int line;
28 private int column;
29 private String buffer;
30 private int pointer;
31
32 public Mark(String name, int index, int line, int column, String buffer, int pointer) {
33 super();
34 this.name = name;
35 this.index = index;
36 this.line = line;
37 this.column = column;
38 this.buffer = buffer;
39 this.pointer = pointer;
40 }
41
42 private boolean isLineBreak(char ch) {
43 return Constant.NULL_OR_LINEBR.has(ch);
44 }
45
46 public String get_snippet(int indent, int max_length) {
47 if (buffer == null) {
48 return null;
49 }
50 float half = max_length / 2 - 1;
51 int start = pointer;
52 String head = "";
53 while ((start > 0) && (!isLineBreak(buffer.charAt(start - 1)))) {
54 start -= 1;
55 if (pointer - start > half) {
56 head = " ... ";
57 start += 5;
58 break;
59 }
60 }
61 String tail = "";
62 int end = pointer;
63 while ((end < buffer.length()) && (!isLineBreak(buffer.charAt(end)))) {
64 end += 1;
65 if (end - pointer > half) {
66 tail = " ... ";
67 end -= 5;
68 break;
69 }
70 }
71 String snippet = buffer.substring(start, end);
72 StringBuilder result = new StringBuilder();
73 for (int i = 0; i < indent; i++) {
74 result.append(" ");
75 }
76 result.append(head);
77 result.append(snippet);
78 result.append(tail);
79 result.append("\n");
80 for (int i = 0; i < indent + pointer - start + head.length(); i++) {
81 result.append(" ");
82 }
83 result.append("^");
84 return result.toString();
85 }
86
87 public String get_snippet() {
88 return get_snippet(4, 75);
89 }
90
91 @Override
92 public String toString() {
93 String snippet = get_snippet();
94 StringBuilder where = new StringBuilder(" in ");
95 where.append(name);
96 where.append(", line ");
97 where.append(line + 1);
98 where.append(", column ");
99 where.append(column + 1);
100 if (snippet != null) {
101 where.append(":\n");
102 where.append(snippet);
103 }
104 return where.toString();
105 }
106
107 public String getName() {
108 return name;
109 }
110
111
112
113
114 public int getLine() {
115 return line;
116 }
117
118
119
120
121 public int getColumn() {
122 return column;
123 }
124
125
126
127
128 public int getIndex() {
129 return index;
130 }
131
132 }