/* * document.c * * handle report of various documenting formats. * * Copyright (c) 1988, 89, 90, 91, 92, 93 Miguel Santana * Copyright (c) 1995, 96, 97, 98 Akim Demaille, Miguel Santana * */ /* * This file is part of a2ps. * * This program is free software; you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation; either version 3, or (at your option) * any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program; see the file COPYING. If not, write to * the Free Software Foundation, 59 Temple Place - Suite 330, * Boston, MA 02111-1307, USA. */ /* * $Id: document.c,v 1.1.1.1.2.1 2007/12/29 01:58:16 mhatta Exp $ */ #include "a2ps.h" #include "routines.h" #include "document.h" #include "xstrrpl.h" /* The rules for authors to Texinfo */ #define AUTHORS_TO_TEXINFO \ "@", "@@", \ NULL /* The rules to convert documentation to another format */ /* 1. Plain ASCII */ #define DOC_TO_PLAIN \ "url(", "", \ ")url(", " (", \ ")url", ")", \ "samp(", "`", \ ")samp", "'", \ "emph(", "*", \ ")emph", "*", \ "code(", "", \ ")code", "", \ "@example\n", "", \ "@end example\n", "", \ "@end example", "", /* Just in case */ \ "@itemize\n", "", \ "@end itemize", "", \ "@item\n", " - ", \ "@@", "@", \ NULL /* 2. Towards HTML */ #define DOC_TO_HTML \ "url(", "", \ ")url", "", \ "emph(", "", \ ")emph", "'", \ "samp(", "`", \ ")samp", "'", \ "code(", "", \ ")code", "", \ "@example", "
",	\
  "@end example", 	"
", \ "@itemize", "", \ "@item\n", "
  • ", \ "@@", "@", \ NULL /* 3. Towards Texinfo */ #define DOC_TO_TEXINFO \ "emph(", "@emph{", \ ")emph", "}", \ "samp(", "@samp{", \ ")samp", "}", \ "code(", "@code{", \ ")code", "}", \ "url(", "@href{", \ ")url(", ",", \ ")url", "}", \ "@itemize", "@itemize @minus", \ NULL /************************************************************************/ /* The authors list handling */ /************************************************************************/ /* * In the following, we do not want to see Akim Demaille's name * in the style sheet context, since there would be too many. */ /* * Split the authors and print them on STREAM using AUTHOR_FMT * (which %1s is clean name, and %2s is the email), separated * with BETWEEN). They must be separated with ',', and * use this convention "First Last ". */ static inline void authors_print (const uchar * authors, FILE * stream, const char *before, const char *author_fmt, const char *between, const char *after) { char *cp, *author, *email; bool first = true; if (!authors) return; /* Work on a copy */ astrcpy (cp, authors); cp = strtok (cp, ","); while (cp) { author = cp; email = author + strcspn (author, "<"); *(email - 1) = '\0'; email++; *(email + strcspn (email, ">")) = '\0'; *(email - 1) = '\0'; if (!strequ (author, "Akim Demaille")) { if (first) { fputs (before, stream); first = false; } else fputs (between, stream); fprintf (stream, author_fmt, author, email); } cp = strtok (NULL, ","); } if (!first) fputs (after, stream); } /* * Plain : nothing to change */ void authors_print_plain (const uchar * authors, FILE * stream, const char *before) { authors_print (authors, stream, before, "%s <%s>", ", ", ".\n"); } /* * HTML : nothing to change */ void authors_print_html (const uchar * authors, FILE * stream, const char *before) { authors_print (authors, stream, before, "%1$s", ", ", ".\n"); } /* * Plain : nothing to change */ void authors_print_texinfo (const uchar * authors, FILE * stream, const char *before) { uchar *cp; /* We must quote the @ of the emails */ cp = (uchar *) xvstrrpl ((const char *) authors, AUTHORS_TO_TEXINFO); /* Don't print the email, that makes too wide output. */ authors_print (cp, stream, before, "%s", ", ", ".\n"); free (cp); } /************************************************************************/ /* The documentation handling */ /************************************************************************/ /* 1. Plain ASCII */ void documentation_print_plain (const uchar * documentation, const char *format, FILE * stream) { char *cp; if (!documentation) return; cp = xvstrrpl ((const char *) documentation, DOC_TO_PLAIN); fprintf (stream, format, cp); free (cp); } /* 2. Towards HTML */ void documentation_print_html (const uchar * documentation, const char *format, FILE * stream) { char *cp; if (!documentation) return; cp = xvstrrpl ((const char *) documentation, DOC_TO_HTML); fprintf (stream, format, cp); free (cp); } /* 3. Towards Texinfo */ void documentation_print_texinfo (const uchar * documentation, const char *format, FILE * stream) { char *cp; if (!documentation) return; cp = xvstrrpl ((const char *) documentation, DOC_TO_TEXINFO); fprintf (stream, format, cp); free (cp); }