|
|
- /* markdown: a C implementation of John Gruber's Markdown markup language.
- *
- * Copyright (C) 2009 David L Parsons.
- * The redistribution terms are provided in the COPYRIGHT file that must
- * be distributed with this source code.
- */
- #include <stdio.h>
- #include <string.h>
- #include <stdarg.h>
- #include <stdlib.h>
- #include <time.h>
- #include <ctype.h>
-
- #include "config.h"
-
- #include "cstring.h"
- #include "markdown.h"
- #include "amalloc.h"
-
-
- /*
- * dump out stylesheet sections.
- */
- static void
- stylesheets(Paragraph *p, Cstring *f)
- {
- Line* q;
-
- for ( ; p ; p = p->next ) {
- if ( p->typ == STYLE ) {
- for ( q = p->text; q ; q = q->next ) {
- Cswrite(f, T(q->text), S(q->text));
- Csputc('\n', f);
- }
- }
- if ( p->down )
- stylesheets(p->down, f);
- }
- }
-
-
- /* dump any embedded styles to a string
- */
- int
- mkd_css(Document *d, char **res)
- {
- Cstring f;
- int size;
-
- if ( res && d && d->compiled ) {
- *res = 0;
- CREATE(f);
- RESERVE(f, 100);
- stylesheets(d->code, &f);
-
- if ( (size = S(f)) > 0 ) {
- EXPAND(f) = 0;
- /* HACK ALERT! HACK ALERT! HACK ALERT! */
- *res = T(f);/* we know that a T(Cstring) is a character pointer */
- /* so we can simply pick it up and carry it away, */
- /* leaving the husk of the Ctring on the stack */
- /* END HACK ALERT */
- }
- else
- DELETE(f);
- return size;
- }
- return EOF;
- }
-
-
- /* dump any embedded styles to a file
- */
- int
- mkd_generatecss(Document *d, FILE *f)
- {
- char *res;
- int written = EOF, size = mkd_css(d, &res);
-
- if ( size > 0 )
- written = fwrite(res, 1, size, f);
- if ( res )
- free(res);
- return (written == size) ? size : EOF;
- }
|