12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- /*************************************************************************
- * Copyright (c) 2011 AT&T Intellectual Property
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * https://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors: Details at https://graphviz.org
- *************************************************************************/
- /*
- * Glenn Fowler
- * AT&T Research
- *
- * expression library
- */
- #include <cgraph/gv_ctype.h>
- #include <expr/exlib.h>
- /*
- * copy input token error context into buf of n chars and reset the context
- * end of buf returned
- */
- char*
- excontext(Expr_t* p, char* buf, int n)
- {
- char* s;
- char* t;
- char* e;
- s = buf;
- if (p->linep > p->line || p->linewrap)
- {
- e = buf + n - 5;
- if (p->linewrap)
- {
- t = p->linep + 1;
- while (t < &p->line[sizeof(p->line)] && gv_isspace(*t))
- t++;
- if ((n = (sizeof(p->line) - (t - (p->linep + 1))) - (e - s)) > 0)
- {
- if (n > &p->line[sizeof(p->line)] - t)
- t = &p->line[sizeof(p->line)];
- else t += n;
- }
- while (t < &p->line[sizeof(p->line)])
- *s++ = *t++;
- }
- t = p->line;
- if (p->linewrap)
- p->linewrap = 0;
- else while (t < p->linep && gv_isspace(*t))
- t++;
- if ((n = (p->linep - t) - (e - s)) > 0)
- t += n;
- while (t < p->linep)
- *s++ = *t++;
- p->linep = p->line;
- t = "<<< ";
- while ((*s = *t++))
- s++;
- }
- *s = 0;
- return s;
- }
|