source@mandoc.bsd.lv
 help / color / mirror / Atom feed
* mdocml: Add the -Ofragment option to -T[]x]html.
@ 2011-10-05 21:35 kristaps
  2011-10-05 21:36 ` Kristaps Dzonsons
  0 siblings, 1 reply; 2+ messages in thread
From: kristaps @ 2011-10-05 21:35 UTC (permalink / raw)
  To: source

Log Message:
-----------
Add the -Ofragment option to -T[]x]html.  This accomodates for embedding
manual output in existing HTML or XHTML documents, e.g., when invoking
mandoc from an SSI or CGI.

Modified Files:
--------------
    mdocml:
        example.style.css
        html.c
        html.h
        man_html.c
        mandoc.1
        mdoc_html.c

Revision Data
-------------
Index: html.h
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.h,v
retrieving revision 1.46
retrieving revision 1.47
diff -Lhtml.h -Lhtml.h -u -p -r1.46 -r1.47
--- html.h
+++ html.h
@@ -104,7 +104,7 @@ struct	htmlpair {
 #define	PAIR_STYLE_INIT(p, h)	PAIR_INIT(p, ATTR_STYLE, (h)->buf)
 #define	PAIR_SUMMARY_INIT(p, v)	PAIR_INIT(p, ATTR_SUMMARY, v)
 
-enum	htmltype {
+enum	htmltype { 
 	HTML_HTML_4_01_STRICT,
 	HTML_XHTML_1_0_STRICT
 };
@@ -125,11 +125,13 @@ struct	html {
 	char		 *base_includes; /* base for include href */
 	char		 *style; /* style-sheet URI */
 	char		  buf[BUFSIZ]; /* see bufcat and friends */
-	size_t		  buflen;
+	size_t		  buflen; 
 	struct tag	 *metaf; /* current open font scope */
 	enum htmlfont	  metal; /* last used font */
 	enum htmlfont	  metac; /* current font mode */
-	enum htmltype	  type;
+	enum htmltype	  type; /* output media type */
+	int		  oflags; /* output options */
+#define	HTML_FRAGMENT	 (1 << 0) /* don't emit HTML/HEAD/BODY */
 };
 
 void		  print_gen_decls(struct html *);
Index: mandoc.1
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mandoc.1,v
retrieving revision 1.93
retrieving revision 1.94
diff -Lmandoc.1 -Lmandoc.1 -u -p -r1.93 -r1.94
--- mandoc.1
+++ mandoc.1
@@ -259,6 +259,12 @@ The following
 .Fl O
 arguments are accepted:
 .Bl -tag -width Ds
+.It Cm fragment
+Do not emit doctype, html, and body elements.
+The
+.Cm style
+argument shall be unused.
+This is useful when embedding manual content within existing documents.
 .It Cm includes Ns = Ns Ar fmt
 The string
 .Ar fmt ,
Index: man_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/man_html.c,v
retrieving revision 1.81
retrieving revision 1.82
diff -Lman_html.c -Lman_html.c -u -p -r1.81 -r1.82
--- man_html.c
+++ man_html.c
@@ -141,33 +141,32 @@ print_bvspace(struct html *h, const stru
 void
 html_man(void *arg, const struct man *m)
 {
-	struct html	*h;
-	struct tag	*t;
 	struct mhtml	 mh;
 
-	h = (struct html *)arg;
-
-	print_gen_decls(h);
-
 	memset(&mh, 0, sizeof(struct mhtml));
-
-	t = print_otag(h, TAG_HTML, 0, NULL);
-	print_man(man_meta(m), man_node(m), &mh, h);
-	print_tagq(h, t);
-
-	printf("\n");
+	print_man(man_meta(m), man_node(m), &mh, (struct html *)arg);
+	putchar('\n');
 }
 
 static void
 print_man(MAN_ARGS) 
 {
-	struct tag	*t;
+	struct tag	*t, *tt;
+	struct htmlpair	 tag;
+
+	PAIR_CLASS_INIT(&tag, "mandoc");
 
-	t = print_otag(h, TAG_HEAD, 0, NULL);
-	print_man_head(m, n, mh, h);
-	print_tagq(h, t);
+	if ( ! (HTML_FRAGMENT & h->oflags)) {
+		print_gen_decls(h);
+		t = print_otag(h, TAG_HTML, 0, NULL);
+		tt = print_otag(h, TAG_HEAD, 0, NULL);
+		print_man_head(m, n, mh, h);
+		print_tagq(h, tt);
+		print_otag(h, TAG_BODY, 0, NULL);
+		print_otag(h, TAG_DIV, 1, &tag);
+	} else 
+		t = print_otag(h, TAG_DIV, 1, &tag);
 
-	t = print_otag(h, TAG_BODY, 0, NULL);
 	print_man_nodelist(m, n, mh, h);
 	print_tagq(h, t);
 }
Index: html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/html.c,v
retrieving revision 1.149
retrieving revision 1.150
diff -Lhtml.c -Lhtml.c -u -p -r1.149 -r1.150
--- html.c
+++ html.c
@@ -118,13 +118,14 @@ static void *
 ml_alloc(char *outopts, enum htmltype type)
 {
 	struct html	*h;
-	const char	*toks[4];
+	const char	*toks[5];
 	char		*v;
 
 	toks[0] = "style";
 	toks[1] = "man";
 	toks[2] = "includes";
-	toks[3] = NULL;
+	toks[3] = "fragment";
+	toks[4] = NULL;
 
 	h = mandoc_calloc(1, sizeof(struct html));
 
@@ -142,6 +143,9 @@ ml_alloc(char *outopts, enum htmltype ty
 			break;
 		case (2):
 			h->base_includes = v;
+			break;
+		case (3):
+			h->oflags |= HTML_FRAGMENT;
 			break;
 		default:
 			break;
Index: mdoc_html.c
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/mdoc_html.c,v
retrieving revision 1.178
retrieving revision 1.179
diff -Lmdoc_html.c -Lmdoc_html.c -u -p -r1.178 -r1.179
--- mdoc_html.c
+++ mdoc_html.c
@@ -262,17 +262,9 @@ static	const char * const lists[LIST_MAX
 void
 html_mdoc(void *arg, const struct mdoc *m)
 {
-	struct html 	*h;
-	struct tag	*t;
 
-	h = (struct html *)arg;
-
-	print_gen_decls(h);
-	t = print_otag(h, TAG_HTML, 0, NULL);
-	print_mdoc(mdoc_meta(m), mdoc_node(m), h);
-	print_tagq(h, t);
-
-	printf("\n");
+	print_mdoc(mdoc_meta(m), mdoc_node(m), (struct html *)arg);
+	putchar('\n');
 }
 
 
@@ -360,13 +352,22 @@ a2offs(const char *p, struct roffsu *su)
 static void
 print_mdoc(MDOC_ARGS)
 {
-	struct tag	*t;
+	struct tag	*t, *tt;
+	struct htmlpair	 tag;
+
+	PAIR_CLASS_INIT(&tag, "mandoc");
 
-	t = print_otag(h, TAG_HEAD, 0, NULL);
-	print_mdoc_head(m, n, h);
-	print_tagq(h, t);
+	if ( ! (HTML_FRAGMENT & h->oflags)) {
+		print_gen_decls(h);
+		t = print_otag(h, TAG_HTML, 0, NULL);
+		tt = print_otag(h, TAG_HEAD, 0, NULL);
+		print_mdoc_head(m, n, h);
+		print_tagq(h, tt);
+		print_otag(h, TAG_BODY, 0, NULL);
+		print_otag(h, TAG_DIV, 1, &tag);
+	} else 
+		t = print_otag(h, TAG_DIV, 1, &tag);
 
-	t = print_otag(h, TAG_BODY, 0, NULL);
 	print_mdoc_nodelist(m, n, h);
 	print_tagq(h, t);
 }
Index: example.style.css
===================================================================
RCS file: /usr/vhosts/mdocml.bsd.lv/cvs/mdocml/example.style.css,v
retrieving revision 1.46
retrieving revision 1.47
diff -Lexample.style.css -Lexample.style.css -u -p -r1.46 -r1.47
--- example.style.css
+++ example.style.css
@@ -9,8 +9,10 @@
  * See mdoc(7) and man(7) for macro explanations.
  */
 
-html		{ min-width: 580px; width: 580px; }
-body		{ font-family: monospace; }
+div.mandoc	{ min-width: 78ex; 
+		  width: 78ex; 
+	  	  font-family: monospace; } /* This is the outer node of all mandoc -T[x]html documents. */
+
 h1		{ margin-bottom: 0ex; font-size: inherit; margin-left: -4ex; } /* Section header (Sh, SH). */
 h2		{ margin-bottom: 0ex; font-size: inherit; margin-left: -2ex; } /* Sub-section header (Ss, SS). */
 table		{ width: 100%; margin-top: 0ex; margin-bottom: 0ex; } /* All tables. */
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] 2+ messages in thread

* Re: mdocml: Add the -Ofragment option to -T[]x]html.
  2011-10-05 21:35 mdocml: Add the -Ofragment option to -T[]x]html kristaps
@ 2011-10-05 21:36 ` Kristaps Dzonsons
  0 siblings, 0 replies; 2+ messages in thread
From: Kristaps Dzonsons @ 2011-10-05 21:36 UTC (permalink / raw)
  To: source

Forgot to mention, this was ok schwarze@ (plus his suggestion) when 
floated on tech@.
--
 To unsubscribe send an email to source+unsubscribe@mdocml.bsd.lv

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2011-10-05 21:36 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2011-10-05 21:35 mdocml: Add the -Ofragment option to -T[]x]html kristaps
2011-10-05 21:36 ` Kristaps Dzonsons

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).