An editor or software engineering tool may be configured to represent program code as a doubly-linked list of lexical tokens and to maintain, coincident with an operation that modifies contents of the list, an undo object that identifies opposing end nodes of a sublist of one or more lexical tokens corresponding to a substring that is either inserted into or removed from the list by the operation. In this way, lexical tokens corresponding to an inserted substring can be readily and efficiently excised to restore a pre-insertion tokenized list state. Similarly, lexical tokens corresponding to a removed substring can be readily and efficiently reinstated to restore a pre-deletion tokenized list state. Advantageously, undo support once employed to restore a prior tokenized list state is symmetrically available to support redo operations. In some embodiments in accordance with the present invention, undo-redo entries are maintained in an operation ordered set that is traversed to support one or more operations in either the undo or redo directions. In some realizations, such an ordered set of undo-redo entries is maintained by, or in conjunction with, an undo-redo manager.
|
25. An apparatus comprising:
storage for a computer readable encoding of an edit buffer represented as a sequence of lexical tokens for a tokenized program representation; and
means for maintaining an edit-operation-ordered representation of undo objects that each identify at least opposing end nodes of respective sublists of one or more lexical tokens in the tokenized program representation that correspond to substrings that are either introduced into or removed from the list by edit operations, wherein at least one of the sublists comprises different opposing end nodes stored non-contiguously and each of the sublists is a doubly-linked list.
13. A software engineering tool encoded in one or more tangible computer readable media as instructions executable to represent program code as a doubly-linked list of lexical tokens for a tokenized program representation and to maintain, coincident with an operation that modifies contents of the list, a first undo object that identifies at least opposing end nodes of a sublist of one or more lexical tokens in the tokenized program representation corresponding to a substring that is either introduced into or removed from the list by the operation, wherein the sublist comprises different opposing end nodes stored non-contiguously and is a doubly-linked list.
1. A method of providing undo operation support in an edit buffer, the method comprising:
representing the edit buffer as a doubly-linked list of nodes for a tokenized program representation, each node corresponding to a respective lexical token in the tokenized program representation; and
maintaining, as a side-effect of operations that modify contents of the list, an ordered set of undo objects that identify at least respective opposing-end nodes of respective sublists of one or more lexical tokens in the tokenized program representation corresponding to respective substrings inserted into the list by respective insert-type operations, wherein at least one of the sublists comprises different opposing end nodes stored non-contiguously and each of the sublists is a doubly linked list.
21. One or more tangible computer readable media encoding a data structure that represents contents of an edit buffer as a sequence of lexical tokens, the encoded data structure comprising:
a doubly linked list of nodes for a tokenized program representation;
token representations, each corresponding to at least one respective node of the list, wherein at least some of the token representations have associated substring encodings; and
an edit-operation-ordered representation of undo objects that each identify at least opposing end nodes of respective sublists of one or more lexical tokens in the tokenized program representation that correspond to substrings that are either introduced into or removed from the list by edit operations, wherein at least one of the sublists comprises different opposing end nodes stored non-contiguously and each of the sublists is a doubly-linked list.
10. A software engineering tool encoded in one or more computer readable media, the software engineering tool comprising:
a representation of program code encoded in a computer readable medium as a doubly-linked list of nodes for a tokenized program representation, each node corresponding to a respective token in the tokenized program representation recognized in accordance with an operative set of lexical rules;
functional encodings of edit methods, including at least insert-type and remove-type methods, the edit methods executable to operate on the list of nodes; and
an undo-redo manager that maintains an ordered set of undo-redo objects in correspondence with operation of the edit methods, the undo-redo objects identifying opposing-end nodes of sublists of tokens inserted into the list and removed therefrom by operation of the insert-type and remove-type methods, respectively, wherein at least one of the sublists comprises different opposing end nodes stored non-contiguously and each of the sublists is a doubly-linked list.
2. The method of
maintaining the ordered set of undo objects to further identify at least respective opposing-end nodes of respective doubly-linked sublists of one or more lexical tokens corresponding to respective substrings removed from the list by respective remove-type operations.
3. The method of
wherein the opposing-end nodes of a particular sublist removed from the list by execution of a particular one of the remove-type operations maintain an identification of respective predecessor and successor nodes of the list prior to the execution of the particular remove-type operation.
4. The method of
restoring, coincident with an undo directive, the doubly-linked list of lexical tokens to a state that existed prior to execution of a particular remove-type operation at least in part by reintroducing thereinto the sublist identified by a corresponding one of the undo objects; and
maintaining as a redo object, identification of at least the opposing end nodes of the reintroduced sublist.
5. The method of
wherein, for a particular lexical token of the list replaced by a replace-type operation, the maintaining includes encoding in a corresponding one of the undo objects an identification of the replaced token.
6. The method of
wherein, for a particular lexical token of the list split by an insert-type operation, the maintaining includes replicating in a sublist inserted into the list, substrings corresponding to the split token; and
wherein the corresponding one of the undo objects further identifies a particular node corresponding to the split token.
7. The method of
restoring, coincident with an undo directive, the doubly-linked list of lexical tokens to a state that existed prior to execution of a particular insert-type operation at least in part by removing therefrom the sublist identified by a corresponding one of the undo objects; and
maintaining as a redo object, identification of at least the opposing end nodes of the removed sublist.
8. The method of
wherein the corresponding one of the undo objects and the redo object are encoded as a same object.
9. The method of
wherein at least one of the undo objects identifies a sublist that includes a single lexical token, and wherein opposing-end nodes of the sublist are a same node.
11. The software engineering tool of
a functional encoding of an undo directive that reverses effects of a previously executed edit method on state of the list, while maintaining the identification of opposing-end nodes of a corresponding doubly-linked sublist of tokens for use in a subsequent redo directive.
12. The software engineering tool of
a functional encoding of a redo directive that reinstates effects of a previously executed edit method on state of the list, while maintaining the identification of opposing-end nodes of a corresponding sublist of tokens for use in a subsequent undo directive.
14. The software engineering tool of
wherein the operation is an insert-type operation and the sublist of lexical tokens corresponds to a substring introduced by the insert-type operation.
15. The software engineering tool of
wherein the operation is an remove-type operation and the sublist of lexical tokens corresponds to a substring removed by the remove-type operation.
16. The software engineering tool of
wherein the instructions are further executable, coincident with an undo directive, to restore the doubly-linked list of lexical tokens to a prior state using the sublist identified by the first undo object, and to maintain as a redo object identification of at least the opposing end nodes of the sublist.
17. The software engineering tool of
wherein the first undo object and the redo object are encoded as a same object.
18. The software engineering tool of
wherein an operation-ordered store of undo objects, including the first undo object, is maintained for use by the software engineering tool.
19. The software engineering tool of
an operation-ordered store of undo-redo objects, including the first undo object.
20. The software engineering tool of
wherein the one or more tangible computer readable media are selected from the set of a disk, tape or other magnetic, optical, or electronic storage medium.
22. The encoded data structure of
wherein the identification of opposing end nodes allows reversal of substring introductions and removals in response to respective undo directives with a computational burden that is independent of size of the edit buffer and independent of size of the substrings introduced and removed.
23. The encoded data structure of
24. The encoded data structure of
wherein the one or more tangible computer readable media are selected from the set of a disk, tape or other magnetic, optical, or electronic storage medium.
26. The apparatus of
means for reversing a particular execution of one of the edit operations using the opposing-end nodes identification of a corresponding one of the undo objects.
27. The apparatus of
means for maintaining the opposing-end nodes identification corresponding to the reversed edit operation for use in reinstatement of the reversed edit operation.
|
This application is related to commonly owned U.S. patent application Ser. No. 10/185,752, entitled “TOKEN-ORIENTED REPRESENTATION OF PROGRAM CODE WITH SUPPORT FOR TEXTUAL EDITING THEREOF,” naming Van De Vanter and Urquhart as inventors and filed on even date herewith, Ser. No. 10/185,753, entitled “EFFICIENT COMPUTATION OF CHARACTER OFFSETS FOR TOKEN-ORIENTED REPRESENTATION OF PROGRAM CODE,” naming Van De Vanter and Urquhart as inventors and filed on even date herewith and Ser. No. 10/185,754, entitled “UNDO/REDO TECHNIQUE WITH INSERTION POINT STATE HANDLING FOR TOKEN-ORIENTED REPRESENTATION OF PROGRAM CODE,” naming Van De Vanter and Urquhart as inventors and filed on even date herewith.
1. Field of the Invention
The present invention relates generally to interactive software engineering tools including editors for source code such as a programming or mark-up language, and more particularly to facilities for supporting undo and/or redo operations on a token-oriented representation.
2. Description of the Related Art
In an editor for computer programs, it may be desirable to represent program code using a token-oriented representation, rather than as simply a linear sequence of characters. In such a representation, the linear sequence of characters that corresponds to program code may be divided into substrings corresponding to the lexical tokens of the particular language. In some implementations, this representation of a stream of tokens can updated incrementally after each user action (for example, after each keystroke) using techniques such as those described in U.S. Pat. No. 5,737,608 to Van De Vanter, entitled “PER KEYSTROKE INCREMENTAL LEXING USING A CONVENTIONAL BATCH LEXER.” In general, such updates may require the insertion and/or deletion of tokens in or from the token stream.
A commonly supported and highly desirable function of conventional text editors is “Undo-Redo.” This function permits a user to reverse the effects of the most recently performed editing operation (i.e., to Undo it), and then optionally to reverse the undo in order to get back to the original state (i.e., Redo the Undo). It is generally desirable for such Undo-Redo functionality to permit a compound or multi-step Undo operation, thereby permitting the user to unwind as many of the most recently performed editing operations as desired. A compound Redo correspondingly reverses a sequence of Undo operations.
While undo-redo facilities are common in conventional text editors that employ a conventional text buffer, provision of an undo-redo facility in a software engineering tool environment that employs a token-oriented representation of program code presents unique design challenges. In general, it would desirable if undo-redo operation support could be provided for an underlying token-oriented representation in a way that ensures that such operations take no more time than other basic editing operations. In particular, it is desirable for computational requirements associated with undo-redo operations to scale such that an operation takes no more than O(N) time, where N corresponds to the size of the operation (i.e., content inserted or deleted) and where the computational requirements are generally insensitive to the size of the program being edited.
Accordingly, it has been discovered that an editor or software engineering tool may be configured to represent program code as a doubly-linked list of lexical tokens and to maintain, coincident with an operation that modifies contents of the list, an undo object that identifies opposing end nodes of a sublist of one or more lexical tokens corresponding to a substring that is either inserted into or removed from the list by the operation. In this way, lexical tokens corresponding to an inserted substring can be readily and efficiently excised to restore a pre-insertion tokenized list state. Similarly, lexical tokens corresponding to a removed substring can be readily and efficiently reinstated to restore a pre-deletion tokenized list state. Advantageously, undo support once employed to restore a prior tokenized list state is symmetrically available to support redo operations. In some embodiments in accordance with the present invention, undo-redo entries are maintained in an operation ordered set that is traversed to support one or more operations in either the undo or redo directions. In some realizations, such an ordered set of undo-redo entries is maintained by, or in conjunction with, an undo-redo manager.
By identifying at least opposing end nodes of respective sublists of one or more lexical tokens that correspond to substrings inserted into and removed from the tokenized program representation, even lengthy, complex undo (or redo) sequences can be supported with a computational overhead that scales with the number of undone (or redone) operations rather than buffer size or even size of the edits performed. As a result, a software engineering tool that employs techniques in accordance with the present invention provides extremely efficient undo-redo support even in software engineering environments that handle large bodies of program code or that provide language-oriented features such as advanced program typography or editor behavior specialized based on lexical context.
The present invention may be better understood, and its numerous objects, features, and advantages made apparent to those skilled in the art by referencing the accompanying drawings.
The use of the same reference symbols in different drawings indicates similar or identical items.
Exploitations of the techniques of the present invention are many. In particular, a variety of software engineering tools are envisioned, which employ aspects of the present invention to facilitate undo-redo in a token-oriented representation of program code. One exemplary software engineering tool is a source code editor that provides specialized behavior or typography based on lexical context using a tokenized program representation. Such a source code editor provides a useful descriptive context in which to present various aspects of the present invention. Nonetheless, the invention is not limited thereto. Indeed, applications to editors, analyzers, builders, compilers, debuggers and other such software engineering tools are envisioned. In this regard, some exploitations of the present invention may provide language-oriented behaviors within suites of tools or within tools that provide functions in addition to manipulation of program code.
In addition, while traditional procedural or object-oriented programming languages provide a useful descriptive context, exploitations of the present invention are not limited thereto. Indeed, other software engineering tool environments such as those adapted for editing, analysis, manipulation, transformation, compilation, debugging or other operations on functionally descriptive information or code, such as other forms of source code, machine code, bytecode sequences, scripts, macro language directives or information encoded using markup languages such as HTML or XML, may also employ structures, methods and techniques in accordance with the present invention. Furthermore, the structures, methods and techniques of the present invention may be exploited in the manipulation or editing of other information, such as software documentation or even prose. Based on the description herein, persons of ordinary skill in the art will appreciate applications to a wide variety of tools and language contexts.
Accordingly, in view of the above and without limitation, an exemplary exploitation of the present invention is now described.
Tokenized Program Representation with Undo-Redo Support
In the illustration of
As illustrated in
An undo-redo manager 130 maintains an ordered set 131 of undo-redo objects or structures that facilitate manipulations of tokenized program representation 110 to achieve the semantics of undo and redo operations. In general, undo-redo manager 130 is responsive to undo-redo directives 142 supplied by software engineering tool 120. Typically, undo-redo directives are themselves responsive to user manipulations, although other sources (such as from automated tools) are also possible. In the illustration of
Moving on to
Turning to
Results of a redo are illustrated in
Based on the description above, persons of ordinary skill in the art will appreciate a variety suitable functional implementations to support the above-described token insertion, undo of token insertion, and redo of token insertion. The exemplary code that follows illustrates one such suitable functional implementation.
// Represents a token in a doubly linked list. There are sentinel
// tokens at each end of the list, so that no pointers in tokens
// which are proper members of the list are null.
class Token {
public Token next;
public Token previous;
}
// Method for inserting tokens into a doubly linked list
// Precondition:
// - <point> refers to a token in a doubly linked list of Tokens with
//
sentinels, or possibly to the ending sentinel
// - <first> refers to the first of a doubly linked list of at least
//
one Token, which are not in the list referred to by <point>;
//
<last> refers to the last of these tokens
// Postcondition: the tokens beginning with <first> and ending with
// <last> are in the token list, which is otherwise unchanged,
// immediately prior to the token pointed to by <point>
InsertionUndoRedo Insert (Token point, Token first, Token last) {
Token lastBefore = point.previous;
Token firstAfter = point;
lastBefore.next = first;
first.previous = lastBefore;
last.next = firstAfter;
firstAfter.previous = last;
return new InsertionUndoRedo (first,last);
}
// Represents the ability to undo/redo the insertion of a range
// of tokens from a doubly linked token list with sentinels.
class InsertionUndoRedo {
private Token first;
private Token last;
public InsertionUndoRedo (Token first, Token last) {
this.first = first;
this.last = last;
}
// Precondition: state of the token list is just as it was when
// the tokens were originally inserted and this object created.
// Postcondition: state of token list is just as it was before
// the tokens were originally inserted; the inserted tokens are
// not in the list.
Undo ( ) {
Token lastBefore = first.previous;
Token firstAfter = last.next;
lastBefore.next = firstAfter;
firstAfter.previous = lastBefore;
}
// Precondition: state of the token list is just as before the
// tokens were originally inserted and this object created;
// the tokens beginning with <first> and ending with <last> are
// not in the token list.
// Postcondition: state of the token list is just as it was
// when the tokens were originally inserted and this object
// created; the inserted tokens are back in the list in their
// inserted location.
Redo ( ) {
Token lastBefore = first.previous;
Token firstAfter = last.next;
lastBefore.next = first;
firstAfter.previous = last;
}
}
The preceding code is object-oriented and is generally suitable for use in an implementation framework such as that presented by the previously described Swing graphical user interface (GUI) component toolkit, part of the Java Foundation Classes (JFC) integrated into Java 2 platform, Standard Edition (J2SE). However, other implementations, including procedural implementation and implementations adapted to design constraints of other environments, are also suitable.
Turning to
As before, undo-redo object 311 maintains its identification of leading and trailing nodes of tokenized program fragment 314 to support an efficient redo. Reinstatement of the removal is effectuated by updating bi-directional pointers of the tokenized program representation (see state 310D) to bridge the excised fragment 314. As before, undo-redo structure 311 identifies (through respective pointers) opposing end nodes of the excised fragment 314 and excised fragment 314 maintains its single direction pointers into respective excision point nodes to facilitate efficient undo.
The exemplary code that follows illustrates one suitable functional implementation of the above-described token removal, undo of token removal, and redo of token removal.
// Represents a token in a doubly linked list.
// There are sentinel tokens at each end of the list, so that no
// pointers in tokens which are proper members of the list are null.
class Token {
public Token next;
public Token previous;
}
// Method for deleting tokens from a doubly linked list
// Precondition:
// - <first> and <last> point to tokens in a doubly linked list of
//
Tokens with sentinels
// - the token <first> is either the same as, or prior to the token
//
<last> in the list
// Postcondition: the tokens beginning with <first> and ending with
// <last> are no longer in the token list, which is otherwise
// unchanged.
DeletionUndoRedo Delete (Token first, Token last) {
Token lastBefore = first.previous;
Token firstAfter = last.next;
lastBefore.next = firstAfter;
firstAfter.previous = lastBefore;
return new DeletionundoRedo (first,last);
}
// Represents the ability to undo/redo the deletion of a range
// of tokens from a doubly linked token list with sentinels.
class DeletionUndoRedo {
private Token first;
private Token last;
public DeletionUndoRedo (Token first, Token last) {
this.first = first;
this.last = last;
}
// Precondition: state of the token list is just as it was when
// the tokens were originally deleted and this object created.
// Postcondition: state of token list is just as it was before
// the tokens were originally deleted; the deleted tokens are
// back in the list in their original location.
Undo ( ) {
Token lastBefore = first.previous;
Token firstAfter = last.next;
lastBefore.next = first;
firstAfter.previous = last;
}
// Precondition: state of the token list is just as it was
// after Undo was invoked: the deleted tokens are back in the
// list in their original location.
// Postcondition: state of the token list is just as it was
// when the tokens were originally deleted and this object
// created; the tokens beginning with <first> and ending with
// <last> are no longer in the token list, which is otherwise
// unchanged.
Redo ( ) {
Token lastBefore = first.previous;
Token firstAfter = last.next;
lastBefore.next = firstAfter;
firstAfter.previous = lastBefore;
}
}
While the previously described insertion and removal operations have been illustrated primarily in the context of a single operation and its associated undo and redo methods, based on the description herein, persons of ordinary skill in the art will recognize that in a typical editing session, or for that matter, in the course of operation another programming tool, multiple insertions and removals of program fragments will occur. Indeed, large number of such insertions and removals will occur and, in general, can be represented as an ordered set of such operations. In some cases, one operation (e.g., a removal) will operate on results of the previous operation (e.g., an insertion). Accordingly, in the general case, it is desirable to represent an ordered set 410 of undo-redo objects (e.g., objects 411A, 411B, etc.) to facilitate the undoing and/or redoing of arbitrary sequences of operations.
In general, semantics of undo and redo operations are well understood in the art. Of course, a given implementation may seek to limit the amount of storage allocated to undo and redo support and, accordingly, may restrict the growth of the ordered set to a predetermined size. Nonetheless, the techniques described herein may be employed more generally in an unbounded ordered set of undo-redo objects and any particular limitation on sizing of such a structure may be selected based on constraints of a particular implementation or design.
Turning to
Referring now to
// Represents a token in a doubly linked list.
// There are sentinel tokens at each end of the list, so that no
// pointers in tokens which are proper members of the list are null.
class Token {
public Token next;
public Token previous;
}
// Method for replacing tokens in a doubly linked list
// Precondition:
// - <oldFirst> and <oldLast> point to tokens in a doubly linked list
//
of Tokens with sentinels
// - the token <oldFirst> is either the same as, or prior to the
//
token <oldLast> in the list
// - <newFirst> refers to the first of a doubly linked list of at
//
least one Token, which are not in the list referred to by
//
<oldFirst> and <oldLast>; <newLast> refers to the last of these
//
tokens
// Postcondition: the tokens beginning with <newFirst> and ending
// with <newLast> are in the token list in place of the tokens
// beginning with <oldFirst> and ending with <oldLast>.
// - the token list is otherwise unchanged
ReplacementUndoRedo Replace (Token oldFirst, Token oldLast,
Token newFirst, Token newLast) {
Token lastBefore = oldFirst.previous;
Token firstAfter = oldLast.next;
lastBefore.next = newFirst;
newFirst.previous = lastBefore;
newLast.next = firstAfter;
firstAfter.previous = newLast;
return new ReplacementUndoRedo (oldFirst, newFirst,
newLast);
}
// Represents the ability to undo/redo the replacement of a range
// of tokens from a doubly linked token list with sentinels.
class ReplacementUndoRedo {
private Token oldFirst;
private Token newFirst;
private Token newLast;
public ReplacementUndoRedo (Token oldFirst, Token newFirst,
Token newtast) {
this.oldFirst = oldFirst;
this.newFirst = newFirst;
this.newLast = newLast;
}
// Precondition: state of the token list is just as it was when
// the tokens were originally replaced and this object created.
// Postcondition: state of token list is just as it was before
// the tokens were originally replaced; the replaced tokens are
// in the list in their original location, and the new tokens
// are not in the list.
Undo ( ) {
Token lastBefore = newFirst.previous;
Token firstAfter = newLast.next;
Token oldLast = oldFirst;
while (oldLast.next != firstAfter)
oldLast = oldLast.next;
lastBefore.next = oldFirst;
firstAfter.previous = oldLast;
}
// Precondition: state of the token list is just as before the
// tokens were originally replaced and this object created;
// the tokens beginning with <newFirst> and ending with
// <newLast> are not in the token list.
// Postcondition: state of the token list is just as it was
// when the tokens were originally replaced and this object
// created.
Redo ( ) {
Token lastBefore = newFirst.previous;
Token firstAfter = newLast.next;
lastBefore.next = newFirst;
firstAfter.previous = newLast;
}
}
In the preceding exemplary code, the oldFirst field or attribute corresponds to additional field 511A.
Exemplary Editor Implementation
In general, techniques of the present invention may be implemented using a variety of editor implementations. Nonetheless, for purposes of illustration, the description of exemplary editor implementations in U.S. Pat. No. 5,737,608, entitled “PER-KEYSTROKE INCREMENTAL LEXING USING A CONVENTIONAL BATCH LEXER” is incorporated herein by reference. In particular, while the preceding code implements token operations, persons of ordinary skill in the art will recognize that editor and/or programming tools implementations may often include operations that operate at a level of abstraction that corresponds to character manipulations. Such character-oriented manipulations typically affect the state of an underlying token-oriented representation and such state changes can be effectuated using token operations such as the insertion, removal and replacement operations described herein. To generate sequences of token-oriented operations that correspond to character manipulations, incremental lexing techniques described in the '608 patent may be employed in some realizations.
While the invention has been described with reference to various embodiments, it will be understood that these embodiments are illustrative and that the scope of the invention is not limited to them. Many variations, modifications, additions, and improvements are possible. In particular, a wide variety of lexical contexts may be supported. For example, while a lexical context typical of program code has been illustrated, other lexical contexts such as those appropriate to markup languages, comments, even multimedia content may be supported. Similarly, although much of the description has focused on functionality of an editor, the techniques described herein may apply equally to other interactive or even batch oriented tools. While lexical analysis of textual content has been presumed in many illustrations, persons of ordinary skill in the art will recognize that the techniques described herein also apply to structure-oriented editors and to implementations that provide syntactic, as well as lexical, analysis of content.
More generally, plural instances may be provided for components described herein as a single instance. Boundaries between various components, operations and data stores are somewhat arbitrary, and particular operations are illustrated in the context of specific illustrative configurations. Other allocations of functionality are envisioned. Structures and functionality presented as discrete in the exemplary configurations may be implemented as a combined structure or component. These and other variations, modifications, additions, and improvements may fall within the scope of the invention as defined in the claims that follow.
Van De Vanter, Michael L., Urquhart, Kenneth B.
Patent | Priority | Assignee | Title |
7818718, | Sep 30 2003 | SAP SE | Undoing user actions in a client program |
7877728, | May 10 2005 | Fanuc Ltd | Sequence program editing apparatus |
8274529, | Dec 09 2008 | Adobe Inc | Systems and methods for providing content for use in multiple environments |
8286150, | Feb 27 2007 | Fujitsu Limited | Module generating apparatus, module generating method, and computer product |
8453112, | Nov 13 2008 | Adobe Inc | Systems and methods for collaboratively creating applications using a multiple source file project that can be accessed and edited like a single file |
8462177, | Dec 09 2008 | Adobe Inc | Systems and methods for providing content for use in multiple environments |
8478953, | Sep 18 2008 | Microsoft Technology Licensing, LLC | Buffer snapshots from unmodifiable data piece tables |
9170778, | Nov 18 2008 | Adobe Systems Incorporated | Methods and systems for application development |
Patent | Priority | Assignee | Title |
3893084, | |||
4558413, | Nov 21 1983 | Xerox Corporation | Software version management system |
4809170, | Apr 22 1987 | Hewlett-Packard Company | Computer device for aiding in the development of software system |
4809710, | Jan 11 1988 | Multilumen manometer catheter | |
4931928, | Nov 09 1988 | Apparatus for analyzing source code | |
4989145, | Sep 19 1988 | Hitachi, Ltd. | Syntax analysis and language processing system |
5006992, | Sep 30 1987 | PAVILION TECHNOLOGIES, INC | Process control system with reconfigurable expert rules and control modules |
5070478, | Nov 21 1988 | Xerox Corporation | Modifying text data to change features in a region of text |
5079700, | Apr 26 1989 | International Business Machines Corporation | Method for copying a marked portion of a structured document |
5140521, | Apr 26 1989 | International Business Machines Corporation | Method for deleting a marked portion of a structured document |
5155847, | Aug 03 1988 | DOT ASSETS NO 9 LLC | Method and apparatus for updating software at remote locations |
5224038, | Apr 05 1989 | Xerox Corporation | Token editor architecture |
5239298, | Apr 17 1992 | TTI Inventions A LLC | Data compression |
5263174, | Apr 01 1988 | NORTONLIFELOCK INC | Methods for quick selection of desired items from hierarchical computer menus |
5287501, | Jul 11 1991 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Multilevel transaction recovery in a database system which loss parent transaction undo operation upon commit of child transaction |
5293629, | Nov 30 1990 | ABRAXAS SOFTWARE, 7033 SW MACADAM, PORTLAND OR | Method of analyzing computer source code |
5311422, | Jun 28 1990 | The United States of America as represented by the Administrator of the | General purpose architecture for intelligent computer-aided training |
5313387, | Jun 30 1989 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Re-execution of edit-compile-run cycles for changed lines of source code, with storage of associated data in buffers |
5377318, | Feb 28 1991 | Agilent Technologies Inc | Line probe diagnostic display in an iconic programming system |
5386559, | Jul 16 1992 | International Business Machines Corporation | Variant domains and variant maps in a versioned database management system |
5386570, | May 24 1993 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Method for a two pass compiler with the saving parse states from first to second pass |
5410701, | Jan 29 1992 | Devonrue Ltd.; DEVONRUE LTD | System and method for analyzing programmed equations |
5430836, | Mar 01 1991 | SAMSUNG ELECTRONICS CO , LTD | Application control module for common user access interface |
5446895, | Dec 13 1991 | Measurement analysis software system and method | |
5481711, | Jan 17 1992 | NEC Corporation | Program editing system |
5481712, | Apr 06 1993 | Cognex Technology and Investment LLC | Method and apparatus for interactively generating a computer program for machine vision analysis of an object |
5485618, | Dec 15 1993 | Borland Software Corporation | Methods and interface for building command expressions in a computer system |
5487000, | Feb 18 1993 | Mitsubishi Electric Industrial Co., Ltd. | Syntactic analysis apparatus |
5487147, | Sep 05 1991 | International Business Machines Corporation; INTERNATIONAL BUSINESS MACHINES CORPORATION A CORP OF NEW YORK | Generation of error messages and error recovery for an LL(1) parser |
5490097, | Mar 22 1993 | Fujitsu Limited | System and method for modeling, analyzing and executing work process plans |
5493678, | Sep 26 1988 | International Business Machines Corporation | Method in a structure editor |
5502805, | Apr 08 1992 | Borland Software Corporation | System and methods for improved spreadsheet interface with user-familiar objects |
5504902, | Dec 01 1993 | CHASE MANHATTAN BANK, THE; Patriot Sensors & Controls Corporation | Multi-language generation of control program for an industrial controller |
5513305, | Mar 01 1994 | Apple Inc | System and method for documenting and displaying computer program code |
5537630, | Dec 05 1994 | International Business Machines Corporation | Method and system for specifying method parameters in a visual programming system |
5557730, | Nov 19 1992 | CODEGEAR LLC | Symbol browsing and filter switches in an object-oriented development system |
5574898, | Jan 08 1993 | IBM Corporation | Dynamic software version auditor which monitors a process to provide a list of objects that are accessed |
5577241, | Dec 07 1994 | AT HOME BONDHOLDERS LIQUIDATING TRUST | Information retrieval system and method with implementation extensible query architecture |
5579469, | Jun 07 1991 | THE CHASE MANHATTAN BANK, AS COLLATERAL AGENT | Global user interface |
5583762, | Aug 22 1994 | OCLC Online Library Center, Incorporated; OCLC Online Computer Library Center, Incorporated | Generation and reduction of an SGML defined grammer |
5604853, | May 18 1991 | Fujitsu Limited | Text editor using insert, update and delete structures for undo and redo operations |
5625773, | Apr 05 1989 | Xerox Corporation | Method of encoding and line breaking text |
5627958, | Nov 02 1992 | Borland Software Corporation | System and method for improved computer-based training |
5628016, | Jun 15 1994 | CODEGEAR LLC | Systems and methods and implementing exception handling using exception registration records stored in stack memory |
5644737, | Jun 06 1995 | Microsoft Technology Licensing, LLC | Method and system for stacking toolbars in a computer display |
5649192, | Jan 15 1993 | General Electric Company | Self-organized information storage system |
5649200, | Jan 08 1993 | International Business Machines Corporation | Dynamic rule-based version control system |
5649222, | May 08 1995 | Microsoft Technology Licensing, LLC | Method for background spell checking a word processing document |
5652899, | Mar 03 1995 | IBM Corporation | Software understanding aid for generating and displaying simiplified code flow paths with respect to target code statements |
5671403, | Dec 30 1994 | International Business Machines Corporation | Iterative dynamic programming system for query optimization with bounded complexity |
5673390, | Sep 03 1992 | International Business Machines Corporation | Method and system for displaying error messages |
5680619, | Apr 03 1995 | QUARK, INC | Hierarchical encapsulation of instantiated objects in a multimedia authoring system |
5680630, | Apr 25 1994 | Computer-aided data input system | |
5694559, | Mar 07 1995 | Microsoft Technology Licensing, LLC | On-line help method and system utilizing free text query |
5724593, | Jun 07 1995 | LIONBRIDGE US, INC | Machine assisted translation tools |
5734749, | Dec 27 1993 | NEC Corporation | Character string input system for completing an input character string with an incomplete input indicative sign |
5737608, | Jul 06 1995 | Oracle America, Inc | Per-keystroke incremental lexing using a conventional batch lexer |
5740444, | Nov 19 1992 | CODEGEAR LLC | Symbol browsing in an object-oriented development system |
5748975, | Jul 06 1995 | Oracle America, Inc | System and method for textual editing of structurally-represented computer programs with on-the-fly typographical display |
5752058, | Jul 06 1995 | Oracle America, Inc | System and method for inter-token whitespace representation and textual editing behavior in a program editor |
5754737, | Jun 07 1995 | Microsoft Technology Licensing, LLC | System for supporting interactive text correction and user guidance features |
5778402, | Jun 07 1995 | Microsoft Technology Licensing, LLC | Method and system for auto-formatting a document using an event-based rule engine to format a document as the user types |
5781720, | Nov 19 1992 | Borland Software Corporation | Automated GUI interface testing |
5781732, | Jun 20 1996 | Apple Inc | Framework for constructing shared documents that can be collaboratively accessed by multiple users |
5790778, | Aug 07 1996 | Microsoft Technology Licensing, LLC | Simulated program execution error detection method and apparatus |
5798757, | Dec 15 1993 | Borland Software Corporation | Methods and interface for building command expressions in a computer system |
5802262, | Sep 13 1994 | Sun Microsystems, Inc. | Method and apparatus for diagnosing lexical errors |
5805889, | Oct 20 1995 | Sun Microsystems, Inc. | System and method for integrating editing and versioning in data repositories |
5813019, | Jul 06 1995 | Sun Microsystems, Inc.; Sun Microsystems, Inc | Token-based computer program editor with program comment management |
5825355, | Jan 27 1993 | Apple Inc | Method and apparatus for providing a help based window system using multiple access methods |
5832494, | Jun 14 1993 | Software Rights Archive, LLC | Method and apparatus for indexing, searching and displaying data |
5844554, | Sep 17 1996 | CLICK COMMERCE, INC | Methods and systems for user interfaces and constraint handling configurations software |
5845120, | Sep 19 1995 | Oracle America, Inc | Method and apparatus for linking compiler error messages to relevant information |
5845300, | Jun 05 1996 | Microsoft Technology Licensing, LLC | Method and apparatus for suggesting completions for a partially entered data item based on previously-entered, associated data items |
5848394, | Sep 18 1996 | Leonard & Caroline White; WHITE, LEONARD; WHITE, CAROLINE | Method and system for producing a work breakdown structure for a project |
5850561, | Sep 23 1994 | Alcatel Lucent | Glossary construction tool |
5857212, | Jul 06 1995 | Sun Microsystems, Inc | System and method for horizontal alignment of tokens in a structural representation program editor |
5859638, | Jan 27 1993 | Apple Inc | Method and apparatus for displaying and scrolling data in a window-based graphic user interface |
5870608, | Jun 03 1994 | Synopsys, Inc; SYMOPSYS, INC | Method and apparatus for displaying text including context sensitive information derived from parse tree |
5872974, | Apr 19 1995 | Property setting manager for objects and controls of a graphical user interface software development system | |
5877758, | Nov 22 1996 | Microsoft Technology Licensing, LLC | System and method for using a slider control for controlling parameters of a display item |
5890103, | Jul 01 1995 | VANTAGE TECHNOLOGY HOLDINGS, LLC | Method and apparatus for improved tokenization of natural language text |
5905892, | Apr 01 1996 | Oracle America, Inc | Error correcting compiler |
5911059, | Dec 18 1996 | Freescale Semiconductor, Inc | Method and apparatus for testing software |
5911075, | Mar 31 1997 | International Business Machines Corporation | Query selection for a program development environment |
5924089, | Sep 03 1996 | International Business Machines Corporation | Natural language translation of an SQL query |
5959629, | Nov 25 1996 | Sony Corporation | Text input device and method |
5960196, | Dec 18 1996 | ALCATEL USA SOURCING, L P | Software release metric reporting system and method |
5990906, | Jun 25 1997 | National Instruments Corporation | Undo feature for a graphical programming system |
5991799, | Dec 20 1996 | Comcast Cable Communications Management, LLC | Information retrieval system using an internet multiplexer to focus user selection |
6002874, | Dec 22 1997 | International Business Machines Corporation | Method and system for translating goto-oriented procedural languages into goto-free object oriented languages |
6012075, | Nov 14 1996 | Microsoft Technology Licensing, LLC | Method and system for background grammar checking an electronic document |
6014135, | Apr 04 1997 | Meta Platforms, Inc | Collaboration centric document processing environment using an information centric visual user interface and information presentation method |
6016467, | May 27 1997 | HEWLETT-PACKARD DEVELOPMENT COMPANY, L P | Method and apparatus for program development using a grammar-sensitive editor |
6018524, | Sep 09 1997 | Washington University | Scalable high speed IP routing lookups |
6023715, | Apr 24 1996 | International Business Machines Corp | Method and apparatus for creating and organizing a document from a plurality of local or external documents represented as objects in a hierarchical tree |
6026233, | May 27 1997 | Microsoft Technology Licensing, LLC | Method and apparatus for presenting and selecting options to modify a programming language statement |
6053951, | Jul 10 1997 | National Instruments Corporation | Man/machine interface graphical code generation wizard for automatically creating MMI graphical programs |
6061513, | Aug 18 1997 | Automated methods for constructing language specific systems for reverse engineering source code into abstract syntax trees with attributes in a form that can more easily be displayed, understood and/or modified | |
6071317, | Dec 11 1997 | HANGER SOLUTIONS, LLC | Object code logic analysis and automated modification system and method |
6115544, | Sep 03 1992 | International Business Machines Corporation | Method and system for displaying error messages |
6119120, | Jun 28 1996 | Microsoft Technology Licensing, LLC | Computer implemented methods for constructing a compressed data structure from a data string and for using the data structure to find data patterns in the data string |
6154847, | Sep 02 1993 | International Business Machines Corporation | Method and system for performing resource updates and recovering operational records within a fault-tolerant transaction-oriented data processing system |
6163879, | Aug 20 1998 | EMC Corporation | Interface and method for facilitating writing and modifying of lines of programming code |
6185591, | Jul 29 1997 | International Business Machines Corp. | Text edit system with enhanced undo user interface |
6205579, | Oct 28 1996 | Altera Corporation | Method for providing remote software technical support |
6212534, | May 13 1999 | Progress Software Corporation | System and method for facilitating collaboration in connection with generating documents among a plurality of operators using networked computer systems |
6226785, | Sep 30 1994 | Apple Inc | Method and apparatus for storing and replaying creation history of multimedia software or other software content |
6247020, | Dec 17 1997 | JPMORGAN CHASE BANK, N A , AS SUCCESSOR AGENT | Development system with application browser user interface |
6266665, | Nov 13 1998 | Microsoft Technology Licensing, LLC | Indexing and searching across multiple sorted arrays |
6275976, | Mar 15 1996 | Automated method for building and maintaining software including methods for verifying that systems are internally consistent and correct relative to their specifications | |
6282551, | Apr 08 1992 | Borland Software Corporation | System and methods for improved spreadsheet interface with user-familiar objects |
6286138, | Dec 31 1998 | International Business Machines Corporation | Technique for creating remotely updatable programs for use in a client/server environment |
6305008, | Nov 13 1998 | Microsoft Technology Licensing, LLC | Automatic statement completion |
6311323, | May 27 1997 | Microsoft Technology Licensing, LLC | Computer programming language statement building and information tool |
6349327, | Dec 22 1995 | Sun Microsystems, Inc. | System and method enabling awareness of others working on similar tasks in a computer work environment |
6425016, | May 27 1997 | IBM Corporation | System and method for providing collaborative replicated objects for synchronous distributed groupware applications |
6426761, | Apr 23 1999 | Internation Business Machines Corporation | Information presentation system for a graphical user interface |
6470306, | Apr 23 1996 | CANTENA SERVICE AGENT CORPORATION; CATENA SERVICE AGENT CORPORATION | Automated translation of annotated text based on the determination of locations for inserting annotation tokens and linked ending, end-of-sentence or language tokens |
6470349, | Mar 11 1999 | BROWZ LLC | Server-side scripting language and programming tool |
6507845, | Sep 14 1998 | LinkedIn Corporation | Method and software for supporting improved awareness of and collaboration among users involved in a task |
6519763, | Mar 30 1998 | Compuware Corporation | Time management and task completion and prediction software |
6604109, | Jul 17 1996 | NeXT Software, Inc. | Object graph editing context and methods of use |
6643661, | Apr 27 2000 | Oracle International Corporation | Method and apparatus for implementing search and channel features in an enterprise-wide computer system |
6658624, | Sep 24 1996 | Ricoh Company, Ltd. | Method and system for processing documents controlled by active documents with embedded instructions |
6658643, | Aug 23 2000 | International Business Machines Corporation | Method and apparatus for computer software analysis |
6678882, | Jun 30 1999 | Qwest Communications International Inc | Collaborative model for software systems with synchronization submodel with merge feature, automatic conflict resolution and isolation of potential changes for reuse |
6760695, | Aug 31 1992 | CANTENA SERVICE AGENT CORPORATION; CATENA SERVICE AGENT CORPORATION | Automated natural language processing |
6792595, | Dec 23 1998 | International Business Machines Corporation | Source editing in a graphical hierarchical environment |
6795826, | May 25 2000 | MANYWORLDS, INC | Fuzzy content network management and access |
6801026, | Dec 20 2002 | Intel Corporation | Hysteretic DC-DC converters |
6901448, | Dec 29 2000 | Cisco Technology, Inc | Secure communications system for collaborative computing |
6993723, | Apr 17 2000 | Accenture Global Services Limited | Listing activities in a graphical user interface in a collaborative work tool Architecture |
7127704, | Jun 02 2000 | Oracle America, Inc | Interactive software engineering tool with support for embedded lexical contexts |
7159207, | Apr 09 2001 | Oracle America, Inc | Method and apparatus for accessing related computer objects |
20010052190, | |||
20010052910, | |||
20020100016, | |||
20020106991, | |||
20020107866, | |||
20030061046, | |||
20030066058, | |||
20030208427, | |||
20030229648, | |||
20040003373, | |||
20040003374, | |||
20040006763, | |||
20040030741, | |||
20040054644, | |||
20040225997, | |||
20040225998, | |||
20050022132, |
Executed on | Assignor | Assignee | Conveyance | Frame | Reel | Doc |
Jun 27 2002 | VAN DE VANTER, MICHAEL L | Sun Microsystems, Inc | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 013069 | /0620 | |
Jun 28 2002 | Sun Microsystems, Inc. | (assignment on the face of the patent) | / | |||
Jul 02 2002 | URQUHART, KENNETH B | Sun Microsystems, Inc | ASSIGNMENT OF ASSIGNORS INTEREST SEE DOCUMENT FOR DETAILS | 012998 | /0553 | |
Feb 12 2010 | ORACLE USA, INC | Oracle America, Inc | MERGER AND CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 037303 | /0336 | |
Feb 12 2010 | Sun Microsystems, Inc | Oracle America, Inc | MERGER AND CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 037303 | /0336 | |
Feb 12 2010 | Oracle America, Inc | Oracle America, Inc | MERGER AND CHANGE OF NAME SEE DOCUMENT FOR DETAILS | 037303 | /0336 |
Date | Maintenance Fee Events |
Aug 23 2007 | ASPN: Payor Number Assigned. |
Sep 21 2011 | M1551: Payment of Maintenance Fee, 4th Year, Large Entity. |
Nov 25 2015 | M1552: Payment of Maintenance Fee, 8th Year, Large Entity. |
Dec 02 2019 | M1553: Payment of Maintenance Fee, 12th Year, Large Entity. |
Date | Maintenance Schedule |
Jun 10 2011 | 4 years fee payment window open |
Dec 10 2011 | 6 months grace period start (w surcharge) |
Jun 10 2012 | patent expiry (for year 4) |
Jun 10 2014 | 2 years to revive unintentionally abandoned end. (for year 4) |
Jun 10 2015 | 8 years fee payment window open |
Dec 10 2015 | 6 months grace period start (w surcharge) |
Jun 10 2016 | patent expiry (for year 8) |
Jun 10 2018 | 2 years to revive unintentionally abandoned end. (for year 8) |
Jun 10 2019 | 12 years fee payment window open |
Dec 10 2019 | 6 months grace period start (w surcharge) |
Jun 10 2020 | patent expiry (for year 12) |
Jun 10 2022 | 2 years to revive unintentionally abandoned end. (for year 12) |