DE68929038T2 - Verfahren zur Verarbeitung von digitalen Textdaten - Google Patents

Verfahren zur Verarbeitung von digitalen Textdaten

Info

Publication number
DE68929038T2
DE68929038T2 DE68929038T DE68929038T DE68929038T2 DE 68929038 T2 DE68929038 T2 DE 68929038T2 DE 68929038 T DE68929038 T DE 68929038T DE 68929038 T DE68929038 T DE 68929038T DE 68929038 T2 DE68929038 T2 DE 68929038T2
Authority
DE
Germany
Prior art keywords
text
data
punctuation
selection
codes
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Expired - Fee Related
Application number
DE68929038T
Other languages
English (en)
Other versions
DE68929038D1 (de
Inventor
Curtis Abbott
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Xerox Corp
Original Assignee
Xerox Corp
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Xerox Corp filed Critical Xerox Corp
Publication of DE68929038D1 publication Critical patent/DE68929038D1/de
Application granted granted Critical
Publication of DE68929038T2 publication Critical patent/DE68929038T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/232Orthographic correction, e.g. spell checking or vowelisation
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • G06F40/174Form filling; Merging
    • GPHYSICS
    • G06COMPUTING OR CALCULATING; COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/20Natural language analysis
    • G06F40/253Grammatical analysis; Style critique

Landscapes

  • Engineering & Computer Science (AREA)
  • Theoretical Computer Science (AREA)
  • Health & Medical Sciences (AREA)
  • Artificial Intelligence (AREA)
  • Audiology, Speech & Language Pathology (AREA)
  • Computational Linguistics (AREA)
  • General Health & Medical Sciences (AREA)
  • Physics & Mathematics (AREA)
  • General Engineering & Computer Science (AREA)
  • General Physics & Mathematics (AREA)
  • Document Processing Apparatus (AREA)

Description

  • Die vorliegende Erfindung betrifft Datenverarbeitungstechniken zum Editieren von natürlichsprachlichem Text. Insbesondere betrifft die vorliegende Erfindung Editiertechniken, welche die Interpunktion berücksichtigen.
  • Text Editing, Version 1.0, Xerox Corporation, 1985, pp. 47-56 beschreibt Merkmale des ViewPoint Document Editors der Xerox Corporation. Auf den Seiten 49 bis 52 wird das Mehrfachklick-Auswahlverfahren beschrieben, bei dem die Anzahl der Maustastenklicks die gewünschte Texteinheit angibt, wobei ein Klick nur ein Zeichen auswählt, zwei Klicks ein Wort auswählen, drei Klicks einen Satz auswählen und vier Klicks einen Absatz auswählen. Der Editor verwendet spezielle Regeln, um Text als Wörter oder Sätze zu interpretieren. Wie auf Seite 49 beschrieben, kann die Auswahl eines Zeichens, Wortes, Satzes oder Absatzes durch das Mehrfachklick-Verfahren durch ein Auswahlanpassungsverfahren, um jeweils zusätzliche Zeichen, Wörter, Sätze oder Absätze einzuschließen. Die Operationen Bewegen, Kopieren und Löschen können dann auf die Auswahl angewendet werden. Im Fall der Operationen Bewegen oder Kopieren wird eine Auswahl durch das Mehrfachklick-Verfahren zwischen anderen Texteinheiten derselben Ebene eingefügt, so daß ein Wort zwischen Wörtern, ein Satz zwischen Sätzen und ein Absatz zwischen Absätzen positioniert wird. Eine Auswahl mit Hilfe des Mehrfachklick-Verfahrens umfaßt auch das vorhergehende oder folgende Leerzeichen bzw. die vorhergehenden und folgenden Leerzeichen. Deshalb kann ein Wort von einem Satz bewegt oder gelöscht werden, wobei die verbleibenden Wörter und Interpunktionszeichen mit korrekten Leerzeichen stehen bleiben; entsprechend kann ein Satz aus einem Absatz bewegt oder gelöscht werden, wobei die verbleibenden Sätze im Paragraphen mit korrekten Leerzeichen stehen bleiben.
  • Verschiedene andere kommerzielle Produkte weisen Merkmale auf, welche denjenigen von ViewPoint ähnlich sind, einschließlich von Auswahlbefehlen mit Hilfe einer Tastatur, einer Maus oder einer ähnlichen Zeigersteuereinrichtung. Herkömmlicherweise wählt ein einziger Klick mit einer Zeigersteuereinrichtung einen Bereich aus, der an der Zeichengrenze beginnt, die dem Zeiger zum Zeitpunkt des Klickens am nächsten ist. In Übereinstimmung mit einem Ansatz enthält der durch einen einzigen Klick ausgewählte Bereich keine Zeichen, kann aber um jeweils ein Zeichen erweitert werden, indem der Zeiger über die hinzuzufügenden Zeichen bewegt wird. In Übereinstimmung mit einem anderen Ansatz enthält der durch einen einzigen Klick ausgewählte Bereich ein Zeichen und kann beliebig durch das Klicken einer anderen Taste erweitert werden, wobei der Zeiger an der gewünschten Endposition der Auswahl positioniert wird.
  • Ebenfalls herkömmlich ist eine Auswahl durch ein Doppelklicken bzw. das aufeinanderfolgende zweifache Klicken an derselben Position. Ein Doppelklicken wählt gewöhnlich das nächste Wort aus, das die Zeigerposition umgibt, wobei folgende Anpassungen der Auswahl jeweils wortweise vorgenommen werden. Der Macintosh Personal Computer von Apple sieht zum Beispiel eine Benutzerschnittstelle vor, bei der ein mehrfaches Klicken ein Wort auswählt. Der kommerzielle Texteditor "Word" der Microsoft Corporation sieht eine Erweiterung einer derartigen Auswahl auf weitere ganze Wörter vor. Microsoft Word und andere Texteditoren wie WordPerfect der WordPerfect Corporation und Emacs der Free Software Foundation, Cambridge Massachusetts erlauben die Auswahl von Sätzen und die Erweiterung einer derartigen Auswahl auf weitere ganze Sätze. Microsoft Word und Fullwrite Professional der Ashton-Tate Corporation erlauben die Auswahl einen Absatzes. Fullwrite Professional erlaubt es dem Benutzer weiterhin ein Anführungszeichen am Anfang oder am Ende eines Zitats anzugeben, wobei die Software auf der Basis der zuvor eingegebenen Zeichen korrekt ein Anfangs- oder ein Schlußanführungszeichen vorsieht.
  • Text Editing and Processing, Symbolics, Inc., July 1986, pp. 24-31 and 63-111 beschreibt Merkmale des Texteditierens einer Version von Emacs, die als Zmacs bezeichnet wird. Die Seiten 67 bis 70 beschreiben Mausoperationen welche das Klicken auf ein Wort, um das gesamte Wort zu kopieren, das Klicken auf eine Klammer, um die Klammer, die entsprechende zweite Klammer und den Text dazwischen zu kopieren, sowie das Klicken vor oder hinter eine Zeile, um die gesamte Zeile zu kopieren, umfassen. Es werden entsprechende Leerzeichen vor eingefügte Objekte gesetzt, so daß Leerzeichen automatisch um ein eingefügtes Wort oder einen eingefügten Satz herum eingefügt werden. Die Seiten 71 bis 75 beschreiben Bewegungsbefehle einschließlich von Bewegungen um ein Wort, d. h. um eine Kette von alphanumerischen Zeichen, von Bewegungen um einen Satz, der mit einem Fragezeichen, einem Punkt oder einem Ausrufezeichen endet, auf das eine neue Zeile oder aber ein Leerzeichen und eine neue Zeile oder ein weiteres Leerzeichen folgt, und eine beliebige Anzahl von Schlußzeichen zwischen dem Satzende-Interpunktionszeichen und dem folgenden Leerzeichen umfaßt, sowie von Bewegungen um eine Zeile, die durch eine neue Zeile begrenzt wird. Seite 79 beschreibt die Bewegung um einen Absatz, der durch eine neue Zeile und folgende Leerzeichen, eine leere Zeile oder ein Seitenzeichen alleine in einer Zeile begrenzt wird. Seite 80 beschreibt eine Bewegung um eine Seite, die durch ein Seitenzeichen begrenzt wird. In Kapitel 5 beschreiben die Seiten 83 bis 97 das Löschen und Transportieren von Text, währen die Seiten 87 bis 89 beschreiben, wie die Inhalte eines Ereignisses wiederhergestellt werden. In Kapitel 6 beschreiben die Seiten 99 bis 111 das Arbeiten mit Bereichen und erläutern das Zeigen und Markieren.
  • US-A-4,773,009 beschreibt einen Textanalysator, der Ketten von digital codiertem Text analysiert, um Absatz- und Satzgrenzen zu bestimmen. Wie mit Bezug auf Fig. 3 und 4 beschrieben und in denselben gezeigt, wird jede Kette in Komponentenwörter zerlegt. Mögliche Abkürzungen werden identifiziert und mit einer Tabelle von üblichen Abkürzungen verglichen, um Abkürzungen zu identifizieren, die kein Satzende darstellen. Schlußinterpunktionszeichen und die folgende Kette werden analysiert, um das Endwort eines Satzes festzustellen. Wenn die Satzgrenzen bestimmt sind, können ein Grammatikprüfer, ein Interpunktionsanalysator, ein Lesbarkeitsanalysator oder eine andere Textverarbeitung auf einer höheren Ebene angewendet werden.
  • EP-A-0230339 gibt eine Vorrichtung zum Hinzufügen von Interpunktionszeichen zu einem übersetzten Satz an, der keine Interpunktionszeichen enthält, indem ein Interpunktionszeichen unabhängig von dem Interpunktionszeichen im Originalsatz erzeugt wird. Im Gegensatz dazu korrigiert die vorliegende Erfindung die Interpunktion in einem bestehenden Text.
  • Der Artikel "Computer Software for Working with a Language" von Terry Winograd in Scientific American, 251 (1984) September, No. 3, New York beschreibt verschiedene Computerprogramme, die linguistische Symbole in einer Textverarbeitungssoftware manipulieren können. Ein derartiges Beispiel ist die in den AT&T-Labors entwickelte Mehrbenutzersoftware des Autors, die Programme umfaßt, die nach Wortwiederholungen wie "the the" sowie nach falschen Interpunktionszeichen wie "?." sucht. Dies wird durch das Durchsuchen des Textes nach bestimmten Zeichenketten erreicht.
  • JP-A-63-182771 gibt die Korrektur der Interpunktion eines Dokuments an. Dies wird unter Verwendung einer Stilanalysefunktion erreicht, die operiert, um die Interpunktion im Dokument mit entweder der Interpunktion in einer vorhergehenden Übersetzung des Dokuments oder mit einem Satz von vordefinierten Interpunktionsketten zu vergleichen. Eine Liste mit den Positionen der identifizierten Fehler wird zusammen mit einem überarbeiteten Dokument erzeugt, in welchem Interpunktionszeichen erzeugt wurden.
  • Die vorliegende Erfindung wird durch die beigefügten Ansprüche definiert.
  • Weiterer Stand der Technik ist in JP-A-62-290966, JP-A-61-107469, JP-A-63,193263, JP-A- 61-157971, JP-A-63-187361 und EP-A-0410062 angegeben.
  • Die vorliegende Erfindung sieht eine Textverarbeitungstechnik vor, welche Information zu der Interpunktionsstruktur eines Textes verwendet, um eine verbesserte Textverarbeitung vorzusehen. Die vorliegende Erfindung wird durch die beigefügten Ansprüche definiert. Zum Beispiel kann ein Editor in Übereinstimmung mit der vorliegenden Erfindung Fix-Up-Daten vorsehen, die eine Sequenz von Operationen definieren, welche eine Texttyp-Interpunktionsstruktur automatisch korrigiert, nachdem ein Benutzer den Text manipuliert hat. Weiterhin kann der Editor Fix-Up-Daten vorsehen, die eine Sequenz von Operationen definieren, welche eine Operation auf einer höheren Ebene implementieren, mit der die Effizienz der Textverarbeitung verbessert wird.
  • Ein wohlbekanntes Problem bei herkömmlichen Texteditoren besteht darin, daß der Benutzer nach einer Operation zum Manipulieren von Text typischerweise den Text durchgehen muß, um zahlreiche Interpunktionselemente wie Interpunktionszeichen, Großschreibungen und Leerzeichen zu korrigieren. Wenn zum Beispiel ein Wort vom Anfang oder Ende eines Satzes bewegt wird, dann kann ein Satz mit einer falschen Interpunktion, falscher Großschreibung und falschen Leerzeichen zurückgelassen werden. Das Erzeugen, Verwenden und Aufrechterhalten einer Textdatenstruktur mit Strukturdaten, die eine autonome Interpunktionsstruktur angeben, ist Zeit- und speicheraufwendig, so daß die Korrekturtechniken eine schwache Rechenleistung aufweisen. Außerdem beschränken derartige Techniken die verfügbaren Operationen auf diejenigen, die der Datenstruktur entsprechen, so daß der Benutzer die Textzeichen nicht direkt auswählen und manipulieren kann, wie das mit herkömmlichen und kommerziell verbreiteten Texteditoren für natürlichsprachlichen Text gemacht werden kann. Weiterhin können derartige Texteditoren nicht einfach erweitert werden, um derartige Datenstrukturen zu handhaben.
  • Dieser Aspekt der vorliegenden Erfindung basiert auf der Erkenntnis, daß Text in Texteinheiten analysiert werden kann, die jeweils einem spezifischen Texttyp entsprechen, so daß alle Interpunktionselemente an Grenzen zwischen derartigen Texteinheiten auftreten. Dieser Aspekt basiert weiterhin auf der Erkenntnis, daß Interpunktionsfehler in zwei fundamentale Arten von Fehlern aufgeteilt werden können: erstens Fehler bei der Positionierung der Grenzen der Texttypen und zweites fehlerhafte Kombinationen von Interpunktionselementen an Grenzen zwischen Texttypen. Die zweite Art von Fehlern, die als Fehler in der Interpunktionsstruktur von Texttypen bezeichnet wird, kann durch das Durchführen von einer Folge von Operationen nach einer Manipulationsoperation korrigiert werden, die in einer korrekten Texttyp-Interpunktionsstruktur resultieren, was bedeutet, daß die Interpunktionselemente an jeder Texttyp-Grenze passend für diese Grenze gewählt sind. Mit anderen Worten modifiziert die Korrektursequenz der Operationen die Textdaten in Übereinstimmung mit einem Text, so daß die modifizierten Textdaten einem modifizierten Text entsprechen, der eine korrekte Texttyp-Interpunktionsstruktur aufweist.
  • Dieser Aspekt der vorliegenden Erfindung basiert auf der Erkenntnis, daß eine Sequenz von Operationen, die zu einer korrekten Texttyp-Interpunktionsstruktur führt, mit einem bekannten Texteditor vorgenommen werden kann, der als Host für einen Interpunktionssetzer dienen kann, der Funktionen umfaßt, die durch den Hosteditor aufgerufen werden können, um die richtigen Sequenzen von Operationen zu bestimmen, die dann durch den Hosteditor durchgeführt werden. Dieses Problem könnte vermieden werden, indem eine Datenstruktur verwendet wird, die Textdaten in Übereinstimmung mit dem Text umfaßt, wobei die Strukturdaten eine Interpunktionsstruktur des Textes angeben. Diese Interpunktionsstruktur könnte die Verteilung von einem oder mehreren Interpunktionselementen im Text sowie die Abhängigkeiten zwischen diesen ohne Bezug auf den lexikalischen Inhalt des Textes definieren. Eine derartige Datenstruktur könnte verwendet werden, um sicherzustellen, daß Operationen auf einem Text von einer korrekten Interpunktionsstruktur zu einer anderen führen, wobei jede Operation derart durchgeführt wird, daß die Datenstruktur beibehalten wird, so daß das System eine korrekte Interpunktion für den Text vorsehen kann.
  • In Übereinstimmung mit einem Aspekt der vorliegenden Erfindung ist ein Verfahren zum Betreiben eines Prozessors angeben, um ein Texteditieren durchzuführen, wobei das Verfahren folgende Schritte umfaßt: Betreiben des Prozessors zum Durchführen einer ersten Sequenz von wenigstens einer Texteditoroperation in Bezug auf Textdaten, die einen Text definieren, wobei der Text ein Wort und ein erstes Interpunktionselement in einem Bereich an einem Ende des Wortes umfaßt; Betreiben des Prozessors unter Verwendung der Textdaten zum automatischen Erhalten von Operation-Definitionsdaten, wobei die Operation-Definitionsdaten Daten sind, die eine zweite Sequenz von wenigstens einer Texteditoroperation des Prozessors definieren, wobei die Operation-Definitionsdaten die zweite Sequenz als eine Sequenz definieren, die bei Durchführung nach der ersten Sequenz die Textdaten modifiziert, um modifizierte Textdaten zu erzeugen, welche einen modifizierten Text definieren, der das Wort umfaßt und in dem ein zweites Interpunktionselement in dem Bereich an dem einen Ende des Wortes anstelle des ersten Interpunktionselementes steht, wobei das zweite Interpunktionsmerkmal korrekt ist und sich von dem ersten Interpunktionsmerkmal unterscheidet.
  • Ein anderer Aspekt der vorliegenden Erfindung basiert auf der Erkenntnis von Problemen bei der Bestimmung einer richtigen Sequenz von Operationen, die zu einer korrekten Texttyp- Interpunktionsstruktur führt. Ein herkömmlicher Texteditor sieht keine Daten vor, die explizit eine derartige Sequenz von Operationen definieren. Andererseits sollte die Sequenz der Operationen bestimmt werden, ohne den Hosteditor wesentlich zu modifizieren,
  • Dieser Aspekt der vorliegenden Erfindung basiert auf der weiteren Erkenntnis, daß Sequenzen von Operationen parallel zu den normalen Operationen des Hosteditors bestimmt werden können. Diese Erkenntnis basiert wiederum auf einer Analyse des Betriebs von herkömmlichen Texteditoren und auf der Erkenntnis, daß die meisten Editoren einfach Daten in bestimmten Phasen ihres normalen Betriebs bereitstellen können, auf deren Basis eine richtige Sequenz von Operationen für eine korrekte Texttyp-Interpunktionsstruktur erhalten werden kann.
  • Ein herkömmlicher auf einer Anzeige basierender Texteditor umfaßt typischerweise eine Tastatur, um eine Sequenz von Codes zu empfangen, die einem durch einen Benutzer geschriebenen Text entsprechen, sowie eine Anzeigeeinheit, um einen Text in Übereinstimmung mit den zuvor empfangenen Textcodes für einen Benutzer wiederzugeben, damit dieser den Text lesen kann. Der Texteditor handhabt automatisch den Zeilenumbruch, die Abstände zwischen Zeilen und Absätzen, die Ränder und das Einrücken von Absätzen, so daß der auf der Anzeige wiedergegebene Text ungefähr dasselbe Aussehen aufweist wie auf einer gedruckten Seite. Der Benutzer kann dann die Tastatur sowie typischerweise eine Zeigersteuereinrichtung wie eine Maus verwenden, um den Text zu überarbeiten.
  • Bei einem herkömmlichen Texteditor kann der Benutzer typischerweise Überarbeitungen vornehmen, indem er Operationen anfordert, die in zwei wichtige Klassen fallen. Die erste Klasse der Auswahloperationen umfaßt diejenigen Operationen, mit denen ein Benutzer Teile des Textes auswählen kann, die als "aktuelle Auswahl" oder einfach "Auswahl" bezeichnet werden, um das Argument einer folgenden Operation zu werden. Die zweite Klasse der Manipulationsoperationen umfaßt diejenigen Operationen, mit denen der Benutzer den Text modifizieren kann. Die in einem bestimmten Texteditor verfügbaren Manipulationsoperationen basieren typischerweise auf einem von zwei Paradigmen: Ausschneiden-Kopieren- Einfügen oder Bewegen-Kopieren.
  • Bei einer Manipulation in Übereinstimmung mit dem Ausschneiden-Kopieren-Einfügen-Paradigma sind drei Basisoperationen vorgesehen; ein Kopieroperation gibt eine Kopie der Textcodes der aktuellen Auswahl in eine temporäre Datenstruktur, die typischerweise als Ausschneidepuffer bezeichnet wird; ein Ausschneideoperation führt eine Kopieroperation durch, auf die ein Löschen der aktuellen Auswahl aus dem Text folgt; und eine Einfügeoperation ersetzt die aktuelle Auswahl durch die Inhalte des Ausschneidepuffers. Bei einer Manipulation in Übereinstimmung mit dem Bewegen-Kopieren-Diagramm sind zwei Auswahlen, die als "primäre Auswahl" und als "sekundäre Auswahl" bezeichnet werden, und zwei Basisoperationen vorgesehen: eine Kopieroperation positioniert eine Kopie der primären Auswahl an der Position der sekundären Auswahl; und eine Bewegenoperation führt eine Kopieroperation durch, auf die das Löschen der primären Auswahl von der Originalposition folgt. Beide Paradigmen umfassen also eine unabhängige Löschoperation, welche die aktuelle Auswahl oder die primäre Auswahl ohne Bezugnahme auf einen Ausschneidepuffer oder eine sekundäre Auswahl löscht.
  • Dieser Aspekt der vorliegenden Erfindung nimmt an, daß der Hosteditor eine herkömmliche Textdatenstruktur verwendet, die eine Sequenz von Codes verwendet, welche Codes für Zeichen, Interpunktionszeichen, Großschreibung und Leerzeichen umfaßt. Dieser Aspekt sieht Techniken vor, mit denen ein Hosteditor, der eine derartige Datenstruktur oder eine Variante davon verwendet, mit relativ kleinen Modifikationen erweitert werden kann. Diese Techniken umfassen das Vorsehen von Interpunktionsfunktionen, die jeweils ein Satz von Befehlen sind, die Daten vom Hosteditor erhalten und diese Daten verwenden, um eine Sequenz von Operationen zu bestimmen, die zu einem modifizierten Text mit einer korrekten Texttyp-Interpunktionsstruktur führt. Der Hosteditor umfaßt Funktionen, die jeweils ein Satz von Befehlen sind, die einen Interpunktionsfunktion aufruft, um eine Sequenz von Operationen zu erhalten, und dann die Sequenz von Operationen unter Verwendung von Hosteditor-Operationen durchführt.
  • Dieser Aspekt basiert weiterhin auf der Entdeckung von Techniken zum Erhalten der für eine Interpunktionsfunktion erforderlichen Information, um eine richtige Sequenz von Operationen zu erhalten. Diese Information kann vom Hosteditor erhalten werden, wenn dieser eine seiner Basis-Manipulationsoperationen abschließt - eine Bewegen- oder Kopieroperation im Bewegen-Kopieren-Paradigma oder eine Ausschneide-, Kopier- oder Einfügeoperation im Ausschneiden-Kopieren-Einfügen-Paradigma - oder wenn er eine Operation zum Vornehmen einer Änderung an der Auswahl abschließt - entweder an der primären oder sekun dären Auswahl in dem Bewegen-Kopieren-Paradigma oder an den Inhalten des Ausschneidepuffers in dem Ausschneiden-Kopieren-Einfügen-Paradigma. Immer wenn der Hosteditor eine Anforderung zum Modifizieren der Auswahl empfängt, kann eine Hosteditorfunktion eine Interpunktionsfunktion aufrufen, die dann Anforderungen an den Hosteditor stellt, die der Hosteditor mit relevanter Information beantwortet. Die dabei erhaltene Information kann zum Beispiel Textcodes in den Endbereichen der aktuellen Auswahl umfassen, welche die Interpunktionsfunktion verwenden kann, um die Enden einer neuen Auswahl zu finden. Immer wenn der Hosteditor eine seiner Basis-Manipulationsoperationen abschließt, kann er eine Interpunktionsfunktion aufrufen, die bei modifizierten Textdaten eine richtige Sequenz von Operationen auf der Basis der durchgeführten Manipulationsoperationen und der Texttyp-Grenzen der manipulierten Auswahl bestimmen kann.
  • Dieser Aspekt basiert weiterhin auf der Erkenntnis eines fundamentalen Problems bei der Bestimmung einer richtigen Sequenz von Operationen. Die Auswahl- und Manipulationsoperationen des Hosteditors hängen herkömmlicherweise nicht davon ab, ob die Textdaten einem Text entsprechen, der eine korrekte Texttyp-Interpunktionsstruktur aufweist. Die Textcodes, die Interpunktionselemente wie Interpunktionszeichen, Leerzeichen und Großschreibung angeben, werden herkömmlicherweise wie andere Codes in der Sequenz der Textdaten behandelt, so daß der Hosteditor die Texttyp-Interpunktionsstruktur des durch diese Codes angegebenen Textes nicht erkennen kann. Der Hosteditor sieht keine Daten vor, welche die richtige Sequenz von Operationen direkt identifizieren.
  • Das Problem ist insbesondere wichtig beim Korrigieren der Texttyp-Interpunktionsstruktur, weil eine bestimmte Sequenz von Textcodes, die Interpunktionselemente angibt, in einigen Situationen korrekt und in anderen Situationen nicht korrekt sein kann, so daß ohne weitere Informationen nicht bestimmt werden kann, ob sie korrigiert werden muß. Weiterhin kann eine nicht korrekte Sequenz von Textcodes auf verschiedene Weise erzeugt werden, so daß eine Entscheidung über die Art und Weise der Korrektur weitere Informationen benötigt. Es ist deshalb erforderlich, weitere Information vom Hosteditor zu erhalten, um eine richtige Sequenz von Operationen in jeder dieser Situationen zu bestimmen.
  • Die vorliegende Erfindung löst dieses Problem mit Hilfe von Interpunktionsfunktionen, die bestimmte Merkmale der Texttyp-Interpunktionsstruktur einer Auswahl unter Verwendung einer Grammatik von Texttypen identifizieren kann, wobei die Daten zu diesen Elementen dann verwendet werden, um eine richtige Sequenz von Operationen zum Korrigieren der Texttyp-Interpunktionsstruktur zu bestimmen. In der vorliegenden Erfindung können die Inter punktionsfunktionen die Texttyp-Interpunktionsstruktur des Texts im Bereich beider Enden einer Auswahl auf der Basis einer Grammatik von Texttypen zu den Textcodes aus diesen Bereichen erschließen. Zum Beispiel kann eine Interpunktionsfunktion die Textcodes zu Tokens verarbeiten und dann Texttyp-Grenzen identifizieren, indem der Token-Strom mit einem vorbestimmten Satz von Token-Mustern verglichen wird, die aus der Grammatik der Texttypen erhalten werden. Durch das Identifizieren der Texttyp-Grenzen kann der Interpunktionssetzer bestimmen, wo die Endpunkte einer neuen Auswahl sein sollten, und andere Daten zu der neuen Auswahl erhalten, um eine folgende Funktion zum Bestimmen einer richtigen Sequenz von Operationen zum Korrigieren der Texttyp-Interpunktionsstruktur zu ermöglichen. Der Interpunktionssetzer kann diese Daten speichern und Daten für den Hosteditor vorsehen, welche Endpunkte der neuen Auswahl innerhalb der Textdatenstruktur definieren. Der Hosteditor stimmt seine Auswahl dann auf diese Endpunkte ab und fährt mit seinen herkömmlichen Operationen fort. Währenddessen behält der Interpunktionssetzer seine eigenen Daten zu der aktuellen Auswahl, einschließlich der Endpunkte, sowie zusätzliche Daten zu den Texttyp-Grenzen an den Enden der Auswahl.
  • Wenn eine richtige Sequenz von Operationen zum Vorsehen einer korrekten Texttyp-Interpunktionsstruktur identifiziert wurde, entsteht ein weiteres grundlegendes Problem: es ist erforderlich, diese Operation definierende und als Fix-Up-Daten bezeichnete Daten für den Hosteditor derart vorzusehen, daß keine wesentlichen Modifikationen des Hosteditors erforderlich sind.
  • Die vorliegende Erfindung löst dieses Problem auf der Basis der Erkenntnis, daß ein relativ kleiner Satz von Fix-Up-Daten verwendet werden kann, um eine Sequenz von Operationen zu definieren, die mit herkömmlichen Hosteditorfunktionen durchgeführt werden können. Der Hosteditor kann eine Datenstruktur vorsehen, in welche der Interpunktionssetzer die Fix-Up- Daten lädt. Der Hosteditor kann dann die Sequenz der Operationen auf der Basis der Fix- Up-Daten in der Datenstruktur durchführen. Die Fix-Up-Daten können zum Beispiel Daten, die einen Startpunkt innerhalb der Textdaten definieren, eine Anzahl von zu löschenden Textcodes in den Textdaten, eine Anzahl von einzufügenden Textcodes, eine Liste von einzufügenden Textcodes, eine Position in den Textdaten, an der die Großschreibung geändert werden soll, sowie die Art der Änderung der Großschreibung an dieser Position umfassen. Der Interpunktionssetzer kann diese Daten auf der Basis der zuvor erhaltenen Daten in Bezug auf die Auswahl und auch in Bezug darauf vorsehen, welche der Manipulationsoperationen durch den Hosteditor durchgeführt wurde. Obwohl die Anzahl der möglichen Sequenzen von Operationen groß ist, können ein oder mehrere Sätze von Fix-Up-Daten verwendet werden, um eine derartige Sequenz zu definieren.
  • Ein Vorteil dieser Technik liegt darin, daß sie Auswahloperationen vorsieht, die auf Texttypen operieren können und Auswahlendpunkte auf der Basis der Texttyp-Grenzen identifizieren können. Ein anderer Vorteil liegt darin, daß die Technik für Manipulationsoperationen in entweder dem Bewegen-Kopieren-Paradigma oder dem Ausschneiden-Kopieren-Einfügen- Paradigma eine automatische Korrektur von Interpunktionselementen im dem durch die Operation betroffenen Text vorsieht.
  • Ein weiterer Aspekt der vorliegenden Erfindung basiert auf der Erkenntnis eines weiteren Problems beim herkömmlichen Texteditieren. Herkömmlicherweise sind Texteditieroperationen auf Operationen der niedrigeren Ebene wie Bewegen, Kopieren und Löschen oder Ausschneiden, Kopieren und Einfügen begrenzt, die wie oben genannt typischerweise erfordern, daß der Benutzer eine Anzahl von Korrekturoperationen durchführt, um eine Editieroperation abzuschließen.
  • Dieser Aspekt basiert weiterhin auf der Erkenntnis, daß dieses Problem teilweise dadurch gelöst werden kann, daß Textmanipulationsoperationen einer höheren Ebene vorgesehen werden, die Textcodes an ausgewählten Texttyp-Grenzen innerhalb der Textdaten modifizieren. Dieser Operationen erfordern keine Korrekturoperationen und können Information zu einer mit Hilfe der oben beschriebenen Techniken erhaltenen Auswahl verwenden. Eine derartige Operation der höheren Ebene ändert den Texttyp eines Teils eines Textes. Dieser Teil kann eine Texteinheit sein, wobei in diesem Fall die Interpunktionselemente, einschließlich von Interpunktionszeichen, Leerzeichen und Großschreibung an den Grenzen der Texteinheit zu solchen geändert werden, die dem neuen Texttyp entsprechen. Der Teil kann auch ein Einfügepunkt an einer Texttyp-Grenze sein, wobei in diesem Fall die Interpunktionselemente an der Texttyp-Grenze zu solchen geändert werden, die einer Grenze dieses Texttyps entsprechen.
  • Dieser Aspekt basiert weiterhin auf der Erkenntnis, daß derartige Operationen der höheren Ebene durch einen Mechanismus wie den für die Operationen zum Korrigieren der Texttyp- Interpunktionsstruktur vorgesehen werden können. Wenn der Hosteditor eine Anforderung für eine Operation der höheren Ebene empfängt, dann ruft er eine Interpunktionsfunktion auf, um Fix-Up-Daten zu erhalten, die eine Sequenz von Operationen definieren, die der angeforderten Operation äquivalent sind. Wenn die Interpunktionsfunktion die Fix-Up-Daten aus gibt, führt der Hosteditor die Sequenz der Operationen durch, um die angeforderte Operation abzuschließen.
  • Die vorliegende Erfindung wird im folgenden ausführlicher mit Bezug auf die beigefügten Zeichnungen beschrieben. Es zeigen:
  • Fig. 1 ein Flußdiagramm mit parallelen Textrahmen, das die allgemeinen Schritte in einer Manipulationsoperation in Übereinstimmung mit der vorliegenden Erfindung zeigt,
  • Fig. 2 ein schematisches Blockdiagramm, das Komponenten eines Systems zeigt, das einen Hosteditor und einen Interpunktionssetzer in Übereinstimmung mit der vorliegenden Erfindung umfaßt,
  • Fig. 3 ein Flußdiagramm, das die allgemeinen Schritte in einer Auswahloperation zeigt, die durch das in Fig. 2 gezeigte System durchgeführt wird,
  • Fig. 4 ein Flußdiagramm, das die allgemeinen Schritte in einer Manipulationsoperation oder einer anderen Operation mit Fix-Up-Daten zeigt, die durch ein System wie das in Fig. 2 gezeigte durchgeführt wird,
  • Fig. 5 ein Flußdiagramm, das Schritte des Hosteditors zum Modifizieren einer Auswahl zeigt,
  • Fig. 6 ein Flußdiagramm, das Schritte des Hosteditors zum Durchführen einer Sequenz von durch Fix-Up-Daten definierten Operationen zeigt,
  • Fig. 7 ein Flußdiagramm, das Schritte zum Erhalten von Textcodes aus der Textdatenstruktur eines Hosteditors zeigt,
  • Fig. 8 ein Flußdiagramm, das Schritte zum Durchsuchen der Textdatenstruktur des Hosteditors nach einem Textcode zeigt,
  • Fig. 9 ein Flußdiagramm, das Schritte zum Scannen von Textcodes zeigt, um eine Token-Grenze zu finden,
  • Fig. 10 ein Flußdiagramm, das allgemeine Schritte in einer Interpunktion-Auswahloperation zeigt,
  • Fig. 11 eine schematische Darstellung einer Sequenz von Texttyp-Codes, die eine Texttyp-Grenze umfassen,
  • Fig. 12 eine Sequenz von schematischen Darstellungen von Textcodesequenzen, die eine Änderung des Texttyps der Texttyp-Grenzen an den Enden einer Texteinheitenauswahl zeigt, und
  • Fig. 13 eine Sequenz von schematischen Darstellungen von Textcodesequenzen, die eine Änderung des Texttyps einer Texttyp-Grenze zeigt, die einen Einfügepunkt umfaßt.
  • 1. Glossar
  • Im folgenden werden die Bedeutungen bestimmter Begriffe angegeben:
  • "Text" bezeichnet eine Anordnung von geschriebenen Wörtern, die gewöhnlich in einer Sequenz angeordnet sind. "Geschriebene Wörter" bezeichnen Wörter, die in der Form von diskreten Elementen wie Zeichen, Codes oder ähnlichem aufgezeichnet werden. In einer kontinuierlichen Form aufgezeichnete Wörter, wie eine aufgezeichnete kontinuierliche Rede sind deshalb keine geschriebenen Wörter. Ein Text kann also ein oder mehrere Wörter mit jeweils wenigstens einem diskreten Element umfassen.
  • "Natürlichsprachlicher Text" bezeichnet einen Text in einer natürlichen Sprache wie zum Beispiel Englisch.
  • Eine "Einheit eines Textes" oder eine "Texteinheit" ist eine Einheit, in die ein Text unterteilt werden kann.
  • Ein "Texttyp" ist eine Kategorie von Texteinheiten mit einer syntaktischen oder semantischen Bedeutung, aber ohne lexikalischer Bedeutung, wie ausführlicher in der Trollope-Anmeldung erläutert wird, die hier unter Bezugnahme eingeschlossen ist. Ein einzelnes Token oder eine Instanz eines Texttyps wird hier als "Texttyp-Einheit" bezeichnet, um sie von komplexeren Texteinheiten zu unterscheiden, die zum Beispiel eine Reihe von Texttyp-Einheiten umfassen.
  • Eine "Texttyp-Regel" ist eine Regel, deren Anwendbarkeit vom Texttyp abhängt. Wenn mit anderen Worten ein Text in Texttyp-Einheiten unterteilt wird, dann wird eine Texttyp-Regel auf diejenigen Einheiten, die Instanzen von bestimmten Texttypen sind, aber nicht auf Einheiten anderer Typen angewendet.
  • Eine "Grammatik von Texttypen" ist ein Satz von Texttyp-Regeln, bei dem jede Regel für einen bestimmten Texttyp die Texttypen von Texttyp-Einheiten angibt, in die eine Texttyp- Einheit des entsprechenden Texttyps unterteilt werden kann. Außerdem definiert eine "Grammatik von Texttypen" alle und nur die anwendbaren Unterteilungen der Texttyp- Einheiten.
  • Ein "Interpunktionselement" eines Textes ist ein Element, das auf ein oder mehrere Texttyp- Einheiten bezogen ist und von der syntaktischen oder semantischen Bedeutung der betreffenden Texttyp-Einheiten abhängt. Zum Beispiel kann ein Interpunktionselement eine Gruppierung von Texttyp-Einheiten, eine Verschachtelung einer Texttyp-Einheit in einer anderen, eine Trennung zwischen Texttyp-Einheiten, eine Begrenzung einer Texttyp-Einheit oder eine Hervorhebung oder andersartige Betonung einer Texttyp-Einheit angeben. Normalerweise im Englischen verwendete Interpunktionselemente umfassen nichtalphanumerische typographische Elemente wie Leerzeichen und Interpunktionszeichen einschließlich von Kommas, Punkten, Strichpunkten, Doppelpunkten, Gedankenstrichen, Anführungszeichen, Klammern, eckigen Klammern, Unterstreichungen usw., alphanumerische Merkmale wie Schriftschnitt und Font, sowie Formatierungsmerkmale wie Zeilenrücklauf, Tabulatoren, Zentrierungen und Einrückungen.
  • Eine "Interpunktionsstruktur" eines Textes ist eine Struktur, die Interpunktionselemente des Textes umfaßt. Ein gewöhnlich zum Ansehen oder Editieren präsentierter Text umfaßt Daten, die eine Interpunktionsstruktur angeben, wie etwa Zeichencodes, die Interpunktionszeichen, Leerzeichen oder Großschreibung angeben. Die Textdatenstruktur kann einem Text entsprechen, der eine nicht korrekte Interpunktionsstruktur aufweist, wobei der Text in diesem Fall eine falsche Interpunktion aufweist. Wie oben bemerkt, können Interpunktionsfehler in Fehler bei der Positionierung von Texttyp-Grenzen und in Fehler bei der Kombination von Interpunktionselementen an einer Texttyp-Grenze analysiert werden. Zum Beispiel gibt der unten angeführte Satz (1) einen Fehler bei der Positionierung der Grenze an, weil es in diesem besonderen Satz nicht richtig ist, eine Phrase nach dem Wort "dog" zu beenden. Der Satz (2) stellt einen Interpunktionselement-Fehler dar, weil es nicht richtig ist, ein Komma und ein Leerzeichen vor dem Punkt am Ende eines Satzes vorzusehen, auch wenn eine Phrase an dieser Grenze endet. Der Satz (3) stellt beide Fehlertypen in einem einzigen Satz dar, weil es nicht richtig ist, einen Satzteil nach dem Wort "dog" zu beenden, und weil es nicht richtig ist, ein Komma und ein Leerzeichen vor dem Strichpunkt am Ende eines Satzteils einzufügen, auch wenn eine Phrase an dieser Grenze endet.
  • (1) The dog, bit the man.
  • (2) The dog bit the man,.
  • (3) The dog,; bit the man.
  • Ein Fehler der zweiten Art, der in den Sätzen (2) und (3) dargestellt ist, wird hier als Fehler in der "Texttyp-Interpunktionsstruktur" bezeichnet, weil er durch das Anwenden von Texttyp- Regeln auf einen Text identifiziert werden kann. Ein Text ohne derartige Fehler wird als ein Text mit einer "korrekten Texttyp-Interpunktionsstruktur" bezeichnet. Die vorliegende Erfindung kann Texttyp-Interpunktionsfehler korrigieren. Wie durch Satz (1) dargestellt, kann ein Text eine korrekte Texttyp-Interpunktionsstruktur aufweisen und trotzdem falsch interpunktiert sein.
  • In einer Datenstruktur werden Daten als "Textdaten" bezeichnet, die einem natürlichsprachlichen Text entsprechen. Textdaten werden häufig unter Verwendung von Standarddruckcodes oder Standardanzeigecodes codiert, die Zeichencodes wie alphanumerische Codes oder Interpunktionscodes, Großschreibungscodes, Zeilenrücklaufcodes usw. umfassen, die hier alle als "Textcodes" bezeichnet werden. Textdaten können jedoch auf ganz verschiedene Art codiert werden. Zum Beispiel können Textdaten als eine Bitmap codiert werden.
  • In einer Datenstruktur, die aus Textcodes bestehende Textdaten umfaßt, bezeichnet der Begriff "Interpunktionscodes" Textcodes, die durch ein System verwendet werden, um Interpunktionselemente des durch die Textdaten wiedergegebenen natürlichsprachlichen Texts anzugeben. Interpunktionscodes umfassen typischerweise Textcodes, die Interpunktionszeichen, Leerzeichen und Großschreibung angeben.
  • Eine "Worteinheit" ist eine Sequenz von Textcodes, die eine lexikalische Bedeutung aufweist und die für die Zwecke eines bestimmten Systems nicht weiter in kleinere Sequenzen auf der Basis von Interpunktionscodes unterteilt werden kann. Eine Worteinheit ist also eine elementare lexikalische Einheit, wobei ein Textcode innerhalb einer Worteinheit hier als "Zeichencode" bezeichnet wird, obwohl es sich auch um einen Interpunktionscode handeln kann. Ein Interpunktionscode innerhalb einer Worteinheit kann ein Interpunktionselement angeben oder nicht. Ein Interpunktionscode, der einen großgeschriebenen Buchstaben am Beginn eines Satzes angibt, gibt ein Interpunktionselement an, während das bei einem Interpunktionscode, der einen großgeschriebenen Buchstaben am Anfang eines Eigennamen angibt, nicht der Fall ist.
  • Eine "Texttyp-Grenze" ist eine Sequenz von einem oder mehreren Interpunktionscodes, die zwischen Worteinheiten steht und einen bestimmten Texttyp in den Textdaten begrenzt, die einem Text mit einer korrekten Interpunktionsstruktur entsprechen. Eine Texttyp-Grenze wird hier manchmal je nach dem Texttyp bezeichnet, zum Beispiel als "Wortgrenze", "Phrasengrenze", "Satzgrenze" usw.
  • Eine "natürliche Grenze" tritt an jedem Ende jeder Worteinheit in den Textdaten auf. Eine natürliche Grenze kann eine Texttyp-Grenze umfassen oder kann keine Interpunktionscodes umfassen. Eine natürliche Grenze mit keinen Interpunktionscodes kann trotzdem einen bestimmten Texttyp begrenzen, wobei derartige natürliche Grenzen hier manchmal als leere natürliche Grenzen eines bestimmten Typs bezeichnet werden. Zum Beispiel treten leere natürliche Grenzen des Absatztyps typischerweise am Beginn und am Ende eines Dokuments auf.
  • Eine "Manipulationsoperation" auf Textdaten, die einem Text entsprechen, ist eine Operation, welche die Textdaten modifiziert, so daß sie einem modifizierten Text entsprechen. Eine Manipulationsoperation wird typischerweise in den Termen eines Arguments, das Teil des Textes ist, und einer Operation auf diesem Argument wie Bewegen, Kopieren, Ausschneiden, Einfügen oder Löschen spezifiziert. Eine "Auswahloperation" ist eine Operation, die den Teil des Textes betrifft, der dann als Argument für eine Manipulationsoperation dient.
  • "Fix-Up-Daten" sind Daten, die eine Sequenz von einer oder mehreren Manipulationsoperationen definieren, welche Textdaten zu einem Text modifizieren, so daß die modifizierten Textdaten einem modifizierten Text entsprechen, der eine korrekte Texttyp-Interpunktionsstruktur aufweist. Die durch die Fix-Up-Daten definierten Manipulationsoperationen können auf Textdaten durchgeführt werden, welche einem Text entsprechen, der eine nicht korrekte Texttyp-Interpunktionsstruktur aufweist, oder Textdaten, welche einem Text entsprechen, der eine korrekte Texttyp-Interpunktionsstruktur aufweist - in beiden Fällen resultiert eine korrekte Texttyp-Interpunktionsstruktur.
  • 2. Allgemeine Merkmale
  • Fig. 1 bis 4 stellen einige allgemeine Merkmale der vorliegenden Erfindung dar. Fig. 1 ist ein Flußdiagramm, das allgemeine Schritte zum Manipulieren von Text und zum Vorsehen von Fix-Up-Daten zeigt. Fig. 2 zeigt die Komponenten eines Systems, das einen Hosteditor und einen Interpunktionssetzer zum Implementieren der Schritte von Fig. 1 umfaßt. Fig. 3 zeigt allgemeine Schritte in einer Auswahloperation unter Verwendung des Systems von Fig. 2. Fig. 4 zeigt allgemeine Schritte in einer Manipulationsoperation oder einer anderen Opera tion wiederum unter Verwendung des Systems von Fig. 2, die das Vorsehen von Fix-Up- Daten umfaßt.
  • Die Schritte von Fig. 1 beginnen in Block 10, wenn ein Datenprozessor eine Anforderung für eine Manipulationsopeation empfängt. Wie im Textrahmen 12 gezeigt, umfaßt diese Anforderung eine primäre Auswahl, die durch den schattierten Bereich 14 angegeben ist, das Drücken einer Kopiertaste 16, und eine sekundäre Auswahl einer Position, die durch den Zeiger 18 angegeben wird. Der Textrahmen 12 stellt also das Bewegen-Kopieren-Paradigma der Textmanipulation dar, obwohl die vorliegende Erfindung wie oben erläutert auch auf das Ausschneiden-Kopieren-Einfügen-Paradigma angewendet werden kann.
  • Nach Empfang der Anforderung in Block 10 manipuliert der Datenprozessor in Block 20 die Textdaten, die dem Text im Textrahmen 12 entsprechen, um manipulierte Textdaten zu erhalten, die dem im Textrahmen 22 gezeigten Text entsprechen. Die Wörter "To be" und die Leerzeichen nach jedem der Wörter, die der primären Auswahl im schattierten Bereich 14 entsprechen, wurden zu der durch den Zeiger 18 angegebenen Position kopiert und befinden sich jetzt im schattierten Bereich 24. Die Manipulationsoperation resultierte in drei Fehlern bezüglich der Großschreibung und der Leerzeichen, so daß die manipulierten Textdaten im Textrahmen 22 eine nicht korrekte Texttyp-Interpunktionsstruktur aufweisen.
  • Schließlich sieht der Datenprozessor in Block 30 Fix-Up-Daten vor, die eine Sequenz von einer oder mehreren Operationen zum weiteren Manipulieren der Textdaten definieren, so daß der entsprechende Text eine korrekte Texttyp-Interpunktionsstruktur aufweist. Diese Sequenz wird dann durchgeführt und resultiert in modifizierten Textdaten, die den im Textrahmen 32 gezeigten Text entsprechen.
  • Fig. 1 stellt dar, wie die vorliegende Erfindung die Textmanipulation effizienter machen kann. Der Benutzer spart den Aufwand, die erforderlichen Operationen zum Korrigieren jeder der Fehler bezüglich der Großschreibung und der Leerzeichen zu anzufordern.
  • Fig. 1 deutet auch an, wie Fix-Up-Daten erhalten werden können. Ein Aspekt der vorliegenden Erfindung basiert wie weiter oben beschrieben auf der Erkenntnis, daß eine richtige Operation beinahe immer aus den betroffenen natürlichen Grenzen - wenn vorhanden- sowie aus den anwendbaren Texttypen erschlossen werden kann. Zum Beispiel weist der Beginn des schattierten Bereichs 24 im Textrahmen 22 eine leere natürliche Grenze am Ende einer Worteinheit weiter links und eine leere natürliche Grenze am Beginn einer Worteinheit weiter rechts auf, was zu dem Ergebnis führt, daß ein Leerzeichen eingefügt werden sollte und daß der folgende Großbuchstabe durch einen Kleinbuchstaben ersetzt werden sollte. Entsprechend weist das Ende des schattierten Bereichs 24 eine natürliche Grenze des Typs Wort weiter links und eine natürliche Grenze des Typs Satz weiter links auf, was zu dem Ergebnis führt, daß das Leerzeichen und der Punkt durch einen Punkt ersetzt werden sollten. Sobald Fix-Up-Daten vorgesehen sind, welche diese Operationen definieren, können die Textdaten automatisch geändert werden, um einen Text mit einer korrekten Texttyp-Interpunktionsstruktur vorzusehen, wie im Textrahmen 32 gezeigt.
  • Fig. 2 zeigt, wie die in Fig. 1 gezeigten Schritte mit einem herkömmlichen und kommerziell verbreiteten Texteditor implementiert werden können. Das System 50 in Fig. 2 umfaßt einen Prozessor 52, der Eingabesignale von einer Tastatur/Maus 54 oder einer anderen geeigneten Eingabeeinrichtung empfängt und eine Ausgabe für die Wiedergabe durch die Anzeige 56 vorsieht. Der Prozessor 52 führt Befehle aus einem Programmspeicher 60 aus, der einen Hosteditor 52 und einen Zeichensetzer 64 umfaßt. Der Hosteditor 62 und der Zeichensetzer 64 umfassen jeweils einen Satz von Routinen und können wegen der unterschiedlichen von ihnen vorgesehenen Rollen jeweils als einzelne Einheiten behandelt werden. Beim Ausführen des Hosteditors 62 und des Interpunktionssetzers 64 greift der Prozessor 52 auch auf verschiedene Datenstrukturen im Datenspeicher 70 zu, von denen einige in Fig. 2 gezeigt sind.
  • Beim Ausführen des Hosteditors 62 greift der Prozessor 52 auf die Textdatenstruktur 72 zu, die wie oben beschrieben eine Sequenz von Textcodes enthält. Der Prozessor 52 kann auch auf die Host-Auswahldatenstruktur 74 zugreifen, die zum Beispiel ein Ausschneidepuffer oder ein anderer temporärer Speicher zum Speichern von einer oder mehreren Auswahlen und anderen Auswahldaten sein kann. Für die vorliegende Erfindung sind die detaillierten Eigenschaften der Textdatenstruktur 72 und der Host-Auswahldatenstruktur 74 sowie die Details bezüglich der Handhabung derselben durch den Texteditor 62 nicht wichtig, solange der Hosteditor 62 relevante Daten vorsehen kann, damit der Interpunktionssetzer 64 seine Rolle durchführen kann. Zum Beispiel kann es wie weiter unten beschrieben ausreichen, wenn der Hosteditor 62 Codes von der Textdatenstruktur 72 und Pufferpositionen innerhalb der Host-Auswahldatenstruktur 74 vorsehen kann.
  • Der Datenspeicher 70 umfaßt auch die Auswahldatenstruktur 76 des Interpunktionssetzers, in welcher der Interpunktionssetzer 64 Auswahldaten speichert. Wie oben bemerkt, können diese Daten zum Beispiel Information zu einer Texttyp-Grenze im Bereich um ein Ende einer Auswahl herum umfassen.
  • Die Muster 78 sind ein Satz von Mustern, welcher der Interpunktionssetzer 64 verwendet, um eine Texttyp-Grenze zu identifizieren. Der Interpunktionssetzer 64 sieht Fix-Up-Daten vor, indem er die Fix-Up-Datenstruktur 80 lädt, von welcher der Hosteditor 62 die Daten abruft. Nach dem Lokalisieren der Endpunkte einer Auswahl, sieht der Interpunktionssetzer 64 Daten vor, welche die Endpunkte definieren, indem er die Endpunkte-Datenstruktur 82 lädt, aus welcher der Hosteditor 62 entsprechende die Daten lädt. Zusätzliche Datenstrukturen können entsprechend vorgesehen für eine zusätzliche Kommunikation zwischen dem Hosteditor 62 und dem Interpunktionssetzer 64 vorgesehen werden.
  • Fig. 3 zeigt allgemeine Schritte, die durch das System 50 beim Handhaben einer Benutzeranforderung für eine Auswahloperation durchgeführt werden können. Die Anforderung kann zum Beispiel ein Mausereignis wie ein Tastenklick sein. In Antwort auf die Benutzeranforderung führt der Prozessor 52 eine entsprechende Routine vom Hosteditor 62 durch, um die Benutzeranforderung in Block 100 zu empfangen. Wie in Block 100 gezeigt, stellt Fig. 3 die Antwort auf eine Anforderung bezüglich des Texttyps der aktuellen Auswahl dar; Auswahlanforderungen, die sich nicht auf einen Texttyp beziehen, können den Schritten von Fig. 3 nicht folgen, wenn der Hosteditor 62 diese ohne das Aufrufen des Interpunktionssetzers 64 handhaben kann.
  • Der Hosteditor 62 ruft den Interpunktionssetzer 64 in Block 102 auf, wobei Daten vorgesehen werden, die für die in Block 100 empfangene Anforderung relevant sind. Diese Daten könnten zum Beispiel eine aktuelle Zeigerposition und eine Angabe dazu umfassen, welche Maustaste mit dem Zeiger in dieser Position geklickt wurde. Sie können auch eine Kennung für die Endpunkt-Datenstruktur 82 enthalten. Der Hosteditor 62 braucht keine Schritte bezüglich seiner eigenen Auswahldatenstruktur 74 durchzuführen, bevor er den Interpunktionssetzer 64 aufruft, weil er sich auf den Interpunktionssetzer 64 verlassen kann, um eine richtig modifizierte Auswahl vorzusehen.
  • Wenn der Interpunktionssetzer 64 durch den Hosteditor 62 aufgerufen wird, verzweigt sich die Schrittabfolge in Abhängigkeit davon, ob zusätzliche Textcodes aus der Textdatenstruktur 72 erforderlich sind, um die neuen Endpunktpositionen der Auswahl zu bestimmen. Wenn nicht, wird die aktuelle Auswahl nicht durch die Anforderung verändert, so daß der Interpunktionssetzer 64 in Block 106 nach dem Ausführungen von anderen entsprechenden Schritte abschließt.
  • Wenn Daten zu zusätzlichen Textcodes erforderlich sind, dann fordert der Interpunktionssetzer 64 in Block 110 Daten an, wobei er angibt, an welchem Ende der aktuellen Auswahl er zusätzliche Codes braucht. In Antwort darauf sieht der Hosteditor 62 die zusätzlichen Codes in Block 112 vor. Der Interpunktionssetzer 64 bestimmt in Block 114, ob die zusätzlichen Codes eine neue Endpunktposition umfassen, was unter Verwendung der Muster 78 vorgenommen werden kann. Wenn nicht, kehrt er zurück, um in Block 110 zusätzliche Codes anzufordern. Wenn er einen Endpunkt gefunden hat und Codes zum Finden des anderen benötigt, kehrt er ebenfalls zu Block 110 zurück.
  • Wenn der Interpunktionssetzer 64 Codes empfangen hat, welche die neuen Endpunktpositionen der Auswahl enthalten, dann ändert er in Block 116 die Daten in seiner Auswahldatenstruktur 76 entsprechend. Dann lädt er in Block 118 Daten in die Endpunkt-Datenstruktur 82, um die identifizierten Endpunkte für den Hosteditor 62 bereitzustellen. Wenn der Interpunktionssetzer 64 die Steuerung an den Hosteditor 62 zurückgibt, modifiziert der Host in Block 120 seine Auswahl-Datenstruktur 74 in Übereinstimmung mit den Endpunkten in der Endpunkt-Datenstruktur 82. Dann zeigt der Hosteditor 62 in Block 122 die neue Auswahl entsprechend an, zum Beispiel in Negativschrift.
  • Fig. 4 zeigt allgemeine Schritte, die durch das System 50 zum Handhaben einer Benutzeranforderung für eine Manipulationsoperation oder eine andere Operation, welche die Fix-Up- Daten-Technik verwendet, durchgeführt werden können. In Block 140 empfängt der Hosteditor 62 die Anforderung, die wie oben beschrieben ein Argument und eine Operation auf dem Argument spezifizieren kann. Die Antwort des Hosteditors 62 auf die Anforderung hängt davon ab, welche Operation angefordert wird, was durch die Verzweigung in Block 142 angegeben wird. Wenn die Anforderung eine Kopieroperation im Ausschneiden-Kopieren- Einfügen-Paradigma (c-c-p) anfordert, kann der Hosteditor 62 seine eigene Kopieroperation durchführen und den Interpunktionssetzer 64 in Block 144 aufrufen, um die Daten in seiner Auswahldatenstruktur 76 in eine Ausschneidepuffer-Datenstruktur (nicht gezeigt) zu kopieren. Diese relativ einfache Prozedur reicht aus, weil die Kopieroperation keine Fix-Up-Daten- Technik erfordert.
  • Wenn die Anforderung eine Operation anfordert, welch die Fix-Up-Daten-Technik verwendet, wie etwa das Löschen, Ausschneiden oder Einfügen im Ausschneiden-Kopieren-Paradigma, das Kopieren oder Bewegen im Kopieren-Bewegen-Paradigma oder eine andere Operation wie das weiter unten beschriebene Ändern des Texttyps, dann folgt eine kompliziertere Prozedur. In Block 146 manipuliert der Hosteditor 62 die Textdatenstruktur 72 in Übereinstimmung mit seiner herkömmlichen Operation, wenn geeignet. Dann ruft der Hosteditor 62 in Block 146 den Interpunktionssetzer 64 auf, wobei relevante Daten vorgesehen werden, die etwa die in Block 140 angeforderte Operation und eine Kennung für die Fix-Up-Datenstruktur 80 angeben. In Block 150 erhält der Interpunktionssetzer 64 Fix-Up-Daten, die eine Sequenz von Operationen definieren, welche zu einer korrekten Texttyp-Interpunktionsstruktur führen. Dann lädt er in Block 152 die Fix-Up-Datenstruktur 80, bevor er zum Hosteditor 62 zurückgibt. Der Hosteditor 62 führt die Sequenz von Operationen in Block 154 in Übereinstimmung mit den Daten in der Fix-Up-Datenstruktur 80 durch und zeigt dann in Block 156 den Fix-Up- Text an.
  • Fig. 4 stellt nicht nur dar, wie die herkömmlichen Manipulationsoperationen eines Editors erweitert werden können, um Fix-Up-Daten vorzusehen, sondern auch, wie ein herkömmlicher Editor erweitert werden kann, um Operationen der höheren Ebene wie etwa das Ändern des Texttyps einer Teils eines Textes vorzusehen. Um eine Operation auf einer höheren Ebene vorzusehen, wird der Hosteditor 62 derart modifiziert, daß er eine Anforderung für eine Operation der höheren Ebene identifizieren kann, so daß er bei Empfang einer Anforderung für die Operation der höheren Ebene in Block 140 einen entsprechenden Aufruf an den Interpunktionssetzer 64 in Block 148 vornimmt. Der Interpunktionssetzer 64 erhält dann in Block 150 Fix-Up-Daten, welche eine Sequenz von Operationen bestimmen, die effektiv ist, um die Operation der höheren Ebene durchzuführen, wobei die Schritte wie in Fig. 4 gezeigt fortfahren.
  • 3. Eine Implementierung
  • Eine Implementierung der vorliegenden Erfindung in der Programmiersprache C kann zum Beispiel auf einer Macintosh-Workstation laufen, wobei ein Satz von Routinen verwendet wird, der als "TIAB" bezeichnet wird, wobei TIAB ein Akronym ist, das für "Trollope in a box" steht.
  • Im folgenden wird die Schnittstelle zwischen dem Hosteditor und dem TIAB betrachtet, welche die Aufrufe des Hosteditors an den TIAB, die Aufrufe von TIAB an den Hosteditor sowie die Datenstrukturen umfaßt, welche durch den Hosteditor und den TIAB verwendet werden, um Daten untereinander auszutauschen. Dann werden die internen Operationen von TIAB untersucht, einschließlich von TIAB-Aufrufen für TIAB-Funktionen, welche Texttyp- Grenzen identifizieren und Fix-Up-Daten vorsehen.
  • A. Host-TIAB-Schnittstelle
  • Die Schnittstelle zwischen dem Hosteditor und dem TIAB kann herkömmlicherweise in zwei Teile unterteilt werden. Ein Teil wird als Hosteditor-Schnittstelle bezeichnet und ist die Schnittstelle, über welche der Hosteditor in Antwort auf eine Anforderung vom Benutzer den TIAB mit relevanten Daten aufruft und über welche der TIAB in Antwort auf den Aufruf Daten an den Hosteditor zurückgibt. Ein anderer Teil wird als TIAB-Schnittstelle bezeichnet und ist die Schnittstelle, über welche der TIAB den Hosteditor aufruft, um Daten zu erhalten, welche er benötigt, um eine Texttyp-Grenze zu identifizieren, und über welche der Hosteditor die angeforderten Daten bereitstellt.
  • (1) Aufrufe des Hosteditors an TIAB
  • Der TIAB umfaßt eine Anzahl von Funktionen, die durch einen Hosteditor aufgerufen werden können. Diese Funktionen können in einer geeigneten Reihenfolge aufgerufen werden, um Editieroperationen auf der Basis der Interpunktionsstruktur vorzusehen. Der Hosteditor ruft typischerweise eine TIAB-Funktion auf, um Daten zu erhalten, welche eine Auswahloperation betreffen, oder um Fix-Up-Daten zu erhalten, welch eine Sequenz von Operationen definieren, die auf eine Manipulationsoperation folgen sollten oder die eine Operation einer höheren Ebene implementieren.
  • (A) Aufrufe für Auswahloperationen
  • Eine Anzahl von TIAB-Funktionen kann bezüglich von Auswahloperationen aufgerufen werden. Fig. 5 zeigt allgemeine Schritte, die durchgeführt werden, wenn der Benutzer eine Auswahloperation anfordert, wobei die Schritte mit den Operationen eines Hosts wie oben mit Bezug auf Fig. 3 beschrieben übereinstimmen. Fig. 5 zeigt jedoch nicht alle Schritte, die durch den Hosteditor durchgeführt werden, um zu bestimmen, daß der Benutzer eine Auswahloperation angefordert hat, weil jeder Hosteditor seine eigenen Techniken zum Empfangen einer Benutzeranforderung und zum Bestimmen der angeforderten Operation hat. Ein herkömmlicher Editor kann leicht modifiziert werden, um einen Teilsatz seiner Benutzeranforderungen als Anforderungen für Auswahloperationen der vom TIAB verfügbaren Typen zu interpretieren.
  • Die Sequenz in Fig. 5 beginnt in Block 200 mit dem Empfang der Anforderung vom Benutzer. Dieser Schritt umfaßt die Operationen, mit denen der Hosteditor bestimmt, ob die angeforderte Operation eine Auswahloperation ist, was die Bestimmung umfassen kann, welche der verfügbaren Auswahloperationen angefordert wird. Der Hosteditor verzweigt dann wie in Block 210 gezeigt explizit oder implizit zwischen zwei Typen von Auswahloperationen. Ein Typ von Auswahloperation umfaßt das Modifizieren einer Auswahl, die eine Texteinheit ist, während die andere das Ändern einer Auswahl umfaßt, die ein Einfügepunkt ist. Wenn die Operation einen Einfügepunkt ändert, ohne eine Texteinheit-Auswahl zu ändern, kann die Interpunktionsstruktur nicht betroffen sein, so daß die Hilfe des TIAB zum Bestimmen der Endpunkte der neuen Auswahl nicht erforderlich ist. Wenn die Operation eine Texteinheit- Auswahl ändert, dann wird der TIAB aufgerufen, um entsprechende Endpunkte für die Auswahl auf der Basis der Texttyp-Grenzen zu bestimmen.
  • Für eine Operation, welche einen Einfügepunkt ändert, führt der Hosteditor in Block 212 Schritte durch, um den neuen Einfügepunkt zu bestimmen, wobei typischerweise der TIAB nicht aufgerufen wird. Dann ruft der Hosteditor die TIAB-Funktion setSeln auf, wobei relevante Daten vorgesehen werden, wie etwa Daten, die auf der Beschreibung des neuen Einfügepunktes basieren. Die Funktion setSeln lädt diese Daten in die Auswahldatenstruktur des TIAB, eine Datenstruktur des Typ TiabSeln. Wenn setSeln zurückgibt, zeigt der Hosteditor den Text in Block 216 mit dem neuen Einfügepunkt an.
  • Für eine Operation, welche eine Texteinheit-Auswahl ändert, ruft der Hosteditor eine entsprechende TIAB-Funktion auf, um die Endpunkte der neuen Auswahl in Block 220 zu bestimmen. Deshalb brauchen die Auswahloperationen, welche Texteinheiten betreffen, nicht auf herkömmlichen Auswahloperationen des Hosteditors basieren oder durch dieselben beschränkt werden, sondern können in einer Weise definiert werden, welche das Durchführen derselben durch den TIAB erleichtert. In der Implementierung können mehrere unterschiedliche Typen von Auswahloperationen, welche Texteinheiten betreffen, durch die TIAB- Funktionen durchgeführt werden, einschließlich von extendSelnKeys, extendSeln-Drag, decrType und incrType.
  • Die TIAB-Funktion extendSelnKeys ändert die aktuelle Auswahl, um eine Instanz des Texttyps der aktuellen Auswahl links oder rechts von der aktuellen Auswahl ein- oder auszuschließen, wobei der aktuelle Texttyp unverändert bleibt. Deshalb wird extendSelnKeys mit Daten aufgerufen, welche angeben, ob die Änderung links oder recht von der aktuellen Aus wahl und in welcher Richtung vorgenommen werden soll. Sie sollte in Antwort auf eine speziell definierte Benutzeranforderung aufgerufen werden.
  • Die TIAB-Funktion extendSelnDrag erweitert die aktuelle Auswahl, um eine Instanz des Texttyps der aktuellen Auswahl zu umfassen, die eine aktuelle Zeichenposition im Text enthält, wie etwa die durch die aktuelle Mausposition erhaltene, sowie andre Instanzen dieses Texttyps, die zwischen der aktuellen Auswahl und der Instanz liegen. Die Funktion extendSelnDrag kann aufgerufen werden, wenn der Benutzer eine herkömmliche Mausbasierende Anpassungsfunktion anfordert, indem er zum Beispiel den Zeiger von der aktuellen Auswahl zu benachbarten Texteinheiten zieht, während er eine Maustaste drück oder eine bestimmte Maustaste klickt, um die Auswahl anzupassen. Ein Aufruf von extendSelnDrag, der aus dem Ziehen des Zeigers resultiert, umfaßt zusätzlich zu der aktuellen Mausposition Daten, welche einen Ankerpunkt im Text angeben, wobei die Auswahl in diesem Fall vom Ankerpunkt entweder nach vorne oder nach hinten zu der aktuellen Mausposition erweitert wird.
  • Die TIAB-Funktion incrType ändert den Texttyp der aktuellen Auswahl zum nächsthöheren Texttyp und kann bei Bedarf eines oder beide der Enden der aktuellen Auswahl erweitern, um zusätzliche Textcodes zu umfassen, die erforderlich sind, um die nächsten Texttyp- Grenzen des neuen Texttyps zu erreichen. Es ist richtig, incrType in Antwort auf mehrere Mausklicks mit dem Zeiger in derselben Position aufzurufen. Die TIAB-Funktion decrType dagegen ändert den Texttyp der aktuellen Auswahl auf den nächsttieferen Texttyp und kann bei Bedarf Textcodes vom rechten Ende der aktuellen Auswahl fallenlassen, um eine Texttyp-Grenze des neuen Texttyps zu erreichen.
  • Beim Aufrufen einer dieser Funktionen umfaßt der Hosteditor einen Zeiger auf eine Datenstruktur, um eine Beschreibung der neuen Auswahl auszugeben, wie etwa eine Datenstruktur des Typs TextRegion. Die Beschreibung umfaßt die Endpunkte der neuen Auswahl, zum Beispiel einen Relativzeiger und eine Länge. Jede TIAB-Funktion gibt dann in Block 222 eine Beschreibung der neuen Auswahl in dieser Datenstruktur aus. Der Hosteditor lädt dann in Block 224 diese Daten in seine Auswahldatenstruktur und zeigt die neue Auswahl an.
  • Die Hosteditor-Schnittstelle kann also TIAB-Funktionen aufrufen, um Endpunkte einer neuen Texteinheit-Auswahl zu erhalten:
  • (B) Aufrufe für Fix-Up-Daten
  • Der Hosteditor kann auch eine TIAB-Funktion als Teil der Antwort auf eine Anforderung für eine Operation aufrufen, die Fix-Up-Daten erfordert, etwa für eine der Manipulationsoperationen. Wie oben mit Bezug auf Fig. 4 erläutert, unterscheidet sich die Kopieroperation in dem Ausschneiden-Kopieren-Einfügen-Paradigma von den anderen Manipulationsoperationen, weil sie nicht erfordert, daß TIAB Fix-Up-Daten vorsieht, so daß die einzig erforderliche TIAB-Funktion darin besteht, die Auswahldaten des TIAB mit Hilfe eines Aufrufs von copySeln in seine Ausschneidepufferdaten zu kopieren. Für andere Manipulationsoperationen ruft der Hosteditor jedoch eine TIAB-Funktion auf, um Fix-Up-Daten vorzusehen, wonach der Hosteditor die durch die Fix-Up-Daten definierte Sequenz der Operationen durchführen kann.
  • Der Teil der Host-Schnittstele, der TIAB-Funktionen aufruft, um Fix-Up-Daten vorzusehen, kann derart strukturiert sein, daß der Hosteditor zuerst seine eigene entsprechende Operation wie etwa eine Manipulationsoperation durchführt. Dann löscht der Hosteditor die Token- und Zeichencaches des TIAB durch einen Aufruf der Funktion tiabFlushCache, die immer dann erforderlich ist, wenn der Host seinen Textpuffer ändert, weil die Caches des TIAB nicht mehr gültig sind. Zu diesem Zeitpunkt ruft der Hosteditor die entsprechende TIAB- Funktion auf, um Fix-Up-Daten vorzusehen, die eine Sequenz von Operationen für eine Position in den Textdaten oder Sequenzen von Operationen für beide Enden einer Texteinheit definieren.
  • Die Implementierung sieht mehrere Funktionen vor, die Fix-Up-Daten vorsehen, einschließlich von cutSeln für eine Ausschneideoperation im Ausschneiden-Kopieren-Einfügen-Paradigma, pasteSeln für eine Einfügeoperation, deleteSeln für eine Löschoperation, change- Category zum Ändern des Texttyps einer Auswahl, toggleCapitalization zum Wechseln der Großschreibung, sowie addBrackets und removeBrackets jeweils zum Hinzufügen und zum Entfernen von Klammern. Wenn eine dieser TIAB-Funktionen Fix-Up-Daten ausgibt, führt der Hosteditor die durch die Fix-Up-Daten definierte Sequenz der Operationen durch und kann mit entsprechenden Aufrufen für TIAB-Funktionen wie tiabFlushCache, initFixupsetlpt und geSeln abschließen.
  • Fig. 6 zeigt die allgemeine Schritte, die durch einen herkömmlichen Hosteditor nach dem Empfangen von durch eine TIAB-Funktion ausgegebenen Fix-Up-Daten durchgeführt werden können. Diese Schritte können alternativ als Teil von TIAB implementiert werden, wobei sie aber von den zugrundeliegenden im Hosteditor verfügbaren Funktionen abhängig sind, so daß durch das Einschließen derselben in TIAB ein für den Hosteditor spezialisiertes TIAB geschaffen wird. Die Datenstruktur RegionFixup wird verwendet, um in den Schritten von Fig. 6 verwendete Daten vorzusehen. Außerdem umfaßt RegionFixup einige Daten, welche es dem Hosteditor erlauben, eine durch Fix-Up-Daten definierte Sequenz von Operationen rückgängig zu machen. Allgemein kann RegionFixup andere Daten umfassen, welche es dem Hosteditor erlauben, andere entsprechende Funktionen durchzuführen, wobei aber die nach der Definition in RegionFixup enthaltenen Daten ausreichen, um eine Basissequenz von Operationen zu definieren, wobei Instanzen derselben kombiniert werden können, um jede erforderliche Modifikation eines Textes zu erzeugen. Die Basissequenz ist in Fig. 6 dargestellt.
  • Die Sequenz von Fig. 6 beginnt in Block 250 mit dem Empfangen der Fix-Up-Daten in RegionFixup. Die TIAB-Funktion, welche die Fix-Up-Daten vorsieht, kann eine Kennung wie etwa einen Zeiger, für eine Instanz von RegionsFixup ausgeben, welche die Fix-Up-Daten enthält. Die Hosteditor-Routine, welche die TIAB-Funktion aufgerufen hat, kann dann diese Kennung in einem Aufruf einer anderen Hosteditor-Funktion zum Durchführen der Schritte in Fig. 6 einschließen.
  • Der Text von Block 252 bestimmt, ob die Feld deletelength einen Wert größer als null enthält, der angibt, daß ein oder mehrere Zeichen gelöscht werden sollen. Wenn ja, wählt der Schritt in Block 254 eine Sequenz von Codes aus den Textdaten des Feldes deletelength auf, wobei mit dem Offset begonnen wird. Der Schritt in Block 256 ruft tiab-FlushCache auf. Der Schritt in Block 258 löscht dann die in Block 254 gemachte Auswahl.
  • Der Test in Block 260 bestimmt als nächstes, ob das Feld insertlength einen Wert größer als null enthält, der angibt, daß ein oder mehrere Zeichen eingefügt werden sollen. Wenn ja, dann wählt der Schritt in Block 262 den Positionsoffset auf, um den Einfügepunkt zu bestimmen. Der Schritt in Block 264 ruft tiabFlushCache auf. Der Schritt in Block 266 fügt dann die Codes in das Feld insertchars aus der in Block 262 gemachten Auswahl an der Position Offset + insertlength ein.
  • Der Test in Block 270 bestimmt, ob das Feld newoffset einen Wert kleiner als null enthält, der angibt, daß der Einfügepunkt ans Ende der eingefügten Codes - wenn vorhanden - gehen soll. Wenn ja, dann lädt der Schritt in Block 171 die Positionsoffset + insertlength in das Feld newoffset. Alternativ dazu kann TIAB den korrekten Wert von newoffset vorsehen.
  • Der Text in Block 272 bestimmt, ob das Feld capchar einen Wert gleich null enthält, der angibt, daß die Großschreibung nicht geändert werden muß. Wenn chapchar kleiner als null ist, muß ein Zeichen zur Kleinschreibung gewechselt werden; wenn chapchar größer als null ist, muß ein Zeichen zur Großschreibung gewechselt werden. Der Schritt in Block 276 wählt den Textcode an der durch capoffset angegebenen Position aus und löscht denselben, dann fügt der Schritt in Block 278 bei capoffset einen Textcode mit der richtigen Großschreibung ein. Ein alternativer Ansatz für die Großschreibung besteht im wie oben beschriebenen Durchführen eines Löschens und eines Einfügens.
  • Schließlich setzt der Hosteditor seine Auswahl an die durch newoffset angegebene Position. Zu diesem Zeitpunkt kann der Hosteditor weitere Operationen durchführen, bevor er die angeforderte Operation wie oben beschrieben abschließt. Diese weiteren Operationen können das Aufrufen von setSeln umfassen, so daß TIAB die aktuelle Auswahl des Hosts verfolgt.
  • Obwohl die Fix-Up-Daten eine Sequenz von Operationen definieren, die in einer korrekten Texttyp-Interpunktionsstruktur resultieren, kann der Benutzer das Ergebnis nicht gut finden. Der Hosteditor kann deshalb dem Benutzer die Auswahl einer Operation zum Rückgängigmachen einer Sequenz von Operationen erlauben, welche in der in Fig. 6 gezeigten Weise vorgenommen wurden. Das Rückgängigmachen der Sequenz von Operationen umfaßt das Zurückwechseln der Großschreibung, das Löschen der eingefügten Zeichen und das Einfügen der gelöschten Zeichen, wobei dabei die Textdaten in den Zustand vor dem Erhalten der Fix-Up-Daten zurückversetzt werden. Um dies zu ermöglichen, umfaßt Region- Fixup die Felder redochars und nRedochars zum Speichern der nötigen Daten.
  • Dies erlaubt auch einen Zwei-Phasen-Ansatz für bestimmte Anforderungen für Manipulationsoperationen. Zum Beispiel kann in dem Ausschneiden-Kopieren-Löschen-Paradigma ein Löschen durch das Löschen und Überschreiben oder durch das Löschen und Bewegen des Einfügepunktes zu einer anderen Position vorgenommen werden. Die Fix-Up-Daten in diesen zwei Optionen können unterschiedlich sein, weil die Modifikationen unterschiedlich sind. Deshalb kann der Hosteditor zu Beginn eine Löschanforderung behandeln, als ob diese eine von diesen zwei Optionen wäre, wobei er, wenn sie sich als die andere Option herausstellt, die durchgeführte Sequenz von Operationen löschen und dann Fix-Up-Daten für eine richtige Sequenz von Operationen für die andere Option erhalten kann.
  • Die Host-Schnittstelle zu TIAB kann erweitert werden, um zusätzliche Auswahloperationen oder zusätzliche Operationen vorzusehen, welche Fix-Up-Daten vorsehen. In jedem Fall wird eine TIAB-Funktion hinzugefügt, um die zusätzliche Operation handzuhaben. Im folgenden soll die TIAB-Schnittstelle zum Host betrachtet werden, über welche die TIAB-Funktionen die Daten erhält, die erforderlich sind, um eine Texttyp-Grenze oder eine richtige Sequenz von Operationen zu identifizieren, die erforderlich sind, um eine korrekte Texttyp-Interpunktionsstruktur vorzusehen. Im Vergleich zu der Host-Schnittstelle ist die TIAB-Schnittstelle relativ einfach.
  • (2) TIAB-Aufrufe an den Host
  • Der primäre Zweck, zu dem der TIAB den Host aufruft, besteht darin, Daten über die Textdatenstruktur des Hosts zu erhalten. Dafür umfaßt die TIAB-Schnittstelle zum Host einige wenige Hostfunktionen, die der TAB zu diesem Zweck aufrufen kann. Obwohl die Implementierung dieser Funktionen von der Art und Weise der Implementierung des Hosteditors abhängt, handelt es sich jeweils um eine einfache Funktion, wenn der Hosteditor eine herkömmliche Textdatenstruktur verwendet, welche eine Sequenz von Textcodes enthält.
  • Die Funktion getchars1 ist eine TIAB-Funktion, welche eine Hosteditor-Funktion tiabGet- Pointer aufruft, um einen Zeiger zu einer Position in der Textdatenstruktur sowie eine Länge einer Kette von Textcodes, welche an dieser Position beginnt, zu erhalten. Die Hosteditor- Funktion tiabGetPointer kann wiederum durch entsprechende Aufrufe der zugrundeliegenden Funktionen implementiert werden. Wenn zum Beispiel der Hosteditor auf einer Macintosh-Workstation die Routinen im ROM verwendet, die herkömmlicherweise als Text Edit bekannt sind, dann kann er den Zeiger erhalten, indem er *((**TEH).hText) aufruft, und kann dann die Länge erhalten, indem er (**TEH).teLength aufruft. Dann gibt tiabGetPointer an getchars1 einen Wert aus, der den tatsächlichen Offset angibt.
  • Allgemein erfordert TIAB, daß der Hosteditor die Speicherverwaltung auf Textblöcken vornimmt. Der allgemeine Ansatz zum Erhalten von Textcodes für TIAB ist wie folgt: tiabGet- Pointer sieht eine Möglichkeit vor, mit welcher der Hosteditor einen Bereich von Textcodes innerhalb seiner internen Datenstruktur angeben kann, der durch TIAB ausgelesen (aber nicht verändert) werden kann. Wenn der Hosteditor seine interne Datenstruktur derart wiedergibt, daß dies unbequem oder unmöglich ist, dann muß der Host einen anderen Satz von Funktionen zum Verwalten von Speicherblöcken vorsehen und dieselben mit Zeichen füllen, die durch den Hosteditor aus seiner internen Datenstruktur kopiert werden. Darunter sind die folgenden Funktionen vorgesehen: tiabGetTextBlock, die einen Zeiger zu einem Textblock unter Verwendung des bevorzugten Speicherverwaltungsschemas des Hosteditors und außerdem die Anzahl der tatsächlich kopierten Textcodes ausgibt; tiabFreeTextBlock, bei welcher der Hosteditor einen durch tiabGetTextBlock zugewiesenen Textblock freigibt; tiabFreeAllBlocks, bei welcher der Hostprozessor alle durch tiabGetTextBlock zugewiesenen Textblöcke freigibt; tiabLastCharPosn, die den Index des letzten Textcodes im Textpuffer des Hosteditors ausgibt; und tiabCopyChars, die eine bestimmte Anzahl von Textcodes, welche bei einem bestimmten Offset beginnen, in einen bestimmten Textblock kopiert und weiterhin die Anzahl der kopierten Textcodes ausgibt. Beim Freigeben von Textblöcken kann TIAB die Funktion tiabFreeAllBlocks verwenden oder eine Schleife durch seine Matrix durchführen und bei jeder Wiederholung tiabFreeTextBlock aufrufen.
  • B. TIAB-Aufrufe an TIAB
  • Die TIAB-Funktionen der höheren Ebene, die durch einen Hosteditor aufgerufen werden, fallen in zwei Gruppen, wie oben mit Bezug auf die Host-Schnittstelle zu TIAB beschrieben ist, wobei eine Gruppe Endpunkte einer neuen Auswahl vorsieht und die andere Gruppe Fix- Up-Daten vorsieht. Dennoch weist die TIAB-Schnittstelle zum Hosteditor getchars1 als primäre Funktion der unteren Ebene auf, die den Host aufruft, um Codes aus der Textdatenstruktur des Hosts zu erhalten. Zwischen den Funktionen der höheren Ebene und getchars1 gibt es mehrere Zwischenebenen von TIAB-Funktionen.
  • Die erste Ebene über getchars1 umfaßt die Funktionen getcharsForward, getcharsBackward und charAt, die jeweils aufgerufen werden können, um auf Codes zuzugreifen, die sich von einer bestimmen Position in der Textdatenstruktur des Host vorwärts erstrecken, um Codes zu erhalten, die sich von einer bestimmten Position rückwärts erstrecken, oder um den Code an einer bestimmten Position zu erhalten. Diese Ebene umfaßt auch mehrere Funktionen, die nach einem bestimmten Code oder nach einem Code in einem bestimmten Satz suchen, einschließlich von charSearchFwd, charSearchBkwd, charSetSearchFwd und charSet- SearchBkwd.
  • TIAB verwendet nicht die Bedeutungen oder anderen Unterschiede zwischen Wörtern im Text außer denjenigen Unterschieden, die insbesondere die Interpunktionsstruktur betreffen. Deshalb ignoriert TIAB die meisten Unterschiede zwischen Wörtern, indem es die Textcodes, aus denen der Text besteht, zu Tokens verarbeitet, so daß jedes Wort durch ein Token mit einem von einer kleinen Anzahl von Typen wie Wort, großgeschriebenes Wort, Abkürzung, großgeschriebene Abkürzung oder - bei der Unterscheidung von feinkörnigen Wörtern - Wortinneres wiedergegeben wird, wobei Wortinneres einen Interpunktionscode bezeichnet, der Teil eines Wortes ist und ansonsten durch ein Interpunktionstoken wiedergegeben würde, nun aber anders behandelt wird, weil er als Teil eines Wortes auftritt. TIAB behandelt andere die Interpunktionsstruktur betreffende Codes als Tokens von anderen Typen, wie etwa Interpunktionstokens der Typen Komma, Anführungszeichen, Doppelpunkt, Leerzeichen, Punkt, mehrfache Gedankenstriche, Ellipsen usw.
  • Einige der TIAB-Funktionen der nächsten Ebene, tokenScanFwd und tokenScanBkwd in Anhang B scannen durch die Textcodesequenz, finden jede Token-Grenze und geben den entsprechenden Token-Code aus. Andere Funktionen können aufgerufen werden, um eine Token-Grenze zu finden: tokenBndryRight, tokenBndryLeft, tokenBndryLeft1 und token-BndryAt, wobei einige dieser Funktionen tokenScanFwd und tokenScanBkwd verwenden. Diese Token-Funktionen beruhen auf einer Anzahl von Hilfsfunktionen, um einen gemeinsamen Token-Cache zu verwalten, so daß die Token-Erstellung so weit wie möglich dynamisch durchgeführt und im Token-Cache gespeichert wird.
  • Die TIAB-Funktionen der höheren Ebene, die neue Auswahl-Endpunkte identifizieren, wie extendSelnKeys, extendSelnDrag, incrType und decrType beruhen auf zwei Zwischenfunktionen boundaryBefore und boundaryAfter, die Texttyp-Grenzen finden, um die Endpunkte einer Auswahl zu identifizieren.
  • Die TIAB-Funktionen der höheren Ebene, welche Fix-Up-Daten vorsehen, umfassen add- Brackets, removeBrackets, changeCategories, cutSeln, deleteSeln, pasteSeln und toggle- Capitalization. Von diesen Funktionen beruhen changeCategories, cutSeln, deleteSeln und pasteSeln auf einer Zwischenfunktion getFixupInfo, die für die Aufgabe des Erhaltens von Information zu einer natürlichen Grenze für die Verwendung zum Vorsehen von Fix-Up- Daten spezialisiert ist. Andere natürliche Grenzen betreffende TIAB-Funktionen umfassen scanNatBndry, natBndryHere und checkNBndryQuotesBrkts.
  • (1) Codezugriff und Suche
  • Fig. 7 zeigt Schritte innerhalb der Funktion getcharsForward, die Textcodes vorwärts von einer spezifizierten Position in der Textdatenstruktur des Hosteditors abruft. Fig. 8 zeigt Schritte innerhalb der Funktion charSetSearchFwd, welche die Textdatenstruktur nach einem Textcode in einem spezifizierten Satz von Codes durchsucht.
  • Die Funktion getcharsForward wird in Block 300 mit einer als Offset bezeichneten Position in der Textdatenstruktur des Hosts sowie mit Zeigern zu zwei Lokationen aufgerufen, wobei die Funktion in eine der Lokationen einen Zeiger zu einem Startcode lädt und in die andere Lokation eine Länge lädt, welche die Anzahl der gültigen Codes angibt, die mit dem Startcode beginnen. Der Text in Block 302 bestimmt, ob der in Block 300 empfangene Offset kleiner ist als null, was eine Position vor dem Beginn des Textpuffers oder einer anderen Textdatenstruktur des Hosteditors angibt. Wenn ja, gibt getcharsForward in Block 304 FALSE aus, was ein nicht gelungenes Abrufen von Codes angibt.
  • Wenn der Offset größer ist als null, dann bestimmt der Text in Block 306, ob der Offset größer oder gleich dem Offset eines Block von Codes ist, der als ausgeschlossener Block bezeichnet wird. Der ausgeschlossene Block ist ein Textbereich, der von getchars1 ignoriert wird; der ausgeschlossene Block ermöglicht es, in einer Einfügeoperation auf den Textcodes zu operieren, so wie diese nach einer Löschoperation und vor einer Einfügeoperation sein würden, ohne daß eine Löschoperation durchgeführt wird, wobei dann TIAB aufgerufen wird, dann eine Einfügeoperation durchgeführt wird und dann wieder TIAB aufgerufen wird. Wenn der Offset größer oder gleich dem Offset des ausgeschlossenen Blocks ist, dann wird die Länge des ausgeschlossenen Blocks in Block 308 zu dem Offset addiert.
  • Die in Block 310 beginnenden Schritte betreffen einen Cache, der eine Matrix mit Einträgen umfaßt, welche jeweils einem Block von Textcodes entsprechen. Jeder Cacheeintrag für einen Block enthält Daten, welche den Block definieren und den Offset des Blocks, die Länge sowie einen Zeiger zu dem ersten Code im Block umfassen. Innerhalb des Caches sind die Einträge nach dem Offset sortiert. Die zum Erstellen des Caches erforderlichen Schritte umfassen eine Prüfung in Block 310, ob der Cache gültige Daten enthält; wenn nicht, löscht ein Aufruf von flushBlockCache in Block 312 denselben, wonach der Cacheblock ausgewählt wird, in den die abgerufenen Textcodes geladen werden sollen, wobei der Offset und die Länge der abzurufenden Textcodes in Block 314 gesetzt werden. Wenn der Cache gültige Daten enthält, aber der Offset oberhalb oder unterhalb der Cachegrenzen ist, was in Block 316 bestimmt wird, dann werden der zu ladende Cacheblock, der Offset und die Abruflänge entsprechend in Block 314 gesetzt, um einen Block von Textcodes abzurufen, der nicht mit dem höchsten oder dem niedrigsten zuvor in den Cacht geladenen Block überlappt.
  • Wenn der in Block 300 empfangene Offset in die Cachegrenzen fällt, dann beginnt der Schritt in Block 320 eine iterative Schleife, die durch die zuvor geladenen Cacheblöcke geht und nach dem Cacheblock sucht, der entweder den Offset enthält oder einen Cacheblock- Offset aufweist, der größer ist als der in Block 300 empfangene Offset. Der Text in Block 322 bestimmt, ob der Offset im nächsten Block ist. Wenn ja, lädt der Schritt in Block 324 den Codezeiger zu dem entsprechenden Code innerhalb desselben Cacheblocks und die Länge der auf diesen Code folgenden Codesequenz in den Cachblock, wobei gegebenenfalls der ausgeschlossene Block berücksichtigt wird. Der Text in Block 326 bestimmt dann, ob die Länge der Codesequenz größer ist als null. Wenn nicht, wird wie oben in Block 304 ein FALSE ausgegeben. Wenn ja, wird in Block 328 ein TRUE ausgegeben, das den Erfolg angibt.
  • Wenn der Offset in keinem der Cacheblöcke ist, aber vor den Offset eines zuvor geladenen Offsetblocks fällt, wie durch den Test in Block 330 bestimmt wird, dann setzt der Schritt in Block 332 den Startoffset und die Länge der abzurufenden Textcodes, die möglichst an einen zuvor geladenen Cacheblock anschließen.
  • Wenn der Offset nicht auf eine Position in einem der zuvor geladenen Cacheblocks zeigt - entweder außerhalb oder innerhalb der Cachegrenzen - dann ruft der Schritt in Block 334 getchars1 mit dem Startoffset und der Länge der abzurufenden Textcodes auf. Zuerst setzt getchars1 einen Cache-Block-Header für die abzurufenden Textcodes. Durch einen Aufruf von tiabGetPointer fordert getchars1 den Zeiger auf die Codes und die Länge an, wobei der Zeiger auf die Codes in das entsprechende Cacheblock-Feld geladen wird. Wenn die Länge gleich null ist, ruft getchars1 die Funktion tiabCopyChars auf, um die Textcodes zu erhalten. Andernfalls setzt getchars1 die Länge des Cacheblocks gleich der Länge von tiabGetPointer und paßt die Grenzen des Cacheblocks an, um den Block der Textcodes aufzunehmen, wobei dann TRUE ausgegeben wird. Dann verzweigt getcharsForward in Block 336 auf der Basis des durch getchars1 ausgegebenen Ergebnisses. Wenn das Ergebnis FALSE ist, dann gibt getcharsForward in Block 304 ebenfalls FALSE aus. Wenn das Ergebnis TRUE ist, was das Abrufen der Textcodes angibt, dann lädt der Schritt in Block 324 den Codezeiger und die Länge wie oben angegeben, wobei der Test in Block 326 bestimmt, ob TRUE oder FALSE ausgegeben wird.
  • Die Funktion getcharsBackward ist der Funktion getcharsForward ähnlich, wobei sie jedoch die Codes rückwarts vom Offset abruft. Die Funktion charAt verwendet getcharsForward, um den Code an einer bestimmten Position abzurufen.
  • Die Funkton charSetSearchFwd wird wie in Fig. 8 gezeigt in Block 350 mit zwei Zeigern aufgerufen, wobei ein Zeiger auf Daten zeigt, die eine Position in der Textdatenstruktur angeben, und wobei der andere Zeiger auf eine Bitsatz-Kennzeichnung zeigt, die einen Satz von Textcodes angibt. Der Schritt in Block 352 ruft getcharsForward auf, wobei die Position als der Offset vorgesehen wird. Die Verzweigung in Block 354 beruht auf dem durch getcharsForward ausgegebenen Ergebnis, wobei charSetSearchFwd in Block 356 FALSE ausgibt, wenn getcharsForward FALSE ausgegeben hat. Wenn getcharsForward beim Abrufen einer Sequenz von Textcodes erfolgreich war, dann beginnt der Schritt eine iterative Schleife, welche durch die Codes geht. Der Test in Block 362 bestimmt, ob jeder Code in dem durch die Bitsatz-Kennzeichnung angegebenen Satz ist, und ruft das Makro BITSET auf. Wenn ein Code in dem Satz gefunden wird, wechselt charSetSearchFwd die Position zu der Position dieses Codes und gibt TRUE aus, um anzugeben, daß ein Code im Satz gefunden wurde. Wenn keiner der Codes im Satz ist, dann kehrt charSetSearchFwd zu dem Schritt in Block 352 zurück, um eine andere Sequenz von Textcodes abzurufen.
  • Es gibt verschiedene andere Funktionen, die charSetSearchFwd ähnlich sind, wie char- SearchFwd und charSearchBkwd, die vorwärts bzw. rückwärts nach einem spezifizierten Code suchen, und charSetSearchBkwd, die rückwärts nach einem Code in einem spezifizierten Satz sucht.
  • (2) Token-Scannen
  • Fig. 9 zeigt allgemeine Schritte in der Funktion tokenScanBkwd. Diese Funktion sucht nach Mustern von Textcodes und wandelt erkannte Muster zu Token-Codes um. Es können zahlreiche Muster erkannt werden, so daß tokenScanBkwd komplizierte Mustererkennungsoperationen umfaßt, wobei die Schritte in Fig. 9 jedoch keine Details der Mustererkennung zeigen.
  • In Block 370 beginnt tokenScanBkwd mit dem Empfangen eines Zeiger auf eine Scanaufzeichnung, d. h. auf eine Datenstruktur, die eine Aufzeichnung eines Scans für ein Token enthält. Die Scan-Aufzeichnung enthält einen Zeiger zu einer Grenze innerhalb der Textdatenstruktur. Der Test in Block 372 bestimmt, ob die Token-Grenze, die dieser Grenze im Text vorangeht, bereits gescannt wurde. Wen ja, ruft der Schritt in Block 374 das vorherige Ergebnis aus einem Token-Cache ab und gibt dasselbe aus.
  • Wenn die vorangehende Grenze nicht zuvor gescannt wurde, dann ruft der Schritt in Block 376 getcharsBackward auf, um eine Sequenz von zu scannenden Textcodes abzurufen, wobei ähnliche Aufrufe anderswo innerhalb von tokenScanBkwd gemacht werden, wenn dies erforderlich ist. Wenn einer dieser Aufrufe FALSE ausgibt, ist der Scan nicht erfolgreich, wobei dann ein Wert ausgegeben wird, welcher den erfolglosen Scan angibt.
  • Der Text in Block 380 beginnt eine Sequenz von Schritten, die rückwärts durch die Textcodes scannen, um die nächste Token-Grenze zu finden. Der Text in Block 380 stellt fest, ob der nächste Code einer der Interpunktionscodes ist, der einem Tokencode entspricht. Wenn ja, dann bestimmt der Text in Block 382, ob es sich um einen Interpunktionscode handelt, der innerhalb eines Wortes auftritt. Wenn er nicht innerhalb eines Wortes auftritt, dann gibt der Schritt in Block 384 den entsprechenden Token-Code für den Interpunktionscode aus.
  • Wenn ein Wort festgestellt wurde, dann beginnt der Schritt in Block 390 eine kurze iterative Schleife, die durch die Codes im Wort geht, wobei Information zu Abkürzungen, Großbuchstaben, Zahlen oder anderen Eigenschaften des Wortes erhalten wird, welche die Zuweisung eines bestimmten Token-Codes betreffen. Die Schleife fährt fort, bis eine Wortunterbrechung in Block 392 festgestellt wird. Dann wird der entsprechende Token-Code für das Wort ausgegeben.
  • Die Details von tokenScanBkwd sind komplex, weil die angewendeten Regeln für die Wortbildung relativ komplex sind. Diese sind für die Konventionen der englischen Sprache angepaßt, wobei sie jedoch alternativ dazu für die Konventionen einer anderen Sprache angepaßt sein können. Wie implementiert, erlaubt tokenScanBkwd Wörter, die interne Gedankenstriche und Apostrophe umfassen, oder - unter bestimmten Umständen - Wörter, die Kommas, Punkte oder Doppelpunkte umfassen. Zum Beispiel könnten die folgenden als Wörter behandelt werden:
  • it's
  • 10 : 30
  • $1,000.00
  • real-time
  • Die Implementierung ermöglicht weiterhin die Feststellung von Wortgrenzen an Wortinternen Interpunktionszeichen, weil es manchmal bequem ist, wenn man Teile von Wörtern auf diese Weise auswählen kann. Es gibt mehrere andere Funktionen, die tokenScanBkwd ähnlich sind: tokenScanFwd, die vorwärts statt rückwärts scannt; tokenBndryRight, die bestimmt, ob die aktuelle Position eine Token-Grenze ist, und wenn nicht, sich vorwärts zur nächsten Token-Grenze bewegt; und tokenBndryLeft, die sich rückwärts zur nächsten Token-grenze bewegt, wenn die aktuelle Position keine Token-Grenze ist. Die Funktionen tokenBndryRight und tokenBndryLeft sind nützlich, um einen Scan an einer Token-Grenze zu beginnen.
  • Tabelle 1 zeigt die Beziehung zwischen Textcodes und Token-Codes, die aus dem Token- Scannen resultiert. Die Textcodes in Tabelle 1 bilden einen Satz, wie durch den Titel angegeben. Die Token-Codes dagegen umfassen Codes, die jedes Auftreten von mehreren Typen von Interpunktionscodes angeben, welche ein linkes Anführungszeichen (LQ), ein Komma (C), ein rechtes Anführungszeichen (RQ), ein Leerzeichen (Sp) und einen Punkt (P) umfassen. Außerdem umfassen die Tokencodes Codes für Typen von Worteinheiten, welche großgeschriebenes Wort (W-Cap) und ein gewöhnliches Wort (W) umfassen. TABELLE 1: "Drive," he said.
  • Die Funktion führt verschiedene Operationen auf einem Strom von Token-Codes durch, um Endpunkte zu finden und Fix-Up-Daten vorzusehen.
  • (3) Endpunkte
  • Die Funktionen, die auf Aufrufe des Hosteditors bezüglich von Modifikationen einer Auswahl antworten, umfassen extendSelnKeys, extendSelnDrag, incrType und decrType. Jeder dieser TIAB-Auswahlfunktionen antwortet, indem sie Endpunkte einer neuen Auswahl vorsieht.
  • Fig. 10 zeigt die allgemeinen Schritte, die durch diese Funktionen durchgeführt werden. Die Sequenz von Fig. 10 beginnt, wenn eine der TIAB-Auswahlfunktionen durch den Hosteditor aufgerufen wird. Wie in Block 400 gezeigt, umfaßt dieser Aufruft einen Zeiger auf eine Endpunktdatenstruktur. Wenn die TIAB-Auswahlfunktion abschließt, erhält der Hosteditor, die neuen Endpunkte aus der Endpunkt-Datenstruktur und verwendet dieselben, um die neue Auswahl zu definieren. Der Aufruft der TIAB-Auswahlfunktion kann auch andere Daten umfassen. Zum Beispiel umfaßt ein Aufruf von extendSelnDrag eine Position und einen Ankerpunkt innerhalb Textdatenstruktur und umfaßt ein Aufruf von extendSelnKeys einen Code, der angibt, auf welche Weise und welchem der Endpunkte aus die Auswahl erweitert werden soll.
  • Die TIAB-Auswahlfunktion kann in Block 402 beginnen, indem bestimmt wird, ob die Funktion richtig aufgerufen wurde. Die Funktionen extendSelnDrag und extendSelnKeys sind zum Beispiel nicht richtig, wenn aktuell keine Texteinheit ausgewählt ist. Entsprechend ist incr-Type nicht richtig, wenn der Typ der aktuell ausgewählten Texteinheit der höchste Texttyp ist. Wenn die TIAB-Auswahlfunktion nicht richtig aufgerufen wird, gibt sie in Block 404 den Wert FALSE aus, worauf der Hosteditor mit einer entsprechenden Fehlermeldung oder einem Fehlersignal antworten kann, indem er etwa die aktuelle Auswahl blinken läßt.
  • Wenn die TIAB-Auswahlfunktion richtig aufgerufen wurde, schreitet sie in Block 410 mit dem Erhalten von Daten fort, um Endpunkte vorzusehen und um folgende Funktionen durch das Vorsehen von Fix-Up-Daten zu ermöglichen. In den Implementierung werden diese Daten in einer TiabSeln-Datenstruktur gespeichert. Die Daten können wie gezeigt Daten umfassen, welche Endpunkte der neuen Auswahl wie etwa einen Offset und eine Länge angeben; Daten, die einen oder mehrere Texttypen angeben, welche für die neue Auswahl relevant sind, wie etwa den Typ der Auswahl selbst, und wenn die Auswahl vom Typ Klammer ist, den zugrundeliegenden Typ; Daten, welche Merkmale an den Endpunkten der neuen Auswahl angeben, wie den Token, die Tokenlänge und den Texttyp der natürlichen Grenze an einem Ende der Auswahl; sowie Daten, welche angeben, ob die Auswahl großgeschrieben ist. Jeder der TIAB-Auswahlfunktionen erhält diese Daten auf seine eigene Weise.
  • Die einfachste der TIAB-Auswahlfunktionen decrType wird derart implementiert, daß sie den rechten Endpunkt der aktuellen Auswahl anpaßt, um die neue Auswahl zu erhalten, und dann nur, wenn es richtig ist, den rechten Endpunkt anzupassen. Wenn die aktuelle Auswahl zum Beispiel vom Typ Klammer oder Gedankenstriche ist, dann paßt decrType nicht den rechten Endpunkt an, sondern dekrementiert den zugrundeliegenden Typ der Auswahl, wenn der zugrundeliegende Typ größer als der Typ Zeichen ist. Wenn aber die Auswahl von einem Typ größer als der Typ Zeichen ist und wenn sie eine natürliche Grenze auf ihrer rechten Seite mit einer Länge größer als null aufweist, dann läßt decrType die Token in der natürlichen Grenze fallen, wobei sie eins zurückaddiert, wenn es sich um eine der schließenden Klammern handelt, bevor sie den Typ der Auswahl dekrementiert.
  • Im Gegensatz zu decrType hängen die TIAB-Auswahlfunktionen extendSelnKeys und extendSelnDrag von den Zwischen-TIAB-Funktionen boundaryAfter und boundaryBefore ab, um bei Bedarf Texttyp-Grenzen zu finden. Diese Zwischenfunktionen werden mit einem Zeiger auf eine ScanRecord-Datenstruktur aufgerufen, durch welche jede Funktion die Positionen an den Enden einer Texttyp-Grenze ausgibt. Jede Funktion gibt auch einen Wert aus, der den Texttyp der Grenze ausgibt.
  • Wie oben beschrieben umfaßt eine Texttyp-Grenze immer wenigstens ein Token, wobei boundaryAfter und boundaryBefore jeweils operieren, indem sie den Token-Strom mit Token-Mustern vergleichen, die implizit in den durch sie durchgeführten Operationen enthalten sind. Die in der Implementierung verwendeten Muster umfassen die folgenden: ein Komma-Token, auf das optional ein Leerzeichen-Token folgt, ist eine Texttyp-Grenze des Typs Phrase; ein Strichpunkt-, Doppelpunkt-, Gedankenstrich- oder Drei-Punkt-Ellipse-Token, auf das optional ein Leerzeichen-Token folgt, ist vom Typ Satzteil; ein Punkt-, Fragezeichen- oder Ausrufezeichen-Token, auf das wenigstens zwei Leerzeichen-Token folgen (oder in Übereinstimmung mit einem Optionsflag, das durch den Hosteditor in Antwort auf eine Benutzeranforderung gesetzt wird, alternativ dazu nur ein Leerzeichen-Token), ist vom Typ Satz. In diesen Mustern kann auf ein Komma- oder ein Punkt-Token ein rechtes Einfach- oder Doppel-Anführungszeichen-Token folgen. Weiterhin kann eine Texttyp-Grenze des Typs Satz eine Anzahl von rechten Anführungszeichen-Token und Klammer-Token umfassen, die den Leerzeichen-Token vorangehen. Diese Muster sind für die englische Sprache angepaßt, wobei jedoch ähnliche Muster für andere natürliche Sprachen formuliert werden können. Nach dem Identifizieren des Texttyps einer Texttyp-Grenze laden boundary- Before und boundaryAfter die Daten, welche die Enden angeben, und geben den Typ aus. In einem speziellen Fall bestimmt die Funktion boundaryAfter vorläufig, ob ihr Beginn nach einem Token des Typs Abkürzung liegt, wobei sie in diesem Fall den Typ der unmittelbar auf die Abkürzung folgenden Grenze ausgibt.
  • Tabelle 11 stellt die Beziehung zwischen einem Ausschnitt aus einem Strom von Token- Codes und den durch die Funktion boundaryAfter ausgegebenen Texttyp-Codes dar. Die Texttyp-Codes in Tabelle II umfassen Zeichen (Ch), Wort (W), Phrase (F), Satzteil (CI) und Satz (S), während die Token-Codes die oben mit Bezug auf Tabelle I eingeführten Token- Codes sowie Strichpunkt (SC) umfassen. TABELLE II
  • Wie in Tabelle II gesehen werden kann, gibt der Texttyp-Code für jeden Token-Code den Texttyp der vorangehenden Texteinheit an; so daß bei einer Reihe von Interpunktions-Token jeder von diesen denselben entsprechenden Texttyp-Code aufweisen kann. Jeder aus der Reihe von Token-Codes, der einem Komma, einem Fragezeichen und einem Leerzeichen entspricht, weist zum Beispiel den Texttyp-Code für eine Phrase auf, während jeder aus der Reihe, der einem Strichpunkt und einem Leerzeichen entspricht, den Code für einen Satzteil aufweist, und wobei jeder aus der Reihe, die einem Punkt und zwei Leerzeichen entspricht, den Code für einen Satz aufweist. Eine Reihe von Token-Codes mit demselben Texttyp kann deshalb als eine Einheit mit diesem Texttyp, mit spezifizierten Enden und einer Länge behandelt werden.
  • Jede der drei TIAB-Auswahlfunktionen, die auf boundaryAfter und boundaryBefore beruhen, weist eine unterschiedliche Sequenz von Operationen auf. Die Funktion extendSelnKeys ruft die entsprechende der vier Funktionen auf, von welchen jede die entsprechende der Funktionen boundaryAfter oder boundaryBefore aufruft; die vier Funktionen sind extendRightFrom-Right, extendRightFromLeft, extendLeftFromRight und extendLeftFormLeft. Die Funktion extendSelnDrag bestimmt, ob boundaryAfter oder boundaryBefore aufgerufen werden soll, in Abhängigkeit davon, ob die Position im Aufruf vor oder nach dem Anker ist. Die Funktion incrType ruft nach dem Inkrementieren des Typs der aktuellen Auswahl sowohl boundary- After wie boudaryBefore in einer Schleife auf, welche wiederholt die Auswahl erweitert, bis eine entsprechende geklammerte Auswahl, was durch checkBracketIncr festgestellt wird, oder eine entsprechende nicht geklammerte Auswahl erreicht wird; incrType antwortet also auf das mehrfache Klicken, wobei jedes folgende Klicken den aktiven Texttyp inkrementiert und den minimalen Umgebungsbereich dieses Typs von Zeichen zu Wort, Phrase, Satzteil, Satz und Absatz auswählt; wenn eine Auswahl mit einer durch Klammern begrenzten Struktur beginnt, wie etwa bei einem Zitat, dann wählt ein mehrfaches Klicken diese Struktur an einem entsprechenden Punkt in der Sequenz aus; wenn eine durch Klammern begrenzte Struktur Teil eines umgebenden Textes ist, dann sollte dieser Text als ein Ergebnis des Klickens ausgewählt werden, so daß die gesamte Struktur ausgewählt wird.
  • Nach dem Erhalten der Endpunkte der neuen Auswahl erhält jeder der TIAB-Auswahlfunktionen auch andere relevante Daten wie die Grenzeigenschaften und die Großschreibung. Diese Daten werden in der oben genannten TiabSeln-Datenstruktur gespeichert.
  • Jede der TIAB-Auswahlfunktionen schließt ab, indem sie in Block 412 die Endpunkte der neuen Auswahl in die Endpunkt-Datenstruktur lädt und dann in Block 414 TRUE ausgibt. Der Hosteditor kann dann die Endpunkte der neuen Auswahl abrufen und dieselben verwenden, um die neue Auswahl zu bestimmen und dann anzuzeigen, wie oben mit Bezug auf Fig. 3 beschrieben.
  • (4) Fix-Up-Daten
  • Die Funktionen, welche Fix-Up-Daten vorsehen, umfassen addBrackets, removeBrackets, changeCategories, cutSeln, deleteSeln, pasteSeln und toggleCapitalization. Von diesen Funktionen werden cutSeln, deleteSeln und pasteSeln durch den Hosteditor aufgerufen, nachdem eine Manipulationsoperation im Ausschneiden-Kopieren-Einfügen-Paradigma durchgeführt wurde. Wie oben bemerkt, wird die Funktion copySeln auch als Ergebnis einer Manipulationsoperation aufgerufen, wobei copySeln anstatt Fix-Up-Daten vorzusehen einfach nur die Auswahldatenstruktur von TIAB in eine andre Datenstruktur kopiert, die als Ausschneidepuffer-Datenstruktur von TIAB dient. Die anderen Funktionen addBrackets, remove-Brackets, changeCategories und toggleCapitalization sehen Operationen der höheren Ebene vor, indem sie Fix-Up-Daten vorsehen, welche definieren, wie die Operationen der höheren Ebene durchgeführt werden können.
  • Allgemein beruhen die TIAB-Funktionen, welche Fix-Up-Daten vorsehen, auf den Konventionen der englischen Sprache, so daß jede Funktion implizit einen Satz von Regeln enthält, den sie verwendet, um entsprechende Fix-Up-Daten zu erhalten. Andere natürliche Sprachen mit unterschiedlichen Konventionen können andere Regeln und damit andere Funktionen zum Vorsehen von Fix-Up-Daten erfordern, wobei aber der allgemeine Ansatz zum Vorsehen von Fix-Up-Daten, welche eine Sequenz von Operationen definieren, die zu einer korrekten Texttyp-Interpunktionsstruktur führt, auch auf andere geschriebene natürliche Sprachen angewendet werden kann.
  • Die Funktionen addBrackets, removeBrackets und toggleCapitalization enthalten relativ einfache Regeln, wobei sie diese Regeln unter Verwendung von Funktionen wie scanNat BndryFwd, scanNatBndryBkwd, tokenScanFwd und tokenScanBkwd anwenden. Diese Scanfunktionen scannen durch die Textdaten und sehen entsprechende Information vor, indem sie die Texttypen von natürlichen Grenzen ausgeben und in eine ScanRecord-Datenstruktur laden. Die Funktionen changeCategories, copySeln, deleteSeln und pasteSeln dagegen enthalten viel komplexere Regeln und beruhen auf der Zwischenfunktion getFixupInfo, um Daten für ihre Fix-Up-Operationen zu erhalten, wobei getFixupInfo bei Bedarf die Scanfunktionen aufruft.
  • Die Scanfunktionen tokenScanFwd und tokenScanBkwd wurden oben mit Bezug auf Fig. 9 erläutert. Die Scanfunktionen scanNatBndryFwd und scanNatBndryBkwd beginnen an einer Token-Grenze in den Textdaten und identifizieren den Texttyp einer natürlichen Grenze, welche das folgende Token in der angegebenen Richtung enthält, wobei sie einen Satz von Regeln anwenden, von denen die meisten implizit in scanNatBndryFwd enthalten sind. Diese zwei Funktionen werden auch durch einige der oben erläuterten TIAB-Auswahlfunktionen aufgerufen, wobei sie aber eine wichtigere Rolle in den TIAB-Fix-Up-Funktionen spielen.
  • Obwohl sich die TIAB-Fix-Up-Funktionen untereinander stark unterscheiden, folgen sie einem allgemeinen Muster, das mehrere ähnliche Schritte umfaßt. Alle von diesen werden mit wenigstens einem Zeiger auf eine Fix-Up-Datenstruktur aufgerufen, wobei die meisten derselben mit zwei Zeigern aufgerufen werden, die entweder auf Fix-Up-Datenstrukturen für die zwei Enden einer Auswahl oder auf alternative Fix-Up-Datenstrukturen zeigen. Bevor mit dem Laden einer Fix-Up-Datenstruktur begonnen wird, ruft jede Fix-Up-Funktion die Funktion initFixup auf, um diese Datenstruktur mit einem entsprechenden Offset zu initialisieren, welcher angibt, wo die Sequenz der Operationen durchgeführt werden soll. Jede Fix-Up- Funktion erhält dann Fix-Up-Daten und lädt diese in die Fix-Up-Datenstrukturen, wobei die TIAB-Auswahldatenstruktur während des Prozesses entsprechend geändert wird. Schließlich gibt jede Fix-Up-Funktion die Steuerung an die Hosteditor-Funktion zurück, welche sie aufgerufen hat, wobei die Hosteditor-Funktion dann die Fix-Up-Daten abruft und die angegebenen Sequenzen der Operationen wie oben mit Bezug auf Fig. 6 beschrieben durchführt.
  • Fig. 11 zeigt auf graphische Weise die Natur der durch getFixupInfo vorgesehenen Daten, wenn diese in bezug auf eine natürliche Grenze aufgerufen wird, wobei dargestellt wird, wie sie die Daten zu der natürlichen Grenze vorsieht. Die in Fig. 11 dargestellte Technik nutzt die Beobachtung, daß eine Sequenz von Texttyp-Codes, welche Token-Codes entsprechen, Codes des Typs Zeichen umfaßt, wobei zwischen jedem benachbarten Paar ein Lauf eines anderen Typs ist, der einer Unterbrechung zwischen Wörtern entspricht, etwa ein Lauf des Typs Wort, Phrase, Satzteil, Satz oder Absatz, wie oben in Tabelle II gezeigt. Deshalb umfaßt der Texttyp-Rahmen 430 in Fig. 11 sechs Texttyp-Codes, von denen der erste und der letzte vom Typ Zeichen sind und als Tch, angegeben sind, während der zweite bis fünfte von einem anderen Typ sind, der einer Unterbrechung zwischen Wörtern entspricht, und als Tbr angegeben sind.
  • Die Position 432 in Fig. 11 gibt eine Position innerhalb des Texttyp-Rahmens 430 an, bei der getFixupInfo startet. Wenn die Startposition 432 innerhalb einer natürlichen Grenze liegt, die ein Lauf eines Typs ist, der einer Unterbrechung zwischen Wörtern wie in Fig. 11 entspricht, dann findet getFixupInfo das linke Ende 434 und das rechte Ende 436 der natürlichen Grenze. Sie kann dann alle Information erhalten, die sie benötigt, um eine Fixupinfo-Datenstruktur zu laden. Sie lädt den Texttyp der Codes zwischen der Startposition 432 und dem linken Ende 434 als pdnbL und den Texttyp der Codes zwischen der Startposition 432 und dem rechten Ende 436 als pdnbR. Sie lädt die Anzahl der Token-Codes zwischen der Startposition 432 und dem linken Ende als 434 als pdnbLlen und die die Anzahl der Token- Codes zwischen der Startposition 432 und dem rechten Ende 436 als pdnbRlen. Sie lädt dann den Token-Code des Tokens links von der Startposition 432 als pdnbLtoken und den Token-Code des Tokens rechts davon als pdnbRtoken. Gegebenenfalls setzt sie sentInit- Flag, um anzugeben, daß die Startposition 432 unmittelbar vor einem Wort liegt und auf eine natürliche Grenze folgt, deren Texttyp-Codes vom Typ Satz oder Absatz sind, wodurch angegeben wird, daß das folgende Wort mit einem Großbuchstaben beginnen muß.
  • Fig. 12 zeigt einige der Ergebnisse der Anwendung von getFixupInfo auf jede Position innerhalb des Textrahmens 450, welche die Werte für pdnbL, pdnbLen, pdnbR und pdnbRlen an jeder Position umfassen. Die Textcodes im Textrahmen 450 entsprechen der folgenden Zeichenkette:
  • ab), c
  • Eine derartige Zeichenkette kann zum Beispiel am Ende einer Klammer auftreten, die ein Zitat enthält und in einen Satzteil innerhalb eines Satzes eingebettet ist.
  • Der Ergebnisblock 452 zeigt das Ergebnis des Aufrufs von getFixupInfo an einer Position zwischen den Zeichencodes innerhalb einer Worteinheit - der Typ in jeder Richtung ist Zeichen (CH) und die Länge ist null. Entsprechend ist im Ergebnisblock 454 der Typ links ein Zeichen und die Länge null. Der Ergebnisblock 456 zeigt links den Typ rechte Klammer und die Länge eins und rechts den Typ Phrase und die Länge zwei. Der Ergebnisblock 458 zeigt den Typ Phrase in beiden Richtungen und die Länge eins; wenn die aktuelle TIAB-Auswahl eine Länge größer null zeigt, dann ist der Typ rechts der Typ Wort, weil der Textcode an dieser Position ein Leerzeichen ist. Schließlich zeigt der Ergebnisblock 460 links den Typ Phrase und die Länge zwei, während er rechts den Typ Zeichen und die Länge null zeigt.
  • Die Funktion changeCategories verwendet die durch getFixupInfo vorgesehenen Daten, was aus Fig. 13 und 14 deutlich wird. Fig. 13 zeigt Schritte in einer Sequenz von Operationen zum Ändern einer Texteinheit-Auswahl vom Typ Wort bis zum Typ Phrase, während Fig. 14 Schritte zum Ändern einer Einfügepunkt-Auswahl von Typ Satz bis zum Typ Satzteil zeigt.
  • Der Textrahmen 480 in Fig. 13 zeigt eine schattierte Texteinheit-Auswahl des Typs Wort. Um dieselbe zum Typ Phrase zu ändern, ruft changeCategories die Funktion getFixupInfo an jedem Ende der Texteinheit-Auswahl auf, um die Länge der natürlichen Grenze des Typs Wort zu bestimmen, und lädt dann Daten in die Fix-Up-Datenstrukturen, welche zur Löschung der Textcodes innerhalb der natürlichen Grenzen führt, wie im Textrahmen 482 gezeigt. Dann bestimmt changeCategories, welche Textcodes an jedem Ende der Texteinheit eingefügt werden sollen, um natürliche Grenzen des Typs Phrase vorzusehen, und lädt Daten in die Fix-Up-Datenstrukturen, die zu der richtigen Einfügung führen, wie im Textrahmen 484 gezeigt. Wenn die Fix-Up-Datenstrukturen an den Hosteditor ausgegeben werden, werden die Operationen an jedem Ende der Auswahl natürlich separat durchgeführt, wobei dasselbe Ergebnis wie in Fig. 13 erreicht wird.
  • Der Textrahmen 490 in Fig. 14 zeigt eine Einfügepunkt-Auswahl innerhalb einer natürlichen Grenze des Typs Satz. Um den Typ Satzteil zu ändern, ruft changeCategories getFixupInfo an der Einfügepunkt-Auswahl auf, um die Länge zu jedem Ende der natürlichen Grenze zu bestimmen. Dann bestimmt changeCategories, welche Länge gelöscht werden muß, um die natürliche Grenze wie in Block 492 gezeigt zu beseitigen, und welche Textcodes eingesetzt werden sollten, um eine natürliche Grenze des Typs Satzteil vorzusehen - in diesem Fall ein Strichpunkt und ein Leerzeichen, wie in Block 494 gezeigt - und lädt Daten, welche das Löschen und Einfügen in die Fix-Up-Datenstruktur angeben. Außerdem umfaßt change- Categories Fix-Up-Daten, welche eine Änderung der Großschreibung nach der neuen natürlichen Grenze angeben, wie ebenfalls ist Block 494 gezeigt.
  • Die anderen TIAB-Fix-Up-Operationen, die getFixupInfo aufrufen, führen ähnliche Schritte durch. Die Funktion deleteSeln, die auch durch cutSeln aufgerufen wird, ruft getFixupInfo auf, um Daten zur den natürlichen Grenzen links und rechts von der zu löschenden Texteinheit-Auswahl zu erhalten; deleteSeln wendet dann einen impliziten Satz von Regeln an, um zum Beispiel zu bestimmen, ob eine oder beide natürliche Grenzen gelöscht werden sollen, ob statt dessen eine andere natürliche Grenze eingefügt werden soll und ob die Großschreibung des folgenden Wortes geändert werden soll. Bei Empfang einer Benutzeranforderung zum Durchführen einer Einfügeoperation im Ausschneiden-Kopieren-Einfügen- Paradigma, kann der Hosteditor, wenn eine aktuelle Auswahl vorhanden ist, die aktuelle Auswahl löschen und die Inhalte seines Ausschneidepuffers an dem Nach-Löschen-Einfügepunkt einfügen; dann ruft der Hosteditor pasteSeln auf, die zuerst getFixupInfo aufruft, um Daten zu den natürlichen Grenzen in Nachbarschaft zu dem Nach-Löschen-Einfügepunkt ähnlich wie bei deleteSeln zu erhalten, wobei der ausgeschlossene Block wie oben beschrieben verwendet wird; dann verwendet pasteSeln diese Daten und die Natürliche-Grenze- Daten zu den Enden der Ausschneidepufferinhalte, die zum Zeitpunkt einer Ausschneide- oder Kopieroperation erhalten wurden; um die Fix-Up-Daten zu erhalten, wobei links und rechts der Einfügung jeweils etwas andere Regeln angewendet werden.
  • Zusätzlich zum Aufrufen von getFixupInfo ruft pasteSeln eine Anzahl von anderen Funktionen auf, die beim Erhalten von Fix-Up-Daten hilfreich sind, wobei gegebenenfalls die TIAB- Auswahldatenstruktur modifiziert wird. Allgemein jedoch folgt pasteSeln denselben allgemeinen Schritten wie die anderen TIAB-Fix-Up-Funktionen.
  • 4. Verschiedenes
  • Verschiedene Modifikationen, Erweiterungen und Variationen der angegebenen Implementierungen liegen auf der Hand. Ein herkömmlicher Hosteditor könnte zum Beispiel modifiziert werden, um TIAB zu unterstützen, indem Routinen zum Aufrufen von TIAB-Auswahlfunktionen und TiAB-Fix-Up-Funktionen für eine Operation der höheren Ebene vorgesehen werden, indem die Routinen modifiziert werden, welche die Manipulationsoperationen durchführen, so daß diese TIAB-Fix-Up-Funktionen aufrufen, und indem Routinen vorgesehen werden, die auf Aufrufe von TIAB für Daten antworten. Alternativ dazu, kann die vorliegende Erfindung natürlich ohne einen separaten Hosteditor implementiert werden, indem dessen Funktionen innerhalb von TIAB vorgesehen werden.
  • Allgemein sind die durch die Implementierung angewendeten Regeln und Muster implizit in den Funktionen vorgesehen, wobei die Regeln und Mustern jedoch auch alternativ dazu in separaten Datenstrukturen enthalten sein können, wie für die Muster in Fig. 2 gezeigt ist, wenn dies vorteilhaft ist. Die Regeln und Muster lösen alle Zweideutigkeiten der Interpunktion auf eine vorbestimmte Art und Weise, wobei es jedoch alternativ dazu auch möglich ist, den Benutzer zur Lösung bestimmter problematischer Zweideutigkeiten aufzufordern.
  • In der Implementierung nimmt TIAB an, daß Positionen im Zeichenpuffer des Hosteditors durch eine 32-Bit-Ganzzahl beschrieben werden können. Dies kann verallgemeinert werden, indem ein abstrakteres Konzept der Pufferposition verwendet wird, so daß sie leichter auf viele verschiedene Hosteditoren angewendet werden kann.
  • Wenn der Hosteditor auf Zugriff Funktionen wie eine Rechtschreibprüfung oder ein Suchen- und Finden hat, können die Ergebnisse des Aufrufens derartiger Funktionen Auswirkungen auf die Interpunktionsstruktur haben. Deshalb könnten zusätzliche Fix-Up-Funktionen zu TIAB hinzugefügt werden, um derartige Operationen zu handhaben.

Claims (10)

1. Verfahren zum Betreiben eines Prozessors (52), um das Editieren eines Textes durchzuführen, wobei das Verfahren umfaßt:
Betreiben des Prozessors (52), um eine erste Sequenz (20; 146) von wenigstens einer Texteditor-Operation in bezug auf Textdaten (72) durchzuführen, welche einen Text (12) definieren, wobei der Text ein Wort und ein erstes Interpunktionselement in einem Bereich an einem Ende des Wortes umfaßt, dadurch gekennzeichnet, daß das Verfahren weiterhin umfaßt:
Betreiben des Prozessors (52) unter Verwendung der Textdaten (72), um automatisch Operation-Definitionsdaten zu erhalten, wobei die Operation-Definitionsdaten Daten sind, die eine zweite Sequenz (254, 256, 258; 262, 264, 266; 272; 276, 278) von wenigstens einer Texteditor-Operation des Prozessors (52) definieren, wobei die Operation-Definitionsdaten die zweite Sequenz (254, 256, 258; 262, 264, 266; 272; 276, 278) als eine Sequenz definieren, welche die Textdaten (72) nach der Durchführung der ersten Sequenz (20; 146) modifiziert, um modifizierte Textdaten zu erzeugen, welche einen modifizierten Text (32) definieren, der das Wort umfaßt und in welchem in dem Bereich an einem Ende des Wortes ein zweites Interpunktionselement anstelle des ersten Interpunktionselementes vorgesehen ist, wobei das zweite Interpunktionselement korrekt ist und sich von dem ersten Interpunktionselement unterscheidet.
2. Verfahren nach Anspruch 1, das folgende weitere Schritte umfaßt:
Empfangen einer Anforderung (10; 100; 140) für eine Manipulationsoperation auf einer Auswahl (14) innerhalb des Textes (12), um den modifizierten Text (32) zu erzeugen, und
Betreiben des Prozessors (52) in Antwort auf die Anforderung (10; 100; 140), um die Manipulationsoperation durchzuführen und um Manipulationsoperationsdaten zu erhalten, welche die Manipulationsoperation angeben, welche die modifizierten Textdaten erzeugt.
3. Verfahren nach Anspruch 1 oder 2, welches einen weiteren Schritt zum Durchführen von wenigstens einer Operation umfaßt, die durch die Operation-Definitionsdaten definiert wird.
4. Verfahren nach Anspruch 2 oder 3, wobei der durch die Textdaten definierte Text (12) ein nicht korrektes Texttyp-Interpunktionselement an dem einen Ende des Wortes aufweist und wobei die Manipulationsoperation dieses Wort betrifft, wobei die Operation-Definitionsdaten eine Sequenz (254, 256, 258; 262, 264, 266; 272; 276, 278) definieren, um ein Interpunktionselement an dem Ende des Wortes zu korrigieren.
5. Verfahren nach Anspruch 4, wobei der Schritt zum Betreiben des Prozessors (52) in Antwort auf die Anforderung (10; 100; 140) einen Schritt umfaßt, um zu bestimmen, ob ein Bereich, welcher das erste Ende des ersten Wortes umfaßt, eine Texttyp-Grenze für einen Texttyp umfaßt, und wenn ja, um den Texttyp der Texttyp-Grenze zu bestimmen.
6. Verfahren nach Anspruch 5, wobei das Wort ein anderes Ende zusätzlich zu dem einen Ende umfaßt und wobei die Operation-Definitionsdaten eine Sequenz von wenigstens einer Operation des Prozessors zum Korrigieren eines Interpunktionselements an dem anderen Ende definieren.
7. Verfahren nach Anspruch 5, wobei der Schritt zum Bestimmen, ob ein Bereich eine Texttyp-Grenze umfaßt, das Durchführen eines Mustervergleichs auf einem Satz von Textcodes in den Textdaten umfaßt
8. Verfahren nach wenigstens einem der Ansprüche 4 bis 7, wobei der Schritt zum Betreiben des Prozessors (52) in Antwort auf die Anforderung (100) das Durchführen einer Auswahl bezüglich eines ausgewählten Teils (14) des Textes (12) vor dem Schritt zum Durchführen der Manipulationsoperation umfaßt, wobei der letztere Schritt das Finden eines Endpunktes des ausgewählten Teils des Textes (12) umfaßt.
9. Verfahren nach wenigstens einem der Ansprüche 1 bis 4, wobei die Textdaten Textcodes umfassen und wobei der Schritt zum Betreiben des Prozessors (52) zum automatischen Erhalten von Operation-Definitionsdaten umfaßt:
Erstellen von Token für die Textcodes, um einen Token-Strom zu erhalten, Vergleichen des Token-Stroms mit einem vorbestimmten Satz von Token-Mustern, die aus einer Grammatik von Texttypen erhalten werden, um Texttyp-Grenzen an jedem Ende einer Auswahl zu identifizieren.
10. Verfahren nach wenigstens einem der vorstehenden Ansprüche, wobei die Operation-Definitionsdaten Daten umfassen, die einen Startpunkt innerhalb der Textdaten, eine Anzahl von zu löschenden Textcodes in den Textdaten sowie eine Liste der einzufügenden Textcodes definieren, wobei ein weiterer Schritt das am Startpunkt beginnende Löschen der zu löschenden Textcodes und das Einfügen der Liste der Textcodes am Startpunkt umfaßt.
DE68929038T 1988-11-21 1989-11-21 Verfahren zur Verarbeitung von digitalen Textdaten Expired - Fee Related DE68929038T2 (de)

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
US07/274,261 US5070478A (en) 1988-11-21 1988-11-21 Modifying text data to change features in a region of text

Publications (2)

Publication Number Publication Date
DE68929038D1 DE68929038D1 (de) 1999-09-02
DE68929038T2 true DE68929038T2 (de) 1999-12-23

Family

ID=23047482

Family Applications (2)

Application Number Title Priority Date Filing Date
DE68929461T Expired - Fee Related DE68929461T2 (de) 1988-11-21 1989-11-21 Verfahren zur Verarbeitung von digitalen Textdaten
DE68929038T Expired - Fee Related DE68929038T2 (de) 1988-11-21 1989-11-21 Verfahren zur Verarbeitung von digitalen Textdaten

Family Applications Before (1)

Application Number Title Priority Date Filing Date
DE68929461T Expired - Fee Related DE68929461T2 (de) 1988-11-21 1989-11-21 Verfahren zur Verarbeitung von digitalen Textdaten

Country Status (4)

Country Link
US (1) US5070478A (de)
EP (2) EP0911744B1 (de)
JP (1) JP3220134B2 (de)
DE (2) DE68929461T2 (de)

Families Citing this family (39)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO1991004527A1 (en) * 1989-09-14 1991-04-04 Megaword International Pty. Ltd. A search method and circuit
JP2993528B2 (ja) * 1991-05-18 1999-12-20 富士通株式会社 テキスト管理・復元方式
US5404321A (en) * 1993-05-21 1995-04-04 Mattox; Jeffrey Computer system and method for modifying and enhancing the built-in programs of a computer
US5621875A (en) * 1993-10-26 1997-04-15 Microsoft Corp. Method and system for automatic formatting of user selected text
US5608625A (en) * 1994-06-30 1997-03-04 International Business Machines Corporation System and method for formatting position-sensitive data
JP3082576B2 (ja) * 1994-08-01 2000-08-28 日本電気株式会社 文書編集装置
US5678053A (en) * 1994-09-29 1997-10-14 Mitsubishi Electric Information Technology Center America, Inc. Grammar checker interface
US5781192A (en) * 1996-01-16 1998-07-14 Canon Information Systems, Inc. Data transfer system
US6684188B1 (en) * 1996-02-02 2004-01-27 Geoffrey C Mitchell Method for production of medical records and other technical documents
US6498921B1 (en) * 1999-09-01 2002-12-24 Chi Fai Ho Method and system to answer a natural-language question
US5836771A (en) * 1996-12-02 1998-11-17 Ho; Chi Fai Learning method and system based on questioning
US6081818A (en) * 1996-12-11 2000-06-27 International Business Machines Corporation Cut object dynamic display and method of displaying cut objects
US6067514A (en) * 1998-06-23 2000-05-23 International Business Machines Corporation Method for automatically punctuating a speech utterance in a continuous speech recognition system
US7127704B2 (en) * 2000-06-02 2006-10-24 Sun Microsystems, Inc. Interactive software engineering tool with support for embedded lexical contexts
JP2002290543A (ja) * 2001-03-26 2002-10-04 Hitachi Kokusai Electric Inc 携帯電話機
US7117479B2 (en) * 2001-10-01 2006-10-03 Sun Microsystems, Inc. Language-sensitive whitespace adjustment in a software engineering tool
US7146571B2 (en) * 2002-01-31 2006-12-05 International Business Machines Corporation System and method for two tier paste buffer and display
US7380203B2 (en) * 2002-05-14 2008-05-27 Microsoft Corporation Natural input recognition tool
US7386834B2 (en) 2002-06-28 2008-06-10 Sun Microsystems, Inc. Undo/redo technique for token-oriented representation of program code
US20040003373A1 (en) * 2002-06-28 2004-01-01 Van De Vanter Michael L. Token-oriented representation of program code with support for textual editing thereof
US7707544B2 (en) * 2002-12-05 2010-04-27 Bea Systems, Inc. System and method for generating and reusing software application code with source definition files
US7227994B2 (en) * 2003-03-20 2007-06-05 International Business Machines Corporation Method and apparatus for imbedded pattern recognition using dual alternating pointers
US7366352B2 (en) * 2003-03-20 2008-04-29 International Business Machines Corporation Method and apparatus for performing fast closest match in pattern recognition
US20040225997A1 (en) * 2003-05-06 2004-11-11 Sun Microsystems, Inc. Efficient computation of line information in a token-oriented representation of program code
US20040225998A1 (en) * 2003-05-06 2004-11-11 Sun Microsystems, Inc. Undo/Redo technique with computed of line information in a token-oriented representation of program code
GB2405728A (en) * 2003-09-03 2005-03-09 Business Integrity Ltd Punctuation of automated documents
US20050076300A1 (en) * 2003-10-02 2005-04-07 International Business Machines Corporation Block marker system
US7584435B2 (en) * 2004-03-03 2009-09-01 Omniture, Inc. Web usage overlays for third-party web plug-in content
US7856441B1 (en) 2005-01-10 2010-12-21 Yahoo! Inc. Search systems and methods using enhanced contextual queries
US7603349B1 (en) 2004-07-29 2009-10-13 Yahoo! Inc. User interfaces for search systems using in-line contextual queries
US8751920B2 (en) * 2007-10-30 2014-06-10 Perot Systems Corporation System and method for image processing with assignment of medical codes
US20100306706A1 (en) * 2009-05-27 2010-12-02 Oracle International Corporation Visual-editing toolbar menu while using text editor
US8380485B1 (en) * 2009-08-13 2013-02-19 The United States Of America As Represented By The Director, National Security Agency Device for and method of language processing
US9292161B2 (en) * 2010-03-24 2016-03-22 Microsoft Technology Licensing, Llc Pointer tool with touch-enabled precise placement
US9779168B2 (en) 2010-10-04 2017-10-03 Excalibur Ip, Llc Contextual quick-picks
US20120102401A1 (en) * 2010-10-25 2012-04-26 Nokia Corporation Method and apparatus for providing text selection
US9317196B2 (en) 2011-08-10 2016-04-19 Microsoft Technology Licensing, Llc Automatic zooming for text selection/cursor placement
US10127212B1 (en) 2015-10-14 2018-11-13 Google Llc Correcting errors in copied text
US11243745B2 (en) * 2018-07-15 2022-02-08 Microsoft Technology Licensing, Llc Text editor buffering implementation with offsets management

Family Cites Families (11)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JPS61107469A (ja) * 1984-10-31 1986-05-26 Toshiba Corp 文書編集装置
JPS62163173A (ja) * 1986-01-14 1987-07-18 Toshiba Corp 機械翻訳方法
AU597320B2 (en) * 1986-03-31 1990-05-31 Wang Laboratories, Inc. Text editor for multidimensional or multidirectional text
US4773009A (en) * 1986-06-06 1988-09-20 Houghton Mifflin Company Method and apparatus for text analysis
JPS62290966A (ja) * 1986-06-10 1987-12-17 Nec Corp 文章編集装置
GB2198565A (en) * 1986-11-28 1988-06-15 Sharp Kk Translation apparatus
JPS63193263A (ja) * 1987-02-06 1988-08-10 Nippon Telegr & Teleph Corp <Ntt> 文書処理装置
JPS63305463A (ja) * 1987-06-05 1988-12-13 Hitachi Ltd 自然言語処理方式
US4864502A (en) * 1987-10-07 1989-09-05 Houghton Mifflin Company Sentence analyzer
US4868750A (en) * 1987-10-07 1989-09-19 Houghton Mifflin Company Collocational grammar system
US4887920A (en) * 1988-01-05 1989-12-19 Smith Corona Corporation Punctuation check feature for an electronic typewriter

Also Published As

Publication number Publication date
EP0911744B1 (de) 2003-04-02
DE68929038D1 (de) 1999-09-02
EP0911744A3 (de) 2000-10-11
US5070478A (en) 1991-12-03
EP0911744A2 (de) 1999-04-28
DE68929461D1 (de) 2003-05-08
JP3220134B2 (ja) 2001-10-22
JPH02188868A (ja) 1990-07-24
EP0370777B1 (de) 1999-07-28
DE68929461T2 (de) 2003-10-23
EP0370777A3 (de) 1991-11-21
EP0370777A2 (de) 1990-05-30

Similar Documents

Publication Publication Date Title
DE68929038T2 (de) Verfahren zur Verarbeitung von digitalen Textdaten
DE68928693T2 (de) Verfahren zur Behandlung von digitalen Textdaten
DE3587501T3 (de) Gerät, Verfahren und Struktur zur Umwandlung eines Dokumentes einer Struktur in ein Dokument einer anderen Struktur.
DE69719858T2 (de) Dokumentanzeigesystem und elektronisches Wörterbuch
DE68928231T2 (de) Verfahren und Vorrichtung zur Maschinenübersetzung
DE69712411T2 (de) Verfahren und System um Datenstrukturen zu vereinigen
DE3586273T2 (de) Implizite erzeugung einer superblockstruktur in einem vieldaten-edierungsgeraet.
DE3586274T2 (de) Vieldaten-edierungsgeraet mit gebrauch von attributstroemen fuer textobjekte.
DE68926745T2 (de) Zwischenstruktur für ein tabellenblatt
DE3751716T2 (de) System zur maschinellen Übersetzung
DE69710458T2 (de) Verfahren und system für die berechnung von semantischen logischen formen von syntaxbäumen
DE69229204T2 (de) Iteratives Verfahren zum Suchen von Satzteilen und Informationsauffindungssystem, welches dieses benützt
DE69400207T2 (de) Sprachabhängiges textvergleichssystem
DE68928775T2 (de) Verfahren und Vorrichtung zur Herstellung einer Zusammenfassung eines Dokumentes
DE69400869T2 (de) System zum transkribieren von texteingaben
DE69129959T2 (de) Elektronisches Dokumentenaufbereitungssystem
DE69734400T2 (de) Verfahren und system zur prüfung der richtigkeit der rechtschreibung und grammatik eines dokuments
DE69609866T2 (de) Flexibles system und verfahren zum verknüpfen von hyperlinks
DE10135445B4 (de) Integriertes Verfahren für das Schaffen einer aktualisierbaren Netzabfrage
DE69807699T2 (de) Vorrichtung und verfahren zur syntaxanalyse und transformation von befehlen
DE69807483T2 (de) Verfahren zum darstellen von glyphen unter verwendung einer bibliothek von gestaltungsdiensten
DE10162156B4 (de) Die Benutzernavigation durch Multimedia-Dateiinhalte unterstützendes System und Verfahren
DE69330633T2 (de) Verfahren und Apparat zum Vergleichen von semantischen Mustern für das Wiederauffinden von Texten
DE3586272T2 (de) Integriertes vieldaten-edierungsgeraet.
DE69434434T2 (de) Verfahren und gerät um text- und bilddaten zu synchronisieren, anzeigen und manipulieren

Legal Events

Date Code Title Description
8364 No opposition during term of opposition
8339 Ceased/non-payment of the annual fee