Versuch einen einfachen Blocksatz zu realisieren; Zeichen werden nicht richtig angezeigt

  • Ich bastel gerade an einer einfachen Version einer Blocksatz-Funktion.

    Sie soll in Zeilen 'Hairspace' einfügen, um einen Blocksatz zu realisieren.

    Leerzeichen – Wikipedia

    Leider werden die Zeichen U+2009 (Thin Space) Oder U+200A (Hair Space) nur als Kästchen mit 10 Pixel Breite angezeigt.


    Anbei die Funktion, in der noch eine Menge dsyslog's sind

    Ein Auszug vom Log für die ersten zwei langen Zeilen:

    Das muss irgendwas mit Unicode und UTF-8 zu tun haben. Ich könnt eLeerzeichen verwenden, aber die sind 5 Pixel breit. Das Hair Space dürfte eher im Bereich von einem oder zwei Pixel liegen und würde auch ein optisch gutes Ergebnis liefern.


    Vielleicht hat jemand ne Idee warum das nicht klappt?

  • Der Zeichensatz, den Du verwendest, kennt U+2009 (Thin Space) / U+200A nicht. Daher wird [] angezeigt.

    Client1: ASUS P5QC, Dual Core 3G, Cine S2, Ext. Board von TBE, Xubuntu 20.04, VDR 2.6x

    Client2: RPI3

    Server: RPI4, Sundtek SkyTV Dual 2x

  • Oh Mann, darauf bin ich nicht gekommen... Verwende DroidSans

    Hab es jetzt erst mal mit stink normalen Leerzeichen gelöst...

  • Beim Versuch zu testen, ob das Zeichen im Font enthalten ist, bekomm ich immer 0 zurück. 0 ist in diesem Fall 'Zeichen nicht vorhanden'

    Die Funktion dazu:

    Teste mit der Ubuntu Schriftart, die die Zeichen enthält laut Zeichentabelle

  • Ich kenn mich in C nicht aus, aber wenn ich das richtig interpretiere, dann gibt die Methode FT_Get_Char_Index ein FT_UInt zurück. glyph_index ist aber als u_long definiert.

    Evtl. passen die Typen nicht zueinander?

    Cast?


    Viel Erfolg jedenfalls!

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

  • Danke für den Hinweis; Aber immer noch 0

    Log:

    Code
    Mär 01 07:25:59 yavdr-vbox vdr[12903]: [12903] loading /srv/vdr/video/%%Die_interdimensionale_Höhle_der_Pancakes__(S03E11)_[75,3%]/2022-11-03.05.08.62-0.rec/marks
    Mär 01 07:25:59 yavdr-vbox vdr[12903]: [12903] flatPlus: GetCharIndex() CharCode: 0x200A (8202), glyph_index: 0
    Mär 01 07:25:59 yavdr-vbox vdr[12903]: [12903] flatPlus: GetCharIndex() CharCode: 0x2009 (8201), glyph_index: 0
    Mär 01 07:25:59 yavdr-vbox vdr[12903]: [12903] flatPlus: JustifyLine(): Using 'Space' (U+0020) as 'FillChar'
    Mär 01 07:25:59 yavdr-vbox vdr[12903]: [12903] flatPlus: JustifyLine() [Line: 13 Space, 727 width, 81 length] [FillChar: 5 needed, 0 blocksize, 5 remainder, 5 width] [FillChars: 0 length]
    Mär 01 07:25:59 yavdr-vbox vdr[12903]: [12903] flatPlus: JustifyLine() InsertedFillChar after third loop (' '): 5

    ?(

  • Der zweite Parameter sollte vom Typ FT_ULong sein, wird bei dir aber als u_int32_t übergeben - vielleicht liegts daran?
    Hast du von der Methode für irgendein Standardzeichen (wie zB 'A') überhaupt schon mal was anderes als 0 zurückbekommen - zB bei manuellem bzw. hartcodiertem Aufruf?

    MyVDR: yaVDR-Ansible (Ubuntu 20) - softhddevice-openglosd (ffmpeg 2.8) - epgd/epg2vdr - skindesigner estuary4vdr (adaptiert) - 1920x1080@50 Hz | kodi 18 - inputstream + amazon vod
    Aerocube M40 | 300W | ASRock H61M-GE | Intel G530 | Asus ENGT520 | 2 x TT-budget S2-3200 | ASRock Smart Remote (CIR) | 4 GB RAM | 120 GB SSD | 3 TB HDD

  • Mit folgender Änderung (! statt HairSpace bei der Abfrage):

    Code
            u_int32_t HairSpaceCode = 0x00000021; // 0x0000200A;  // HairSpace: U+200A
            u_int32_t ThinSpaceCode = 0x00002009;  // ThinSpace: U+2009
            if (GetCharIndex(Setup.FontOsd, HairSpaceCode) > 0) {
                m_FillChar = u8"\U0000200A";
                dsyslog("flatPlus: JustifyLine(): Using 'HairSpace' (U+200A) as 'FillChar'");

    Bekomm ich das:

    Im Log sehe ich, dass das HairSpace verwendet wird. Hat 1 Pixel Breite. Jetz fragt sich warum der U+200A nicht geht. Vorhanden ist er ja, wie im Bild zu sehen...

    Teste noch ein Wenig...

  • Hab jetzt FT_ULong für charcode eingebaut. Er findet keine Zeichen wie 0x200A. Aber z. B. 0x2070 schon :/

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!