add a CVS snapshot, to thoroughly test on the Debian side
[alioth/jupp.git] / syntax.h
1 /* $MirOS: contrib/code/jupp/syntax.h,v 1.3 2016/10/07 19:43:55 tg Exp $ */
2
3 #ifndef _Isyntax
4 #define _Isyntax 1
5
6 #include "hash.h"
7
8 /*
9  *      Syntax highlighting DFA interpreter
10  *      Copyright
11  *              (C) 2004 Joseph H. Allen
12  *
13  *      This file is part of JOE (Joe's Own Editor)
14  */
15
16 /* Color definition */
17
18 struct high_color {
19         struct high_color *next;
20         const unsigned char *name;      /* Symbolic name of color */
21         int color;                      /* Color value */
22 };
23
24 /* State */
25
26 struct high_state {
27         int no;                         /* State number */
28         const unsigned char *name;      /* Highlight state name */
29         int color;                      /* Color for this state */
30         struct high_cmd *cmd[256];      /* Character table */
31 };
32
33 /* Command (transition) */
34
35 struct high_cmd {
36         struct high_state *new_state;   /* The new state */
37         HASH *keywords;                 /* Hash table of keywords */
38         int recolor;                    /* No. chars to recolor if <0. */
39         unsigned noeat : 1;             /* Set to give this character to next state */
40         unsigned start_buffering : 1;   /* Set if we should start buffering */
41         unsigned stop_buffering : 1;    /* Set if we should stop buffering */
42         unsigned ignore : 1;            /* Set to ignore case */
43 };
44
45 /* Loaded form of syntax file */
46
47 struct high_syntax {
48         struct high_syntax *next;       /* Linked list of loaded syntaxes */
49         const unsigned char *name;      /* Name of this syntax */
50         struct high_state **states;     /* The states of this syntax.  states[0] is idle state */
51         int nstates;                    /* No. states */
52         int szstates;                   /* Malloc size of states array */
53         struct high_color *color;       /* Linked list of color definitions */
54         int sync_lines;                 /* No. lines back to start parsing when we lose sync.  -1 means start at beginning */
55         struct high_cmd default_cmd;    /* Default transition for new states */
56 };
57
58 /* Find a syntax.  Load it if necessary. */
59
60 struct high_syntax *load_dfa(const unsigned char *name);
61
62 /* Parse a lines.  Returns new state. */
63
64 extern int *attr_buf;
65 int parse(struct high_syntax *syntax, P *line, int state);
66
67 #endif