Logo Search packages:      
Sourcecode: ne version File versions  Download package

syntax.h

#ifndef _Isyntax
#define _Isyntax 1

/*
 *    Syntax highlighting DFA interpreter
 *    Copyright
 *          (C) 2004 Joseph H. Allen
 *
 *    This file is part of JOE (Joe's Own Editor)
 */


/* Color definition */

struct high_color {
      struct high_color *next;
      unsigned char *name;          /* Symbolic name of color */
      int color;              /* Color value */
};

/* State */

struct high_state {
      int no;                       /* State number */
      unsigned char *name;          /* Highlight state name */
      int color;              /* Color for this state */
      struct high_cmd *cmd[256];    /* Character table */
      struct high_cmd *delim;       /* Matching delimiter */
};

/* Parameter list */

struct high_param {
      struct high_param *next;
      unsigned char *name;
};

/* Command (transition) */

struct high_cmd {
      unsigned noeat : 1;           /* Set to give this character to next state */
      unsigned start_buffering : 1; /* Set if we should start buffering */
      unsigned stop_buffering : 1;  /* Set if we should stop buffering */
      unsigned save_c : 1;          /* Save character */
      unsigned save_s : 1;          /* Save string */
      unsigned ignore : 1;          /* Set to ignore case */
      unsigned start_mark : 1;      /* Set to begin marked area including this char */
      unsigned stop_mark : 1;       /* Set to end marked area excluding this char */
      unsigned recolor_mark : 1;    /* Set to recolor marked area with new state */
      unsigned rtn : 1;       /* Set to return */
      unsigned reset : 1;           /* Set to reset the call stack */
      int recolor;                  /* No. chars to recolor if <0. */
      struct high_state *new_state; /* The new state */
      HASH *keywords;               /* Hash table of keywords */
      struct high_cmd *delim;       /* Matching delimiter */
      struct high_syntax *call;     /* Syntax subroutine to call */
};

/* Call stack frame */

struct high_frame {
      struct high_frame *parent;          /* Caller's frame */
      struct high_frame *child;           /* First callee's frame */
      struct high_frame *sibling;         /* Caller's next callee's frame */
      struct high_syntax *syntax;         /* Current syntax subroutine */
      struct high_state *return_state;    /* Return state in the caller's subroutine */
};

/* Loaded form of syntax file or subroutine */

struct high_syntax {
      struct high_syntax *next;     /* Linked list of loaded syntaxes */
      unsigned char *name;          /* Name of this syntax */
      unsigned char *subr;          /* Name of the subroutine (or NULL for whole file) */
      struct high_param *params;    /* Parameters defined */
      struct high_state **states;   /* The states of this syntax.  states[0] is idle state */
      HASH *ht_states;        /* Hash table of states */
      int nstates;                  /* No. states */
      int szstates;                 /* Malloc size of states array */
      struct high_color *color;     /* Linked list of color definitions */
      struct high_cmd default_cmd;  /* Default transition for new states */
      struct high_frame *stack_base;  /* Root of run-time call tree */
};

/* Find a syntax.  Load it if necessary. */

struct high_syntax *load_syntax PARAMS((unsigned char *name));

/* Parse a lines.  Returns new state. */

extern int *attr_buf;
extern int attr_len;
HIGHLIGHT_STATE parse PARAMS((struct high_syntax *syntax, line_desc *ld, HIGHLIGHT_STATE h_state, int utf8));

#define clear_state(s) (((s)->saved_s[0] = 0), ((s)->state = 0), ((s)->stack = 0))
#define invalidate_state(s) ((s)->state = -1)
#define move_state(to,from) (*(to)= *(from))
#define eq_state(x,y) ((x)->state == (y)->state && (x)->stack == (y)->stack && !zcmp((x)->saved_s, (y)->saved_s))

extern struct high_color *global_colors;
void parse_color_def PARAMS((struct high_color **color_list,unsigned char *p,unsigned char *name,int line));

#endif

Generated by  Doxygen 1.6.0   Back to index