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