EOS 2  1.1.0
Einfache Objektbasierte Sprache
PrettyPrinter.java
gehe zur Dokumentation dieser Datei
1 package de.lathanda.eos.vm;
2 
3 import java.util.LinkedList;
4 
11 public class PrettyPrinter {
12  private static final String TAB = " ";
13  private LinkedList<Newline> newlines;
14  private String source;
15 
16  public PrettyPrinter(String source) {
17  this.source = source;
18  newlines = new LinkedList<>();
19  }
20 
21  public String prettyPrint() {
22  int index = 0;
23  int level = 0;
24  String linetext;
25  StringBuilder pretty = new StringBuilder();
26  for (Newline line : newlines) {
27  linetext = source.substring(index, line.position);
28  int crs = linetext.replaceAll("\n", "xx").length() - linetext.length();
29  linetext = linetext.trim();
30  crs -= linetext.replaceAll("\n", "xx").length() - linetext.length();
31  index = line.position;
32  if (!linetext.isEmpty()) {
33  for (int i = level; i-- > 0;) {
34  pretty.append(TAB);
35  }
36  pretty.append(linetext);
37  pretty.append("\n");
38  for (int i = 1; i < crs; i++) {
39  pretty.append("\n");
40  }
41  }
42  level = line.level;
43  }
44  linetext = source.substring(index, source.length()).trim();
45  if (!linetext.isEmpty()) {
46  for (int i = level; i-- > 0;) {
47  pretty.append(TAB);
48  }
49  pretty.append(linetext);
50  pretty.append("\n");
51  }
52  return pretty.toString();
53  }
54 
55  public void newline(int position, int level) {
56  newlines.add(new Newline(position, level));
57  }
58 
59  private class Newline {
60  int position;
61  int level;
62 
63  public Newline(int position, int level) {
64  this.position = position;
65  this.level = level;
66  }
67 
68  }
69 }
void newline(int position, int level)
Impressum