////////////////////////////////////////////////////////////////////////////// // // To Do // ////////////////////////////////////////////////////////////////////////////// - work items - bugs - handle the rendering case where start is above top - virtual spaces - overwrite mode - undo/redo - cut/copy/paste - scroll window to keep cursor on screen - F2 to switch between files - F8 to close an open file - argument entry - ctrl-o to open a file - ctrl-F typing a search argument - search and replace - ctrl+y - tab, shift-tab (indent) - box selection - ctrl+n insert spaces - low priority - blinking cursor - integrated command line - F7 to build - F6 find next error - F5 to run app - what about not using C++ as the internal language - provide a C++ importer - provide a C++ exporter - don't edit in C++ syntax - how to store - comments - types ////////////////////////////////////////////////////////////////////////////// // // Features // ////////////////////////////////////////////////////////////////////////////// - features - sections - proportional font text editor for text files, code with syntax errors - auto-word wrap for comments, lists - auto-formated source code - projects - contains all of the files in an entire c++ project - user just edits the project and not the files - file list - integrated command line - macros bound to arbitrary keys - multiple views into same file - run build from within editor, find next error - integration with help - commands - character up, down, left, right, page up, page down - scroll up, down, left, right, page up, page down - begining/end of file - begining/end of line - start selection - start box selection - search forward/back - search and replace - save file - open file - new file - delete, cut, copy, paste - cut line - undo, redo (local & global) - join lines - insert spaces - indent, unindent - architecture - ////////////////////////////////////////////////////////////////////////////// // // Grammer // ////////////////////////////////////////////////////////////////////////////// File: List of FileObject; FileObject: DeclarationStatement ClassSymbol: $name [:: ClassSymbol] Class: class $(name) [: List of ClassParent,] [{ List of ClassStatement } [List of ObjectDefinition,]] ; ClassParent: [public|private] ClassSymbol ClassStatement: private: protected: public: DeclarationStatement; DeclarationStatement: Class Typedef FunctionDeclaration Definition FunctionDefinition Typedef: typedef Type $(name) Type: ClassSymbol Type* Type& (Type) FunctionDeclaration: Type $(name) (List of Declaration,) Declaration: Type $(name) Definition: Type ObjectDefinition ObjectDefinition: $name [= Expression] FunctionDefinition: FunctionDeclaration Block Block: FunctionStatement { List of FunctionStatement } FunctionStatement: break: continue: DeclarationStatement; Expression; if ( Expression ) Block [ else Block ] while ( Expression ) Block; do Block while (Expression) return Expression; Expression: