switch to new MPL based Fraunhofer FOKUS Public License
[senf.git] / senf / Utils / Termlib / Editor.hh
index 7db6faf..dd202a1 100644 (file)
@@ -1,24 +1,29 @@
 // $Id$
 //
-// Copyright (C) 2009 
+// Copyright (C) 2009
 // Fraunhofer Institute for Open Communication Systems (FOKUS)
-// Competence Center NETwork research (NET), St. Augustin, GERMANY
-//     Stefan Bund <g0dil@berlios.de>
 //
-// This program is free software; you can redistribute it and/or modify
-// it under the terms of the GNU General Public License as published by
-// the Free Software Foundation; either version 2 of the License, or
-// (at your option) any later version.
+// The contents of this file are subject to the Fraunhofer FOKUS Public License
+// Version 1.0 (the "License"); you may not use this file except in compliance
+// with the License. You may obtain a copy of the License at 
+// http://senf.berlios.de/license.html
 //
-// This program is distributed in the hope that it will be useful,
-// but WITHOUT ANY WARRANTY; without even the implied warranty of
-// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
-// GNU General Public License for more details.
+// The Fraunhofer FOKUS Public License Version 1.0 is based on, 
+// but modifies the Mozilla Public License Version 1.1.
+// See the full license text for the amendments.
 //
-// You should have received a copy of the GNU General Public License
-// along with this program; if not, write to the
-// Free Software Foundation, Inc.,
-// 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
+// Software distributed under the License is distributed on an "AS IS" basis, 
+// WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License 
+// for the specific language governing rights and limitations under the License.
+//
+// The Original Code is Fraunhofer FOKUS code.
+//
+// The Initial Developer of the Original Code is Fraunhofer-Gesellschaft e.V. 
+// (registered association), Hansastraße 27 c, 80686 Munich, Germany.
+// All Rights Reserved.
+//
+// Contributor(s):
+//   Stefan Bund <g0dil@berlios.de>
 
 /** \file
     \brief Editor public header */
@@ -36,7 +41,7 @@
 #include "Terminfo.hh"
 
 //#include "Editor.mpp"
-///////////////////////////////hh.p////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 
 namespace senf {
 namespace term {
@@ -102,7 +107,7 @@ namespace term {
 
         void write(char ch);
         void write(std::string const & s);
-        
+
         AbstractTerminal * terminal_;
         Terminfo tifo_;
         KeyParser keyParser_;
@@ -113,7 +118,7 @@ namespace term {
         unsigned displayHeight_;
         unsigned line_;
     };
-    
+
     /** \brief Single line interactive text editor
 
         LineEditor implements a single-line input widget on an arbitrary AbstractTerminal.
@@ -125,7 +130,7 @@ namespace term {
         \li The LineEditor supports an arbitrary auxiliary display area below the input line
         \li The LineEditor has hide() / show() support to allow editing to be temporarily
             interrupted.
-        
+
         The LineEditor will query the user for an input line. When the user accepts a line,
         LineEditor will call a user callback function. After the callback has been called, the
         editor is disabled. To accept a new input line, call show().
@@ -154,16 +159,16 @@ namespace term {
 
         See the senf::term::bindings namespace for a list of all default provided key binding
         functions.
-        
 
-        \section editor_complete Completion suppoprt
+
+        \section editor_complete Completion support
 
         Completion support is provided by senf::term::bindings::complete(). To use the completer,
         you need to implement a completion function and pass it as second argument to
         bindings::complete():
 
         \code
-        void myCompleter(senf::term::LineEditor & editor, unsigned & b, unsigned & e, 
+        void myCompleter(senf::term::LineEditor & editor, unsigned & b, unsigned & e,
                          std::string & prefix, std::vector<std::string> & completions)
         {
             // Get text to complete
@@ -174,7 +179,7 @@ namespace term {
         }
 
         senf::term::LineEditor editor (...);
-        editor.defineKey(senf::term::KeyParser::TAB, 
+        editor.defineKey(senf::term::KeyParser::TAB,
                          boost::bind(&senf::term::bindings::complete, _1, &myCompleter));
         \endcode
 
@@ -184,16 +189,16 @@ namespace term {
         The completion protocol is as follows: When completion is desired, the completer function is
         called. \a b and \a e are set to 0 and <tt>editor.point()</tt> respectively. \a prefix and
         \a completions are empty.
-        
+
         \li the completer may restrict the to-be-completed string to any subrange by changing \a b
             and \a e accordingly.
         \li If there is an initial substring which applies to \e all completions but should not be
             listed in the list of completions, assign this value to \a prefix.
-        \li Add all possible completions to the \a completions vector not including the \a prefix. 
+        \li Add all possible completions to the \a completions vector not including the \a prefix.
         \li The completion result is taken from the size of the \a completions vector \e only: If
             this vector is empty, completion failed (even if \a prefix is set), a single entry in \a
             completions (even if it is the empty string) signals a unique completion.
-        
+
 
         \section editor_auxarea The aux display area
 
@@ -212,7 +217,7 @@ namespace term {
         : public BaseEditor
     {
     public:
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
         // Types
 
         typedef boost::function<void (LineEditor&)> KeyBinding; ///< Type of a key binding function
@@ -221,18 +226,18 @@ namespace term {
 
         static unsigned const MAX_HISTORY_SIZE = 1024u;
 
-        ///////////////////////////////////////////////////////////////////////////
+        //-////////////////////////////////////////////////////////////////////////
 
         LineEditor(AbstractTerminal & terminal, AcceptCallback cb);
                                         ///< Create a LineEditor
                                         /**< \param[in] terminal abstract terminal interface
                                              \param[in] cb callback to call for complete input
                                                  line */
-        
-        ///////////////////////////////////////////////////////////////////////////
+
+        //-////////////////////////////////////////////////////////////////////////
 
         ///\name Overall edit control
-        ///\{
+        //\{
 
         void show();                    ///< Enable editor widget
         void hide();                    ///< Disable editor widget
@@ -242,18 +247,18 @@ namespace term {
         void forceRedisplay();          ///< Redisplay the editor buffer \e now
         void prompt(std::string const & text); ///< Set prompt string
 
-        ///\}
+        //\}
 
         ///\name Cursor and display movement
-        ///\{
+        //\{
 
         void gotoChar(unsigned n);      ///< Move cursor to position \a n
-        void scrollTo(unsigned n);      ///< Move positon \n to beginning of display line
+        void scrollTo(unsigned n);      ///< Move position \n to beginning of display line
 
-        ///\}
+        //\}
 
         ///\name Text manipulation
-        ///\{
+        //\{
 
         void deleteChar(unsigned n=1);  ///< Delete \a n characters at point
         void insert(char ch);           ///< Insert \a ch at point
@@ -264,47 +269,47 @@ namespace term {
                                              text. The cursor will be placed at position \a pos
                                              within this text. */
 
-        ///\}
+        //\}
 
         ///\name History
-        ///\{
+        //\{
 
         void pushHistory(std::string const & text, bool accept = false);
                                         ///< Add string \a text to history
         void prevHistory();             ///< Switch to previous history entry
         void nextHistory();             ///< Switch to next history entry
 
-        ///\}
+        //\}
 
         ///\name Aux Display
-        ///\{
+        //\{
 
         void auxDisplay(unsigned line, std::string const & text);
-                                        ///< Display \a text on aux display line \a lilne
+                                        ///< Display \a text on aux display line \a line
         unsigned maxAuxDisplayHeight(); ///< Get maximum height of the aux display area
         void clearAuxDisplay();         ///< Clear the aux display area
 
-        ///\}
+        //\}
 
         ///\name Get information
-        ///\{
+        //\{
 
         std::string const & text();     ///< Get current editor buffer contents
         unsigned point();               ///< Get current cursor position
         unsigned displayPos();          ///< Get current display position
         keycode_t lastKey();            ///< Get last key code received
 
-        ///\}
+        //\}
 
         ///\name Key bindings
-        ///\{
+        //\{
 
         void defineKey(keycode_t key, KeyBinding binding);
                                         ///< Bind key \a key to \a binding
         void unsetKey(keycode_t key);   ///< Remove all bindings for \a key
 
-        ///\}
-        
+        //\}
+
     private:
         virtual bool cb_init();
         virtual void cb_windowSizeChanged();
@@ -349,14 +354,14 @@ namespace bindings {
     void nextHistory         (LineEditor & editor); ///< Move to next history entry
     void clearScreen         (LineEditor & editor); ///< Clear screen and redisplay editor
 
-    typedef boost::function<void (LineEditor &, unsigned & b, unsigned & e, 
+    typedef boost::function<void (LineEditor &, unsigned & b, unsigned & e,
                                   std::string & prefix, std::vector<std::string> &)> Completer;
     void complete            (LineEditor & editor, Completer completer);
                                         ///< Complete text at cursor
                                         /**< This function calls \a completer to find the list of
                                              possible completions for the text between \a b and \a e
                                              (as passed to the completer). The completer must add
-                                             all possible completions to the \a completions vector. 
+                                             all possible completions to the \a completions vector.
 
                                              \see \ref editor_complete */
 
@@ -364,7 +369,7 @@ namespace bindings {
 
 }}
 
-///////////////////////////////hh.e////////////////////////////////////////
+//-/////////////////////////////////////////////////////////////////////////////////////////////////
 //#include "Editor.cci"
 //#include "Editor.ct"
 //#include "Editor.cti"