Programmer's Editor

Overview

This application is a text editor for programmers. It supports projects (working on several related files in parallel), standard editing functions like copy & paste, indentation and undo/redo, and some specialties for programmers: Syntax highlighting, IntelliSense, AutoComplete and on-the-fly error signaling. All these are supported in multiple languages, and new language will be supported in future versions.

Requirements

Generic requirements:

The system shall allow defining a project, composed of multiple text files of various languages and formats. It will be possible to work on one project at once, but edit many of its files in parallel in a multiple-window user interface.
The system shall support save and load operations, both for a single file and an entire project.
The system shall support copy & paste of dynamically defined text segments between open files.
The system shall support text find operations, both inside a single file, all files, or a dynamically chosen set of files.

The following requirements must be supported differently for several programming languages, and it should be easy to add new supported languages in the future:

The system shall provide language-dependent Syntax Highlighting, meaning that comments, string and number literals, reserved words, special characters and illegal characters will be painted in distinctive colors. The colors for each language can be configured at runtime by the user.
The system shall provide IntelliSense for function calls: Whenever the user enters a function name and enters '(' to start writing its arguments, a hint will be displayed on the screen describing what arguments this function expects.
The system shall provide AutoComplete for object fields and methods: In object oriented languages, whenever a user types the name of an object and then the '.' key, a combo box with all the fields and methods this object supports will open.
The system shall support on-the-fly error signaling: When moving the cursor to another line in the editing window, the line that was just edited is syntax-checked. If errors are found (illegal use of keywords, use of undefined functions or variables, and so on), the line is marked on the screen as containing an error.
The system shall support automatic indentation of code while typing. For example, if a line in C++ code ends with 'if (...) {' then the next line should start indented inwards. If the previous line ends with '}', the next line should start indented outside. The number of spaces for each indentation can be configured by the user at runtime.
The system shall enable counting the number of lines, the number of non-comment lines, and the number of words either in a single file, all files, or a dynamically chosen set of files.

Each of these ten requirements are worth 10% of the grade on the exercise. Note that the grade of a single requirement is composed of how you dealt with it everywhere - in requirements, design, strong and weak spots, and the oral questions.

Good luck!