27%option reentrant bison-bridge
31%option extra-type="struct aagextra_s *"
49#define GRAPH_EOF_TOKEN '@'
52#define YYSTYPE AAGSTYPE
59#define isatty(x) gv_isatty_suppression
65#define YY_INPUT(buf,result,max_size) \
66 if ((result = read_input(yyscanner, buf, max_size)) < 0) \
67 YY_FATAL_ERROR( "input in flex scanner failed" )
static double len(glCompPoint p)
static void beginstr(void)
replacements for ctype.h functions
static void storeFileName(aagscan_t yyscanner, const char *fname, size_t len)
static bool twoDots(aagscan_t yyscanner)
static void addstr(aagscan_t yyscanner, char *src)
static int read_input(aagscan_t yyscanner, char *buf, int max_size)
static int chkNum(aagscan_t yyscanner)
static void endstr_html(aagscan_t yyscanner)
int gv_isatty_suppression
static void ppDirective(aagscan_t yyscanner)
106LETTER [A-Za-z_\200-\377]
108NAME {LETTER}({LETTER}|{DIGIT})*
109NUMBER [-]?(({DIGIT}+(\.{DIGIT}*)?)|(\.{DIGIT}+))(\.|{LETTER})?
115{GRAPH_EOF_TOKEN} return(EOF);
116<INITIAL,comment>\n yyextra->line_num++;
char * agstrdup(Agraph_t *, const char *)
returns a pointer to a reference-counted copy of the argument string, creating one if necessary
138<qstring>[\\]["] addstr (yyscanner,
"\"");
139<qstring>[\\][\\] addstr (yyscanner,
"\\\\");
140<qstring>[\\][\n] yyextra->line_num++;
142<qstring>([^"\\\n]*|[\\]) addstr(yyscanner,aagget_text(yyscanner));
145<hstring>[<] yyextra->html_nest++;
addstr(yyscanner,aagget_text(yyscanner));
146<hstring>[\n] addstr(yyscanner,aagget_text(yyscanner));
yyextra->line_num++;
147<hstring>([^><\n]*) addstr(yyscanner,aagget_text(yyscanner));
148. return aagget_text(yyscanner)[0];
161 if (*aagget_text(yyscanner)) {
162 agxbprint(&xb,
" near '%s'", aagget_text(yyscanner));
173 agxbprint(&xb,
" scanning a HTML string (missing '>'? bad nesting? longer than %d?)",
YY_BUF_SIZE);
201#ifndef YY_CALL_ONLY_ARG
202# define YY_CALL_ONLY_ARG aagscan_t yyscanner
217 "pending string data that was not consumed (missing "
218 "endstr()/endhtmlstr()?)");
251 char*
s = aagget_text(yyscanner) + 1;
254 r = sscanf(
s,
"%d %1[\"]%n", &
lineno, buf, &
cnt);
264 while (*e && *e !=
'"') e++;
265 if (e != p && *e ==
'"') {
278 const char *
dot = strchr(aagget_text(yyscanner),
'.');
280 return dot !=
NULL &&
dot != &aagget_text(yyscanner)[aagget_leng(yyscanner) - 1];
289 char c = aagget_text(yyscanner)[aagget_leng(yyscanner) - 1];
299 agwarningf(
"syntax ambiguity - badly delimited number '%s' in line %d of "
300 "%s splits into two tokens\n", aagget_text(yyscanner), ctx->
line_num,
fname);
static void agxbfree(agxbuf *xb)
free any malloced resources
static size_t agxbput_n(agxbuf *xb, const char *s, size_t ssz)
append string s of length ssz into xb
static int agxbprint(agxbuf *xb, const char *fmt,...)
Printf-style output to an agxbuf.
static WUR char * agxbuse(agxbuf *xb)
static size_t agxblen(const agxbuf *xb)
return number of characters currently stored
static int agxbputc(agxbuf *xb, char c)
add character to buffer
aagextra_t * aagget_extra(aagscan_t yyscanner)
static int cnt(Dict_t *d, Dtlink_t **set)
void agwarningf(const char *fmt,...)
void agerrorf(const char *fmt,...)
char * agstrdup_html(Agraph_t *, const char *)
returns a pointer to a reference-counted HTML-like copy of the argument string, creating one if neces...
static bool gv_isdigit(int c)
textitem scanner parser str
void aglexeof(aagscan_t yyscanner)
int aagwrap(YY_CALL_ONLY_ARG)
void aagerror(aagscan_t yyscanner, const char *str)
void aglexbad(aagscan_t yyscanner)
static bool startswith(const char *s, const char *prefix)
does the string s begin with the string prefix?
int(* afread)(void *chan, char *buf, int bufsize)