Lines Matching refs:ep

308 	struct eqn_node *ep;
310 ep = mandoc_calloc(1, sizeof(*ep));
311 ep->gsize = EQN_DEFSIZE;
312 return ep;
316 eqn_reset(struct eqn_node *ep)
318 free(ep->data);
319 ep->data = ep->start = ep->end = NULL;
320 ep->sz = ep->toksz = 0;
324 eqn_read(struct eqn_node *ep, const char *p)
328 if (ep->data == NULL) {
329 ep->sz = strlen(p);
330 ep->data = mandoc_strdup(p);
332 ep->sz = mandoc_asprintf(&cp, "%s %s", ep->data, p);
333 free(ep->data);
334 ep->data = cp;
336 ep->sz += 1;
343 eqn_def_find(struct eqn_node *ep)
347 for (i = 0; i < (int)ep->defsz; i++)
348 if (ep->defs[i].keysz && STRNEQ(ep->defs[i].key,
349 ep->defs[i].keysz, ep->start, ep->toksz))
350 return &ep->defs[i];
357 * MODE_QUOTED: Use *ep->start as the delimiter; the token ends
360 * MODE_QUOTED when *ep->start is '"'.
361 * MODE_NOSUB: If *ep->start is a curly brace, the token ends after it;
371 * a token match, *ep->start is set to an allocated string that the
376 eqn_next(struct eqn_node *ep, enum parse_mode mode)
389 if (ep->end - ep->data >= last_len)
392 ep->start = ep->end;
395 switch (*ep->start) {
397 ep->toksz = 0;
408 ep->start++;
414 ep->end = strchr(ep->start + 1, *ep->start);
415 ep->start++; /* Skip opening quote. */
416 if (ep->end == NULL) {
418 ep->node->line, ep->node->pos, NULL);
419 ep->end = strchr(ep->start, '\0');
422 ep->end = ep->start + 1;
423 if (*ep->start != '{' && *ep->start != '}')
424 ep->end += strcspn(ep->end, " ^~\"{}\t");
426 ep->toksz = ep->end - ep->start;
427 if (quoted && *ep->end != '\0')
428 ep->end++; /* Skip closing quote. */
429 while (*ep->end != '\0' && strchr(" \t^~", *ep->end) != NULL)
430 ep->end++;
435 if ((def = eqn_def_find(ep)) == NULL)
439 ep->node->line, ep->node->pos, NULL);
444 if ((diff = def->valsz - ep->toksz) > 0) {
445 start = ep->start - ep->data;
446 ep->sz += diff;
447 ep->data = mandoc_realloc(ep->data, ep->sz + 1);
448 ep->start = ep->data + start;
451 memmove(ep->start + def->valsz, ep->start + ep->toksz,
452 strlen(ep->start + ep->toksz) + 1);
453 memcpy(ep->start, def->val, def->valsz);
454 last_len = ep->start - ep->data + def->valsz;
459 ep->start = mandoc_strndup(ep->start, ep->toksz);
463 if (STRNEQ(ep->start, ep->toksz,
468 if (STRNEQ(ep->start, ep->toksz,
470 mandoc_asprintf(&ep->start,
475 ep->start = mandoc_strndup(ep->start, ep->toksz);
477 if (STRNEQ(ep->start, ep->toksz,
516 eqn_box_alloc(struct eqn_node *ep, struct eqn_box *parent)
524 bp->size = ep->gsize;
543 eqn_box_makebinary(struct eqn_node *ep, struct eqn_box *parent)
554 newb = eqn_box_alloc(ep, parent);
568 eqn_delim(struct eqn_node *ep)
570 if (ep->end[0] == '\0' || ep->end[1] == '\0') {
572 ep->node->line, ep->node->pos, "delim");
573 if (ep->end[0] != '\0')
574 ep->end++;
575 } else if (strncmp(ep->end, "off", 3) == 0) {
576 ep->delim = 0;
577 ep->end += 3;
578 } else if (strncmp(ep->end, "on", 2) == 0) {
579 if (ep->odelim && ep->cdelim)
580 ep->delim = 1;
581 ep->end += 2;
583 ep->odelim = *ep->end++;
584 ep->cdelim = *ep->end++;
585 ep->delim = 1;
593 eqn_undef(struct eqn_node *ep)
597 if (eqn_next(ep, MODE_NOSUB) == EQN_TOK_EOF) {
599 ep->node->line, ep->node->pos, "undef");
602 if ((def = eqn_def_find(ep)) == NULL)
611 eqn_def(struct eqn_node *ep)
616 if (eqn_next(ep, MODE_NOSUB) == EQN_TOK_EOF) {
618 ep->node->line, ep->node->pos, "define");
626 if ((def = eqn_def_find(ep)) == NULL) {
628 for (i = 0; i < (int)ep->defsz; i++)
629 if (0 == ep->defs[i].keysz)
632 if (i == (int)ep->defsz) {
633 ep->defsz++;
634 ep->defs = mandoc_reallocarray(ep->defs,
635 ep->defsz, sizeof(struct eqn_def));
636 ep->defs[i].key = ep->defs[i].val = NULL;
639 def = ep->defs + i;
641 def->key = mandoc_strndup(ep->start, ep->toksz);
642 def->keysz = ep->toksz;
645 if (eqn_next(ep, MODE_QUOTED) == EQN_TOK_EOF) {
647 ep->node->line, ep->node->pos, "define %s", def->key);
655 def->val = mandoc_strndup(ep->start, ep->toksz);
656 def->valsz = ep->toksz;
660 eqn_parse(struct eqn_node *ep)
669 parent = ep->node->eqn;
677 if (ep->data == NULL)
680 ep->start = ep->end = ep->data;
683 tok = eqn_next(ep, MODE_TOK);
686 eqn_undef(ep);
690 eqn_def(ep);
693 if (eqn_next(ep, MODE_NOSUB) == EQN_TOK_EOF ||
694 eqn_next(ep, MODE_QUOTED) == EQN_TOK_EOF)
696 ep->node->line, ep->node->pos, "tdefine");
699 eqn_delim(ep);
702 if (eqn_next(ep, MODE_SUB) == EQN_TOK_EOF)
703 mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line,
704 ep->node->pos, "%s", eqn_toks[tok]);
719 mandoc_msg(MANDOCERR_EQN_NOBOX, ep->node->line,
720 ep->node->pos, "%s", eqn_toks[tok]);
721 cur = eqn_box_alloc(ep, parent);
725 parent = eqn_box_makebinary(ep, parent);
763 if (eqn_next(ep, MODE_SUB) == EQN_TOK_EOF)
764 mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line,
765 ep->node->pos, "%s", eqn_toks[tok]);
778 parent = eqn_box_alloc(ep, parent);
801 if (eqn_next(ep, MODE_SUB) == EQN_TOK_EOF) {
802 mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line,
803 ep->node->pos, "%s", eqn_toks[tok]);
806 size = mandoc_strntoi(ep->start, ep->toksz, 10);
808 mandoc_msg(MANDOCERR_IT_NONUM, ep->node->line,
809 ep->node->pos, "%s", eqn_toks[tok]);
813 ep->gsize = size;
818 parent = eqn_box_alloc(ep, parent);
833 mandoc_msg(MANDOCERR_EQN_NOBOX, ep->node->line,
834 ep->node->pos, "%s", eqn_toks[tok]);
835 cur = eqn_box_alloc(ep, parent);
862 parent = eqn_box_makebinary(ep, parent);
888 parent = eqn_box_alloc(ep, parent);
900 mandoc_msg(MANDOCERR_EQN_NOBOX, ep->node->line,
901 ep->node->pos, "%s", eqn_toks[tok]);
902 cur = eqn_box_alloc(ep, parent);
910 parent = eqn_box_makebinary(ep, parent);
927 mandoc_msg(MANDOCERR_BLK_NOTOPEN, ep->node->line,
928 ep->node->pos, "%s", eqn_toks[tok]);
933 if (eqn_next(ep, MODE_SUB) == EQN_TOK_EOF) {
935 ep->node->line, ep->node->pos,
940 if (STRNEQ(ep->start, ep->toksz, "ceiling", 7))
942 else if (STRNEQ(ep->start, ep->toksz, "floor", 5))
946 mandoc_strndup(ep->start, ep->toksz);
969 eqn_next(ep, MODE_SUB) == EQN_TOK_EOF) {
970 mandoc_msg(MANDOCERR_REQ_EMPTY, ep->node->line,
971 ep->node->pos, "%s", eqn_toks[tok]);
974 parent = eqn_box_alloc(ep, parent);
977 if (STRNEQ(ep->start, ep->toksz, "ceiling", 7))
979 else if (STRNEQ(ep->start, ep->toksz, "floor", 5))
983 mandoc_strndup(ep->start, ep->toksz);
995 parent = eqn_box_alloc(ep, parent);
1004 mandoc_msg(MANDOCERR_IT_STRAY, ep->node->line,
1005 ep->node->pos, "%s", eqn_toks[tok]);
1008 parent = eqn_box_alloc(ep, cur);
1014 parent = eqn_box_alloc(ep, parent);
1024 p = ep->start;
1032 cur = eqn_box_alloc(ep, parent);
1082 split = eqn_box_alloc(ep, parent);
1091 nbox = eqn_box_alloc(ep, parent);