Zunächst wird die Metrik eines Schriftschnitts benötigt.
Dazu sollte (etwa über die Kommandozeile) der Dateiname
einer solchen AFM-Datei zur Verfügung stehen; dieser kann
dann sofort zur Eröffnung der Metrik verwendet werden.
Beispiel:
FontMetrics fm = new AdobeFontMetrics(args[0]);
Um die gesamte Eingabe in eine horizontale Sequenz zu
konvertieren, muss zunächst eine solche neu erzeugt
werden. Diese kann dann dem Sequencer überreicht
werden, der in der Lage ist, eine Folge von Eingabezeichen
in eine horizontale Sequenz zu verwandeln:
HorizontalSequence hseq = new SimpleHorizontalSequence();
Sequencer s = new Sequencer(hseq, fm, fontSize);
Danach kann in einer Schleife die gesamte Eingabe dem
Sequencer verfüttert werden:
int ch;
while ((ch = in.read()) >= 0) {
s.add(ch);
}
Danach ist die Frage zu beantworten, wie die Sequenz abzuschliessen
ist. Wenn daraus ein normaler Paragraph im Blocksatz werden
soll, dann genügt ein
s.finishParagraph();
das eine unendlich dehnbare Dehnfuge an das Ende setzt. Bei
der Verwendung anderer Formatierungen muss der Sequencer
zumindest mit
s.finish()
abgeschlossen werden. Danach kann eine Trennungsstelle etwa
mit
hseq.add(new FramedItem(new Penalty(0, false)));
hinzugefügt werden. Ohne so eine Trennungsstelle, die entweder
durch s.finishParagraph() oder durch s.finish(),
gefolgt von hseq.add() an das Ende angehängt wird, ist
das letzte Wort in der Eingabe nicht zu sehen, wenn mit
der Methode getWords() durch die horizontale
Sequenz iteriert wird.
Ein vollständiges Beispiel steht mit
TestRaggedRight.java
zur Verfügung. Das Beispiel lässt sich leicht so instrumentieren,
dass alle Boxen sichtbar dargestellt werden. Als
Beispiel steht hier
TestRaggedRightFramedPar.java
zur Verfügung.
|