* 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
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).