Erkennen ob das Zeichen ein UTF8 Zeichen ist

Für Fragen zur Programmiersprache auf welcher Lazarus aufbaut
Antworten
mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

theo hat geschrieben:Wenn du wenigstens mal einen brauchbaren Vorschlag machen würdest.
Hier würde das ja wohl überhaupt nichts nützen, da die Realisation eine Erweiterung des FP Compilers benötige. Darüber habe ich ja auch im FPC-Forum diskutiert und (sicherlich nicht hauptsächlich auf meine Anregung hin, sondern weil diverse andere ebenfalls gemeckert haben) ist da - wie schon gesagt - auch etwas unterwegs. Wenn sich die Experten dort damit beschäftigen, kommt sicher in absehbarer Zeit etwas vernünftiges dabei heraus (was dann vermutlich ähnlich wie Delphi 2009 ist, also per Default auf Widestrings und nicht auf UTF-8 beruht und somit wenig kompatibel mit der jetzigen Lazarus-Version aber stärker sourcecode-kompatibel zur vorigen ist.) Warten wir's ab...

-Michael
Zuletzt geändert von mschnell am Di 6. Jan 2009, 13:47, insgesamt 1-mal geändert.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

theo hat geschrieben:Und zwar nicht à la "alles konfigurierbar machen", dann kannste Lazarus nämlich gleich wegschmeissen.
Eclipse ist die SDK-Oberfläche mit den größten Zwachsraten. Da ist tatsächlich alles Konfigurierbar. Ist wirklich die Hölle, aber trotzdem stark im Kommen.

-Michael

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

mschnell hat geschrieben: Hier würde das ja wohl überhaupt nichts nützen,
Da hast du wohl recht. Dann brauchen wir hier aber auch das ganze Thema nicht zum hundertsten mal aufwärmen.

mschnell hat geschrieben: ist da - wie schon gesagt - auch etwas unterwegs.
Hast du dazu eine Quelle?

Ich persönlich glaube nicht, dass vor Laz 1.0 noch was in diesem Bereich geändert wird.

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

theo hat geschrieben:
mschnell hat geschrieben: Hier würde das ja wohl überhaupt nichts nützen,
Da hast du wohl recht. Dann brauchen wir hier aber auch das ganze Thema nicht zum hundertsten mal aufwärmen.
Pluto hat die hundertste Frage zu dem Thema gestellt. Die 99 Frager vorher sind offensichtlich auch nicht alleine mit der geänderten Stringverarbeitung klargekommen (ich natürlich zu Anfang ebenfalls nicht). Ich habe nach bestem Wissen kommentiert. Ich weiß nicht, warum das jemanden stört.
theo hat geschrieben:
mschnell hat geschrieben: ist da - wie schon gesagt - auch etwas unterwegs.
Hast du dazu eine Quelle?
Free Pascal Developer Mailing List ( http://lists.freepascal.org/mailman/listinfo/fpc-devel" onclick="window.open(this.href);return false; ). Dort ebenfalls ca. hundert threads.
theo hat geschrieben:Ich persönlich glaube nicht, dass vor Laz 1.0 noch was in diesem Bereich geändert wird.
Wenn Laz 1.0 einen zu Delphi 2009 kompatiblen Modus haben soll, muss es wohl.

-Michael

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

mschnell hat geschrieben:Pluto hat die hundertste Frage zu dem Thema gestellt.
Ich meinte damit auch nicht konkrete Fragen zu Unicode, sondern die ewigen Grundsatzdiskussionen, die nichts bringen, wie du selber einräumst.
mschnell hat geschrieben:Free Pascal Developer Mailing List ( http://lists.freepascal.org/mailman/listinfo/fpc-devel" onclick="window.open(this.href);return false; ). Dort ebenfalls ca. hundert threads.
Das kenn ich schon, nur habe ich dort keinen Beitrag gefunden welcher konkretisieren würde, wo die Reise denn nun hingeht.
Hast du sowas gefunden?
mschnell hat geschrieben:Wenn Laz 1.0 einen zu Delphi 2009 kompatiblen Modus haben soll, muss es wohl.
Ich glaube nicht, dass das zu den 1.0 Zielen gehört.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von pluto »

Pluto hat die hundertste Frage zu dem Thema gestellt. Die 99 Frager vorher sind offensichtlich auch nicht alleine mit der geänderten Stringverarbeitung klargekommen (ich natürlich zu Anfang ebenfalls nicht). Ich habe nach bestem Wissen kommentiert. Ich weiß nicht, warum das jemanden stört.
Na, nicht übertreiben. Zum Thema UTF8 Zeichen habe ich bisher kaum Fragen gestellt. Zugeben die Frage ist nicht gut Formuliert gewesen. Daher habt ihr sie wohl auch missverstanden. So wie ich das sehe. Keiner von euch ist auf die Frage eingegangen hatte ich das Gefühl.

ICH SCHALGE VOR MONTA SCHLIEßT DIESEN THREAD HIER. Wie ich schoneinmal vorgeschlagen hat. Da hier nichts mehr gesagt wird was mit der eigentliche Frage zu tun hat.
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

pluto hat geschrieben:Na, nicht übertreiben. Zum Thema UTF8 Zeichen habe ich bisher kaum Fragen gestellt.
Tschuldigung ! Da war ich ungenau. :oops: Ich meinte "Du hast die hundertste der Fragen zu diesem Thema gestellt", nicht "Du hast hundert Fragen zu diesem Thema gestellt"!
pluto hat geschrieben:was mit der eigentliche Frage zu tun hat
Leider ist immer noch nicht klar, was genau Du mit "UTF8 Zeichen" meinst. Jedenfalls solltest Du Dir, wie von Theo im anderen Thread ( http://www.lazarusforum.de/viewtopic.php?f=15&t=2325" onclick="window.open(this.href);return false; ) vorgeschlagen, die synachar unit anschauen. Damit kannst Du vermutlich leicht das erreichen, was Du möchtest.

-Michael
Zuletzt geändert von mschnell am Di 6. Jan 2009, 16:03, insgesamt 1-mal geändert.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von pluto »

Warsin wir sind auf 4 Seiten.....
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

pluto hat geschrieben:Warsin wir sind auf 4 Seiten.....
Wie immer beim Thema Unicode :twisted:

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

pluto hat geschrieben:Zugeben die Frage ist nicht gut Formuliert gewesen. Daher habt ihr sie wohl auch missverstanden. So wie ich das sehe. Keiner von euch ist auf die Frage eingegangen hatte ich das Gefühl.
Dann formuliere die Frage halt nochmal, so dass man sie in deinem Sinne beantworten kann.
pluto hat geschrieben: ICH SCHALGE VOR MONTA SCHLIEßT DIESEN THREAD HIER.
Ich wüsste nicht, dass Monta jemals einen Thread geschlossen hätte.

pluto
Lazarusforum e. V.
Beiträge: 7192
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von pluto »

nicht jedes mal, aber diesen hier, weil er ausehr fugen gerät. Also gut nocheinmal:
Ich habe in meinem PLEdit eine Procedur eingebaut die in der Lage ist Wortweise zu springen. Kennt ihr bestimmt alle wenn ihr STRG+Links oder Rechts drück.

Das klappt inzwischen recht gut, allerdings sind umlaute in der Zeile hält er genau nach dem Umlaut an.
Bei dieser Lösung hier habe ich das Probleme gelöst, aber sie gefällt mir nicht. Bestimmt könnt ihr es euch schon denken warum nicht.

Code: Alles auswählen

function TPLEdit_TextBuffer_StringList.GetNextWort(var atmp:Integer; const aX:Integer=-1):Integer;
var
  x,z,c,cx:Integer;
  str:widestring;
  s:string;
begin
  s:='ÄÖÜßäöü';
  z:=0;
  str:=Lines[CaretY];
  c:=UTF8Length(str);
  if (CaretY =Count-1) and (CaretX = c) then begin
    result:=c;
    exit
  end;
 
  if ax = -1 then
    cx:=CaretX
  else begin
    cx:=aX;
  end;
 
  if str <> '' then begin
    if ((str[cx] in WordDelimiters) or (cx >= c)) and (pos(str[cx], s) = 0) then begin
      if (cx >= c) and (CaretY+1 <=Count-1) then begin
        atmp:=c;
        CaretY:=CaretY+1;
        cx:=0;
      end;
      result:=GetNextWort(atmp,cx+1);
      exit;
    end;
 
    for x:=cx to c+1 do begin
     // NOTLÖSUNG MIT POS, aber warum ist das Überhapt notwendig ?
     //WordDelimiters hatte ich auch schon mal durch WordDelimiters2 ersetzt was ich oben mit werten gefüllt hatte, das gleiche Ergebnis.
      if (((str[x] in WordDelimiters)) and (pos(str[x], s) = 0)) or (x >=c) or (str[x] = ' ') then begin
        z:=x;
        break;
      end;
    end; // for x
  end
  else begin
    if CaretY+1 <=Count-1 then begin
      CaretY:=CaretY+1;
      result:=GetNextWort(atmp,0);
    end;
  end;
  result:=z;
end; // GetNextWort
Ich hoffe das Problem ist jetzt klar. geworden.
MFG
Michael Springwald

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

Also, mal abgesehen davon, dass du "str" nicht als WideString sondern als String definieren solltest, würdest du besser die
WordDelimiters andersrum definieren:
also z.B:
WordDelimiters: set of Char = [' ','.',','];

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

theo hat geschrieben:Ich wüsste nicht, dass Monta jemals einen Thread geschlossen hätte.
Warum auch. Ist nur sinnvoll bei persönlichen Beleidigungen, Porno-Werbung usw.
-Michael

Benutzeravatar
theo
Beiträge: 10927
Registriert: Mo 11. Sep 2006, 19:01

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von theo »

@mschnell:
Hab dir hier noch eine Frage gestellt: http://www.lazarusforum.de/viewtopic.php?p=26447#p26447" onclick="window.open(this.href);return false;

Hast du irgendwelche Anhaltspunkte, was denn konkret in der Pipeline ist?

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: Erkennen ob das Zeichen ein UTF8 Zeichen ist

Beitrag von mschnell »

theo hat geschrieben:Also, mal abgesehen davon, dass du "str" nicht als WideString sondern als String definieren solltest ...
Wenn bekannt ist, dass der String UTF8-codiert ist wäre der richtige Typ doch wohl "UTF8String".
Ich würde aber einen eigenen Typ "PlutoString" im ganzen Projekt verwenden und diesen dann irgendwo zentral passend z.B. als UTF8String oder WideString definieren. Dann ist der Protierungsaufwand kleiner, falls ich das Stringhandling dembnächst ändern sollte.
theo hat geschrieben:set of Char = [' ','.',','];
Meiner Ansicht nach keine gute idee ! Was passiert, wenn einer dieser Character als zweites Byte in einem Codepoint eines UTF8-kodierten Zeichens vorkommt ? Was ist, wenn man einen Codepoint als delimiter verwenden will, der sich nicht als ein Byte darstellen lässt ?
Wenn man mit UTF8 arbeitet, sollte man überhaupt keine Chars (auch nicht set of Char) verwenden, weil es eben kleinene Typ UTF8Char gibt. Mit Widestring ist das schon besser: es gibt einen Type Widechar, aber wie wir in anderen Threads gesehen haben, kann es (in hierzulande, wenn man keinen Mac benutzt, sehr seltenen Fällen) auch in UTF16 kodierten Widestrings Codepoints geben, die zwei Worte verwenden.

-Michael
Zuletzt geändert von mschnell am Di 6. Jan 2009, 17:01, insgesamt 2-mal geändert.

Antworten