ICU + Freetype2 + Windows
-
Hallödel.
Ich versuche nun schon seit einiger Zeit die ICU, die Freetype2 und Windows zusammenzuknoten. Zum Zwecke des Rendern von "Complex Scripts" (Arabisch, Indisch, ...) in BYTE Buffer hinein. Bzw. ganz allgemein von UNICODE Text der alles mögliche an Scripts enthalten kann. An Layout muss dabei nicht so grob viel gemacht werden, einfach linksbündig, rechtsbündig, zentriert für einen Absatz muss gehen, ggf. sollte man noch "visual runs" definieren können die je einen Font, eine Farbe etc. haben. Aber keine Sachen wie um Shapes herumfliessen oder Bilder/"Positionsrahmen" ins Text-Layout mit reinnehmen, rotierten Text oder sowas.
Abgesehen davon dass die ICU gar grausam ist und allerorts Fehlerbehandlungscode einfach fehlt ist z.B. ein hinderlicher Punkt dass die "LayoutEx" Funktionen sehr sehr ... sagen wir mal unflexibel sind. Um nur ein Beispiel zu nennen, die "ParagraphLayout" Klasse kann ja wohl sogut wie garnix: man kann nichtmal rechtsbündig oder zentriert formatieren, da die "width" von der "Line" die man zurückbekommt die trailing whitespaces mitrechnet. Toll.
Nu nehme ich an dass ICU + Freetype2 auch unter Windows keine ganz SO ungewöhnliche Kombination ist, und es Leute gibt die mir da vielleicht weiter helfen könnten. Bitte bitte bitte, mit viel Zucker oben drauf

Ein Link auf ein Open Source Projekt welches halbwegs verständlichen Code enthält würde u.U. auch helfen. Habe schon lange mit Google und Google Codesearch gesucht und nicht wirklich was brauchbares gefunden
Alternativ nehme ich auch gerne Vorschläge entgegen wie man halbwegs einfach und performant unter Verwendung der Uniscribe zu Layoutzwecken in BYTE Buffer rendern kann, und zwar ohne Hinting. Und es sollte unter Windows 95 noch gehen (usp10.dll is drauf und geht, daran würde es nicht scheitern, aber GDI+ o.ä. scheiden dadurch schonmal aus). Oder jeden anderen Vorschlag was man noch nehmen könnte -- PANGO scheidet leider für mich aus da es zu viele Dependencies mitschleift und nichtmal variable Zeilenlänge in einem Paragraph beim Layouten kann (es sei denn ich hätte die entsprechenden Funktionen übersehen).
So, vielen Danke fürs Lesen, ich hoffe es weiss wer was
,
bär
-
*push*
Die Frage steht immer noch, wäre echt toll wenn jmd. was dazu sagen könnte. Danke und tschüss.
-
Software die das in Kombination verwendet kenne ich jetzt nicht. Aber ICU (wirklich eine schreckliche Library, da sieht man was passiert, wenn man Java-Programmierer C++ programmieren lässt ;)) wird von boost::regex benutzt (wird mal Zeit, dass die was eigenes auf die Beine Stellen in die Richtung).
Für Freetype2 solltest du eigentlich eine Menge finden. SDL_ttf oder antigrain fallen mir da zB ein.
-
Ok, danke für die Antwort.
Mit der Freetype2 komme ich eigentlich soweit klar, das einzige was mir noch etwas Kopfzerbrechen macht ist wie ich die ganzen vorhandenen Fonts durchgehen soll, und Namen und sonstige Eigenschaften (bold, italic, ...) ermitteln. Liesse sich aber vermeiden, ich könnte in der Anwendung um die es geht einfach ein paar fixe Einträge verwenden, also "xyz.ttf" ist "arial", non-bold, non-italic etc.
Mit der ICU komme ich soweit klar dass ich die bestehende ParagraphLayout Klasse soweit angepasst habe dass sie meinen Anforderungen entspricht. Allerdings bin ich nicht ganz davon überzeugt dass die ParagraphLayout Klasse unbedingt "production quality code" ist -- soweit ich gesehen habe verwendet die kaum jemand. Und mir das ganze was ParagraphLayout an Funktionalität/Logik drinnen hat selbst zu stricken, dafür fehlt mir die Zeit und ehrlich gesagt auch die Lust

Es würde mich halt interessieren wie andere Programme das Thema complex scripts angehen, wenn Dinge benötigt werden die man mit den normalen Windows Funktionen nicht hinbekommt.