-paragraphs (NSTextStorage)

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • Nur eine Vermutung, die auf keinerlei Wissen geschweige denn Kenntnis beruht:

    Haben alle Sprachen überhaupt "Absätze"? Oder sind die vielleicht von Sprache zu Sprache so verschieden, daß die grundlegend unterschiedlich behandelt werden müssen? (So wie die Representations eines Bildes ungefähr)

    Einen Glyphen fett darzustellen ist wohl noch relativ/halbwegs äquivalent, aber wenn Du dann anfängst mit LTR und RTL und eventuell noch Schriften, die von oben nach unten geschrieben werden...

    Wie gesagt, nur eine Vermutung.

    Edit: Hälfte des Gedankens vergessen... vielleicht ist die Behandlung des Konzeptes "Absatz" halt so fundamental verschieden daß das erst beim Layouten zum Tragen kommt und deshalb bei den Strings noch vernachlässigbar ist oder aus designtechnischen Gründen da nicht gut angebracht wäre.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • RE: -paragraphs (NSTextStorage)

    Original von Tom9811
    Kann mir jemand erklären, warum das eine Methode von Text-Storage und nicht bereits von attributed Strings ist? Irgendwie haben auch attributed Strings Absätze.

    NSParagraphStyle ist Teil von AppKit. NSAttributedString von Foundation.

    D.h. ein AttributedString ist zunächst mal ein universeller String mit (bedeutungslosen) Attributen. Incl. Zeilenumbruch.

    Bedeutung bekommt der String erst im AppKit. Und eine NSTextStorage ist eine spezielle Subclass die auch weiß was ein NSParagraphStyle ist. Wahrscheinlich ging es nicht als Category zu implementieren.
  • RE: -paragraphs (NSTextStorage)

    @hns
    -paragraphs (NSTextStorage) gibt auch nur nach Zeilenumbrüchen getrennte attributed Strings zurück. Einen Zusammmenhang zu NSParagraphStyle erkenne ich nicht. Darüber hinaus ist NSParagraphStyle ein Attribut, welches bereits von attributed String unterstützt wird. Auch bindet sich ein Text-View an einen attributed String. Also, daran kann es nicht liegen. Die Erweiterung besteht mehr in der Editor-Funktionalität.

    @seb2
    Na ja, ich wüsste nicht, dass NSTextStorage irgendwie lokalisierter wäre als NSAttributedString.

    Inzwischen denke ich, dass es einfach bei NSTextStorage benötigt wurde und man es dort ohne Nachzudenken einbaute. Vllt schaue ich mal bei Step herein, ob ich da einen Grund finde.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • RE: -paragraphs (NSTextStorage)

    hast Recht - hängt nicht mit den ParagraphStyles zusammen.

    Aber etwas anderes ist mir aufgefallen: es gibt auch -characters und -words sowie setCharacters: setWords: setParagraphs: Das braucht man doch für AppleScript? Und das Textsystem braucht es vielleicht für single/double/triple-Click.

    Und AppleScript spielt auch nur mit AppKit zusammen weil es Events bearbeitet (nicht mit Foundation).
  • RE: -paragraphs (NSTextStorage)

    Original von Tom9811
    @seb2
    Na ja, ich wüsste nicht, dass NSTextStorage irgendwie lokalisierter wäre als NSAttributedString.

    Ich bin halt ein kleiner Linguist und denke immer zuerst an das Eine.
    if (!exit(-1)) fprintf(stderr, "exit call failed. Program will continue\n");
  • RE: -paragraphs (NSTextStorage)

    Ja, in der Tat gibt es da einige Erweiterungen, die in Bezug auf AS, "richtige" Textvrearbeitung usw.sinnvoll sind. Und du hast schon ganz Recht, dass Text-Storage ja sozusagen die wirklich Textverarbeitung ist und attributed String nur ein Container.

    Aber dennoch hätte man es ja schon gleich in attributed String implementieren können. Einfach aus Gründe de Bequemlichkeit.

    BTW: Hast du es dir mal in Step angeschaut? Du bist da doch der Kenner.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • falls du es noch nicht selber programmiert hast (bzw für alle anderen):

    NSAttributedString+Additions.h

    Quellcode

    1. #import <Foundation/NSAttributedString.h>
    2. @interface NSAttributedString (Additions)
    3. - (NSArray *)attributedParagraphs;
    4. - (NSArray *)paragraphs;
    5. @end


    NSAttributedString+Additions.m

    Quellcode

    1. #import "NSAttributedString+Additions.h"
    2. @implementation NSAttributedString (Additions)
    3. - (NSArray *)paragraphs {
    4. NSString *string = [self string];
    5. NSUInteger length = [string length];
    6. NSUInteger start = 0, end = 0, contentsEnd = 0;
    7. NSMutableArray *paragraphs = [NSMutableArray array];
    8. while(end < length) {
    9. [string getParagraphStart:&start end:&end contentsEnd:&contentsEnd forRange:NSMakeRange(end, 0)];
    10. [paragraphs addObject:[string substringWithRange:NSMakeRange(start, contentsEnd - start)]];
    11. }
    12. return paragraphs;
    13. }
    14. - (NSArray *)attributedParagraphs {
    15. NSString *string = [self string];
    16. NSUInteger length = [string length];
    17. NSUInteger start = 0, end = 0, contentsEnd = 0;
    18. NSMutableArray *paragraphs = [NSMutableArray array];
    19. while(end < length) {
    20. [string getParagraphStart:&start end:&end contentsEnd:&contentsEnd forRange:NSMakeRange(end, 0)];
    21. [paragraphs addObject:[self attributedSubstringFromRange:NSMakeRange(start, contentsEnd - start)]];
    22. }
    23. return paragraphs;
    24. }
    25. @end
    Alles anzeigen
  • Original von Tom9811
    Ich hatte es mir dann schon selbst programmiert. Mir ging es eher um den Grund, warum das so ist. Plausibel erscheint mir es immer noch nicht.

    Ganz einfach: Weil diese Methoden so absolut grottig langsam sind und wirklich bei keiner Anderen Nutzung als bei AppleScript irgend einen Sinn machen. Sobald du nen Text mit mehr als 10000 Zeichen hast solltest du dir ernsthaft überlegen, das selber zu hacken - ohne alles 50-Mal umzulagern und zwischenzuspeichern.
  • Original von hns
    Original von Tom9811
    Ich hatte es mir dann schon selbst programmiert. Mir ging es eher um den Grund, warum das so ist. Plausibel erscheint mir es immer noch nicht.
    Bei Apple arbeiten auch nur Menschen...

    Jepp, mutmaßlich ist es wirklich nur ein Versehen.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Original von Tom9811
    Also, bei mir ist das recht flink. Allerdings spielt das ohnehin keine Rolle, weil ich die Methode nur bei der Formatumwandlung/Export benötigt sowie bei der Serialisierung.


    könnt ihr da was zu der performance sagen? ich schreibe grad an einem editor und will xml als datei format nutzen und im speicher dann eine datenstruktur (evtl. coredata), um leichter durch andere controls die daten anzuzeigen bzw zu ändern ... ich wollte später dann NSTextStorage ersetzen (habe ich schon mal probiert, hat jedoch nicht geklappt) ... ist es besser (für die geschwindigkeit) doch als datenstruktur NSAttributedString zu verwenden und dann beim Laden und Speichern das XML entsprechend umzuwandeln?
  • Ich mache es ganz ähnlich: Ich habe einen attributed String, der bestimmte Formate aufnehmen kann. Exportiert wird das Ganze als Property List. Auf dem Server läuft ein PHP-Skript, welches wiederum diese Property List liest und daraus eine Webseite baut.

    Die gesamte Editiererei läuft also in einem ganz normalen Text-Storage. Beim Export habe ich nicht wirklich ein Laufzeit-Problem.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Den Autosave musst du ja nicht im gleichen Format vornehmen. Dazu ist die Gliederung in Absätze nicht erforderlich.

    Ich benötige das halt, weil am Ende irgendwann einmal so etwas wie <p> <p/> herauskommen muss. Und das herauspfriemeln mache ich dann doch lieber einmal auf meinem Rechner als 1.000 Mal auf dem Web-Server in PHP.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • vielleicht probier ich auch beides zu machen:

    öffnen einer datei: xml in datenstruktur packen (evtl. mittels coredata in 10.5) und attributed string erzeugen

    bearbeiten: normales tippen verändert string, return erzeugt paragraph-object in datenstruktur, löschen entsprechend

    speichern: datenstruktur zurück in xml

    so könnte ich auf die vorhandene infrastruktur von nstextstorage-nslayoutmanager-nstextview zurückgreifen und meinen kram via delegate regeln ... hab allerdings noch ein paar zweifel, dass ich evtl. nicht immer alle änderungen im text view mitbekomme und meine datenstruktur dann inkonsistent wird ... nach jeder änderung den attributed string aus der datenstruktur neu zu erstellen halte ich für nicht performant genug, da ja sonst bei jedem einfügen eines einzelnen zeichens der komplette string neu gelayoutet werden muss (bei leopard zwar nicht unbedingt, aber trotzdem noch der ganze sichtbare bereich)