Universität Ulm, Fakultät für Mathematik und Wirtschaftswissenschaften, SAI, Vorlesungen, WS 2007/2008, Digitale Typografie
Hinweise zu den Java-Klassen zur Vorlesung Digitale Typografie
im Wintersemester 2007/2008
Materialien
  • Das Jar lässt sich herunterladen oder auf unseren Suns direkt über den Pfad /home/www/htdocs/sai/ws07/typo/typo.jar erreichen.
  • Die zugehörigen Quellen (ohne irgendwelchen Test- oder Hauptprogramme) sind verpackt im tar.gz-Format zugänglich.
  • Dazu gibt es passende Javadoc-Seiten
Erste Tests Da das Jar einige Testprogramme enthält, können diese sofort aufgerufen werden. Wenn Sie etwa TestPar aufrufen möchten, das eine Eingabe in einen formatierten Paragraphen verwandelt, dann empfiehlt es sich, dieses Skript herunterzuladen, in das ~/bin/-Verzeichnis zu kopieren und es dort mit chmod +x ausführbar zu machen. Danach kann es mit ln zu den Namen weiterer Test-Klassen verlinkt werden. Zur Verfügung stehen:

Test-Klasse Funktionalität
TestPar Verwandelt die Eingabe in einen Paragraphen unter Verwendung des Blocksatzes.
TestFramedPar Wie TestFramedPar, jedoch mit sichtbarer Darstellung der einzelnen Schachteln.
TestRaggedRight Verwandelt die Eingabe in einen Paragraphen mit einem aufgerauhten rechten Rand.
TestRaggedRightFramedPar Analog zu TestRaggedRightPar, jedoch mit sichtbarer Darstellung der einzelnen Schachteln.
TestCenteringFramedPar Generiert einen Paragraphen mit zentrierter Positionierung der einzelnen Zeilen. Alle Schachteln sind sichtbar.

Erste Schritte 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.