1 //
2 // "$Id: CodeEditor.h 7903 2010-11-28 21:06:39Z matt $"
3 //
4 // Code editor widget for the Fast Light Tool Kit (FLTK).
5 //
6 // Copyright 1998-2010 by Bill Spitzak and others.
7 //
8 // This library is free software; you can redistribute it and/or
9 // modify it under the terms of the GNU Library General Public
10 // License as published by the Free Software Foundation; either
11 // version 2 of the License, or (at your option) any later version.
12 //
13 // This library is distributed in the hope that it will be useful,
14 // but WITHOUT ANY WARRANTY; without even the implied warranty of
15 // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
16 // Library General Public License for more details.
17 //
18 // You should have received a copy of the GNU Library General Public
19 // License along with this library; if not, write to the Free Software
20 // Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
21 // USA.
22 //
23 // Please report all bugs and problems on the following page:
24 //
25 //     http://www.fltk.org/str.php
26 //
27 
28 #ifndef CodeEditor_h
29 #  define CodeEditor_h
30 
31 //
32 // Include necessary headers...
33 //
34 
35 #  include <stdio.h>
36 #  include <stdlib.h>
37 #  include <string.h>
38 #  include <ctype.h>
39 #  include <FL/Fl.H>
40 #  include <FL/Fl_Text_Buffer.H>
41 #  include <FL/Fl_Text_Editor.H>
42 
43 
44 class CodeEditor : public Fl_Text_Editor {
45   static Fl_Text_Display::Style_Table_Entry styletable[];
46   static const char * const code_keywords[];
47   static const char * const code_types[];
48 
49 
50   // 'compare_keywords()' - Compare two keywords...
51   static int compare_keywords(const void *a, const void *b);
52 
53   // 'style_parse()' - Parse text and produce style data.
54   static void style_parse(const char *text, char *style, int length);
55 
56   // 'style_unfinished_cb()' - Update unfinished styles.
57   static void style_unfinished_cb(int, void*);
58 
59   // 'style_update()' - Update the style buffer...
60   static void style_update(int pos, int nInserted, int nDeleted,
61                            int /*nRestyled*/, const char * /*deletedText*/,
62                            void *cbArg);
63 
64   static int auto_indent(int, CodeEditor* e);
65 
66   public:
67 
68   CodeEditor(int X, int Y, int W, int H, const char *L=0);
69   ~CodeEditor();
top_line()70   int top_line() { return get_absolute_top_line_number(); }
71 };
72 
73 class CodeViewer : public CodeEditor {
74 
75   public:
76 
77   CodeViewer(int X, int Y, int W, int H, const char *L=0);
78 
79   protected:
80 
handle(int ev)81   int handle(int ev) { return Fl_Text_Display::handle(ev); }
82 };
83 
84 #endif // !CodeEditor_h
85 
86 //
87 // End of "$Id: CodeEditor.h 7903 2010-11-28 21:06:39Z matt $".
88 //
89