xref: /plan9/sys/src/cmd/htmlfmt/main.c (revision d9306527b4a7229dcf0cf3c58aed36bb9da82854)
19a747e4fSDavid du Colombier #include <u.h>
29a747e4fSDavid du Colombier #include <libc.h>
39a747e4fSDavid du Colombier #include <bio.h>
49a747e4fSDavid du Colombier #include <draw.h>
59a747e4fSDavid du Colombier #include <html.h>
69a747e4fSDavid du Colombier #include "dat.h"
79a747e4fSDavid du Colombier 
89a747e4fSDavid du Colombier char *url = "";
99a747e4fSDavid du Colombier int aflag;
109a747e4fSDavid du Colombier int width = 70;
11*d9306527SDavid du Colombier int defcharset;
129a747e4fSDavid du Colombier 
139a747e4fSDavid du Colombier void
usage(void)149a747e4fSDavid du Colombier usage(void)
159a747e4fSDavid du Colombier {
16*d9306527SDavid du Colombier 	fprint(2, "usage: htmlfmt [-c charset] [-u URL] [-a] [-l length] [file ...]\n");
179a747e4fSDavid du Colombier 	exits("usage");
189a747e4fSDavid du Colombier }
199a747e4fSDavid du Colombier 
209a747e4fSDavid du Colombier void
main(int argc,char * argv[])219a747e4fSDavid du Colombier main(int argc, char *argv[])
229a747e4fSDavid du Colombier {
239a747e4fSDavid du Colombier 	int i, fd;
24*d9306527SDavid du Colombier 	char *p, *err, *file;
259a747e4fSDavid du Colombier 	char errbuf[ERRMAX];
269a747e4fSDavid du Colombier 
279a747e4fSDavid du Colombier 	ARGBEGIN{
289a747e4fSDavid du Colombier 	case 'a':
299a747e4fSDavid du Colombier 		aflag++;
309a747e4fSDavid du Colombier 		break;
31*d9306527SDavid du Colombier 	case 'c':
32*d9306527SDavid du Colombier 		p = smprint("<meta charset=\"%s\">", EARGF(usage()));
33*d9306527SDavid du Colombier 		defcharset = charset(p);
34*d9306527SDavid du Colombier 		free(p);
35*d9306527SDavid du Colombier 		break;
369a747e4fSDavid du Colombier 	case 'l': case 'w':
37*d9306527SDavid du Colombier 		err = EARGF(usage());
389a747e4fSDavid du Colombier 		width = atoi(err);
399a747e4fSDavid du Colombier 		if(width <= 0)
409a747e4fSDavid du Colombier 			usage();
419a747e4fSDavid du Colombier 		break;
429a747e4fSDavid du Colombier 	case 'u':
43*d9306527SDavid du Colombier 		url = EARGF(usage());
449a747e4fSDavid du Colombier 		aflag++;
459a747e4fSDavid du Colombier 		break;
469a747e4fSDavid du Colombier 	default:
479a747e4fSDavid du Colombier 		usage();
489a747e4fSDavid du Colombier 	}ARGEND
499a747e4fSDavid du Colombier 
509a747e4fSDavid du Colombier 	err = nil;
519a747e4fSDavid du Colombier 	file = "<stdin>";
529a747e4fSDavid du Colombier 	if(argc == 0)
539a747e4fSDavid du Colombier 		err = loadhtml(0);
549a747e4fSDavid du Colombier 	else
559a747e4fSDavid du Colombier 		for(i=0; err==nil && i<argc; i++){
569a747e4fSDavid du Colombier 			file = argv[i];
579a747e4fSDavid du Colombier 			fd = open(file, OREAD);
589a747e4fSDavid du Colombier 			if(fd < 0){
599a747e4fSDavid du Colombier 				errstr(errbuf, sizeof errbuf);
609a747e4fSDavid du Colombier 				err = errbuf;
619a747e4fSDavid du Colombier 				break;
629a747e4fSDavid du Colombier 			}
639a747e4fSDavid du Colombier 			err = loadhtml(fd);
649a747e4fSDavid du Colombier 			close(fd);
659a747e4fSDavid du Colombier 			if(err)
669a747e4fSDavid du Colombier 				break;
679a747e4fSDavid du Colombier 		}
689a747e4fSDavid du Colombier 	if(err)
699a747e4fSDavid du Colombier 		fprint(2, "htmlfmt: processing %s: %s\n", file, err);
709a747e4fSDavid du Colombier 	exits(err);
719a747e4fSDavid du Colombier }
72