void buffmt_man(struct html *h, const char *name, const char *sec) { const char *p, *pp; pp = h->base_man; bufinit(h); while (NULL != (p = strchr(pp, '%'))) { bufncat(h, pp, (size_t)(p - pp)); switch (*(p + 1)) { case('S'): bufcat(h, sec ? sec : "1"); break; case('N'): bufcat_fmt(h, "%s", name); break; default: bufncat(h, p, 2); break; } pp = p + 2; } if (pp) bufcat(h, pp); }
void bufcat_style(struct html *h, const char *key, const char *val) { bufcat(h, key); bufncat(h, ":", 1); bufcat(h, val); bufncat(h, ";", 1); }
void bufcat_id(struct html *h, const char *src) { /* Cf. <http://www.w3.org/TR/html5/dom.html#the-id-attribute>. */ for (; '\0' != *src; src++) bufncat(h, *src == ' ' ? "_" : src, 1); }
void buffmt_includes(struct html *h, const char *name) { const char *p, *pp; pp = h->base_includes; while (NULL != (p = strchr(pp, '%'))) { bufncat(h, pp, (size_t)(p - pp)); switch (*(p + 1)) { case('I'): bufcat(h, name); break; default: bufncat(h, p, 2); break; } pp = p + 2; } if (pp) bufcat(h, pp); }
/* snarfheredoc -- read a heredoc until the eof marker */ extern Tree *snarfheredoc(const char *eof, Boolean quoted) { Tree *tree, **tailp; Buffer *buf; unsigned char *s; assert(quoted || strchr(eof, '$') == NULL); /* can never be typed (whew!) */ if (strchr(eof, '\n') != NULL) { yyerror("here document eof-marker contains a newline"); return NULL; } disablehistory = TRUE; for (tree = NULL, tailp = &tree, buf = openbuffer(0);;) { int c; print_prompt2(); for (s = (unsigned char *) eof; (c = GETC()) == *s; s++) ; if (*s == '\0' && (c == '\n' || c == EOF)) { if (buf->current == 0 && tree != NULL) freebuffer(buf); else *tailp = treecons(mk(nQword, sealcountedbuffer(buf)), NULL); break; } if (s != (unsigned char *) eof) buf = bufncat(buf, eof, s - (unsigned char *) eof); for (;; c = GETC()) { if (c == EOF) { yyerror("incomplete here document"); freebuffer(buf); disablehistory = FALSE; return NULL; } if (c == '$' && !quoted && (c = GETC()) != '$') { Tree *var; UNGETC(c); if (buf->current == 0) freebuffer(buf); else { *tailp = treecons(mk(nQword, sealcountedbuffer(buf)), NULL); tailp = &(*tailp)->CDR; } var = getherevar(); if (var == NULL) { freebuffer(buf); disablehistory = FALSE; return NULL; } *tailp = treecons(var, NULL); tailp = &(*tailp)->CDR; buf = openbuffer(0); continue; } buf = bufputc(buf, c); if (c == '\n') break; } } disablehistory = FALSE; return tree->CDR == NULL ? tree->CAR : tree; }
void bufcat(struct html *h, const char *p) { bufncat(h, p, strlen(p)); }