package org.emdev.common.textmarkup.line; import org.ebookdroid.droids.fb2.codec.LineCreationParams; import org.ebookdroid.droids.fb2.codec.ParsedContent; import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import org.emdev.common.textmarkup.JustificationMode; public class LineStream implements Collection<Line> { public final LineCreationParams params; private final ArrayList<Line> lines = new ArrayList<Line>(); public LineStream(final ParsedContent content, final int maxLineWidth, final JustificationMode jm, final boolean hyphenEnabled) { this.params = new LineCreationParams(content, maxLineWidth, jm, hyphenEnabled); } public LineStream(final LineCreationParams params) { this.params = params; } public Line add() { final Line line = new Line(params.content, params.maxLineWidth, params.jm); lines.add(line); if (params.extraSpace > 0) { line.append(new LineFixedWhiteSpace(params.extraSpace, 0)); } return line; } public Line add(final int maxLineWidth, final JustificationMode jm) { final Line line = new Line(params.content, maxLineWidth, jm); lines.add(line); return line; } public Line last() { return lines.isEmpty() ? null : lines.get(lines.size() - 1); } public Line tail() { final Line last = last(); if (last == null || last.committed) { return add(); } return last; } public void commitParagraph() { if (lines.isEmpty()) { return; } final Line last = lines.get(lines.size() - 1); final JustificationMode lastJm = params.jm == JustificationMode.Justify ? JustificationMode.Left : params.jm; for (int i = lines.size() - 1; i >= 0; i--) { final Line l = lines.get(i); if (l.committed) { break; } l.applyJustification(l != last ? params.jm : lastJm); } } public Line get(final int i) { return lines.get(i); } @Override public boolean add(final Line object) { return lines.add(object); } @Override public boolean containsAll(final Collection<?> collection) { return lines.containsAll(collection); } @Override public boolean addAll(final Collection<? extends Line> collection) { return lines.addAll(collection); } @Override public void clear() { lines.clear(); } @Override public boolean removeAll(final Collection<?> collection) { return lines.removeAll(collection); } @Override public int size() { return lines.size(); } @Override public boolean isEmpty() { return lines.isEmpty(); } @Override public boolean contains(final Object object) { return lines.contains(object); } @Override public boolean retainAll(final Collection<?> collection) { return lines.retainAll(collection); } @Override public boolean remove(final Object object) { return lines.remove(object); } @Override public Object[] toArray() { return lines.toArray(); } @Override public <T> T[] toArray(final T[] contents) { return lines.toArray(contents); } @Override public Iterator<Line> iterator() { return lines.iterator(); } }