summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorrhlabs <rhlabs>1998-02-26 00:03:11 +0000
committerrhlabs <rhlabs>1998-02-26 00:03:11 +0000
commit4871022f80a81865eca33e5a33a1e86dde2eaf8b (patch)
tree1beaf9a1ad63c2ac3de81c43b6a58c72aa0cdbfa
parente6a70a076ec1a3b89ab54804de09c22f29be24a5 (diff)
downloadyelp-4871022f80a81865eca33e5a33a1e86dde2eaf8b.tar.gz
Marc and I worked on alot today:
- caching of files/images - info files only load component needed for HTML conversion, which helps since before we'd load the 1.7 megs of emacs GNU info data, now its typically a max of 64k. - entry box appears to work - moved towards a cleaner internal design for 'magic' URLs like 'info:' Tommorrow we'll implement the 'man:' magic url. Then all thats left is searching... Dr Mike <msf@redhat.com>
-rw-r--r--src/info2html/html.c21
-rw-r--r--src/info2html/html.h2
-rw-r--r--src/info2html/main.c233
3 files changed, 145 insertions, 111 deletions
diff --git a/src/info2html/html.c b/src/info2html/html.c
index c97c0cfe..f57f5d01 100644
--- a/src/info2html/html.c
+++ b/src/info2html/html.c
@@ -18,6 +18,8 @@
#define USE_FILE_URLS
+char *BaseFilename=NULL;
+
/* print out the url for a info file */
char *form_info_tag_href( char *nodefile, char *nodename )
{
@@ -25,21 +27,8 @@ char *form_info_tag_href( char *nodefile, char *nodename )
char *escaped_nodename;
escaped_nodename = escape_html_chars( nodename );
-
-#if 0
-#ifdef USE_FILE_URLS
- snprintf(tmp,sizeof(tmp),
- "HREF=\"../%s/%s.html\"", nodefile, escaped_nodename );
-#else
- snprintf(tmp,sizeof(tmp),
- "HREF=\"/cgi-bin/grab-info-file?doctype=info&amp;"
- "docname=%s&amp;doctag=%s\"", nodefile, escaped_nodename );
-#endif
-#endif
-/* snprintf(tmp,sizeof(tmp),"HREF=\"info:%s#%s\"", nodefile, escaped_nodename ); */
-
- snprintf(tmp,sizeof(tmp),"HREF=\"info:%s#%s\"", nodefile, escaped_nodename );
-
+ snprintf(tmp,sizeof(tmp),"HREF=\"info:%s#%s\"",
+ ((BaseFilename) ? BaseFilename : nodefile), escaped_nodename );
if (escaped_nodename)
g_free(escaped_nodename);
return g_strdup(tmp);
@@ -796,7 +785,7 @@ void write_menu_entry_html( FILE *f, char *p, char *nodefile, char **menu_end )
}
for (i=1; i<4; i++)
- if (!isblank(*(realend+i)) && *(realend+i) != '\n')
+ if (!isspace(*(realend+i)) && *(realend+i) != '\n')
{
done = 1;
break;
diff --git a/src/info2html/html.h b/src/info2html/html.h
index 8a0f5694..162829c8 100644
--- a/src/info2html/html.h
+++ b/src/info2html/html.h
@@ -6,6 +6,8 @@
#define HEADER_SIZE_1 "H1"
#define HEADER_SIZE_2 "H2"
+extern char *BaseFilename;
+
void dump_html_for_node( NODE *node );
void open_body_text_html( FILE *f );
diff --git a/src/info2html/main.c b/src/info2html/main.c
index 398ae2af..e40b27e8 100644
--- a/src/info2html/main.c
+++ b/src/info2html/main.c
@@ -11,102 +11,145 @@
#include "version.h"
int
-main(argc, argv)
-int argc;
-char **argv;
+main(int argc, char **argv)
{
- FILE *f;
- char line[250];
-
- int result;
-
- NODE *node;
-
-if (!be_quiet)
- printf("info2html Version %s\n",INFO2HTML_VERSION);
-
- if (argc == 1)
- {
- f = stdin;
- strcpy(work_filename, "STDIN");
- }
- else
- {
- if ((f=fopen(argv[1], "r"))==NULL) {
- fprintf(stderr, "File %s not found.\n",argv[1]);
- exit(1);
- }
- strcpy(work_filename, argv[1]);
- }
-
- work_line_number = 0;
-
-
- /* scan for start of real data */
- for (;1;) {
- fgets(line,250,f);
- if (feof(f))
- {
- fprintf(stderr,"Info file had no contents\n");
- exit(1);
- }
-
- work_line_number++;
- if (*line == INFO_COOKIE)
- break;
-
- }
-
- /* hack, just send to stdout for now */
- fprintf(stdout, "<BODY><HTML>\n");
-
- /* big loop to identify sections of info files */
- /* NEW PLAN - format on the fly */
- /* No need to store all nodes, etc since we let web server */
- /* handle resolving tags! */
- for (;1;) {
- fgets(line,250,f);
- if (feof(f))
- break;
-
- work_line_number++;
-
- /* found a node definition line */
- if (!strncmp(line, "File:", 5))
- {
- node = alloc_node();
- result=read_node( f, line, node );
- if ( result == READ_ERR )
- {
- fprintf(stderr, "Error reading the node contents\n");
- fprintf(stderr, "line was |%s|\n",line);
- continue;
- }
-
- strcpy(work_node,node->nodename);
-
+ FILE *f;
+ char line[250];
+
+ char *requested_nodename=NULL;
+ int aptr;
+ int result;
+ int foundit=0;
+
+ NODE *node;
+
+ if (!be_quiet)
+ printf("info2html Version %s\n",INFO2HTML_VERSION);
+
+ /* simplistic command line parsing for now */
+ aptr = argc;
+ while (aptr > 2) {
+ if (!strcmp(argv[argc-aptr+1], "-a")) {
+ char *s, *t;
+ int len;
+
+ requested_nodename = strdup(argv[argc-aptr+2]);
+ /* strip off quotes */
+ for (s=requested_nodename; *s == '\"'; ) {
+ len = strlen( s );
+ memmove(s, s+1, len);
+ }
+
+ t = s + strlen(s) - 1;
+ while (*t == '\"')
+ t--;
+
+ *(t+1) = '\0';
+
+ fprintf(stderr, "outputting node %s\n",
+ requested_nodename);
+ aptr -= 2;
+ } else if (!strcmp(argv[argc-aptr+1], "-b")) {
+ BaseFilename = strdup(argv[argc-aptr+2]);
+ fprintf(stderr, "outputting basefile %s\n",
+ BaseFilename);
+ aptr -= 2;
+ }
+ }
+
+ if (aptr == 1) {
+ f = stdin;
+ strcpy(work_filename, "STDIN");
+ } else {
+ if ((f=fopen(argv[argc-aptr+1], "r"))==NULL) {
+ fprintf(stderr, "File %s not found.\n",argv[1]);
+ exit(1);
+ }
+ strcpy(work_filename, argv[1]);
+ }
+
+ work_line_number = 0;
+
+
+ /* scan for start of real data */
+ for (;1;) {
+ fgets(line,250,f);
+ if (feof(f))
+ {
+ fprintf(stderr,"Info file had no contents\n");
+ exit(1);
+ }
+
+ work_line_number++;
+ if (*line == INFO_COOKIE)
+ break;
+
+ }
+
+ /* hack, just send to stdout for now */
+ fprintf(stdout, "<BODY><HTML>\n");
+
+ /* big loop to identify sections of info files */
+ /* NEW PLAN - format on the fly */
+ /* No need to store all nodes, etc since we let web server */
+ /* handle resolving tags! */
+ for (;1 || !foundit || !requested_nodename;) {
+ fgets(line,250,f);
+ if (feof(f))
+ break;
+
+ work_line_number++;
+
+ /* found a node definition line */
+ if (!strncmp(line, "File:", 5)) {
+ node = alloc_node();
+ result=read_node( f, line, node );
+ if ( result == READ_ERR ) {
+ fprintf(stderr, "Error reading the node "
+ "contents\n");
+ fprintf(stderr, "line was |%s|\n",line);
+ continue;
+ }
+
+ /* see if this is the requested node name */
+ if (requested_nodename &&
+ strcmp(requested_nodename, node->nodename)) {
+ fprintf(stderr, "skipping ->%s<-\n",
+ node->nodename);
+
+ continue;
+ }
+
+ foundit = 1;
+ strcpy(work_node,node->nodename);
+
#ifdef DEBUG
- printf("NEW NODE\n");
- printf("\tFile:|%s|\n\tNode:|%s|\n\tNext:|%s|\n",
- node->filename, node->nodename,node->next);
- printf("\tPrev:|%s|\n\tUp:|%s|\n\n", node->prev, node->up);
- printf("------------------------------------------------------\n");
+ printf("NEW NODE\n");
+ printf("\tFile:|%s|\n\tNode:|%s|\n\tNext:|%s|\n",
+ node->filename, node->nodename,node->next);
+ printf("\tPrev:|%s|\n\tUp:|%s|\n\n",
+ node->prev, node->up);
+ printf("-------------------------------------------"
+ "-----------\n");
#endif
- /* now lets make some html */
- /* first make sure the subdir for this info file exists */
- dump_html_for_node( node );
-
- if (node)
- {
- if ( node->contents )
- free(node->contents);
-
- free(node);
- }
- }
- else
- continue;
- }
- fprintf(stdout, "</BODY></HTML>\n");
- return 0;
+ /* now lets make some html */
+ dump_html_for_node( node );
+
+ if (node) {
+ if ( node->contents )
+ free(node->contents);
+
+ free(node);
+ }
+ }
+ else
+ continue;
+ }
+
+ if (!foundit && requested_nodename)
+ fprintf(stdout, "Requested node <b>%s</b> not found\n",
+ requested_nodename);
+
+ fprintf(stdout, "</BODY></HTML>\n");
+ return 0;
}