1 /* Copyright (c) 1992, 1998 John E. Davis
2  * This file is part of JED editor library source.
3  *
4  * You may distribute this file under the terms the GNU General Public
5  * License.  See the file COPYING for more information.
6  */
7 #ifndef __JED_INDENT_H_
8 #define __JED_INDENT_H_
9 
10 #if JED_HAS_DFA_SYNTAX
11 typedef struct Highlight Highlight;    /* opaque to all but dfasyntx.c */
12 extern void define_highlight_rule (char *, char *, char *);
13 extern void build_highlight_table (char *);
14 extern void enable_highlight_cache (char *, char *);
15 extern void jed_set_dfa_cache_dir (void);
16 #endif
17 
18 typedef struct Syntax_Table_Type
19 {
20    unsigned char string_char;	       /* character for string delim */
21    unsigned char char_char;	       /* char for char delim */
22    unsigned int flags;
23 #define SYNTAX_NOT_CASE_SENSITIVE 	0x1
24 #define FORTRAN_TYPE 			0x2
25 #define C_COMMENT_TYPE			0x4
26 /* means if non-digit in first column, it is a comment */
27 #define TEX_LIKE_KEYWORDS 		0x8
28 #define COMMENT_IS_WORD			0x10
29 #define PREPROCESS_COLOR_WHOLE_LINE	0x20
30    /* Comments.  Each mode can have at most 2 comment styles: one for
31     * multiline comments, and one for single line comments.
32     * A single line comments ends at the end of the line.  Since some
33     * comments must be followed by whitespace or a word delimeter, an
34     * flag will be set for them.  For example, in BASIC, 'rem' denotes
35     * a comment but 'remote' does not.  Sigh.
36     *
37     * Languages such as m4 are especially problematic.  m4 uses 'dnl' to
38     * start an end-of-line comment.  However, it must occur as an isolated
39     * word such that
40     *    dnlsilly is not a comment
41     *    and sillydnl is not a comment
42     */
43    char *comment_start;
44    unsigned int comment_start_len;
45 
46    unsigned int comment_stop_len;
47    char *comment_stop;
48 
49    char *eol_comment_start;
50    unsigned int eol_comment_len;
51 
52    unsigned char quote_char;	       /* used for quoting in strings */
53    unsigned char preprocess;	       /* start preprocessor lines */
54    unsigned short char_syntax[256];     /* syntax type for characters */
55    unsigned char matching_delim[256];  /* matching pairs */
56    char name[16];		       /* name of this table */
57 #define MAX_KEYWORD_LEN 32
58 #define MAX_KEYWORD_TABLES 3
59    char *keywords[MAX_KEYWORD_TABLES][MAX_KEYWORD_LEN];
60    struct Syntax_Table_Type *next;     /* pointer to next table */
61 #if JED_HAS_DFA_SYNTAX
62    Highlight *hilite;
63 #endif
64    unsigned char fortran_comment_chars[256];
65 }
66 Syntax_Table_Type;
67 
68 
69 #define WORD_SYNTAX		0x001
70 #define NUMBER_SYNTAX		0x002
71 #define DELIM_SYNTAX		0x004
72 
73 #define SYNTAX_MASK		0xFFF8
74 #define QUOTE_SYNTAX		0x008
75 #define STRING_SYNTAX		0x010
76 #define OPEN_DELIM_SYNTAX	0x020
77 #define CLOSE_DELIM_SYNTAX	0x040
78 #define COMMENT_SYNTAX		0x080
79 #define OP_SYNTAX		0x100
80 #define HTML_START_SYNTAX	0x200
81 #define HTML_END_SYNTAX		0x400
82 
83 extern Syntax_Table_Type *Default_Syntax_Table;
84 
85 extern int find_matching_delimiter (int *);
86 extern int parse_to_point (void);
87 extern void use_syntax_table (char *);
88 extern void create_syntax_table (char *);
89 extern void define_syntax (int *, char *);
90 extern void init_syntax_tables (void);
91 extern void blink_match(void);
92 extern int goto_match(void);
93 extern void set_syntax_flags (char *, int *);
94 extern void define_keywords (char *, char *, int *, int *);
95 extern Syntax_Table_Type *find_syntax_table (char *, int);
96 extern void jed_set_fortran_comment_style (char *, char *);
97 
98 #if JED_HAS_LINE_ATTRIBUTES
99 extern void jed_syntax_parse_buffer (int);
100 #endif
101 extern int map_color_object_to_number (char *);
102 
103 #endif /* __JED_INDENT_H_ */
104