Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Delphi Suche TMemo für gemischte Zeilenumbrüche (DOS, UNIX, Mac) (https://www.delphipraxis.net/129799-suche-tmemo-fuer-gemischte-zeilenumbrueche-dos-unix-mac.html)

anse 25. Feb 2009 20:50


Suche TMemo für gemischte Zeilenumbrüche (DOS, UNIX, Mac)
 
Das Standard TMemo und auch Fremdkomponenten können eigentlich immer nur mit den Windows-Zeilenumbrüchen umgehen, also #13#10 . Ich möchte gern einen Mini-Text-Editor so umbauen daß das enthaltene TMemo auch Unix- und Mac-Umbrüche (#10 bzw. #13) nicht als Font-Kästchen sondern als Umbrüche darstellt. Dabei will ich vermeiden daß bei einem Misch-Inhalt am Ende alles einfach zu Windows-Umbrüchen konvertiert wird, weil das zwar sehr einfach wäre aber eine Art Datenverlust bedeuten würde und es Fälle gibt bei denen das unerwünscht ist.

Die meisten Quelltext-Editoren beherrschen den oben gemeinten "Misch-Inhalt". Also muß das doch irgendwie hinzukriegen sein? Mir fällt bloß nichts ein.

Was ich probiert habe ist
Delphi-Quellcode:
memoText.Lines.LineBreak := #10;
um zumindest mal einen reinen Unix-Text richtig darzustellen, aber nicht mal das funktioniert.

jaenicke 25. Feb 2009 21:16

Re: Suche TMemo für gemischte Zeilenumbrüche (DOS, UNIX, Mac
 
Zitat:

Zitat von anse
Die meisten Quelltext-Editoren beherrschen den oben gemeinten "Misch-Inhalt". Also muß das doch irgendwie hinzukriegen sein? Mir fällt bloß nichts ein.

Ich benutze meistens TSynEdit, das kann das AFAIK und zudem auch Syntaxhervorhebung und einiges mehr.

Ansonsten: Was spricht gegen eine Erkennung des Umbruchs, Umwandlung in das Standardwindowsformat und vor dem Speichern eine Rückumwandlung?

Ich biete z.B. ohnehin bei mir im Speicherndialog verschiedene Formate an.

himitsu 25. Feb 2009 21:31

Re: Suche TMemo für gemischte Zeilenumbrüche (DOS, UNIX, Mac
 
also D4/D7 verstehen beides ... wandeln es aber intern in die Windowsversion (#13#10) um.

bei D2009 weiß ich es jetzt nicht, da es intern anders arbeitet und ich keine Datei zum Testen zu Hand hab.

anse 25. Feb 2009 21:39

Re: Suche TMemo für gemischte Zeilenumbrüche (DOS, UNIX, Mac
 
Zitat:

Zitat von jaenicke
Ich benutze meistens TSynEdit, das kann das AFAIK und zudem auch Syntaxhervorhebung und einiges mehr.

TSynEdit wandelt intern alle unterschiedlichen Umbrüche in Windows-Linefeeds um bevor es den Text anzeigt. Ist also nicht ganz das was ich mir erhoffte zu finden.

Zitat:

Zitat von jaenicke
Was spricht gegen eine Erkennung des Umbruchs, Umwandlung in das Standardwindowsformat und vor dem Speichern eine Rückumwandlung?

Eine Rückumwandlung funktioniert nur solange keine gemischten Umbrüche vorkommen.

Bin aber mittlerweile auch schon fast der Meinung daß man das mit einer Option beim Speichern - wie du vorschlägst - löst.

himitsu 25. Feb 2009 21:45

Re: Suche TMemo für gemischte Zeilenumbrüche (DOS, UNIX, Mac
 
Fänd es eh eigenartig, wenn innerhalb einer Datei mehrere Arten von Zeilenumbrüchen gleichzeitig coexistieren würden.

anse 25. Feb 2009 21:53

Re: Suche TMemo für gemischte Zeilenumbrüche (DOS, UNIX, Mac
 
Klar ist das eigenartig, aber strenggenommen nicht unmöglich. Wahrscheinlich ist wohl daß eine Vereinheitlichung des Linefeed Styles in fast allen Fällen etwas gutes ist, Datenverlust hin und her.

Werde wohl den Weg gehen:
* Linefeed style feststellen
* Alles in Windows Linefeeds umwandeln
* Beim Speichern wieder in den festgestellten Linefeed umwandeln, evtl. sogar mit einer Combobox-Option

jaenicke 25. Feb 2009 21:57

Re: Suche TMemo für gemischte Zeilenumbrüche (DOS, UNIX, Mac
 
Dann ist die Datei fehlerhaft, wenn die dann fehlerhaft angezeigt und dann evtl. mit einheitlichen Umbrüchen gespeichert würde, dann ist das finde ich kein falsches Verhalten.

Ich habe das so gelöst beim Einlesen:
Delphi-Quellcode:
function GetFileContentsAsString(uFilename: String;
  var uFileFormat: T...FileFormat; var uCharSet: T...CharacterSet): String;

  function DetectUnicode(var uSize: Integer; var uBigEndian: Boolean): Boolean;
  ...
  function DetectUTF8(uText: String): Boolean;
  ...
  function DetectAnsi(uText: String): Boolean;
  ...
  function DetectAscii(uText: String): Boolean;
  ...

  function DetectFileFormat(uText: String): TScribaFileFormat;
  begin
    if Pos(#13#10, uText) > 0 then
      Result := ffPC
    else if Pos(#10, uText) > 0 then
      Result := ffUnix
    else if Pos(#13, uText) > 0 then
      Result := ffMac
    else
      Result := ffPC;
  end;
...


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:56 Uhr.

Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz