AcePerl
view release on metacpan or search on metacpan
acelib/texthelp.c view on Meta::CPAN
/* File: texthelp.c
* Author: Friedemann Wobus (fw@sanger.ac.uk)
* and contributions from Darren Platt (daz@sanger.ac.uk)
*-------------------------------------------------------------------
* This file is part of the ACEDB genome database package, written by
* Richard Durbin (MRC LMB, UK) rd@mrc-lmb.cam.ac.uk, and
* Jean Thierry-Mieg (CRBM du CNRS, France) mieg@kaa.cnrs-mop.fr
*
* Description:
contains contains the code to display an HTML page as plain text
Basic formatting is observed, but images and links are stripped.
* Exported functions:
** helpPrint(char *helpFilename);
* HISTORY:
* Last edited: Dec 4 14:33 1998 (fw)
* * Oct 8 16:01 1998 (fw): removed the declaration of
helpOn and help for #define MACINTOSH
* * Aug 20 16:10 1998 (rd): removed refernces to old help-system
* * Aug 18 17:17 1998 (fw): help-system split into
w1/helpsubs.c (helpDir, HTML stuff etc).
w1/texthelp.c (non-graphical help for tace)
w2/graphhelp.c (graphical help for xace,image etc.)
* ----------------------------------------------------------------------
* ---- major rework, these revision don't necessarily
* ---- affect code still left in this file
* ----------------------------------------------------------------------
* * May 2 01:07 1996 (rd): new implementation of
helpMakeIndex() using filDirectory()
* * May 2 18:24 1996 (mieg):
fall back on oldhelp
callMosaic if (http:)
use freeout for server
jaime's file name rotation
remaining problem: help topic in tace should be case-insensitive
* * May 1 18:24 1996 (fw): fixed freePage() to avoid mem leaks
* * Apr 30 16:18 1996 (fw): fixed #ifdef NON_GRAPHICs for tace
* * Apr 30 16:18 1996 (fw): added image dictionary
* * Apr 29 12:37 1996 (fw): added handling of <DL> lists
* * Apr 25 16:27 1996 (fw): added <IMG > tag
* * Apr 22 17:43 1996 (fw): changed help system to HTML browser
* Created: Thu Feb 20 14:49:50 1992 (mieg)
*-------------------------------------------------------------------
*/
/* $Id: texthelp.c,v 1.1 2002/11/14 20:00:06 lstein Exp $ */
#ifndef MACINTOSH
/********************************************************************/
#include "help_.h"
#include "freeout.h"
/********************************************************************/
static void htmlPagePrint (HtmlPage *page);
static void printTextSection (HtmlNode *node);
/********************************************************************/
static char buf[10000] ; /* text-buffer for wordwrapping */
/********************************************************************/
static float xPos ;
static int indent ;
static int WINX ;
/* dumps out help-page without images and markups */
UTIL_FUNC_DEF BOOL helpPrint (char *helpFilename)
/* returns TRUE if a help page could successfully be displayed
for the given subject, returns FALSE if no such page found */
{
HtmlPage *page ;
Array dirList;
char *cp;
int i,n,x;
if ((page = htmlPageCreate (helpFilename)))
{
/* found a page */
htmlPagePrint (page);
htmlPageDestroy (page);
return TRUE;
}
if (!helpFilename)
freeOut ("Help subject not found\n");
else
freeOut ("Help subject is ambiguous\n");
freeOut ("Try:\n help\n");
/* now show a list of possible files */
if(!(dirList = filDirectoryCreate
(helpGetDir(), HELP_FILE_EXTENSION, "r")) )
{
messout ("Can't open help directory %s\n"
"(%s)",
helpGetDir(), messSysErrorText()) ;
return FALSE ;
}
acelib/texthelp.c view on Meta::CPAN
}
/* word wrapping if not in preformatting mode */
if (!MODE_PREFORMAT)
{
if (xPos != indent) /* not at start of line ... */
{
xPos += 1 ; /* ... one space before the word */
freeOutf (" ") ;
fflush (stdout) ;
}
if (xPos + len > WINX)
{
newTextLine () ;
}
freeOutf ("%s", buf) ;
xPos += strlen(buf) ; /* place xPos at the end of word */
}
else if (MODE_PREFORMAT)
{
int oldpos, stringpos, screenpos, ii ;
i = 0 ;
/* replace TABs with appropriate number of spaces */
while (buf[i])
{
if (buf[i] == '\t')
{
/* oldpos is the position, that this TAB char
would go on the screen without TABifying
NOTE: xPos is always at least "indent"
(to leave a left margin) */
oldpos = (xPos - indent) + i ;
/* screenpos is the position of the TAB char
after inserting spaces
NOTE: the TAB itself will be
overwritten by one space */
screenpos = (((oldpos/8)+1)*8) - 1 ;
/* stringpos is where the TAB should go
in the string, where it'll turn into a space
at that position */
stringpos = screenpos - (xPos-indent) ;
/* shift all text from current position "i"
onwards */
for (ii = strlen(buf)-1; ii >= i ; --ii)
buf[ii+(stringpos-i)] = buf[ii] ;
/* fill gap with spaces and also overwrite TAB
with a space */
for (ii = i; ii <= stringpos; ++ii)
buf[ii] = ' ' ;
i = stringpos ;
}
++i ;
}
/* don't use len, it might have changed when inserting spaces */
if (buf[strlen(buf)-1] == '\n')
{
buf[strlen(buf)-1] = 0 ;
freeOutf ("%s", buf) ;
xPos += strlen(buf) ;
newTextLine (); /* for the '\n' */
}
else
{
freeOutf ("%s", buf) ;
xPos += strlen(buf) ;
}
}
}
break ;
case HTML_GIFIMAGE:
{
freeOutf (" [IMAGE] ") ;
xPos += 9 ;
}
break ;
case HTML_NOIMAGE:
break ;
case HTML_RULER:
{
newTextLine () ;
for (i = indent; i < WINX; ++i)
freeOutf ("-") ;
xPos = WINX ;
newTextLine () ;
}
break ;
case HTML_PARAGRAPH:
blankTextLine () ;
break ;
case HTML_LINEBREAK:
newTextLine () ;
break ;
case HTML_BOLD_STYLE:
case HTML_STRONG_STYLE:
{
if (node->left) printTextSection (node->left) ;
}
break ;
case HTML_ITALIC_STYLE:
{
if (node->left) printTextSection (node->left) ;
}
break ;
case HTML_CODE_STYLE:
{
if (node->left) printTextSection (node->left) ;
}
break ;
case HTML_STARTBLOCKQUOTE:
newTextLine () ;
indent += 3 ;
xPos = indent ;
for (i = 0; i < indent; ++i) freeOutf (" ") ;
fflush (stdout) ;
( run in 0.688 second using v1.01-cache-2.11-cpan-0bb4e1dffa6 )