2 * Sixth 3D engine. Author: Svjatoslav Agejenko.
3 * This project is released under Creative Commons Zero (CC0) license.
5 package eu.svjatoslav.sixth.e3d.gui.textEditorComponent;
7 import java.util.ArrayList;
10 public class TextLine {
12 private List<Character> chars = new ArrayList<>();
17 public TextLine(final List<Character> value) {
22 public TextLine(final String value) {
26 public void addIdent(final int amount) {
30 for (int i = 0; i < amount; i++)
31 chars.add(0, new Character(' '));
34 public String copySubString(final int from, final int until) {
35 final StringBuilder result = new StringBuilder();
39 for (int i = from; i < until; i++)
40 result.append(chars.remove(from).value);
43 return result.toString();
46 public void cutFromBeginning(int charactersToCut) {
48 if (charactersToCut > chars.size())
49 charactersToCut = chars.size();
51 if (charactersToCut == 0)
54 chars = chars.subList(charactersToCut, chars.size());
57 public String cutSubString(final int from, final int until) {
58 final StringBuilder result = new StringBuilder();
60 final List<Character> reminder = new ArrayList<>();
64 for (int i = 0; i < chars.size(); i++)
65 if ((i >= from) && (i < until))
66 result.append(chars.get(i).value);
68 reminder.add(chars.get(i));
73 return result.toString();
76 public void cutUntilEnd(final int col) {
77 if (col >= chars.size())
80 chars = chars.subList(0, col);
83 private void ensureLength(final int length) {
84 while (chars.size() < length)
85 chars.add(new Character(' '));
88 public char getCharForLocation(final int col) {
90 if (col >= chars.size())
93 return chars.get(col).value;
96 public List<Character> getChars() {
100 public int getIdent() {
104 for (int i = 0; i < chars.size(); i++)
105 if (chars.get(i).hasValue())
108 throw new RuntimeException("This code shall never execute");
111 public int getLength() {
115 public TextLine getSubLine(final int from, final int until) {
116 final List<Character> result = new ArrayList<>();
118 for (int i = from; i < until; i++) {
119 if (i >= chars.size())
121 result.add(chars.get(i));
124 return new TextLine(result);
127 public String getSubString(final int from, final int until) {
128 final StringBuilder result = new StringBuilder();
130 for (int i = from; i < until; i++)
131 result.append(getCharForLocation(i));
133 return result.toString();
136 public void insertCharacter(final int col, final char value) {
138 chars.add(col, new Character(value));
142 public void insertString(final int col, final String value) {
145 for (final char c : value.toCharArray()) {
146 chars.add(col + i, new Character(c));
152 public void insertTextLine(final int col, final TextLine textLine) {
155 for (final Character c : textLine.getChars()) {
156 chars.add(col + i, c);
162 public boolean isEmpty() {
163 return chars.isEmpty();
166 private void pack() {
169 for (int i = chars.size() - 1; i >= 0; i--)
170 if (chars.get(i).hasValue()) {
175 if (newLength == chars.size())
178 chars = chars.subList(0, newLength);
181 public void removeCharacter(final int col) {
182 if (col >= chars.size())
188 public void setValue(final String string) {
190 for (final char c : string.toCharArray())
191 chars.add(new Character(c));
197 public String toString() {
198 final StringBuilder buffer = new StringBuilder();
200 for (final Character character : chars)
201 buffer.append(character.value);
203 return buffer.toString();