DE68929461T2 - Verfahren zur Verarbeitung von digitalen Textdaten - Google Patents

Verfahren zur Verarbeitung von digitalen Textdaten

Info

Publication number
DE68929461T2
DE68929461T2 DE68929461T DE68929461T DE68929461T2 DE 68929461 T2 DE68929461 T2 DE 68929461T2 DE 68929461 T DE68929461 T DE 68929461T DE 68929461 T DE68929461 T DE 68929461T DE 68929461 T2 DE68929461 T2 DE 68929461T2
Authority
DE
Germany
Prior art keywords
text
data
selection
codes
type
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
DE68929461T
Other languages
English (en)
Other versions
DE68929461D1 (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 DE68929461D1 publication Critical patent/DE68929461D1/de
Application granted granted Critical
Publication of DE68929461T2 publication Critical patent/DE68929461T2/de
Anticipated expiration legal-status Critical
Expired - Fee Related legal-status Critical Current

Links

Classifications

    • GPHYSICS
    • G06COMPUTING; CALCULATING OR COUNTING
    • G06FELECTRIC DIGITAL DATA PROCESSING
    • G06F40/00Handling natural language data
    • G06F40/10Text processing
    • G06F40/166Editing, e.g. inserting or deleting
    • GPHYSICS
    • G06COMPUTING; CALCULATING OR 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; CALCULATING OR 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; CALCULATING OR 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 bezieht sich auf Textverarbeitungsverfahren zum Editieren vor Text natürlicher Sprache. Im Besonderen betrifft die Erfindung Editierverfahren, die Interpunktion berücksichtigen.
  • Text Editing, Version 1.0, Xerox Corporation, 1985, Seiten 47-56, beschreibt Merkmale des 'ViewPoint Document Editor', erhältlich von Xerox Corporation. Seiten 49-52 beschreiben das Mehrfach-Wicken-Auswahlverfahren, bei dem die Anzahl von Mausklicks die gewünschte Texteinheit angibt, wobei ein Klick ein Zeichen auswählt, zwei Klicks ein Wort auswählen, drei Klicks einen Satz und vier Klicks einen Absatz auswählen. Der Editor verwendet besondere Regeln, um Text als Wörter oder Sätze zu interpretieren. Wie auf Seite 49 beschrieben, kann eine Auswahl eines Zeichens, Wortes oder Absatzes durch das Mehrfach-Klicken-Verfahren durch ein Auswahl-Anpassungsverfahren erweitert werden, um zusätzliche Zeichen, Wörter oder Absätze einzuschließen. Operationen zum Bewegen, Kopieren und Löschen können auf die Auswahl angewandt werden. Im Fall von Bewegen- oder Kopieren-Operationen wird eine Auswahl mit dem Mehrfach-Klicken-Verfahren zwischen anderen Texteinheiten auf derselben Stufe platziert werden, sodass ein Wort zwischen Wörtern, ein Satz zwischen Sätzen und ein Absatz zwischen Absätzen platziert wird. Eine Auswahl mit dem Mehrfach-Klicken-Verfahren schließt auch den vorangehenden oder folgenden Zwischenraum oder Zwischenräume ein; daher kann z. B. ein Wort verschoben oder aus einem Satz gelöscht werden, wobei die restlichen Wörter und Interpunktionszeichen in dem Salz im richtigen Abstand belassen werden. Desgleichen kann ein Satz verschoben oder aus einem Absatz gelöscht werden, wobei die restlichen Sätze in dem Absatz im richtigen Abstand belassen werden.
  • Verschiedene andere kommerzielle Produkte weisen ähnliche Eigenschaften wie ViewPoint auf, die Auswahlbefehle von einer Tastatur oder mit einer Maus oder ähnlichen Zeigersteuergeräten einschließen. Herkömmlicherweise wählt ein einzelner Klick mit der Taste eines Zeigersteuergerätes einen Bereich aus, der an der Zeichengrenze nächst der Position des Zeigers zum Zeitpunkt des Klicks beginnt. Bei einer Lösung enthält der mit einem einzelnen Klick gewählte Bereich keine Zeichen, kann aber durch Bewegen des Zeigers über die hinzufügenden Zeichen Zeichen um Zeichen erweitert werden. Bei einer anderen Lösung enthält der mit einem einzelnen Klick gewählte Bereich ein Zeichen und kann mit einem einzelnen Klick einer anderen Taste mit dem Zeiger an dem gewünschten Endpunkt der Auswahl beliebig erweitert werden.
  • Auch ist es üblich, die Auswahl durch Doppelklicken oder zweimaliges Klicken in Folge mit dem Zeiger an derselben Stelle bereitzustellen. Doppelklicken wählt gewöhnlich das Wort aus, das die Zeigerposition am nächsten umgibt, und nachfolgende Justierungen der Auswahl werden gewöhnlich wortweise vorgenommen. Der Macintosh Personal Computer von Apple Corporation stellt z. B. eine Benutzerschnittstelle bereit, bei der Mehrfachklicken ein Wort auswählt "Word", eine kommerzieller Texteditor von Microsoft Corporation, bietet eine Erweiterung einer solchen Auswahl auf zusätzliche ganze Wörter. Microsoft Word und andere Texteditoren, einschließlich WordPerfect von WordPerfect Corporation und Emacs von Free Software Foundation, Cambridge, Massachusetts, erlauben die Auswahl eines Satzes und die Erweiterung auf zusätzliche ganze Sätze. Microsoft Word und Fullwrite Professional von Ashton-Tate Corporation erlauben des Weiteren die Auswahl nach Absatz. Fullwrite Professional erlaubt außerdem dem Benutzer, ein Anführungszeichen bereitzustellen, ohne anzugeben, ob es der Beginn oder das Ende eines Zitats ist, wobei die Software ein Öffnen- oder Schließen-Anführungszeichen auf der Basis der vorangehenden Zeichen bereitstellt.
  • Text Editing and Processing, Symbolics, Inc., Juli 1986, Seiten 24-31 und 63-111, beschreibt Texteditierungseigenschaften einer Version von Emacs, genannt "Zmacs". Seiten 67-70 beschreiben Mausoperationen, die das Klicken auf ein Wort, um das ganze Wort zu kopieren, auf eine Klammer, um sie, ihre passende Klammer und den Text dazwischen zu kopieren, auf ein Anführugszeichen, um es, sein passendes Anführungszeichen und den Text dazwischen zu kopieren, oder nach oder vor einer Zeile, um die ganze Zeile zu kopieren, einschließen. Geeignete Zwischenräume werden von eingefügten Objekten platziert, sodass Zwischenräume um ein eingefügtes Wort oder Satz herum automatisch eingefügt werden. Seiten 71-75 beschreiben Bewegungsbefehle, einschließlich Bewegen nach Wort, d. h. eine Folge von alphanumerischen Zeichen, nach Salz, endend mit einem Fragezeichen, einem Punkt oder einem Ausrufungszeichen, dem eine neue Zeile oder ein Zwischenraum und eine Zeilenschaltung oder ein anderer Zwischenraum folgen, mit jeder Zahl von Schlusszeichen zwischen der Satzendeinterpunktion und dem leeren Raum, der folgt, und nach Zeile, abgegrenzt durch eine Zeilenschaltung. Seite 79 beschreibt das Bewegen nach Absatz, abgegrenzt durch eine Zeilenschaltung gefolgt von Zwischenräumen, eine leere Zeile oder Seitenzeichen allein auf einer Zeile. Seite 80 beschreibt das Bewegen nach Seite, abgegrenzt von einem Seitenzeichen. Kapitel 5, Seiten 83-97, beschreibt das Löschen und Transportieren von Text, wobei die Seiten 83-89 beschreiben, wie der Inhalt einer Geschichte rückgewonnen wird. Kapitel 6, Seiten 99-111, beschreibt das Arbeiten mit Bereichen und erörtert Punkt und Strich.
  • 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 3-4 gezeigt und beschrieben, wird jede Kette in Komponentenwörter zerlegt Mögliche Abkürzungen werden identifiziert und gegen eine Tabele von üblichen Abkürzungen geprüft, um Abkürzungen zu identifizieren, die einen Satz nicht beenden können. Die Endeinterpunktion und die folgende Kette werden analysiert, um das Schlusswort eines Satzes zu identifizieren. Wenn Satzgrenzen ermittelt wurden, können ein Grammatikprüfer, ein Interpunktionsanalysator, ein Lesbarkeitsanalysator oder eine andere höherstufige Textverarbeitung angewandt werden.
  • EP-A-0230339 offenbart eine Vorrichtung zum Hinzufügen von Interpunktion zu einem übersetzten Text, der keine Interpunktion hat, indem ein Interpunktionszeichen unabhängig von einem Interpunktionszeichen in dem ursprünglichen Text erzeugt wird. Im Gegensatz dazu korrigiert die vorliegende Erfindung die Interpunktion in einem bestehenden Text.
  • Das Dokument 'Computer Software for Working With a Language' von Terry Winograd, veröffentlicht in Scientific American, 251 (1984) September, Nr. 3, New York, beschreibt verschiedene Computerprogramme, die Linguistische Symbole in Textverarbeitungssoftware handhaben können. Ein solches Beispiel ist die Werkbank-Software des Schreibers, entwickelt in AT&T Laboratorien, die Programme umfasst, die nach wiederholten Wörtern wie "dei der" sowie nach falscher Interpunktion wie"?." suchen. Dies wird erreicht, indem ein Text nach besonderen Zeichenfolgen abgesucht wird,
  • JP-A-63-182771 offenbart das Korrigieren der Interpunktion in einem Dokument. Dies wird mittels einer Stilanalysenfunktion erreicht, die die Interpunktion im dem Dokument entweder mit der Interpunktion einer vorherigen Übersetzung des Dokuments oder mit einem Satz von* vordefinierten Interpunktionsketten vergleicht. Eine Liste der Stellen aller identifizierten Fehler wird dann zusammen mit einem revidierten Dokument erzeugt, in dem die Satzzeichen erzeugt werden.
  • Andere Hintergrundtechnik wird in JP-A-62-290966, JP-A-61-107469, JP-A-63-193263, JP- A-61-157971, JP-A-63-187361 und JP-A-0410062 offenbart.
  • Nach einem Aspekt der vorliegenden Erfindung umfasst ein Verfahren zum Betreiben eines Prozessors, um Texteditierung durchzuführen, das Betreiben des Prozessors, um eine eiste Folge von wenigstens einer Texteditieroperation in Bezuf auf Textdaten, die einen Text definieren, durchzuführen, wobei der Text ein Wort und ein erstes Interpunktionszeichen in einem Bereich an einem Ende des Wortes enthält, dadurch gekennzeichnet, dass das Verfahren des Weiteren umfasst.
  • Betreiben des Prozessors zur Verwendung der Textdaten, um automatisch operationsdefinierende Daten zu erlangen, wobei die operationsdefinierenden Daten Daten sind, die eine zweite Folge von wenigstens einer Texteditieroperation des Prozessors definieren, die operationsdefinierenden Daten die zweite Folge als eine Folge definieren, die, wenn nach der ersten Folge ausgeführt, die Textdaten modifiziert, um modifizierte Textdaten zu erzeugen, die einen modifizierten Text definieren, der das Wort enthält, und in dem ein zweites Interpunktionszeichen in dem Bereich an dem einen Ende des Wortes anstelle des ersten Interpunktionszeichens liegt, wobei das zweite Interpunktionszeichen richtig ist und sich von dem ersten Interpunktionszeichen unterscheidet.
  • Die vorliegende Erfindung stellt Textverarbeitungsverfahren bereit, die Information über Interpunktionsstrukturen eines Textes verwenden, um verbesserte Textverarbeitung bereitzustellen. Zum Beispiel kann ein erfindungsgemäßer Editor Festsetzungsdaten liefern, die eine Folge von Operationen definieren, die automatisch die Texttyp-Interpunktionsstruktur korrigiert, nachdem ein Benutzer den Text bearbeitet hat. Außerdem kann der Editor Festsetzungsdaten liefern, die eine Folge von Operationen definieren, die eine höherstufige Operation implementiert, die die Effizienz der Textverarbeitung verbessert.
  • Ein wohl bekanntes Problem bei herkömmlichen Texteditoren ist, dass nach einer Operation, die einen Text manipuliert, der Benutzer typischerweise den Text durchgehen muss, um zahlreiche Interpunktionsmerkmale, die Satzzeichen, Großschreibung und Beabstandung einschließen, zu korrigieren. Zum Beispiel kann das Bewegen eines Wortes zum oder vom Anfang oder Ende eines Satzes den Satz falsch interpunktiert, mit falscher Interpunktion und Beabstandung zurücklassen. Das Erstellen, Verwenden und Unterhalten einer Textdatenstruktur mit Strukturdaten, die eine autonome Interpunktionsstruktur angeben, verbraucht erhebliche Zeit und Speicher, sodass Korrekturverfahren rechnerisch nicht effizient sind. Außerdem begrenzen solche Verfahren die Operationen auf solche, die der Datenstruktur entsprechen, sodass der Benutzer daran gehindert wird, Textzeichen einfach auszuwählen und direkt zu manipulieren, wie es mit herkömmlichen, kommerziell beliebten Texteditoren für Text natürlicher Sprache möglich ist. Außerdem können solche Texteditoren nicht ohne weiteres erweitert werden, um solche Datenstrukturen zu handhaben.
  • Dieser Aspekt der Erfindung basiert auf der Erkenntnis, dass Text in Texteinheiten zerlegt werden kann, von denen jede einen spezifischen textlichen Typ aufweist, so dass alte Interpunktionsmerkmale an Grenzen zwischen solchen Einheiten auftreten. Dieser Aspekt basiert aus der weiteren Entdeckung, dass Interpunktionsfehler in zwei fundamentale Arten von Fehlern zerlegt werden können: Fehler beim Positionieren von Texttypgrenzen und fehlerhafte Kombinationen von Interpunktionsmerkmalen an Texttypgrenzen. Die zweite Art von Fehlern, als Fehler in der Texttyp-Interpunktionsstruktur bezeichnet, kann korrigiert werden, indem nach einer Manipulationsoperation eine Folge von Operationen ausgeführt wird, die in einem Text mit richtiger Texttyp-Interpunktionsstruktur resultiert, was bedeutet, dass die Interpunktionsmerkmale an jeder Texttypgrenze für diese Grenze geeignet sind. Mit anderen Worten, die korrigierende Folge von Operationen modifiziert Textdaten gemäß einem Text, sodass die modifizierten Texdaten einem modifizierten Text entsprechen, der eine richtige Texttyp-Interpunktionsstruktur besitzt.
  • Dieser Aspekt der Erfindung beruht des Weiteren auf der Erkenntnis, dass eine Folge von Operationen, die zu einer richtigen Texttyp-Interpunktionsstruktur führt, mit einem bekannten Texteditor ausgeführt werden kann, der als Host für einen Zeichensetzer dienen kann, der von dem Host-Editor aufgerufen werden kann, um geeignete Operationsfolgen zu bestimmen, die der Host-Editor dann ausführt. Dieses Problem könnte umgangen werden, indem eine Datenstruktur verwendet wird, die dem Text entsprechende Textdaten enthält, wobei Strukturdaten eine Interpunktionsstruktur des Textes angeben. Diese Interpunktionsstruktur könnte die Verteilung von einem oder mehr Interpunktionsmerkmalen in dem Text und die Abhängigkeiten zwischen ihnen ohne Bezug auf den lexikalischen Inhalt des Textes definieren. Eine solche Datenstruktur kann benutzt werden, um sicherzustellen, dass Operationen auf einem Text von einer richtigen Interpunktionsstruktur zu einer anderen führen, wo bei jede Operation in einer Weise ausgeführt wird, die die Datenstruktur bewahrt, sodass da Sysstem eine korrekte Zeichensetzung für den Text liefern kann.
  • Dieser Aspekt basiert auf der weiteren Erkenntnis, dass die Folge von Operationen parallel mit den normalen Operationen des Host-Editors bestimmt werden kann. Diese Erkenntnis basiert wiederum auf einer Analyse der Arbeitsweise von herkömmlichen Texteditoren und der Entdeckung, dass die meisten Editoren ohne weiteres Daten auf bestimmten Stufen ihrer normalen Operationen bereitstellen können, auf deren Basis eine geeignete Folge von Operationen erlangt werden kann, um eine Texttyp-Interpunktionsstruktur zu korrigieren.
  • Ein herkömmlicher anzeigebasierter Texteditor umfasst typischerweise eine Tastatur, um eine Codefolge zu empfangen, die Text entspricht, den ein Benutzer geschrieben hat, und eine Anzeigeeinheit, um einen Text, der den zuvor empfangenen Textcodes entspricht, einem Benutzer zum Lesen zu präsentieren. Der Texteditor behandelt solche Dinge wie Zeilenumbruch, Zwischenzeilen- und Zwischenabsatz-Abstände, Ränder und Absatzeinzüge automatisch, so dass der auf der Anzeige präsentierte Text dem Aussehen sehr nahekommt, das derselbe Text auf einer gedruckten Seite haben würde. Der Benutzer ist dann imstande, die Tastatur und typischerweise ein Zeigersteuergerät, z. B. eine Maus, zu benutzen, um Revisionen an dem Text vorzunehmen.
  • Bei einem herkömmlichen Texteditor kann der Benutzer typischerweise Revisionen durch Anfordern von Operationen vornehmen, die in zwei wichtige Klassen fallen. Eine Klasse, Auswahloperationen, umfasst solche Operationen, mit denen der Benutzer einen Teil des Textes aussuchen kann, "momentane Auswahl" oder einfach "Auswahl" genannt, der das Argument einer nachfolgenden Operation wird. Eine andere Klasse, Manipulationsoperationen, umfasst solche Operationen, mit denen der Benutzer den Text modifizieren kann. Die bei einem gegebenen Texteditor zur Verfügung stehenden Manipulationsoperationen basieren typischerweise auf zwei Mustern: Schneiden-Kopieren-Einkleben oder Bewegen- Kopieren.
  • Beim Manipulieren nach dem Schneiden-Kopieren-Einkleben-Muster gibt es zwei Grundoperationen: Eine Kopieren-Operation legt eine Kopie der Textcodes, die der momentanen Auswahl entsprechen, in eine temporäre Datenstruktur, typisch "Schnittpuffer" genannt; eine Schneiden-Operation führt eine Kopieren-Operation aus, der ein Löschen der momentanen Auswahl von dem Text folgt und eine Einkleben-Operation ersetzt die momentane Auswahl mit dem Inhalt des Schnittpuffers. Beim Manipulieren nach dem Bewegen-Kopieren-Muster gibt es zwei Auswahlen, hierin als "Primärauswahl" und "Sekundärauswahl" bezeichnet, und zwei Grundoperationen: Eine Kopieroperation positioniert eine Kopie der Primärauswahl an der Stelle der Sekundärauswahl, und eine Bewegen-Operation führt eine Kopieren-Operation aus, der ein Löschen der Primärauswahl von ihrer ursprünglichen Position folgt. Beide Muster enthalten außerdem eine unabhängige Löschen-Operation, die die momentane Auswahl oder die Primärauswahl ohne Bezug auf einen Schnittpuffer oder eine Sekundärauswahl löscht.
  • Dieser Aspekt der vorliegenden Erfindung geht davon aus, dass der Host-Editor eine herkömmliche Textdatenstruktur benutzt, die eine Folge von Codes enthält die Codes für Zeichen, Satzzeichen, Großschreibung und Zwischenräume einschließt. Dieser Aspekt liefert Techniken, mit denen ein Host-Editor, der eine solche Datenstruktur oder eine Variante davon benutzt, mit relativ geringfügigen Modifikationen erweitert werden kann. Diese Techniken umfassen das Bereitstellen von Zeichensetzerfunktionen, von denen jede ein Satz von Anweisungen ist, der Daten von dem Host-Editor erhält und diese Daten verwendet, um eine Folge von Operationen zu bestimmen, die zu einem modifizierten Text mit einer richtigen Texttyp-Interpunktionsstruktur führen würde. Der Host-Editor enthält Funktionen, von denen jede ein Satz von Anweisungen ist, der eine Zeichensetzerfunktion aufruft, um eine Folge von Operationen zu erlangen, und dann die Folge von Operationen mittels herkömmlicher Host-Editoroperationen ausführt.
  • Dieser Aspekt basiert des Weiteren auf der Entdeckung von Verfahren zum Erlangen der für eine Zeichensetzerfunktion benötigten Information, um eine geeignete Folge von Operationen zu bestimmen. Diese Information kann von dem Host-Editor erlangt werden, wenn er eine seiner Grund-Manipulationsoperationen vollendet, ob eine Bewegen- oder Kopieren- Operation in dem Bewegen-Kopieren-Muster oder eine Schneiden-, Kopieren- oder Einkleben-Operation in dem Schneiden-Kopieren-Einkleben-Muster, und wenn er eine Operation vollendet, die eine Änderung an der Auswahl vornimmt, ob die Primär- oder Sekundärauswahl in dem Bewegen-Kopieren-Muster oder der Inhalt des Schnittpuffers in dem Schneiden- Kopieren-Einkleben-Muster. Wann immer der Host-Editor z. B. eine Anforderung zum Modifizieren der Auswahl empfängt, kann eine Host-Editorfunktion eine Zeichensetzerfunktion aufrufen, die dann Anforderungen an den Host-Editor bereitstellt, als Reaktion aufweiche der Host-Editor relevante Information bereitstellt. Die zu diesem Zeitpunkt erlangte Information kann z. B. Textcodes in dem Bereich jedes Endes der momentanen Auswahl enthalten, die die Zeichensetzerfunktion verwenden kann, um die Enden einer neuen Auswahl zu finden. Außerdem, wann immer der Host-Editor eine seiner Grund-Manipulationsoperationen vollendet, kann er eine Zeichensetzerfunktion aufrufen, die, wenn die Textdaten modifiziert worden sind, eine geeignete Folge von Operationen basierend darauf, welche der Grund- Manipulationsoperationen durchgeführt wurde, und auf den Texttypgrenzen der Auswahl, auf der sie durchgeführt wurden, bestimmen kann.
  • Dieser Aspekt basiert weiter auf dem Erkennen eines Grundproblems beim Bestimmen einer geeigneten Folge von Operationen. Die Auswahl- und Manipulationsoperationen des Host- Editors hängen herkömmlich nicht davon ab, ob die Textdaten einem Text entsprechen, der eine korrekte Texttyp-Interpunktionsstruktur aufweist. Die Textcodes, die Interpunktionsmerkmale wie Satzzeichen, Zwischenräume und Großschreibung angeben, werden herkömmlich wie andere Codes in der Folge von Textdaten behandelt, was den Host-Editor für die Texttyp-Interpunktionsstruktur des Textes, die durch solche Codes angegeben wird, blind macht. Der Host-Editor stellt keine Daten bereit, die die geeignete Folge von Operationen direkt definieren.
  • Dieses Problem ist besonders wichtig beim Korrigieren von Texttyp-Interpunktionsstrukturen, weil eine gegebene Folge von Textcodes, die Interpunktionsmerkmale angibt, in einigen Fällen richtig und in anderen falsch sein kann, sodass es nicht möglich ist, zu bestimmen, ob sie ohne zusätzliche Information korrigiert werden muss. Außerdem kann eine falsche Folge von Textcodes auf mehr als eine Weise entstehen, sodass eine Entscheidung, wie sie korrigiert werden sollte, zusätzliche Information erfordern wird. Es ist desahlb erforderlich, zusätzliche Information von dem Host-Editor zu erlangen, um in der Lage zu sein, eine geeignete Folge von Operationen in jeder dieser Situationen zu bestimmen.
  • Die Erfindung löst dieses Problem mit Zeichensetzerfunktionen, die bestimmte Merkmale der Texttyp-Interpunktionsstruktur einer Auswahl mittels einer Grammatik von Texttypen identifiziert Daten, die sich auf diese Merkmaie beziehen, werden anschließend benutzt, um eine geeignete Folge von Operationen zu bestimmen, um eine Texttyp-Interpunktionsstruktur zu korrigieren. Bei der vorliegenden Erfindung können die Zeichensetzerfunktionen die Texttyp-Interpunktionsstruktur des Textes in dem Bereich jedes Endes einer Auswahl basierend auf einer Grammatik von Texttypen zu den Textcodes von diesen Bereichen herleiten. Zum Beispiel kann eine Zeichensetzerfunktion die Textcodes tokenisieren und dann Texttypgrenzen durch Abgleichen des Tokenstromes gegen einen aus der Grammatik von Texttypen gewonnenen vordefinierten Salz von Tokenmustern identifizieren. Durch Identifizieren von Texttypgrenzen kann der Zeichensetzer bestimmen, wo die Endpunkte einer neuen Auswahl sein müssten und andere Daten bezüglich der neuen Auswahl erlangen, um einer nachfolgenden Funktion zu erlauben, eine geeignete Folge von Operationen zu bstimmen, um eine Texttyp- Interpunktunktionsstruktur zu korrigieren. Sie kann dann diese Daten speichern und Daten an den Host-Editor liefern, die die Endpunkte der neuen Auswahl innerhalb der Textdatenstruktur definieren. Der Host-Editor passt dann seine Auswahl an diese Endpunkte an und setzt seine herkömmlichen Operationen fort. Unterdessen behält der Zeichensetzer seine eigenen Daten bezüglich der momentanen Auswahl, einschließlich ihrer Endpunkte, aber auch einschließlich zusätzlicher Daten über Texttypgrenzen an ihren Enden.
  • Sobald eine geeignete Folge von Operationen zum Bereitstellen einer richtigen Texttyp-lnterpunktionsstruktur identifiziert worden ist, entsteht ein anderes Grundproblem: Es ist erforderlich, Daten, die diese Operationen definieren, genannt Festsetzungsdaten, dem Host-Editor in einer Weise zur Verfügung zu stellen, die keine größeren Modifikationen des Host- Editors nötig macht.
  • Die Erfindung löst dieses Problem basierend auf der Entdeckung, dass ein relativ kleiner Satz von Festsetzungsdaten benutzt werden kann, um eine Folge von Operationen zu definieren, die mit herkömmlichen Host-Editorfunktionen ausgeführt werden kann. Der Host-Editor kann eine Datenstruktur bereitstellen, in die der Zeichensetzer die Festsetzungsdaten lädt. Der Host-Editor kann dann die Folge von Operationen auf der Basis der Festsetzungsdaten in der Datenstruktur ausführen. Die Festsetzungsdaten können z. B. Daten enthalten, die einen Startpunkt in den Textdaten, eine Anzahl von Textcodes in den Textdaten zum Löschen, eine Anzahl von Textcodes zum Einfügen, eine Liste einzufügender Textcodes, eine Stelle in den Textdaten zum Ändern der Großschreibung und wie die Großschreibung an dieser Stelle zu ändern ist, definieren. Der Zeichensetzer ist in der Lage, diese Daten basierend auf zuvor in Bezug auf die Auswahl erhaltenen Daten und auch basierend darauf, welche der Manipulationsoperationen von dem Host-Editor ausgeführt wurden, bereitzustellen. Selbst wenn die Anzahl möglicher Operationsfolgen groß ist, können ein oder mehr Sätze von Festsetzungsdaten benutzt werden, um jede derartige Folge zu definieren.
  • Eine Stärke dieser Technik ist, dass sie Auswahloperationen bereitstellt, die auf Texttypen arbeiten, wobei Auswahlendpunkte basierend auf Texttypgrenzen identifiziert werden. Eine andere Stärke ist, dass sie für Manipulationsoperationen von entweder dem Bewegen-Kopieren-Muster oder dem Schneiden-Kopieren-Einkleben-Muster eine automatische Korrektur von Interpunktionsmerkmalen in dem von der Operation betroffenen Text bereitstellt.
  • Ein anderer Aspekt der Erfindung beruht auf dem Erkennen eines anderen Problems beim herkömmlichen Editieren von Text. Herkömmlich sind Texteditieroperationen auf niederstufige Operationen wie Bewegen, Kopieren und Löschen oder Schneiden, Kopieren und Einkleben beschränkt, die, wie oben angemerkt, typischerweise erfordern, dass der Benutzer eine Anzahl korrektiver Operationen durchführt, um eine Editieroperation zu vollenden.
  • Dieser Aspekt basiert weiter auf der Erkenntnis, dass dieses Problem zum Teil gelöst werden kann, indem höherstufige Textmanipulationsoperationen bereitsgestellt werden, die Textcodes an ausgewählten Texttypgrenzen in dem Text modifizieren. Diese Operationen erfordern keine korrektiven Operationen und können Information über eine mit den oben beschriebenen Techniken erlangte Auswahl verwenden. Eine derartige höherstufige Operation ist, den Texttyp eines Teils eines Textes zu ändern. Der Teil kann eine Texteinheit sein, in welchem Fall die Interpunktionsmerkmale, einschließlich Satzzeichen, Zwischenräumen und Großschreibung, an den Grenzen der Texteinheit in die für den neuen Texttyp geeigneten geändert werden. Der Teil könnte auch ein Einfügepunkt an einer Texttypgrenze sein, wobei in diesem Fall die Interpunktionsmerkmale an der Texttypgrenze in die für eine Grenze dieses Texttyps geeigneten geändert werden.
  • Dieser Aspekt basiert auf der weiteren Erkenntnis, dass solche höherstufigen Operationen durch einen Mechanismus wie der für die Operationen, die eine Texttyp-Interpunktionsstruktur korrigieren, bereitgestellt werden kann. Wenn der Host-Editor eine Anforderung für eine höherstufige Operation empfängt, ruft er eine Zeichensetzerfunktion auf, um Festsetzungsdaten zu erlangen, die eine der verlangten Operation gleichwertige Folge von Operationen definieren. Wenn die Zeichensetzerfunktion die Festsetzungsdaten zurückgibt, führt der Host-Editor die Folge von Operationen aus, um die verlangte Operation zu vollenden.
  • Die Erfindung wird nun ausführlicher in Beispielform mit Verweis auf die begleitenden Zeichnungen beschrieben. Inhalt der Zeichnungen:
  • Fig. 1 ist ein Flussdiagramm mit parallelen Textrahmen, das allgemeine Schritte in einer erfindungsgemäßen Munipulationsoperation zeigt.
  • Fig. 2 ist ein Schematisches Blockschaltbild, das Komponenten eines Systems zeigt, das einen Host-Editor und einen erfindungsgemäßen Zeichensetzei enthält.
  • Fig. 3 ist ein Flussdiagramm, das allgemeine Schritte in einer Auswahloperation zeigt, die von einem System wie das in Fig. 2 ausgeführt wird.
  • Fig. 4 ist ein Flussdiagramm, das allgemeine Schritte in einer Manipulationsoperation oder einer anderen Operation mit Festsetzungsdaten zeigt, die von einem System wie das in Fig. 2 ausgeführt wird.
  • Fig. 5 ist ein Flussdiagramm, das Host-Editorschritte beim Modifizieren einer Auswahl zeigt.
  • Fig. 6 ist ein Flussdiagramm, das Host-Editorschritte beim Ausführen einer durch Festsetzungdaten definierten Operationsfolge zeigt.
  • Fig. 7 ist ein Flussdigaramm, das Schritte beim Rückgewinnen von Textcodes aus der Textdatenstruktur eines Host-Editors zeigt.
  • Fig. 8 ist ein Flussdiagramm, das Schritte beim Durchsuchen der Textdatenstruktur des Host-Editors nach einem Textcode zeigt.
  • Fig. 9 ist ein Flussdiagramm, das Schritte beim Scannen von Textcodes zum Finden einer Tokengrenze zeigt.
  • Fig. 10 ist ein Flussdiagramm, das allgemeine Schritte in einer Zeichensetzer-Auswahloperation zeigt.
  • Fig. 11 ist eine schematische Darstellung einer Folge von Texttypcodes, die eine Texttypgrenze enthält.
  • Fig. 12 ist eine schematische Darstellung einer Folge von Textcodes, die Merkmale von Texttypgrenzen, wie zwischen aneinandergrenzenden Textcodes bestimmt, zeigt.
  • Fig. 13 ist eine Folge von schematischen Darstellungen von Textcodefolgen, die eine Änderung im Texttyp der Texttypgrenzen an den Enden einer Texteinheitsauswahl veranschaulicht.
  • Fig. 14 ist eine Folge von schematischen Darstellungen von Textcodefolgen, die eine Änderung im Texttyp einer Texttypgrenze, die einen Einfügungspunkt enthält, veranschaulicht.
  • 1. Glossar
  • Wie hierin gebraucht, haben die folgenden Begriffe die angegebenen Bedeutungen:
  • "Text" bedeutet eine Anordnung von geschriebenen Wörtern, gewöhlich eine Folge. "Geschriebene Wörter" bedeutet Wörter, die in der Form von einzelnen Elementen wie Zeichen, Codes oder dergleichen aufgezeichnet werden. In fortlaufender Form aufgezeichnete Wörter wie aufgezeichnete fortlaufende Sprache sind daher keine geschriebenen Wörter. Ein Text kann ein oder mehr Wörter enthalten, jedes mit mindestens einem diskreten Element.
  • "Natursprachentext" bedeutet einen Text in einer der natürlichen Sprachen, z. B. Englisch.
  • Eine "Einheit von Text" oder eine "Texteinheit" bedeutet eine Einheit, in die Text geteilt werden kann.
  • Ein "Texttyp" ist eine Kategorie von Texteinheiten, die syntaktische oder semantische, aber keine lexikalische Bedeutung hat, wie ausführlicher in der Trollope-Anwendung, hierin durch Verweis eingeschlossen, erklärt. Ein einzelnes Token oder Beispiel eines Texttyps wird hierin als "Texttypeinheit" bezeichnet, um von komplexeren Texteinheiten zu unterscheiden, die z. B. eine Reihe von Texttypeinheiten enthalten.
  • Eine "Texttypregel" ist eine Regel, deren Anwendung vom Texttyp abhängt. Mit anderen Worten, wenn ein Text in Texttypeinheiten geteilt ist, wird eine Texttypregel für solche Einheiten gelten, die Beispiele von bestimmten Texttypen, aber keine Einheiten von anderen Typen sind.
  • Eine "Grammatik von Texttypen" ist ein Satz von Texttypregeln, in dem jede Regel für einen betreffenden Texttyp Texttypen von Texttypeinheiten angibt, in die eine Texttypeinheit des betreffenden Texttyps geteilt werden kann. Außerdem definiert eine "Grammatik von Texttypen" alle und nur die annehmbaren Teilungen von Texttypeinheiten.
  • Ein "Interpunktionsmerkmal" eines Textes ist ein Merkmal, das sich auf eine oder mehr Texttypeinheiten bezieht, und das von der syntaktischen oder semantischen Bedeutung der verwandten Texttypeinheiten abhängt. Zum Beispiel kann ein Interpunktionsmerkmal eine Gruppierung von Texttypeinheiten, eine Verschachtelung einer Texttypeinheit in einer ändern, eine Trennung zwischen Texttypeinheiten, eine Begrenzung einer Texttypeinheit oder eine Hervorhebung oder andere Betonung einer Texttypeinheit angeben. Merkmale, die gewöhnlich als Interpunktionsmerkmale in Englisch benutzt werden, umfassen nicht alphanumerische typographische Merkmale wie Zwischenräume und Satzzeichen, einschließlich Kommas, Punkten, Semikolons, Doppelpunkten, Bindestrichen, Fragezeichen, Klammern, eckigen Klammern, Unterstreichung usw. sowie Merkmale von alphanumerischen Elementen wie Groß/Klein-Schreibung oder Schriftart und Formatmerkmale wie Wagenrücklauf, Tabulatoren, Zentrierung und Einzug.
  • Eine "Interpunktionsstruktur" eines Textes ist eine Struktur, die Interpunktionsmerkmale des Textes enthält. Text, wie herkömmlich zum Betrachten und Editieren präsentiert, basiert auf einer Datenstruktur, die Daten umfasst, die eine Interpunktionsstruktur angeben, z. B. Zeichencodes, die Satzzeichen, Zwischenräume oder Großschreibung angeben. Die Textdatenstruktur kann Text entsprechen, der eine unrichtige Interpunktionstruktur aufweist, wobei in diesem Fall der Text falsch interpunktiert wird. Wie oben angemerkt, können Interpunktionsfehler in Fehler beim Positionieren von Texttypgrenzen und Fehler bei der Kombination von Interpunktionsmerkmalen, die an Texttypgrenzen auftreten, zerlegt werden. Der Satz (1) unten veranschaulicht z. B. einen Grenzpositionierungsfehler, weil es unpassend ist, eine Wendung mit "Hund" in diesem einzelnen Satz zu beenden; Satz (2) veranschaulicht einen Interpunktionsmerkmalfehler, weil es unpassend ist, ein Komma und einen Zwischenraum vor dem Punkt am Ende des Satzes einzuschließen, selbst wenn eine Wendung auch an dieser Grenze endet, und Satz (3) veranschaulicht beide Fehlerarten in einem einzigen Salz, weil es unpassend ist, ein Satzglied nach dem Wort "Hund" zu beenden, und weil es unpassend ist, ein Komma und einen Zwischenraum vor dem Semikolon am Ende des Satzglieds einzuschließen, selbst wenn eine Wendung auch an dieser Grenze endet.
  • (1) Der Hund, biss den Mann.
  • (2) Der Hund biss den Mann,.
  • (3) Der Hund,; biss den Mann.
  • Ein Fehler der zweiten Art, wie in den Sätzen (2) und (3) veranschaulicht, wird hierin als ein Fehler in der "Texttyp-Interpunktionsstruktur" bezeichnet, weil er durch Anwenden von Texttypregeln auf einen Text identifiziert werden kann. Ein Text mit keinen derartigen Fehlern wird als mit einer "korrekten Texttyp-Interpunktionsstruktur" beschrieben. Die vorliegende Erfindung kann Texttyp-Interpunktionsfehler korrigieren. Wie in Satz (1) veranschaulicht, kann jedoch ein Text eine korrekte Texttyp-Interpunktionsstruktur haben und dennoch falsch interpunktiert sein.
  • In einer Datenstruktur bedeutet "Textdaten" Daten, die einem Text in natürlicher Sprache entsprechen. Textdaten werden oft unter Verwendung von Standard-Druck- oder Anzeigecodes codiert, die Zeichencodes wie alphanumerische und Satzzeichencodes, Großschreibungscodes, Wagensteuercodes usw. enthalten, hierin kollektiv als "Textcodes" bezeichnet Textdaten können jedoch in einer breiten Vielfalt anderer Weisen codiert werden. Zum Beispiel können Textdaten als eine Bitmap codiert werden.
  • In einer Datenstruktur, die aus Textcodes bestehende Textdaten enthält, bedeutet der Begriff "Interpunktionscodes" von einem System benutzte Textcodes, um Interpunktionsmerkmale des durch die Textdaten dargestellten Natursprachentext anzugeben. Interpunktionscodes umfassen typischerweise Textcodes, die Satzzeichen, Zwischeräume und Großschreibung angeben.
  • Eine "Worteinheit" ist eine Folge von Textcodes, die lexikalische Bedeutung hat und die zu Zwecken eines gegebenen Systems auf der Basis von Interpunktionscodes nicht in kleinere Folgen teilbar ist. Eine Worteinheit ist somit eine atomische lexikalische Einheit, und ein Textcode innerhalb einer Worteinheit wird hierin als "Zeichencode" bezeichnet, selbst wenn er auch ein Interpunktionscode sein kann. Ein Interpunktionscode innerhalb einer Worteinheit kann ein Interpunktionsmerkmal angeben oder nicht. Ein Interpunktionscode, der einen großgeschriebenen Buchstaben am Anfang eines Satzes angibt, gibt z. B. ein Interpunktionsmerkmal an, während ein Interpunktionscode, der einen großgeschriebenen Buchstaben am Anfang eines Eigennamens angibt, dies nicht tut.
  • Eine "Texttypgrenze" ist eine Folge von einem oder mehr Interpunktionscodes, die zwischen Worteinheiten liegt und einen spezifischen Texttyp in Textdaten, die Text entsprechen, mit einer korrekten Interpunktionsstruktur abgrenzt. Eine Texttypgrenze wird hierin manchmal nach Texttyp wie "Wortgrenze", "Wendungsgrenze", "Satzgrenze" usw. bezeichnet.
  • Eine "natürliche Grenze" erscheint an jedem Ende jeder Worteinheit in Textdaten. Eine natürliche Grenze kann eine Texttypgrenze einschließen oder sie kann keine Interpunktionscodes einschließen. Eine natürliche Grenze ohne Interpunktionscodes kann trotzdem einen spezifischen Texttyp abschließen, und solche natürlichen Grenzen werden hierin manchmal als leere natürliche Grenzen eines spezifizierten Typs bezeichnet. Zum Beispiel erscheinen leere natürliche Grenzen des Typs Absatz typischerweise am Anfang und Ende eines Dokumente.
  • Eine "Manipulationsoperation" auf Textdaten, die einem Text entsprechen, ist eine Operation, die die Textdaten modifiziert, sodass sie einem modifizierten Text entsprechen. Eine Manipulationsoperation wird typischerweise in Form eines Arguments, das ein Teil des Textes ist, und einer Operation auf dem Argument wie Bewegen, Kopieren, Schneiden, Einkleben oder Löschen spezifiziert. Eine "Auswahloperation" ist eine Operation, die sich auf den Teil des Textes bezieht, der anschließend als ein Argument für eine Manipulationsoperation dienen kann.
  • "Festsetzungsdaten" sind Daten, die eine Folge von einer oder mehr Manipulationsoperationen definieren, die Textdaten, die einem Text entsprechen, modifizieren würde, sodass die modifizierten Textdaten einem modifizierten Text mit einer korrekten Texttyp-Interpunktionsstruktur entsprechen. Die durch Festsetzungsdaten definierten Manipulationsoperationen können auf Textdaten, die Text entsprechen, der eine unrichtige Texttyp-Interpunktionsstruktur aufweist oder auf Textdaten durchgeführt werden, die Text entsprechen, der eine korrekte Texttyp-Interpunktionsstruktur aufweist, wobei in jedem Fall das Ergebnis eine korrekte Texttyp-Interpunktionsstruktur haben wird.
  • 2. Allgemeine Merkmale
  • Fig. 1-4 veranschaulichen mehrere allgemeine Merkmale der Erfindung. Fig. 1 ist ein Flussdiagramm, das allgemeine Schritte beim Manipulieren von Text und Bereitetellen von Festsetzungsdaten zeigt. Fig. 2 zeigt die Komponenten eines Systems, das einen Host-Editor und einen Zeichensetzer zum Implementieren der Schritte in Fug. 1 enthält Fig. 3 zeigt allgemeine Schritte in einer Auswahloperation mittels des Systems von Fig. 2. Fig. 4 zeigt allgemeine Schritte in einer Manipulationsoperation oder anderen Operation, die das Bereitstellen von Festlegungsdaten einschließt, wieder mittels des Systems von Fig. 2.
  • Die Schritte in Fig. 1 beginnen, wenn in Kasten 10 ein Datenprozessor eine Anforderung für eine Manipulationsoperation empfängt. Wie im Textrahmen 12 gezeigt, enthält diese Anforderung eine Primärauswahl, durch schattierte Fläche 14 angedeutet, das Drücken einer Kopiertaste 16 und eine Sekundärauswahl einer Stelle, durch Zeiger 18 angedeutet. Der Textrahmen 12 veranschaulicht folglich das Bewegen-Kopieren-Muster einer Textmanipulation, obwohl die Erfindung gleichermaßen auf das oben erörterte Schneiden-Kopieren-Einkleben- Muster anwendbar ist.
  • Nach Empfang der Anforderung in Kasten 10 manipuliert der Datenprozessor in Kasten 20 die Textdaten, die dem Text im Textrahmen 12 entsprechen, um manipulierte Textdaten, die dem im Textrahmen 22 gezeigten Text entsprechen, zu erlangen. Die Wörter "To be" und die Zwischenräume nach jedem der Wörter, die die Primärauswahl in der schattierten Räche 14 waren, sind an die durch Zeiger 18 angegebene Stelle kopiert worden und erscheinen jetzt in der schattierten Fläche 24. Die Manipulationsoperation hatte drei Fehler in der Großschreibung und der Beabstandung zur Folge, sodass die manipulierten Textdaten im Textrahmen 22 eine unrichtige Texttyp-Interpunktionsstruktur aufweisen.
  • In Kasten 30, schließlich, stellt der Datenprozessor Festsetzungsdaten bereit, die eine Folge von einer oder mehr Operationen definieren, um den Text werter zu manipulieren, sodass der entsprechende Text eine korrekte Texttyp-Interpunktionsstruktur aufweist. Diese Folge wird dann ausgeführt, was modifizierte Textdaten ergibt, die dem im Textrahmen 32 gezeigten modifizierten Text entsprechen.
  • Fig. 1 veranschaulicht wie die Erfindung die Textmanipulation sehr viel effizienter machen kann. Dem Benutzer ist die Mühe erspart worden, die benötigten Operationen anzufordern, um jeden der Fehler in Großschreibung und Beabstandung zu korrigieren.
  • Fig. 1 veranschaulicht in gewissem Umfang auch, wie Festsetzungsdaten erlangt werden können. Ein Aspekt der Erfindung basiert, wie oben beschrieben, auf der Erkenntnis, dass eine geeignete Operation fast immer aus den betroffenen natürlichen Grenzen, wenn vorhanden, oder aus verwendbaren Texttypen hergeleitet werden kann. Zum Beispiel hat der Beginn der schattierten Fläche 24 im Textrahmen 22 eine leere natürliche Grenze am Ende einer Worteinheit zur Linken und eine leere natürliche Grenze am Beginn einer Worteinheit zur Flechten, was dazu führt, dass ein Zwischenraum eingefügt werden müsste und der großgeschriebene Buchstabe, der folgt in Kleinschreibung geändert werden müsste. Desgleichen hat das Ende des schattierten Bereichs 24 eine natürliche Grenze vom Typ Wort zur Unken und eine natürliche Grenze vom Typ Satz zur Rechten, was dazu führt, das der Zwischenraum und der Punkt durch einen Punkt ersetzt werden müsste. Sobald Festsetzungsdaten, die diese Operationen definieren, bereitgestellt werden, können die Textdaten entsprechend geändert werden, um einen Text mit einer korrekten Texttyp-Interpunktionsstruktur, wie im Textrahmen 32 gezeigt, bereitzustellen.
  • Fig. 2 zeigt wie die in Fig. 1 gezeigten Schritte mit einem herkömmlichen kommerziell beliebten Texteditor implementiert werden können. Das System 50 in Fig. 2 umfasst einen Prozessor 52, der Eingangssignale von einer Tastatur/Maus 54 oder einer anderen geeigneten Eingabeeinrichtung empfängt und einen Ausgang zur Präsentation durch eine Anzeige 56 liefert. Der Prozessor 52 führt Anweisungen aus einem Programmspeicher 60 aus, der einen Host-Editor 62 und einen Zeichensetzer 64 enthält. Der Host-Editor 62 und der Zeichensetzer 64 enthalten je einen Satz von Routinen, können aber wegen der bestimmten Rollen, die sie spielen, jeweils als eine einzelne Wesenheit behandelt werden. Beim Ausführen des Host-Editors 62 und des Zeichensetzers 64 greit der Prozessor 52 auch auf verschiedene Datenstrukturen in einem Datenspeicher 70 zu, von denen einige in Fig. 2 gezeigt werden.
  • Beim Ausführen des Host-Editors 62 greift der Prozessor 52 auf eine Textdatenstruktur 72 zu, die, wie oben beschrieben, eine Folge von Textdaten enthält. Der Prozessor 52 kann auch auf eine Hostauswahl-Datenstruktur zugreifen, die z. B. ein Schnittpuffer oder ein anderer temporärer Speicher zum Speichern von einer oder mehr Auswahlen oder anderen Daten, die sich auf Auswahlen beziehen. Zu Zwecken der vorliegenden Erfindung sind die einzelnen Eigenschaften der Textdatenstruktur 72 und der Hostauswahl-Datenstruktur 74 und die Einzelheiten wie der Host-Editor 62 mit ihnen umgeht nicht wichtig, vorausgesetzt dass der Host-Editor 62 imstande ist, relevante Daten bereitzustellen, die dem Zeichensetzer 64 seine Rolle zu spielen erlauben. Zum Beispiel kann es, wie oben beschrieben, ausreichen, wenn der Host-Editor 62 in der Lage ist, Codes von der Textdatenstruktur 72 und Pufferpositionen innerhalb der Hostauswahl-Datenstruktur 74 bereitzustellen.
  • Der Datenspeicher 70 umfasst auch eine Auswahldatenstruktur 76 des Zeichensetzers, in der der Zeichensetzer 64 Auswahlen betreffende Daten speichert. Wie oben angemerkt, können diese Daten z. B. Information über eine Texttypgrenze in dem Bereich, der ein Ende der Auswahl umgibt, enthalten. Muster 78 sind ein Satz von Mustern, die der Zeichensetzer 64 benutzt, um eine Texttypgrenze zu identifizieren, Der Zeichensetzer 64 liefert Festsetzungsdaten durch Laden einer Festsetzungsdatenstruktur 80, aus denen der Host-Editor 62 Daten rückgewinnt. Nach Lokalisieren von Endpunkten einer Auswahl stellt der Zeichensetzer 64 Daten bereit, die die Endpunkte definieren, indem er eine Endpunktdatenstrktur 82 lädt, aus der der Host-Editor 62 gleichermaßen Daten rückgewinnt. Zusätzliche Datenstrukturen können, wenn angebracht, zur zusätzlichen Kommunikation zwischen dem Host-Editor 62 und dem Zeichensetzer 64 bereitgestellt werden.
  • Fig. 3 zeigt allgemeine Schritte, die vom System 50 beim Behandeln einer Benutzeranforderung für eine Auswahloperation ausgeführt werden können. Die Anforderung könnte z. B. ein Mausereignis wie ein Tastenklick sein. Als Reaktion auf die Benutzeranforderung führt der Prozessor 52 eine geeignete Routine vom Host-Editor 62 aus, um in Kasten 100 die Benutzeranforderung zu empfangen. Wie im Kasten 100 gezeigt, veranschaulicht Fig. 3 die Antwort auf eine Anforderung, die sich auf den Texttyp der momentanen Auswahl bezieht. Auswahlanforderungen, die sich nicht auf den Texttyp beziehen, dürfen den in Fig. 3 gezeigten Schiritten nicht folgen, wenn der Host-Editor 62 sie handhaben kann, ohne den Zeichensetzer 64 aufzurufen.
  • Der Host-Editor 62 ruft in Kasten 102 den Zeichensetzer 64 auf, der für die in Kasten 100 empfangene Anforderung relevante Daten bereitstellt. Diese Daten könnten z. B. eine momentane Zeigerposition und eine Angabe darüber enthalten, welche Maustaste mit dem Zeiger an dieser Position geklickt wurde. Die könnten auch eine Handhabe für die Endpunktstruktur 82 enthalten. Der Host-Editor 62 braucht vor dem Aufrufen des Zeichensetzers 64 keine Schritte auszuführen, die sich auf seine eigene Auswahldatenstruktur 74 beziehen, weil er sich auf den Zeichensetzer 64 verlassen kann, um eine geeignet modifizierte Auswahl bereitzustellen.
  • Nachdem er mit einer Auswahlanforderung vom Host-Editor 62 aufgerufen wurde, verzweigt in Kasten 104 der Zeichensetzer 64 abhängig davon, ob er Daten über zusätzliche Textcodes von der Textdatenstruktur 72 benötigt, um eine neue Auswahl und Endpositionen zu bestimmen. Wenn nicht, wird die momentane Auswahl durch die Anforderung nicht verändert, sodass der Zeichensetzer 64 in Kasten 106 abtritt, nachdem er alle anderen geeigneten Schritte ausgeführt hat.
  • Wenn er Daten über zusätzliche Textcodes benötigt, fordert der Zeichensetzer 64 in Kasten 110 Daten an, die angeben, an welchem Ende der momentanen Auswahl er zusätzliche Codes benötigt. Als Antwort liefert in Kasten 112 der Host-Editor die zusätzlichen Codes. Dann ermittelt in Kasten 114 der Zeichensetzer, ob die zusätzlichen Codes eine neue Endpunktposition enthalten, was mittels der Muster 78 erfolgen könnte. Wenn nicht, kehrt er zurück, um in Kasten 110 zusätzliche Codes anzufordern. Oder, wenn er einen Endpunkt gefunden hat und Codes zum Finden des anderen benötigt, kann er gleichermaßen zum Kasten 110 zurückkehren.
  • Wenn der Zeichensetzer 64 Codes empfangen hat, die neue Endpunktposttionen der Auswahl enthalten, ändert er in Kasten 116 die Daten in seiner Auswahldatenstruktur entsprechend. Dann lädt er in Kasten 118 Daten in die Endpunktdatenstruktur 82, um die identifizierten Endpunkte dem Host-Editor 62 zur Verfügung zu stellen. Wenn der Zechensetzer 64 die Steuerung an den Host-Editor 62 zurückgibt, modifiziert in Kasten 120 der Host seine Auswahldatenstruktur gemäß den Endpunkten in der Endpunktdatenstruktur 82. Dann zeigt in Kasten 122 der Host-Editor 62 die neue Auswahl geeignet an, z. B. als negatives Video.
  • Fig. 4 zeigt allgemeine Schritte, die vom System 50 beim Behandeln einer Benutzeranforderung für eine Manipulationsoperation oder eine andere Operation, die die Festsetzungsdatentechnik verwendet, ausgeführt werden können. In Kasten 140 empfängt der Host-Editor 62 die Anforderung, die ein Argument und eine Operation auf dem Argument, wie oben beschrieben, spezifizieren kann. Die Reaktion des Host-Editors 62 auf die Anforderung wird davon abhängen, welche Operation verlangt wird, wie durch die Verzweigung in Kasten 142 angedeutet. Wenn die Anforderung einer Kopieren-Operation in dem Schneiden-Kopieren- Einkleben-Muster (c-c-p) gilt, kann der Host-Editor 62 seine eigene Kopieren-Operation durchführen und kann den Zeichensetzer 64 aufrufen, um die Daten in seiner Auswahldatenstruktur 76 in Kasten 144 in eine Schnittpufferdatenstruktur (nicht gezeigt) zu kopieren. Diese relativ einfache Prozedur reicht aus, weil die Kopieren-Operation die Festsetzungsdatentechnik nich benötigt.
  • Wenn die Anforderung einer Operation gilt, die die Festsetzungsdatentechnik benutzt, z. B. Löschen, Schneiden oder Einkleben in dem Schneiden-Kopieren-Muster, Kopieren oder Bewegen in dem Kopieren-Bewegen-Muster oder einer Operation wie Ändern des Texttyps, unten beschrieben, wird einer komplizierteren Prozedur gefolgt. In Kasten 146 manipuliert der Host-Editor 62 die Textdatenstruktur 72 gemäß seiner herkömmlichen Operation, wenn angebracht. In Kasten 148 ruft dann der Host-Editor 62 den Zeichensetzer 64 auf, der relevante Daten wie Daten, die die in Kasten 140 verlangte Operation und eine Handhabe für die Festsetzungsdatenstruktur 80 angeben, bereitstellt. In Kasten 150 erlangt der Zeichensetzer 64 Festsetzungsdaten, die eine Operationsfolge definieren, die zu einer korrekten Texttyp-Interpunktionsstruktur führt. Er lädt dann in Kasten 152 die Festsetzungsdaten in die Festsetzungsdatenstruktur 80, bevor er an den Host-Editor 62 zurückgibt. Der Host-Editor 62 fahrt in Kasten 154 die Operationsfolge gemäß den Daten in der Festsetzungsdatenstruktur 80 aus und zeigt dann in Kasten 156 den Festsetzungstext an.
  • Fig. 4 veranschaulicht nicht nur wie herkömmliche Manipulationsoperationen eines Editors jeweils erweitert werden können, um Festsetzungsdaten bereitzustellen, sondern auch wie ein herkömmlicher Editor erweitert werden kann, um höherstufige Operationen wie Ändern des Texttyps eines Teils eines Textes einzuschließen. Um eine höherstufige Operation hinzuzufügen, wird der Host-Editor 62 modifiziert, sodass er eine Anforderung für die höherstufige Operation identifizieren kann, und sodass, wenn er eine Anforderung für die höherstufige Operation in Kasten 140 empfängt, er in Kasten 148 einen entsprechenden Aufruf an den Zeichensetzer 64 richtet. Der Zeichensetzer 64 erlangt dann in Kasten 150 Festsetzungsdaten, die eine Operationsfolge definieren, die wirkungsvoll ist, um die höherstufige Operation auszuführen, und die Schritte gehen wie in Fig. 4 weiter.
  • 3. Eine Implementierung
  • Eine Implementierung der Erfindung in der C-Programmiersprache kann z. B. auf einer Macintosh Werkstation mittels eines Satzes von Routinen, genannt "TIAB", ein Akronym für "Trollope in a box", zur Ausführung gebracht werden.
  • Die Schnittstelle zwischen dem Host-Editor und TIAB wird nun untersucht, einschließlich der Aufrufe, die der Host-Editor an TIAB richtet, der Aufrufe, die TIAB an den Host-Editor richtet, und der Datenstrukturen, die der Host-Editor und TIAB verwenden, um Daten miteinander auszutauschen. Dann werden die internen Operation von TIAB untersucht, einschließlich TIAB-Aurufen an TIAB-Funktionen, die Texttypgrenzen identifizieren und Festsetzungsdaten bereitstellen.
  • Die Schnittstelle zwischen dem Host-Editor und TIAB kann bequem in zwei Teile geteilt werden. Ein Teil, die Hosteditor-Schnittstelle genannt, ist die Schnittstelle, mit der der Host- Editor, als Reaktion auf eine Anforderung vom Benutzer, TIAB mit relevanten Daten aufruft, und mit der TIAB Daten an den Host-Editor als Antwort auf den Aufruf zurückgibt. Ein anderer Teil, die TIAB-Schnittstelle genannt, ist die Schnittstelle, mit der TIAB den Host-Editor aufruft, um Daten zu erlangen, die er zum Identifizieren einer Texttypgrenze benötigt, und mit der der Host-Editor die verlangten Daten bereitstellt.
  • (1) Hosteditor-Aufrufe an TIAB
  • TIAB enthält eine Anzahl von Funktionen, die von einem Host-Editor aufgerufen werden können. Diese Funktionen könnten in jeder geeigneten Folge aufgerufen werden, um Editieroperationen basierend auf Interpunktionsstrktur zu erlangen. Der Host-Editor wird typischerweise eine TIAB-Funktion aufrufen, um Daten bezüglich einer Auswahloperation zu erlangen, oder um Festsetzungsdaten zu erlangen, die eine Operationsfolge definieren, die einer Manipulationsoperation folgen sollten oder die eine höherstufige Operation implementieren.
  • (A) Auswahloperationsaufrufe
  • Eine Anzahl von TIAB-Funktionen kann in Bezug auf Auswahloperationen aufgerufen werden. Fig. 5 zeigt allgemeine Schritte, die vorkommen, wenn der Benutzer eine Auswahloperation anfordert. Die Schritte entsprechen den Operationen des Host, wie oben bezüglich Fig. 3 beschrieben. Fig. 5 zeigt jedoch nicht alle Schritte, die der Host-Editor beim Bestimmen, dass der Benutzer eine Auswahloperation angefordert hat, ausführt, weil jeder Host- Editor seine eigenen Techniken zum Empfangen einer Benutzeranforderung und Bestimmen der angeforderten Operation hat. Ein herkömmlicher Editor könnte ohne weiteres modifiziert werden, um eine Teilmenge seiner Benutzeranforderungen für Auswahloperationen des von TIAB verfügbaren Typs zu interpretieren.
  • Die Sequenz in Fig. 5 beginnt mit dem Empfangen der Anforderung vom Benutzer in Kasten 200. Eingeschlossen in diesem Schritt sind die Operationen, mit denen der Host-Editor bestimmt, ob die verlangte Operation eine Auswahloperation ist, was das Bestimmen beinhalten kann, welche der vorhandenen Auswahloperationen gewählt wird. Der Host-Editor verzweigt dann, explizit oder implizit, zwischen zwei Arten von Auswahloperationen, wie in Kasten 210 gezeigt. Eine Art von Auswahloperation beinhaltet das Modifizieren einer Auswahl, die eine Texteinheit ist, während die andere das Ändern einer Auswahl, die ein Einfügungspunkt ist, mit sich bringt. Wenn die Operation einen Einfügungspunkt ändert, ohne eine Texteinheitsauswahl zu ändern, braucht sie keine Interpunktionsstruktur zu umfassen, so dass die Unterstützung von TIAB beim Bestimmen der Endpunkte der neuen Auswahl nicht erforderlich ist. Wenn aber die Operation eine Texteinheitsauswahl ändert, wird TIAB aufgerufen, um basierend auf Texttypgrenzen geeignete Endpunkte für die Auswahl zu bestimmen.
  • Für eine Operation, die einen Einfügungspunkt ändert, führt der Host-Editor die Schritte in Kasten 212 aus, um den neuen Einfügungspunkt zu bestimmen und eine Beschreibung davon in die Auswahldatenstruktur des Host-Editorszu laden, typischerweise ohne TIAB aufzurufen. Dann ruft der Host-Editor die TIAB-Funktion setSeln mit relevanten Daten auf, z. B. Daten, die auf der Beschreibung des neuen Einfügungspunktes basieren. Die Funktion sel- Seln lädt diese Daten in die Auswahldatenstruktur von TIAB, eine Datenstruktur vom Typ TiabSeln. Wenn setSeln zurückkehrt, zeigt der Host-Editor in Kasten 216 den Text mit dem neuen Einfügungspunkt an.
  • Für eine Operation, die eine Texteinheitsauswahl ändert, ruft der Host-Editor eine geeignete TIAB-Funktion in Kasten 220 auf, um die Endpunkte der neuen Auswahl zu bestimmen. Die Auswahloperationen, die sich auf Texteinheiten beziehen, müssen daher nicht auf den herkömmlichen Auswahloperationen des Host-Editors basieren oder dadurch eingeschränkt werden, sondern können besser in einer Weise definiert werden, die ihre Durchführung mit TIAB ermöglicht. Bei der Implementierung können mehrere bestimmte Arten von Auswahloperationen, die sich auf Texteinheiten beziehen, durch TIAB-Funktionen, die extendSeln¬ Keys, extendSelnDrag, decrType und incrType einschließen, ausgeführt werden.
  • Die TIAB-Funktion extendSelnKeys ändert die momentane Auswahl, um ein Beispiel des Texttyps der momentanen Auswahl zur Linken und zur Rechten der momentanen Auswahl einzuschließen oder auszuschließen, wobei der momentane Texttyp unverändert gelassen wird. Daher wird extendSelnKeys mit Daten aufgerufen, die angeben, ob die Änderung auf der linken oder rechten Seite der Auswahl erfolgen soll und in welcher Richtung. Sie könnte als Antwort auf eine besonders definierte Benutzeranforderung aufgerufen werden.
  • Die TIAB-Funktion extendSelnDrag erweitert die momentane Auswahl, um das Beispiel des Texttyps der momentanen Auswahl, das eine momentane Zeichenposition in dem Text enthält, z. B. die von der momentanen Mausposition gewonnene, sowie alle Beispiele dieses Texttyps einzuschließen, die zwischen der momentanen Auswahl und diesem Beispiel liegen. Die Funktion extendSelnDrag kann aufgerufen werden, wenn der Benutzer eine herkömmliche Maus-basierte Justierfunktion aufruft, z. B. durch Ziehen des Zeigers von der momentanen Auswahl nach benachbarten Texteinheiten, wobei eine Maustaste gedrückt gehalten wird, oder durch Klicken einer vorgesehenen Maustaste, um die Auswahl zu justieren. Ein Aufruf an extendSelnDrag, der aus dem Ziehen des Zeigers entsteht, enthält zusätzlich zu der momentanen Mausposition Daten, die einen Ankerpunkt in dem Text angeben, wobei in diesem Fall die Auswahl entweder nach vorne oder nach hinten von dem Ankerpunkt zu der momentanen Zeigerposition erweitert wird.
  • Die TIAB-Funktion incrType ändert den Texttyp der momentanen Auswahl in den nächst höheren Texttyp und kann, wenn angebracht, ein oder beide Enden der momentanen Auswahl erweitern, um alle zusätzlichen Textcodes einzuschließen, die nötig sind, um die nächsten umgebenden Texttypgrenzen des neuen Texttyps zu erreichen. Es ist angebracht, incrType als Reaktion auf mehrfache Mausklicks mit dem Zeiger an demselben Position aufzurufen. Die TIAB-Funktion decrType andererseits ändert den Texttyp der momentanen Auswahl in den nächst tieferen Texttyp und kann, wenn angebracht, Textcodes vom rechten Ende der momentanen Auswahl fallenlassen, um eine Texttypgrenze des neuen Texttyps zu erreichen.
  • Beim Aufrufen jeder dieser Funktionen schließt der Host-Editor einen Zeiger auf eine Datenstruktur zum Zurückgeben einer Beschreibung der neuen Auswahl ein, z. B. eine Datenstruk¬ tur vom Typ TextRegion. Die Beschreibung enthält die Endpunkte der neuen Auswahl, z. B. einen Offset und eine Länge. Jede TIAB-Funktion gibt in Kasten 222 eine Beschreibung der neuen Auswahl in dieser Datenstruktur zurück. Der Host-Editor lädt dann diese Daten in sei¬ ne Auswahldatenstruktur und zeigt in Kasten 224 die neue Auswahl an.
  • Die Hostschnittstelle kann somit TIAB-Funktionen aufrufen, um Endpunkte einer neuen Texteinheitsauswahl zu erlangen.
  • (B) Aufrufe für Festsetzungsdaten
  • Der Host-Editor kann auch eine TIAB-Funktion als Teil der Antwort auf eine Anforderung einer Operation, die Festsetzungsdaten benötigt, aufrufen, z. B. eine der Manipulationsoperationen. Wie oben bezüglich Fig. 4 erörtert, unterscheidet sich die Kopieren-Operation in dem Schneiden-Kopieren-Einkelben-Muster von anderen Manipulationsoperationen, weil sie nicht erfordert, dass TIAB Festsetzungsdaten bereitstellt, sodass die einzig benötigte TIAB-Funktion ist, die Auswahldaten von TIAB mit einem Aufruf an copySeln in ihre Schnittpufferdaten zu kopieren. Für andere Manipulationsoperationen ruft jedoch der Host-Editor eine TIAB- Funktion auf, um Festsetzungsdaten zu erlangen, nach denen der Host-Editor die durch die Festsetzungsdaten definierte Operationsfolge ausführen kann. Des Weiteren kann der Host- Editor mit zusätzlichen Operationen erweitert werden, wobei er für jede davon eine TIAB- Funktion aufruft, um Festsetzungsdaten zu erlangen, die eine zum Ausführen der zusätzlichen Operation wirksame Operationsfolge definieren.
  • Der Teil der Hostschnittstelle, der TIAB-Funktionen aufruft, um Festsetzungsdaten bereitzustellen, kann so strukturiert sein, dass der Host-Editor zuerst seine eigene geeignete Operation, z. B. eine Manipulationsoperation, ausführt. Dann löscht der Host-Editor Token- und Zeichenzwischenspeicher von TIAB durch einen Aufruf der Funktion tiabFlushCache, der immer dann erforderlich ist, wenn der Host seinen Textpuffer ändert, weil die Zwischenspeicher von TIAB nicht mehr gültig sind. An dieser Stelle ruft der Host-Editor die passende TIAB-Funktion auf, um Festsetzungsdaten bereitzustellen, die eine Operationsfolge für eine Stelle in den Textdaten oder Operationsfolgen für beide Enden einer Texteinheit definieren.
  • Die Impementierung stellt verschiedene Funktionen bereit, die Festsetzungsdaten liefern, einschließlich cutSeln für eine Schneiden-Operation in dem Schneiden-Kopieren-Einkleben- Muster; pasteSeln für eine Einkleben-Operation; deleteSeln für eine Löschen-Operation; changeCategory zum Ändern des Texttyps einer Auswahl; toggleCapitalization zum Ändern der Großschreibung und addBrackets und removeßrackets zum Hinzufügen bzw. Entfernen von eckigen Klammern. Wenn eine dieser TIAB-Funktionen mit Festsetzungsdaten zurückkehrt, führt der Host-Editor die durch die Festsetzungsdaten definierte Operationsfolge aus und kann dann mit geeigneten Aufrufen von solchen TIAB-Funktionen wie tiabFlushCache, initFixup, setlpt und getSein schließen.
  • Fig. 6 zeigt allgemeine Schritte, denen ein herkömmlicher Host-Edrtor folgen kann, wenn er von einer TIAB-Funktion zurückgegebene Festsetzungsdaten empfängt. Diese Schritte könnten alternativ als Teil von TIAB implementiert werden, aber sie hängen von den zugrunde liegenden Funktionen ab, die in dem Host-Editor verfügbar sind, sodass das Einschließen derselben in TIAB TIAB auf den Host-Editor spezialisiert. Die Datenstruktur RegionFixup wird benutzt, um in den Schritten in Fig. 6 verwendete Daten bereitzustellen. Außerdem enthält RegionFixup einige Daten, die einem Host-Editor erlauben, eine durch Festsetzungsdaten definierte Operationsfolge rückgängig zu machen. Grundsätzlich könnte RegionFixup andere Daten enthalten, die dem Host-Editor ermöglichen, andere geeignete Funktionen auszuführen, aber die in RegionFixup enthaltenen Daten, wie definiert, reichen aus, um eine Grundfolge von Operationen zu definieren, von denen Beispiele kombiniert werden können, um jede erforderliche Modifikation eines Textes hervorzubringen. Die Grundfolge wird in Fig. 6 veranschaulicht.
  • Die Folge in Fig. 6 beginnt in Kasten 250 mit dem Empfangen der Festsetzungsdaten in RegionFixup. Die TIAB-Funktion, die die Festsetzungsdaten bereitstellt, könnte eine Handhabe, z. B. einen Zeiger, für ein Beipiel von RegionFixup, das die Festsetzungsdaten enthalt, zurückgeben. Die Host-Editorroutine, die die TIAB-Funktion aufrief, könnte dann diese Handhabe in einen Aufruf an eine andere Host-Editorfunktion einbeziehen, um die Schritte in Fig. 6 auszuführen.
  • Die Prüfung in Kasten 252 stellt fest, ob das Feld deletelength einen Wert größer als null enthält, der angibt, dass ein oder mehr Zeichen gelöscht werden müssen. Wenn ja, wählt der Schritt in Kasten 254 eine Codefolge aus den Textdaten der Länge deletelength beginnend bei offset aus. Der Schritt in Kasten 256 ruft tiabFlushCache auf. Der Schritt in Kasten 258 löscht dann die in Kasten 254 getroffene Auswahl.
  • Die Prüfung in Kasten 260 stellt als Nächstes fest, ob das Feld insertlength einen Wert größer als null enthält, der angibt, dass ein oder mehr Zeichen eingefügt werden müssen. Wenn ja, wählt der Schritt in Kasten 262 den Positionsoffset aus, um den Einfügungspunkt zu errichten. Der Schritt in Kasten 264 ruft tiabFlushCache auf. Der Schritt in Kasten 266 fügt dann die Codes in dem Feld insertchars von der in Kasten 262 getroffenen Auswahl an die Stelle offset + insertlength ein.
  • Die Prüfung in Kasten 270 stellt fest, ob das Feld newoffset einen Wert kleiner als null enthält, der angibt, dass der Einfügungspunkt zum Ende der eingefügten Codes, wenn vorhanden, gehen sollte. Wenn ja, lädt der Schritt in Kasten 272 die Stelle offset + insertlength in das Feld newoffset. Alternativ könnte TIAB den richtigen Wert von newoffset bereitstellen.
  • Die Prüfung in Kasten 274 stellt fest, ob das Feld capchar einen Wert gleich null enthält, der angibt, dass Großschreibung nicht geändert werden muss. Wenn capchar kleiner als null ist, muss ein Zeichen in Kleinschrift geändert werden, aber wenn größer als null, in Großschrift. Der Schritt in Kasten 276 wählt und löscht den Textcode an der durch capoffset angegebenen Stelle. Dann fügt der Schritt in Kasten 278 bei capoffset einen Textcode der geeigneten Schreibung an. Eine alternative Lösung für die Großschreibung wäre, eine Löschung und Einfügung, wie oben beschrieben, durchzuführen.
  • Zum Schluss setzt der Host-Editor seine Auswahl an die durch newoffset angegebene Stelle. A diesem Punkt kann der Host-Editor wertere Operationen ausführen, bevor er die verlange Operation beendet, wie oben angemerkt. Diese weiteren Operationen können das Aufrufen von setSeln einschließen, sodass TIAB die momentane Auswahl des Host verfolgt.
  • Obwohl die Festsetzungsdaten eine Operationsfolge definieren, die in einer korrekten Texttyp-Interpunktionsstruktur resultiert, kann der Benutzer das Ergebnis unerwünscht finden. Der Host-Editor könnte deshalb dem Benutzer gestatten, eine Operation zu wählen, die eine Operationsfolge rückgängig macht, die in der in Fig. 6 gezeigten Weise vorgenommen wurde. Das Rückgängigmachen der Operationsfolge würde das Rückändern der Großschreibung, das Löschen der eingefügten Zeichen und das Einfügen der gelöschten Zeichen beinhalten, wobei an diesem Punkt die Textdaten in dem Zustand wiederhergestellt werden, den sie vor dem Erlangen der Festsetzungsdaten hatten. Um dies zu gestatten, enthält Region- Fixup Felder zum Speichern der benötigten Daten, redochars und nRedochars.
  • Dies erlaubt auch eine zweistufige Lösung für bestimmte Anforderungen für Manipulationsoperationen. Zum Beispiel kann in dem Schneiden-Kopieren-Einkleben-Muster eine Löschung durch Löschen und Übertippen oder durch Löschen und Bewegen des Einfügungspunktes zu einer anderen Stelle vorgenommen werden. Die Festsetzungsdaten in diesen zwei Optionen können verschieden sein, weil die vorgenommenen Modifikationen unterschiedlich sind. Der Host-Editor kann daher zu Anfang eine Löschen-Anforderung so behandeln, als ob sie eine dieser zwei Optionen wäre, und wenn sich zeigt, dass es die andere ist, die durchgeführte Operationsfolge rückgängig machen und dann Festsetzungsdaten für eine geeignete Operationsfolge für die andere Option erlangen.
  • Die Hostschnittstelle zu TIAB kann erweitert werden, um zusätzliche Auswahloperationen oder zusätzliche Operationen bereitzustellen, die Festsetzungsdaten liefern. In jedem Fall wird eine TIAB-Funktion hinzugefügt, um die zusätzliche Operation zu handhaben. Im Folgenden wird die TIAB-Schnittstelle zum Host untersucht, über die die TIAB-Funktionen die Daten erlangen, die nötig sind, um eine Texttypgrenze oder eine geeignete Operationsfolge zu identifizieren, um eine korrekte Texttyp-Interpunktionsstruktur bereitzustellen. Im Vergleich zu der Hostschnittstelle ist die TIAB-Schnittstelle relativ einfach.
  • (2) TIAB-Aufrufe an Host
  • Der Hauptzweck, weswegen TIAB den Host-Editor aufruft, besteht darin, Daten über die Tetdatenstruktur des Host zu erlangen. Die TIAB-Schnittstelle umfasst deshalb einige Host- Funktionen, die TIAB zu diesem Zweck aufrufen kann. Obwohl die Implementierung dieser Funktionen von der Art und Weise abhängt, in der der Host-Editor implementiert wird, ist jede eine relativ einfache Funktion, wenn der Host-Editor eine herkömmliche Textdatenstruktur, die eine Folge von Textcodes enthält, verwendet.
  • Die Funktion getchars1 ist die TIAB-Funktion, die eine Host-Editorfunktion tiabGetPointer aufruft, um einen Zager auf eine Stelle in der Textdatenstruktur und eine Länge einer Kette von Textcodes, die an dieser Stelle beginnt, zu erlangen. Die Host-Editorfunktion tiabGet- Pointer wiederum kann durch geeignete Aufrufe an ihre zugrunde liegenden Funktionen implementiert werden. Wenn z. B. der Host-Editor auf einer Macintosh Werkstation die Routinen in dem ROM, herkömmlich bekannt als Text Edit, benutzt, könnte er den Zeiger durch Aufrufen von *((**TEH).hTEXT) erlangen und könnte die Länge durch Aufrufen von (**TEH). teLongth erlangen. Dann gibt tiabGetPointer an getchars1 einen Wert zurück, der den tatsächlichen Offset angibt.
  • Im Allgemeinen fordert TIAB den Host-Editor auf, die Speicherverwaltung auf den Textblöcken zu erledigen. Der allgemeine Weg, um Textcodes von TIAB zu erlangen, ist wie folgt tiabGetPointer liefert ein Mittel, mit dem der Host-Editor einen Bereich von Textcodes innerhalb seiner internen Datenstruktur angeben kann, der von TIAB gelesen (aber nicht geändert) werden kann. Wenn der Host-Editor seine internen Daten in so einer Weise präsentiert, dass dies unbequem oder unmöglich ist, dann muss der Host-Editor einen anderen Satz von Funktionen, der Speicherblöcke verwalten kann, bereitstellen und sie mit Zeichen füllen, die durch den Host-Editor aus seiner internen Datenstruktur kopiert werden. Dies umfasst die folgenden Funktionen: tiabGetTextBlock, die einen Zeiger auf einen Textblock mittels des bevorzugten Speicherverwaltungsschemas des Host-Editors zurückgibt und auch die Zahl von tatsächlich kopierten Textcodes zurückgibt; tiabFreeTextBlock, als Reaktion aufweiche der Host-Editor einen mit tiabGetTextBlock zugewiesenen Textblock freisetzt; tiabFreeAll¬ Blooks, als Reaktion aufweiche der Host-Prozessor alle mit tiabGetTextBlock zugewiesenen Textblöcke freisetzt; tiabLastCharPosn, die den Index des letzten Textcodes im Textpuffer des Host-Editors zurückgibt, der die Zahl von Textcodes in dem Puffer angibt, und tiabCopyChars, die eine spezifizierte Zahl von Textcodes beginnend bei einem spezifizierten Offset in einen spezifizierten Textblock kopiert, und die auch die Zahl von kopierten Textcodes zurückgibt. Beim Freisetzen von Textblöcken kann TIAB tiabFreeAllBlocks verwenden oder kann ihr Datenfeld in einer Schleife durchlaufen und bei jeder Wiederholung tiab¬ FreeTextBlock aufrufen.
  • Obwohl die TIAB-Schnittstelle zum Host relativ einfach ist, führen einige TIAB-Funktionen, die von den vom Host erhaltenen Daten Gebrauch machen, komplexe Berechnungen aus.
  • B. TIAB-Aufrufe an TIAB
  • Die hochstufigen TIAB-Funktionen, die von einem Host-Edrtor aufgerufen werden, fallen in zwei Gruppen, wie oben in Bezug auf die Hostschnittstelle zu TIAB beschrieben; eine zum Bereitstellen von Endpunkten und eine andere zum Bereitstellen von Festsetzungsdaten. Doch hat die TIAB-Schnittstelle zum Host-Editor eine hauptsächliche niederstufige Funtion, getchars1, die den Host aufruft, um Codes von der Textdatenstruktur des Host zu erlangen. Zwischen den hochstufigen Funktionen und getchars1 liegen mehrere Zwischenstufen von TIAB-Funktionen.
  • Die erste Stufe über getchars1 umfasst die Funktionen getcharsForward, getcharsBackward und charAt, die jeweils aufgerufen werden können, um auf Codes zuzugreifen, die sich vorwärts von einer gegebenen Stelle in der Textdatenstruktur des Host erstrecken, um Codes zu erlangen, die sich rückwärts von einer gegebenen Stelle erstrecken, oder um den Code einer gegebenen Stelle zu erlangen. Diese Stufe umfasst auch einige Funktionen, die nach einem gegebenen Code oder nach einem Code in einem gegebenen Satz suchen können und charSearchFwd, charsearchBkwd, charSetSearchFwd und charSetSearchBkwd einschließen.
  • TIAB macht keinen Gebrauch von den Bedeutungen oder anderen Unterschieden zwischen Wörtern in Text, außer solchen Unterschieden, die sich spezifisch auf die Interpunktionsstruktur beziehen. TIAB ignoriert daher die meisten Unterschiede zwischen Wörtern durch Tokenisieren der Textcodes, die den Text ausmachen, sodass jedes Wort durch ein Token von einem oder einer kleinen Zahl von Typen dargestellt wird, einschließlich Wort, großgeschriebenem Wort, Abkürzung, großgeschriebener Abkürzung, und, wenn feinkörnige Wörter unterschieden werden, Wortinnerem, was einen Interpunktionscode meint, der Teil eines Wortes ist und der sonst durch ein Interpunktionstoken dargestellt werden würde, aber anders, behandelt wird, wenn er als Teil eines Wortes auftritt TIAB behandelt andere Codes, die sich auf die Interpunktionsstruktur beziehen, als Tokens oder andere Typen wie Interpunktionstokens der Typen Komma, Fragezeichen, Doppelpunkt, Zwischenraum, Punkt, mehrfache Striche, Auslassungen usw.
  • Einige der TIAB-Funktionen liegen auf der nächsten Stufe, tokenScanFwd und tokenScan- Bkwd in Anlage B, scannen durch die Textcodefolge, finden jede Tokengrenze und geben den passenden Tokencode zurück. Andere Funktionen können aufgerufen werden, um eine Tokengrenze zu finden, einschließlich tokenBndryRight, tokenBndryLeft, tokenBndryLeft1 und tokenBndryAt, und einige dieser Funktionen benutzen tokenScanFwd und tokenScan¬ Bkwd. Diese Tokenisierungsfunktionen stützen sich auf eine Anzahl von Hilfsfunktionen, um einen Token-Zwischenspeicher, den sie sich teilen, zu verwalten, sodass die Tokenisierung so weit als möglich dynamisch durchgeführt und in dem Token-Zwischenspeicher gespeichelt wird.
  • Die hochstufigen TIAB-Funktionen, die neue Auswahlendpunkte definieren, einschließlich extendSelnKeys, extendSelnDrag, incrType und decrType, beruhen auf zwei Zwischenfunktionon, die Texttypgrenzen finden, boundaryBefore und bounolaryAfter, um die Endpunkte einer Auswahl zu identifizieren.
  • Die hochstufigen TIAB-Funktionen, die Festsetzungsdaten liefern, umfassen addBrackets, removeßrackets, changeCategories, cutSeln, deleteSeln, pasteSeln und toggleCapitalization. Von diesen Funktionen beruhen changeCategories, cutSeln, deleteSeln und pasteSeln auf einer Zwischenfunktion, getFixupinfo, die auf die Aufgabe des Erlangens von Information über eine natürliche Grenze zur Verwendung beim Bereitstellen von Festsetzungsdaten spezialisiert ist. Andere TIAB-Funktionen, die sich auf natürliche Grenzen beziehen, umfassen scanNatBndryFwd, scanNatBndryBkwd, nbStartPosn, nbEndPosn, propagateNatBndry, natBndryHere und checkNBQuotesBrkts.
  • (1) Codezugriff und Suchen
  • Fig. 7 zeigt Schritte in getcharsForward, die Textcodes vorwärts von einer spezifizierten Stelle in der Textdatenstruktur des Host-Edrtore rückgewinnt Fig. 8 zeigt Schritte in charSet¬ SearchFwd, die die Textdatenstruktur nach einem Textcode in einem spezifizierten Salz von Codes absucht.
  • Die Funktion getcharsForward wird in Kasten 300 mit einer Position in der Textdatenstruktur des Host, genannt Offset, und mit Zeigern auf zwei Stellen, wobei sie in eine davon einen Zeiger auf einen Anfangscode und in die andere eine Länge lädt, die die Anzahl gültiger Codes beginnend mit dem Anfangscode angibt, aufgerufen. Die Prüfung in Kasten 302 stellt fest, ob der in Kasten 300 empfangene Offset kleiner als null ist, was eine Stelle vor dem Anfang des Textpuffers des Host-Editors oder einer anderen Textdatenstruktur angibt. Wenn ja, gibt getcharsForward in Kasten 304 UNWAHR zurück, um einen Fehler beim Rückgewinnen von Codes anzuzeigen.
  • Wenn der Offset größer als null ist, stellt die Prüfung in Kasten 306 fest, ob der Offset größer als der oder gleich dem Offset eines Codeblocks, genannt ausgeschlossener Block, ist. Der ausgeschlossene Block ist ein Textbereich, den getchars1 ignoriert. Der ausgeschlossene Block macht es somit in einer Einkleben-Operation möglich, auf den Textcodes wie sie nach einer Löschen-Operation und vor einer Einfügen-Operation gewesen wären, ohne Durchführung einer Löschen-Operation, dann Aufrufen von TIAB, dann Durchführen einer Einkleben- Operation und dann wieder Aufrufen von TIAB zu arbeiten. Wenn der Offset gleich oder größer als der Offset des ausgeschlossenen Blocks ist, wird die Länge des ausgeschlossenen Blocks in Kasten 308 zu dem Offset addiert.
  • Die in Kasten 310 beginnenden Schritte betreffen einen Cachespeicher, der eine Anordnung von Einträgen enthält, die je einem Block von Textcodes entsprechen. Der Cachespeichereintrag jedes Blocks enthält Daten, die den Block identifizieren, einschließlich des Blockoffsets, der Länge und eines Zeigers auf den ersten Code in denn Block. Innerhalb des Cachespeichers werden die Einträge nach Offset sortiert. Die zum Errichten des Cachespeichers benötigten Schritte beinhalten das Prüfen in Kasten 310, ob der Cachespeicher gültige Daten enthält, wenn nicht, löscht sie ein Aufruf an flushBlockcache in Kasten 312, wonach der mit rückgewonnenen Textcodes zu ladende Cachespeicherblock ausgewählt wird und der Offset und die Länge der rückzugewinnenden Textcodes in Kasten 314 festgelegt werden. Wenn der Cachespeicher gültige Daten hat, aber der Offset über oder unter den Cachespeichergrenzen, wie in Kasten 316 ermittelt, liegt, werden der zu ladende Cachespeicherblock, der Offset und die Länge zur Rückgewinnung gleichermaßen in Kasten 314 festgelegt, um einen Block von Textcodes rückzugewinnen, der sich mit dem höchsten oder niedrigsten zuvor gespeicherten Block nicht überschneidet.
  • In dem Fall, wo der in Kasten 300 empfangene Offset in die Cachespeichergrenzen fällt, beginnt der Schritt in Kasten 320 eine iterative Schleife, die durch die zuvor geladenen Cachespeicherblöcke geht, um nach dem Cachespeicherblock zu suchen, der entweder den Offset einschließt oder einen Cachespeicherblockoffset aufweist, der größer als der in Kasten 300 empfangene Offset ist. Die Prüfung in Kasten 322 stellt fest, ob der Offset in dem nächsten Cachespeicherblock liegt, und wenn ja, lädt der Schritt in Kasten 324 den Codezeiger auf den passenden Code in dem Cachespeicherblock und die Länge der Codefolge, die diesem Code in dem Cachespeicherblock folgt, wobei, wenn nötig, der ausgeschlossene Block berücksichtigt wird. Die Prüfung in Kasten 326 stellt dann fest, ob die Länge der Codefolge größer als null ist. Wenn nicht, wird in Kasten 304 wie oben UNWAHR zurückgegeben. Wenn aber so, wird in Kasten 328 WAHR, um Erfolg anzuzeigen, zurückgegeben.
  • Wenn sich der Offset nicht in einem der Cachespeicherblöcke befindet, aber vor den Offset eines zuvor geladenen Cachespeicherblocks fällt, wie durch die Prüfung in Kasten 330 festgestellt, legt der Schritt in Kasten 332 den Anfangsoffset und die Länge der rückzugewinnenden Textcodes fest, wobei sie wo möglich mit einem zuvor geladenen Cachespeicherblock aneinandergrenzend gemacht werden.
  • Wenn der Offset nicht auf eine Stelle in einem der zuvor geladenen Cachespeicherblöcke weist, ob außerhalb oder innerhalb der Cachespeichergrenzen, ruft der Schritt in Kasten 334 getchars1 mit dem Anfangsoffset und der Länge der rückzugewinnenden Textcodes auf. Zuerst errichtet getchars1 einen Cachespeicherblockvorspann für die rückzugewinnenden Textcodes. Durch einen Aufruf an tiabGetPointer fordert getchars1 den Zeiger auf die Codes und die Länge an, um den Zeiger auf die Codes in das passende Cachespeicherblockfeld zu laden. Wenn die Länge null ist, ruft getchars1 tiabCopyChars auf, um die Textcodes zu erlangen. Andernfalls setzt getchars1 die Cachespeicherblöcklänge gleich der Länge von tiabGet¬ Pointer und justiert die Grenzen des Cachespeicherblocks, um den Block von Textcodes einzuschließen, und gibt schließlich WAHR zurück. Dann verzweigt getcharsForward in Kasten 336 basierend auf dem von getchars1 zurückgegebenen (Ergebnis. Wenn das Ergebnis UNWAHR ist, gibt in Kasten 304 getcharsForward auch UNWAHR zurück. Wenn das Ergebnis WAHR ist, was die Rückgewinnung von Textcodes anzeigt, lädt der Schritt in Kasten 324 den Codezeiger und die Länge, wie oben, und die Prüfung in Kasten 326 stellt fest, ob WAHR oder UNWAHR zurückgegeben wird.
  • Die Funktion getcharsBackward ist ähnlich getcharsForward, außer dass sie Codes von dem Offset rückwärts gehend rückgewinnt. Die Funktion charAt benutzt getcharsForward, um die Codes an einer spezifizierten Stelle rückzugewinnen.
  • Die Funktion charSetSearchFwd, wie in Fig. 8 gezeigt, wird mit zwei Zeigern aufgerufen, einer auf Daten, die eine Stelle in der nächsten Textdatenstruktur angeben, und der andere auf einen Bitsatz-Identifikator, der einen Satz von Textcodes angibt, in Kasten 350. Der Schritt in Kasten 352 ruft getcharsForward mit der Position als Offset auf. Die Verzweigung in Kasten 354 basiert auf dem von getcharsForward zurückgegebenen Ergebis, wobei char¬ SetSearchFwd in Kasten 356 UNWAHR zurückgibt, wenn getcharsForward UNWAHR zurückgegeben hat. Wenn aber getcharsForward beim Rückgewinnen einer Folge von Textcodes Erfolg hatte, beginnt der Schritt in Kasten 360 eine iterative Schleife, die durch die Codes geht. Die Prüfung in Kasten 362 stellt fest, ob jeder Code in dem von dem Bitsatz- Identifikator angegebenen Satz vorhanden ist, wobei das Makro BITSET aufgerufen wird.
  • Nach dem Finden eines Codes in dem Satz ändert charSetSearchFwd die Position in die Position dieses Codes und gibt WAHR zurück, um anzuzeigen, dass sie einen Code in dem Satz gefunden hat. Wenn keiner der Codes in dem Satz vorhanden ist, kehrt charSetSearch¬ Fwd zu dem Schritt in Kasten 352 zurück, um eine andere Folge von Textcodes zurückzugewinnen.
  • Es gibt mehrere andere Funktionen, die charSetSearchFWD gleichen, einschließlich char¬ SearchFwd und charSearchBkwd, um vorwärts und rückwärts nach einem spezifizierten Code zu suchen, und charSetSearchBkwd, um rückwärts nach einem Code in einem spezifizierten Satz zu suchen.
  • (2) Token-Scannen
  • Fig. 9 zeigt allgemeine Schritte in der Funktion tokenScanBkwd. Diese Funktion prüft Muster von Textcodes und wandelt erkannte Muster in Tokencodes um. Es können zahlreiche Muster erkannt werden, sodass tokenScanBkwd komplizierte Muster-Abgleichungsoperationen umfasst, aber die Schritte in Fig. 9 zeigen nicht die Einzelheiten der Musterabgleichung.
  • In Kasten 370 beginnt tokenScanBkwd durch Empfangen eines Zeigers auf einen Abtastsatz, eine Datenstruktur, die einen Satz einer Abtastung für Token enthält. Der Abtastsatz enthält einen Zeiger auf eine Grenze in der Textdatenstruktur. Die Prüfung in Kasten 372 stellt fest, ob die Tokengrenze, die dieser Grenze in dem Text vorangeht, bereits abgetastet wurde. Wenn ja, gewinnt der Schritt in Kasten 374 das vorherige Ergebnis aus einem Token-Cachespeicher zurück und gibt es zurück.
  • Wenn die vorangehende Grenze vorher nicht abgetastet wurde, ruft der Schritt in Kasten 376 getcharsBackward auf, um eine abzutastende Folge von Textcodes zurückzugewinnen, und ähnliche Aufrufe werden, wenn nötig, sonstwo in tokenScanBkwd gemacht. Wenn einer dieser Aufrufe UNWAHR zurückgibt, versagt die Abtastung, und an Wert, der einen Abtastfehler anzeigt, wird zurückgegeben.
  • Die Prüfung in Kasten 380 beginnt eine Folge von Schritten, die die Textcodes rückwärts abtastet, um die nächste Tokengrenze zu finden. Die Prüfung in Kasten 380 stellt fest, ob der nächste Code einer der Interpunktionscodes ist, der einem Tokencode entspricht. Wenn ja, stellt die Prüfung in Kasten 382 fest, ob es ein Interpunktionscode ist, der in einem Wort auftritt. Wenn er nicht in einem Wort ist, gibt der Schritt in Kasten 384 den passenden Tokencodes für den Interpunktionscode zurück.
  • Wenn ein Wort entdeckt wurde, beginnt der Schritt in Kasten 390 eine kurze iterative Schleife, die durch die Codes in dem Wort läuft, um jede Information über Abkürzungen, Großbuchstaben oder andere Merkmale des Wortes zu erlangen, die einen Einfluss darauf haben, welcher Tokencode ihm zugewiesen werden soll. Dies dauert an, bis in Kasten 396 eine Wortunterbrechung festgestellt wird. Dann wird der passende Tokencode für das Wort zurückgegeben.
  • Die Details von tokenScanBkwd sind komplex, weil die Regeln zur Wortbildung, die sie anwendet, relativ komplex sind. Sie sind an Konventionen der englischen Sprache angepasst, könnten aber alternativ an die Konventionen einer anderen Sprache angepasst werden. Wie implementiert, erlaubt tokenScanBkwd Wörter, die interne Bindestriche und Apostrophe enthalten, und unter bestimmten Umständen Wörter, die Kommas, Punkte und Doppelpunkte enthalten. Zum Beispiel würde das Folgende als Wörter behandelt werden:
  • it's
  • 10:30
  • $1,000
  • real-time
  • Die Implementierung erlaubt auch, dass Wortgrenzen an wortinternen Interpunktionszeichen ermittelt werden, weil es manchmal angenehm ist, in der Lage zu sein, Teile von Wörtern in dieser Weise auszuwählen. Es sind mehrere andere Funktionen eingeschlossen, die token¬ ScanBkwd gleichen, einschließlich tokenScanFwd, die vorwärts anstelle rückwärts abtastet; tokenBndryRight, die feststellt, ob die momentane Position eine Tokengrenze ist, und, wenn nicht, sich vorwärts zu der nächsten Tokengrenze bewegt, und tokenBndryLeft, die sich rückwärts zu der nächsten Tokengrenze bewegt, wenn die momentane Position keine Tokengrenze ist. Die Funktionen tokenBndryRight und tokenBndryLeft sind nützlich, um eine Abtastung an einer Tokengrenze zu beginnen.
  • Tabelle 1 zeigt die Beziehung zwischen Textcodes und Tokencodes, die aus Tokenabtastung entstehen. Die Textcodes in Tabelle 1 bilden einen Satz, wie in dem Titel angegeben. Die Tokencodes TABELLE 1: "Drive," he said.
  • enthalten andererseits Codes, die jedes Vorkommen verschiedener Arten von Interpunktionscodes, einschließlich linkem Anführungszeichen (LQ), Komma (C), rechtem Anführungszeichen (RQ), Zwischenraum (Sp) und Punkt (P) angeben. Des Werteren enthalten die Tokencodes Codes für Arten von Wortein heften, einschließlich großgeschriebenem Wort (W- Cap) und gewöhnlichem Wort (W).
  • Die Funktion führt verschiedene Operationen auf einem Strom von Tokencodes aus, um Endpunkte zu finden und Festsetzungsdaten bereitzustellen.
  • (3) Endpunkte
  • Die Funktionen, die auf Host-Editoraufrufe, die das Modifizieren einer Auswahl betreffen, ansprechen, umfassen extendSelnKeys, extendSelnDrag, incrType und decrType. Jede dieser TIAB-Auswahlfunktionen antwortet durch Bereitstellen von Endpunkten einer neuen Auswahl. Fig. 10 zeigt allgemeine Schritte, denen diese Funktionen folgen.
  • Die Sequenz von Fig. 10 beginnt, wenn eine der TIAB-Auswahlfunktionen durch den Host- Editor aufgerufen wird. Wie in Kasten 400 gezeigt, enthält dieser Aufruf einen Zeiger auf eine Endpunktdatenstruktur. Wenn die TIAB-Auswahlfunktion zurückkehrt, gewinnt der Host-Editor die neuen Endpunkte aus der Endpunktdatenstruktur zurück und benutzt sie, um die neue Auswahl zu definieren. Der Aufruf an die TIAB-Auswahlfunktion kann auch andere Daten einschließen. Zum Beispiel umfasst ein Aufruf an extendSelnDrag eine Position und einen Ankerpunkt in der Textdatenstruktur des Host-Editors, und ein Aufruf an extendSelnKeys enthält einen Code, der angibt, in weicher Richtung und von welchem ihrer alten Endpunkte die Auswahl erweitert werden soll.
  • Die TIAB-Auswahlfunktion kann in Kasten 402 mit dem Feststellen beginnen, ob sie richtig aufgerufen wurde. Die Funktionen extendSelnDrag und extendSelnKeys sind z. B. nicht geeignet, wenn es keine momentan ausgewählte Texteinheit gibt Desgleichen ist incrType nicht geeignet, wenn der Tyo der momentan ausgewählten Texteinheit der höchste Texttyp ist. Wird nicht richtig aufgerufen, gibt die TIAB-Auswahlfunktion in Kasten 404 UNWAHR zurück, worauf der Host-Editor mit einer passenden Fehlermeldung oder Signal wie Blinken der momentanen Auswahl reagieren kann.
  • Wenn die TIAB-Auswahlfunktion richtig aufgerufen wurde, fährt sie fort, um in Kasten 410 die Daten zu erlangen, um die Endpunkte bereitzustellen, und auch, um nachfolgenden Funktionen zu ermöglichen, Festsetzungsdaten bereitzustellen. In der Implementierung werden diese Daten in einer Tiab-Datenstruktur gehalten. Wie dort gezeigt, können die Daten Daten einschließen, die Endpunkte der neuen Auswahl angeben, z. B. einen Offset und eine Länge; Daten, die einen oder mehr für die neue Auswahl relevante Texttypen angeben, z. B. der Typ der Auswahl selbst, und, wenn die Auswahl vom Typ Klammer ist, den zugrunde liegenden Typ; Daten, die Merkmale an den Endpunkten der neuen Auswahl angeben, z. B. das Token, Tokenlänge und Texttyp der natürlichen Grenze an einem Ende der Auswahl, und Daten, die angeben, ob die Auswahl großgeschrieben ist. Jede TlAB-Auswahlfunktion gewinnt diese Daten auf ihre eigene Weise.
  • Die einfachste TIAB-Auswahlfunktion, decrType, wird implementiert, sodass sie den rechten Endpunkt der momentanen Auswahl justiert, um die neue Auswahl zu erlangen, und dann nur, wenn es angebracht ist, den rechten Endpunkt zu justieren. Wenn z. B. die momentane Auswahl vom Typ Klammer oder Strichen ist, justiert decrType den rechten Endpunkt nicht, sondern dekrementiert den zugrunde liegenden Typ der Auswahl, wenn der zugrunde liegenden Typ größer als der Typ Zeichen ist. Wenn aber die Auswahl von einem Typ größer als Typ Zeichen ist, und wenn sie eine natürliche Grenze zu ihrer Rechten mit einer Länge größer als null aufweist, lässt decrType die Tokens in der natürlichen Grenze fallen und addiert wieder eins hinzu, wenn es sich um eine der schließenden Klammem handelt, bevor der Typ der Auswahl dekrementiert wird.
  • Im Gegensatz zu decrType hängen die TIAB-Auswahlfunktionen incrType, extendSelnKeys und extendSelnDrag alle von den TIAB-Zwischenfunktionen boundaryAfter und boundary¬ Before ab, um, wenn nötig, Texttypgrenzen zu finden. Diese Zwischenfunktionen werden mit einem Zeiger auf eine ScanRecord-Datenstruktur aufgerufen, durch die jede Funktion die Positionen an den Enden einer Texttypgrenze zurückgibt. Jede Funktion gibt außerdem einen Wert zurück, der den Texttyp der Grenze angibt.
  • Wie oben beschrieben, umfasst eine Texttypgrenze immer mindestens ein Token, und boundaryAfter und boundaryBefore arbeiten jeweils, indem sie den Tokenstrom gegen Tokenmuster abgleichen, die implizit in den Operationen, die sie ausführen, enthalten sind. Die in der Implementierung benutzten Muster umfassen die Folgenden: Ein Komma-Token, dem optional ein Zwischenraum-Token folgt, ist eine Texttypgrenze des Typs Wendung; ein Semikolon-, Doppelpunkt- oder Dreipunktauslassungs-Token, optional gefolgt von einem Zwischenraum-Token, ist vom Typ Satzteil; ein Punkt-, Fragezeichen- oder Ausrufungszeichen- Token, gefolgt von mindestens zwei Zwischenraum-Tokens (oder alternativ von nur einem Zwischenraum-Token gemäß einem Optionsflag, das gedacht ist, vom Host-Edrtor als Antwort auf eine Benutzeranforderung gesetzt zu werden) ist vom Typ Satz. In diesen Mustern könnte ein Komma- oder Punkt-Token von einem rechten Apostroph- oder Anführungszeichen-Token gefolgt werden, und eine Texttypgrenze vom Typ Satz könnte eine Anzahl von rechten Anführungszeichen- und Klammer-Tokens, die den Zwischenraum-Tokens vorangehen, umfassen. Diese Muster sind geeignet für die englische Sprache, aber ähnliche Muster könnten für andere natürliche Sprachen formuliert werden. Nach Identifizierung des Texttyps einer Texttypgrenze laden boundaryBefore und boundaryAfter die Daten, die ihre Enden definieren und geben ihren Typ zurück. Als ein besonderer Fall stellt die Funktion boundary¬ After vorläufig fest, ob ihr Anfang direkt nach einem Token vom Typ Abkürzung liegt, wobei sie in diesem Fall den Typ der Grenze, die unmittelbar der Abkürzung folgt, zurückgibt.
  • Tabelle II veranschaulicht die Beziehung zwischen einem Auszug aus einem Strom von Tokencodes und den von der Funktion boundaryAfter zurückgegebenen Texttypcodes. Die Texttypcodes in Tabelle II TABELLE II
  • umfassen Zeichen (Ch), Wort (W), Wendung (F), Satzteil (Cl) und Satz (S), während die Tokencodes diejenigen, die oben in Bezug auf Tabelle I eingeführt wurden, und Semikolon (SC) umfassen.
  • Wie aus Tabelle II zu sehen ist, gibt der Texttypcode für jeden Tokencode den Texttyp der vorangehenden Texteinheit an, sodass, wo eine Reihe von Interpunktionstokens vorkommt, jedes von ihnen denselben entsprechenden Texttypcode haben kann. Jeder der Reihe von Tokencodes, die z. B. einem Komma, einem Anführungszeichen und einem Zwischenraum entspricht, besitzt den Texttypcode für eine Wendung, während jeder der Reihe, die einem Semikolon und einem Zwischenraum entspricht, den Code für einen Satzteil besitzt, und jeder der Reihe, die einem Punkt und zwei Zwischenräumen entspricht, den Code für einen Satz besitzt. Eine Reihe von Tokencodes mit demselben Texttyp kann demnach, wenn angebracht, als eine Einheit mit diesem Texttyp und mit spezifizierten Enden und einer Länge behandelt werden.
  • Jede der drei TIAB-Auswahlfunktionen, die sich auf boundaryAfter und boundaryBefore stützen, besitzt eine bestimmte Folge von Operationen. Die Funktion extendSelnKeys ruft die geeignete von vier Funktionen auf, von denen jede wiederum die geeignete von boundary¬ After oder boundaryBefore aufruft. Die vier Funktionen sind extendRightFromRight, extend- RightFromLeft, extendLeftFromRight und extendLeftFromLeft. Die Funktion extendSelnDrag stellt basierend darauf, ob die Position in dem Aufruf vor oder hinter dem Anker liegt, fest, ob boundaryAfter oder boundaryBefore aufzurufen ist. Die Funktion incrType ruft nach dem Inkrementieren des Typs der momentanen Auswahl sowohl boundaryAfter als auch boundary¬ Before in einer Schleife auf, die die Auswahl wiederholend bis zu einer geeigneten geklammerten Auswahl, wie durch checkBracketincr bestimmt, erweitert oder bis eine geeignete un¬ geklammerte Auswahl erreicht wird. incrType reagiert somit auf Mehrfachklicken, wobei jeder folgende Klick den aktiven Texttyp inkrementiert und den kleinsten umgebenden Bereich dieses Typs von Zeichen zu Wort, Wendung, Satzteil, Satz und Absatz auswählt. Wenn eine Auswahl mit einer durch Klammern abgegrenzten Struktur beginnt, z. B. eine Einklammerung oder Anführung, wählt Mehrfachklicken diese Struktur an einem geeigneten Punkt in der Folge aus. Wenn aber die durch Klammern abgegrenzte Struktur Teil des umgebenden Textes ist, der als Folge eines Klicks ausgewählt werden sollte, wird die Struktur in ihrer Ganzheit ausgewählt.
  • Nach dem Erlangen der Endpunkte der neuen Auswahl erlangt jede der TIAB-Auswahlfunktionen auch andere relevante Daten wie Grenzmerkmale und Großschreibung. Diese Daten werden in der oben beschriebenen TiabSeln-Datenstruktur gespeichert.
  • Jede der TIAB-Auswahlfunktionen schließt, indem die Endpunkte der neuen Auswahl in Kasten 412 in die Endpunktdatenstruktur geladen werden und dann in Kasten 414 WAHR zurückgegeben wird. Der Host-Editor kann dann die Endpunkte der neuen Auswahl rückgewinnen und sie verwenden, um die neue Auswahl zu bestimmen, die dann angezeigt wird, wie oben mit Bezug auf Fig. 3 beschrieben.
  • (4) Festsetzungsdaten
  • Die Funktionen, die Festsetzungsdaten bereitstellen, umfassen addBrackets, removeßrackets, changeCategories, cutSeln, deleteSeln, pasteSeln und toggleCapitalization. Von diesen Funktionen werden cutSeln, deleteSeln und pasteSeln durch den Host-Editor nach dem Durchführen einer Manipulationsoperation in dem Schneiden-Kopieren-Einkleben-Muster aufgerufen. Wie oben angemerkt, wird die Funktion copySeln ebenfalls als Folge einer Manipulationsoperation aufgerufen, aber anstatt Festsetzungsdaten bereitzustellen, kopiert copy¬ Seln lediglich die Auswahldatenstruktur von TIAB in eine andere TiabSeln-Datenstruktur, die als Schnittpufferdatenstruktur von TIAB dient. Die anderen Funktionen, addBrackets, removeßrackets, changeCategories und toggleCapitalization liefern höherstufige Operationen, indem sie Festsetzungsdaten bereitstellen, die definieren, wie die höherstufigen Operationen ausgeführt werden können.
  • Im Allgemeinen basieren die Funktionen, die Festsetzungsdaten liefern, auf den Konventionen der englischen Sprache, sodass jede Funktion implizit einen Satz von Regeln umfasst, den sie benutzt, um geeignete Festsetzungsdaten zu erlangen. Andere natürliche Sprachen mit unterschiedlichen Konventionen könnten andere Regeln und folglich andere Funtionen benötigen, um Festsetzungsdaten bereitzustellen, aber der allgemeine Weg des Bereitststellens von Festsetzungsdaten, die eine Operationsfolge definieren, die zu einer korrekten Texttyp-Interpunktionsstruktur führt, sollte auf andere geschriebene natürliche Sprachen anwendbar sein.
  • Die Funktionen addBrackets, removeßrackets und toggleCapitalization beinhalten relativ einfache Regeln und wenden diese Regeln unter Verwendung von Funktionen wie scanNat¬ BndryFwd, scanNatBndryßkwd, tokenScanFwd und tokenScanBkwd an. Diese Abtastfunktionen tasten den Text ab und liefern geeignete Information, indem sie Texttypen von natürlichen Grenzen zurückgeben und eine ScanRecord-Datenstruktur laden. Die Funktionen changeCategories, copsSeln, deleteSeln und pasteSeln umfassen andererseits viel kompliziertere Regeln und stützen sich auf die Zwischenfunktion getFixupInfo, um Daten für ihre Festsetzungsoperationen zu erlangen, und getFixupInfo ruft wiederum, wenn nötig, die Abtastungsfunktionen auf.
  • Die Abtastungsfunktionen tokenScanFwd und tokenScanBkwd wurden oben mit Bezug auf Fig. 9 erörtert. Die Abtastungsfunktionen scanNatBndryFwd und scanNatBndryBkwd beginnen bei einer Tokengrenze in den Textdaten und identifizieren den Texttyp einer natürlichen Grenze, die das folgende Token in der gegebenen Richtung einschließt, wobei ein Satz von Regeln angewandt wird, von denen die meisten implizit in scanNatBndryFwd enthalten sind. Diese zwei Funktionen werden auch von einigen der oben erörterten TIAB-Auswahlfunktionen aufgerufen, aber sie spielen eine bedeutendere Rolle in den TIAB-Festsetzungsfunktionen.
  • Obwohl sich die TIAB-Festsetzungsfunktionen untereinander stark unterscheiden, folgen sie einem allgemeinen Muster, das mehrere ähnliche Schritte einschließt. Alle von ihnen werden mit wenigstens einem Zeiger auf eine Festsetzungsdatenstruktur aufgerufen, und die meisten von ihnen werden mit zwei Zeigern, entweder auf Festsetzungsdatenstrukturen für die zwei Enden einer Auswahl oder zwei alternative Festsetzungsdatenstrukturen aufgerufen. Bevor sie mit dem Laden einer Festsetzungsdatenstruktur beginnt, ruft jede Festsetzungsfunktion die Funktion initFixup auf, um die Datenstruktur mit einem geeigneten Offset zu initialisieren, der angibt, wo die Folge von Operationen auszuführen ist. Dann erlangt jede Festsetzungsfunktion Festsetzungsdaten und lädt sie in die Festsestzungsdatenstrukturen, wobei die TIAB-Auswahldatenstruktur gegebenenfalls in dem Prozess modifiziert wird. Zum Schluss gibt jede Festsetzungsfunktion die Kontrolle an die Host-Editorfunktion, die sie aufrief, zurück, die dann die Festsetzungsdaten rückgewinnt und die angegebene Operationsfolge wie oben mit Bezug auf Fig. 6 beschrieben ausführt.
  • Fig. 11 zeigt grafisch die Art von durch getFixupInfo bereitgestellten Daten, wenn sie bezüglich einer natürlichen Grenze aufgerufen wird, wobei veranschaulicht wird, wie sie Daten über die natürliche Grenze bereitstellt. Die in Fig. 11 veranschaulichte Technik macht Gebrauch von der Beobachtung, dass eine Folge von Texttypcodes, die Tokencodes entspricht, Codes vom Typ Zeichen enthält, wobei zwischen jedem aneinandergrenzenden Paar von ihnen eine Folge eines anderen für einen Zwischenraum zwischen Wörtern geeigneten Typs liegt, z. B. eine Folge vom Typ Wort, Wendung, Satzteil, Satz oder Absatz, wie in Tabelle II oben gezeigt. Der Texttyprahmen 430 in Fig. 11 enthält deshalb sechs Texttypcodes, von denen der erste und letzte vom Typ Zeichen, gezeigt als Tch, sind, und von denen der zweite bis fünfte von einem anderen für einen Zwischenraum zwischen Wörtern geeigneten Typ, gezeigt als Tbr, sind.
  • Die Stelle 432 in Fig. 11 gibt eine Stelle in dem Texttyprahmen 430 an, bei der getFixupInfo beginnt. Wenn die Anfangsstelle 432 innerhalb einer natürlichen Grenze liegt, die eine Folge eines für einen Zwischenraum zwischen Wörtern geeigneten Typs, wie in Fig. 11, ist findet getFixupInfo das linke Ende 434 und das rechte Ende 436 der natürlichen Grenze. Sie kann dann alle Information erlangen, die sie zum Laden einer fixupInfo-Datenstruktur benötigt. Sie lädt den Texttyp der Codes zwischen der Anfangsstelle 432 und dem linken Ende 434 als pdnbl und den Texttyp der Codes zwischen der Anfangstelle 432 und dem rechten Ende als pdnbR. Sie lädt die Anzahl von Tokencodes zwischen der Anfangssteile 432 und dem linken Ende 434 als pdnbLien und die Anzahl von Tokencodes zwischen der Anfangsstelle 432 und denn rechten Ende 436 als pdnbRlen. Sie lädt den Tokencode des Tokens links von der Anfangsstelle 432 als pdnbLtoken und den Tokencode des Tokens zur Rechten als pdnbRtoken Wo angebracht, setzt sie sentlnitFlag, um anzuzeigen, dass die Anfangsstelle 432 unmittelbar vor einem Wort liegt und einer natürlichen Grenze folgt, deren Texttypcodes vom Typ Satz oder Absatz sind, um anzuzeigen, dass das folgende Wort mit einem Großbuchstaben beginnen soll.
  • Fig. 12 zeigt einige der Ergebnisse des Anwendens von getFixupInfo an jeder Stelle im Textrahmen 450, einschließend die Werte für pdnbl, pdnbLlen, pdnbR und pdnbRlen an jeder Stelle. Die Textcodes im Textrahmen 450 entsprechen der folgenden Kette: ab),c
  • Eine Kette wie diese könnte z. B. am Ende einer Einklammerung vorkommen, die eine Anführung enthält und die innerhalb eines Satzteils in einem Satz eingeschachtelt ist.
  • Der Ergebniskasten 452 zeigt das Ergebnis des Aufrufs von getFixupInfo an einer Stelle zwischen Zeichencodes innerhalb einer Worteinheit - der Typ in jeder Richtung ist Zeichen CH), und die Länge ist null. Desgleichen ist in Ergebniskasten 454 der Typ zur Linken Zeichen, und die Länge ist null. Zur Rechten ist jedoch der Typ rechte Klammer (RB), und die Länge ist eins. Der Ergebniskasten 456 zeigt den Typ rechte Klammer zur Linken und Länge eins und Typ Wendung zur Rechten und Länge zwei. Der Ergebniskasten 458 zeigt den Typ Wendung in beiden Richtungen und Länge eins. Wenn die momentane TIAB-Auswahl eine Länge größer als null hätte, würde jedoch der Typ zur Rechten der Typ Wort sein, weil der Textcode an dieser Stelle ein Zwischenraum ist. Schließlich zeigt der Ergebniskasten 460 den Typ Wendung und Länge zwei zur Linken, aber den Typ Zeichen und Länge null zur Rechten.
  • Die Funktion changeVCategories benutzt die von getFixupInfo gelieferten Daten, wie aus Fig. 13 und 14 zu ersehen ist. Fig. 13 zeigt Schritte in einer Operationsfolge, um eine Texteinheitsauswahl von Typ Wort in Typ Wendung zu ändern, während Fig. 14 Schritte zeigt, um eine Einfügungspunktauswahl von Typ Satz in Typ Satzteil zu ändern.
  • Der Textrahmen 480 in Fig. 13 zeigt eine schattierte Texteinheitsauswahl vom Typ Wort. Um sie in den Typ Wendung zu ändern, ruft changeCategories getFixupInfo an jedem Ende der Texteinheitsauswahl auf, um die Länge der natürlichen Grenze vom Typ Wort zu bestimmen, und lädt dann Daten in die Festsetzungsdatenstrukturen, die zum Löschen der Textcodes in den natürlichen Grenzen führen werden, wie im Textrahmen 482 gezeigt. Dann bestimmt changeCategories, welche Textcodes an jedem Ende der Texteinheit eingefügt werden müssen, um natürliche Grenzen vom Typ Wendung bereitzustellen, und lädt Daten in die Festsetzungsdatenstrukturen, die zu der passenden Einfügung führen werden, wie im Textrahmen 484 gezeigt. Wenn die Festsetzungsdatenstrukturen an den Host-Editor zurückgegeben werden, werden die Operationen an jedem Ende der Auswahl natürlich getrennt ausgeführt, aber es wird dasselbe Ergebnis wie in Fig. 13 gezeigt erzielt.
  • Der Textrahmen 490 in Fig. 14 zeigt eine Einfügungspunktauswahl innerhalb einer natürlichen Grenze vom Typ Satz. Um zum Typ Wendung zu wechseln, ruft changeCategories getFixupInfo bei der Einfügungspunktauswahl auf, um die Länge zu jedem Ende der natürlichen Grenze zu bestimmen. Dann ermittelt changeCategories, welche Länge gelöscht werden muss, um die natürliche Grenze zu beseitigen, wie in Kasten 494 gezeigt, und welche Textcodes eingefügt werden müssen, um eine natürliche Grenze vom Typ Wendung bereitzustellen, in diesem Fall ein Semikolon und ein Zwischenraum, wie in Kasten 494 gezeigt, und lädt Daten, die das Löschen und Einfügen anzeigen, in die Festsetzungsdatenstruktur. Des Weiteren schließt changeCategories Festsetzungsdaten ein, die einen Wechsel der Großschreibung nach der neuen natürlichen Grenze anzeigen, wie ebenfalls in Kasten 494 gezeigt.
  • Die anderen TIAB-Festsetzungsoperationen, die getFixupInfo aufrufen, führen ähnliche Funktionen aus. Die Funktion deleteSeln, die auch von cutSeln aufgerufen wird, ruft getFixupInfo zu Daten über die natürlichen Grenzen zur Linken und Rechten der Texteinheiteauswahl, die grade gelöscht wird, auf; deleteSeln wendet dann einen impliziten Satz von Regeln an, um z. B. festzustellen, ob eine oder beide natürlichen Grenzen zu löschen sind, ob eine andere natürliche Grenze an ihrem Platz einzufügen ist, und ob die Großschreibung des folgenden Wortes zu ändern ist. Nach Empfang einer Benutzeranforderung zum Durchführen einer Einkleben-Operation in dem Schneiden-Kopieren-Einkleben-Muster kann der Host-Editor, wenn es eine momentane Auswahl gibt, die momentane Auswahl löschen und den Inhalt seines Schnittpuffers an dem Nach-Löschen-Einfügungspunkt einfügen. Dann ruft der Host-Editor pasteSeln auf, die zuerst getFixupInfo aufruft, um unter Verwendung des oben beschriebenen ausgeschlossenen Blocks Daten über die natürlichen Grenzen angrenzend an den Nach-Löschen-Einfügungspunkt in einer deleteSeln ähnlichen Weise zu erlangen. Dann benutzt pasteSeln diese Daten und die natürlichen Grenzdaten über die Enden des zum Zeitpunkt einer Schneiden- oder Kopieren-Operation erlangten Schnittpufferinhalts, um die Festsetzungsdaten zu erlangen, wobei etwas unterschiedliche Regeln auf der linken und rechten Seite der Einfügung angewandt werden.
  • Zusätzlich zum Aufrufen von getFixupInfo ruft pasteSeln eine Anzahl anderer Funktionen auf, um beim Erlangen von Festsetzungsdaten und, wenn angebracht, Modifizieren der TIAB-Auswahldatenstruktur zu helfen. Grundsätzlich folgt jedoch pasteSeln denselben allgemeinen Schritten wie die anderen TIAB-Festsetzungsfunktionen.
  • 4. Verschiedenes
  • Diverse Modifikationen, Erweiterungen und Abwandlungen der offenbarten Implementierungen sind offenkundig. Ein herkömmlicher Host-Editor könnte modifiziert werden, um TIAB zu akkomodieren, indem Routinen bereitgestellt werden, um TIAB-Auswahlfunktionen und TIAO-Festsetzungsfunktionen für höherstufige Operationen aufzurufen, die Routinen, die Manipulationsoperationen ausführen, modfiziert werden, sodass sie TIAB-Festsetzungsfunktionen aufrufen, und indem Routinen bereitgestellt werden, die auf Aufrufe von TIAB nach Daten ansprechen. Alternativ könnte die Erfindung natürlich ohne einen getrennten Host-Editor implementiert werden, wobei aber diese Funktionen in TIAB eingeschlossen werden.
  • Im Allgemeinen sind die von der Implementierung angewandten Regeln und Muster in den Funktionen Inbegriffen, aber die Regeln und Muster könnten alternativ in getrennten Datenstrukturen, wie für die Muster in Fig. 2 gezeigt, enthalten sein, wenn dies zweckdienlich wäre. Die Regeln und Muster beheben alle Mehrdeutigkeiten bei der Interpunktion in einer vorbestimmten Weise, aber alternativ wäre es möglich, den Benutzer aufzufordern, gewisse, lästige Mehrdeutigkeiten zu beheben.
  • In der Implementierung geht TIAB davon aus, dass Positionen im Zeichenpuffer des Host- Editors mit einer 32-Bit Ganzzahl beschrieben werden können. Dies könnte verallgemeinert werden, indem ein abstrakterer Begriff für die Pufferposition verwendet wird, sodass sie einfacher an eine größere Vielfalt von Host-Editoren adaptierbar wäre.
  • Wenn der Host-Editor Zugriff auf Funktionen wie Rechtschreibprüfung oder Suchen-und-Finden hätte, könnten die Ergebnisse des Aufrufens solcher Funktionen Folgen für die Interpunktionsstruktur haben. Daher könnten TIAB weitere Festsetzungsfunktionen hinzugefügt werden, um solche Operationen zu handhaben.

Claims (7)

1. Verfahren zum Betreiben eines Prozessors (52) zur Verarbeitung digitaler Textdaten, wobei das Verfahren umfasst:
(A) Betreiben des Prozessors (52) zur Bestimmung von Textdaten (72), die einen Text (12) definieren, wobei der Text ein Wort und ein erstes Interpunktionszeichen in einem Bereich an einem Ende des Wortes enthält, dadurch gekennzeichnet, dass das Verfahren des Weiteren umfasst:
(B) Betreiben des Prozessors (52) zur Verwendung der Textdaten (72), um automatisch operationsdefinierende Daten zu bestimmen, wobei die operationsdefinierenden Daten eine Abfolge wenigstens einer Operation des Prozessors definieren und die Abfolge, wenn sie von dem Prozessor ausgeführt wird, die Textdaten modifiziert, um modifizierte Textdaten zu erzeugten, die einen modifizierten Text (32) definieren, der das Wort und ein zweites Interpunktionszeichen in dem Bereich an dem einen Ende des Wortes anstelle des ersten Interpunktionszeichens enthält, wobei das zweite Interpunktionszeichen richtig ist und sich von dem ersten Interpunktionszeichen unterscheidet, wobei die operationsdefinierenden Daten einen Anfangspunkt in den Textdaten, einen Satz Textcodes in den Textdaten, die zu löschen sind, und einen Satz Textcodes, die einzusetzen sind, anzeigen.
2. Verfahren nach Anspruch 1, wobei die operationsdefinierenden Daten den Satz Textcodes, die zu löschen sind, anzeigen, indem sie eine Anzahl von Textcodes anzeigen, die zu löschen sind.
3. Verfahren nach Anspruch 1, wobei die operationsdefinierenden Daten den Satz Textcodes, die einzusetzen sind, anzeigen, indem sie eine Liste von Textcodes einschließen, die einzusetzen sind.
4. Verfahren nach Anspruch 1, wobei die operationsdefinierenden Daten des Weiteren eine Anzahl von Textcodes anzeigen, die einzusetzen sind.
5. Verfahren nach einem der vorangehenden Ansprüche, wobei die operationsdefinierenden Daten des Weiteren eine Position in dem Text zur Veränderung von Großschreibung und anzeigen, wie die Großschreibung an der angezeigten Position zu verändern ist.
6. Verfahren nach einem der vorangehenden Ansprüche, das des Weiteren umfasst: (C) Betreiben des Prozessors (52) zum Ausführen der Abfolge wenigstens einer Operation, um die modifizierten Textdaten zu erzeugen.
7. System zum Verarbeiten digitaler Textdaten, das umfasst:
Textdaten (72), die einen Text (12) definieren, wobei der Text ein Wort und ein erstes Interpunktionszeichen in einem Bereich an einem Ende des Wortes enthält; und
einen Prozessor (52), der zum Zugriff auf die Textdaten (72) angeschlossen ist;
dadurch gekennzeichnet, dass der Prozessor (52) in Betrieb:
die Textdaten (72) verwendet, um automatisch operationsdefinierende Daten zu bestimmen, wobei die operationsdefinierenden Daten eine Abfolge wenigstens einer Operation des Prozessors definieren und die Abfolge, wenn sie von dem Prozessor ausgeführt wird, die Textdaten modifiziert, um modifizierte Textdaten zu erzeugen, die einen modifizierten Text (32) definieren, der das Wort und ein zweites Interpunktionszeichen in dem Bereich an dem einen Ende des Wortes statt des ersten Interpunktionszeichens enthält, wobei das zweite Interpunktionszeichen richtig ist und sich von dem ersten Interpunktionszeichen unterscheidet, wobei die operationsdefinierenden Daten einen Anfangspunkt in den Textdaten, einen Satz Textcodes in den Textdaten, die zu löschen sind, und einen Satz Textcodes, die einzufügen sind, anzeigen.
DE68929461T 1988-11-21 1989-11-21 Verfahren zur Verarbeitung von digitalen Textdaten Expired - Fee Related DE68929461T2 (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
DE68929461D1 DE68929461D1 (de) 2003-05-08
DE68929461T2 true DE68929461T2 (de) 2003-10-23

Family

ID=23047482

Family Applications (2)

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

Family Applications Before (1)

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

Country Status (4)

Country Link
US (1) US5070478A (de)
EP (2) EP0370777B1 (de)
JP (1) JP3220134B2 (de)
DE (2) DE68929038T2 (de)

Families Citing this family (40)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US5862374A (en) * 1989-09-14 1999-01-19 Megaword International Pty. Ltd. 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
US5836771A (en) 1996-12-02 1998-11-17 Ho; Chi Fai Learning method and system based on questioning
US6498921B1 (en) * 1999-09-01 2002-12-24 Chi Fai Ho Method and system to answer a natural-language question
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
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
US7386834B2 (en) 2002-06-28 2008-06-10 Sun Microsystems, Inc. Undo/redo technique for token-oriented representation of program code
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
US7705175B2 (en) * 2005-01-18 2010-04-27 Nippoh Chemicals Co., Ltd. Method for producing imide ether compound
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 自然言語処理方式
US4868750A (en) * 1987-10-07 1989-09-19 Houghton Mifflin Company Collocational grammar system
US4864502A (en) * 1987-10-07 1989-09-05 Houghton Mifflin Company Sentence analyzer
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
EP0370777B1 (de) 1999-07-28
EP0911744A2 (de) 1999-04-28
JPH02188868A (ja) 1990-07-24
JP3220134B2 (ja) 2001-10-22
EP0370777A3 (de) 1991-11-21
DE68929461D1 (de) 2003-05-08
EP0911744A3 (de) 2000-10-11
EP0911744B1 (de) 2003-04-02
EP0370777A2 (de) 1990-05-30
DE68929038D1 (de) 1999-09-02
DE68929038T2 (de) 1999-12-23
US5070478A (en) 1991-12-03

Similar Documents

Publication Publication Date Title
DE68929461T2 (de) Verfahren zur Verarbeitung von digitalen Textdaten
DE68928693T2 (de) Verfahren zur Behandlung von digitalen Textdaten
DE68928775T2 (de) Verfahren und Vorrichtung zur Herstellung einer Zusammenfassung eines Dokumentes
DE69710458T2 (de) Verfahren und system für die berechnung von semantischen logischen formen von syntaxbäumen
DE3751716T2 (de) System zur maschinellen Übersetzung
DE3587501T3 (de) Gerät, Verfahren und Struktur zur Umwandlung eines Dokumentes einer Struktur in ein Dokument einer anderen Struktur.
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.
DE69229204T2 (de) Iteratives Verfahren zum Suchen von Satzteilen und Informationsauffindungssystem, welches dieses benützt
DE69710459T2 (de) Identifizierung von wörtern im japanischem text durch ein rechnersystem
DE69734400T2 (de) Verfahren und system zur prüfung der richtigkeit der rechtschreibung und grammatik eines dokuments
DE69807699T2 (de) Vorrichtung und verfahren zur syntaxanalyse und transformation von befehlen
DE69726339T2 (de) Verfahren und Apparat zur Sprachübersetzung
DE68926745T2 (de) Zwischenstruktur für ein tabellenblatt
DE69330633T2 (de) Verfahren und Apparat zum Vergleichen von semantischen Mustern für das Wiederauffinden von Texten
DE69719858T2 (de) Dokumentanzeigesystem und elektronisches Wörterbuch
DE69807483T2 (de) Verfahren zum darstellen von glyphen unter verwendung einer bibliothek von gestaltungsdiensten
DE19709968C2 (de) Verfahren und System zum Übersetzen eines Dokumentes
DE69400869T2 (de) System zum transkribieren von texteingaben
DE69812162T2 (de) Vorrichtung zur Verwendung bei der Identifizierung semantischer Mehrdeutigkeiten
DE69030815T2 (de) Apparat und verfahren zur erzeugung von dokumenten
DE69028592T2 (de) Gerät zur automatischen Generierung eines Index
DE3650417T2 (de) Informationsaufzeichnungs- und Wiederauffindungssystem.

Legal Events

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