Dear visitor, welcome to VDR Portal. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.
grundsatzueberlegung: basteln wir hier nicht am falschen code herum?
entw. die utf8-streams kommen richtig daher oder es gibt so und anders im VDR-code wo einen bug.
die probleme entstehen ja in der aufbereitung (falscher einsprungspunkt in einen text-string). alles andere (auch deine jetzigen aenderungen im UTF8CodeAdjust) ist ja nur noch verschleierung eines problems, das zuvor nicht korrekt geloest worden ist.
Weil die ganzen Probleme (und ne menge Raterei) kamen eigentlich nur daher das die Funktion überhaupt nicht lesbar war. Und deswegen waren da schwer zu findene Fehler drin. Und ich wollte die Sache jetzt auch mal zuende ausarbeiten.This post has been edited 3 times, last edit by "Keine_Ahnung" (Jun 2nd 2011, 8:31pm)
This post has been edited 2 times, last edit by "wastl" (Jun 2nd 2011, 9:05pm)
es ist und bleibt eine verschleierung eines zuvor eingefuehrten problems.
Ist nur die Frage wie man damit umgeht.habe schon ein wenig herumgespielt mit korrektur des einsprungpunktes ('start') und dann gibt es auch keine probleme mehr mit fehlerhaftem utf8-zeug. (einfach solange 'start' verschieben, bis nicht mehr (c & 0xC0) == 0x80 ).
aja: das bisserl hex-rechnerei (von 0 - F kann ichs mir grad noch merken) sollte schon drin sein
da sollte man schon ohne defines auskommen ... (da wirds ja dann richtig langweilig)
Mit dem 0-F vertut man sich nämlich gerne mal. Also ich hät schon gerne das das so bleibt. Vor allem die Syslogausgabe ist hier wichtig, weil wenn dann mal jemand jammert das sein Display keine Umlaute anzeigt, dann sieht man gleich im Syslog welches Plugin da fehlerhafterweise kein uft-8 liefert. Nicht das dann die Raterei und das debugging wieder von vorne losgeht weil man dann zuerst Fehler im Code vermutet 
EDIT: ein problem, das du nicht bedacht hast bei deinen ueberlegungen utf8-skins vs. !utf8 vdr:
was passiert mit der VDRfont, wenn das dann auf einem !utf8-system ausgegeben werden soll? es wird nicht funktionieren ;-)
Aber egal, dafür ist linux verantwortlich, eigentlich sollte für jedes utf-8 Zeichen ein passendes 8-Bit Zeichen ersatzweise gewählt werden (oder das "habe ich nicht" Zeichen). D.h. man kann auf nen !utf-8 linux auch wunderbar utf-8 liefern und low level wird das umgewandelt. Oder anderst ausgedrück, soll sich freetype2 damit rumschlagen.
ausser man schmeisst saemtlichen !utf8-support aus graphlcd hinaus und arbeitet graphlcd-intern nur mit utf8 und wandelt alles, was von einem !utf8-vdr kommt, um.
aber dann muesste man auch die alten bitmap-fonts hinauswerfen (die koennen nur iso) ...
aber zugegeben: ich zerbreche mir da auch schon einige zeit den kopf, wie man das sauber (und mit wenig aufwand) am besten hinbekommt. zzt aergert mich halt, dass das utf8-zeug nur zeit kostet und anderes zeug aufhaelt ...
dass das utf-8 zeug nicht das problem ist, ist klar. dass man im utf8-stream ueberall korrekt wieder aufsetzen kann, auch. nur: das problem, wenn man erst in der for-schleife korrigiert, ist der versatz (skipPixels vs. start vs. xt)
Quoted
Das ist eine Möglichkeit. Aber das utf-8 Zeug ist ja nicht fehlerhat, es
Quoted
Zitat von »wastl«
habe schon ein wenig herumgespielt mit korrektur des einsprungpunktes
('start') und dann gibt es auch keine probleme mehr mit fehlerhaftem
utf8-zeug. (einfach solange 'start' verschieben, bis nicht mehr (c &
0xC0) == 0x80 ).
ist halt einfach so das nicht an jeder Indexposition des Strings ein
gültiges Zeichen ist. AdjustCounter liefert dann halt <ungültiges
Zeichen> als Zeichen zurück wenn man an so einer Stelle im String
einsteigt.
This post has been edited 1 times, last edit by "wastl" (Jun 2nd 2011, 11:45pm)



|
|
Source code |
1 2 |
// four byte utf8: 11110www 10zzzzzz 10yyyyyy 10xxxxxx -> 000wwwzz zzzzyyyy yyxxxxxx
if ( ((c3 & 0xE0) == 0xC0) && ((c2 & 0xE0) == 0xC0) && ((c1 & 0xE0) == 0xC0) ) {
|

This post has been edited 1 times, last edit by "wastl" (Jun 3rd 2011, 1:36am)
This post has been edited 4 times, last edit by "wastl" (Jun 4th 2011, 6:24pm)
(relevant, wenn zb. UTF-8 fonts mit eigenen zeichen verwendet werden wollen, zb VDRSymbols - diese sind auf !UTF-8-systemen natuerlich nutzlos)
|
|
Source code |
1 2 3 4 5 6 7 |
vdr01 tmp # git clone git://projects.vdr-developer.org/graphlcd-base.git -b touchcol graphlcd-base.git.touchcol Cloning into graphlcd-base.git.touchcol... fatal: Unable to look up projects.vdr-developer.org (port 9418) (Name or service not known) vdr01 tmp # git clone git://projects.vdr-developer.org/vdr-plugin-graphlcd -b touchcol vdr-plugin-graphlcd.touchcol Cloning into vdr-plugin-graphlcd.touchcol... fatal: Unable to look up projects.vdr-developer.org (port 9418) (Name or service not known) vdr01 tmp # |

frage: wozu soll das gut sein, in ein und demselben font dieselben speziellen VDR-zeichen mehrmals abzubilden? <sarcasm>ausfallssicherheit?</sarcasm>
noch dazu, wenn diese ohnedies in einem niedrigen unicode-block eingeblendet sind?
aber egal, wenn jemand die abfrage auf system == UTF8 oder nicht benoetigt ist sie jetzt da ...
This post has been edited 2 times, last edit by "Keine_Ahnung" (Jun 4th 2011, 11:39pm)
This post has been edited 2 times, last edit by "wastl" (Jun 5th 2011, 11:14pm)
This post has been edited 3 times, last edit by "Keine_Ahnung" (Jun 5th 2011, 11:43pm)