1127474Stjr/*	$Id: eqn_html.c,v 1.2 2011/07/24 10:09:03 kristaps Exp $ */
2127474Stjr/*
3127474Stjr * Copyright (c) 2011 Kristaps Dzonsons <kristaps@bsd.lv>
4127474Stjr *
5127474Stjr * Permission to use, copy, modify, and distribute this software for any
6127474Stjr * purpose with or without fee is hereby granted, provided that the above
7127474Stjr * copyright notice and this permission notice appear in all copies.
8127474Stjr *
9174990Sache * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10127474Stjr * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11127474Stjr * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12127474Stjr * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13127474Stjr * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14127474Stjr * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15127474Stjr * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16127474Stjr */
17127474Stjr#ifdef HAVE_CONFIG_H
18127474Stjr#include "config.h"
19127474Stjr#endif
20127474Stjr
21127474Stjr#include <assert.h>
22127474Stjr#include <stdio.h>
23127474Stjr#include <stdlib.h>
24174990Sache#include <string.h>
25127474Stjr
26127474Stjr#include "mandoc.h"
27127474Stjr#include "out.h"
28127474Stjr#include "html.h"
29127474Stjr
30127474Stjrstatic	const enum htmltag fontmap[EQNFONT__MAX] = {
31127474Stjr	TAG_SPAN, /* EQNFONT_NONE */
32127474Stjr	TAG_SPAN, /* EQNFONT_ROMAN */
33127474Stjr	TAG_B, /* EQNFONT_BOLD */
34127474Stjr	TAG_B, /* EQNFONT_FAT */
35127474Stjr	TAG_I /* EQNFONT_ITALIC */
36127474Stjr};
37127474Stjr
38127474Stjr
39174990Sachestatic void	eqn_box(struct html *, const struct eqn_box *);
40127474Stjr
41127474Stjrvoid
42127474Stjrprint_eqn(struct html *p, const struct eqn *ep)
43127474Stjr{
44127474Stjr	struct htmlpair	 tag;
45127474Stjr	struct tag	*t;
46127474Stjr
47127474Stjr	PAIR_CLASS_INIT(&tag, "eqn");
48127474Stjr	t = print_otag(p, TAG_SPAN, 1, &tag);
49174990Sache
50127474Stjr	p->flags |= HTML_NONOSPACE;
51127474Stjr	eqn_box(p, ep->root);
52127474Stjr	p->flags &= ~HTML_NONOSPACE;
53127474Stjr
54127474Stjr	print_tagq(p, t);
55127474Stjr}
56127474Stjr
57127474Stjrstatic void
58127474Stjreqn_box(struct html *p, const struct eqn_box *bp)
59127474Stjr{
60127474Stjr	struct tag	*t;
61127474Stjr
62127474Stjr	t = EQNFONT_NONE == bp->font ? NULL :
63127474Stjr		print_otag(p, fontmap[(int)bp->font], 0, NULL);
64127474Stjr
65127474Stjr	if (bp->left)
66127474Stjr		print_text(p, bp->left);
67127474Stjr
68127474Stjr	if (bp->text)
69127474Stjr		print_text(p, bp->text);
70127474Stjr
71127474Stjr	if (bp->first)
72127474Stjr		eqn_box(p, bp->first);
73127474Stjr
74127474Stjr	if (NULL != t)
75127474Stjr		print_tagq(p, t);
76127474Stjr	if (bp->right)
77127474Stjr		print_text(p, bp->right);
78127474Stjr
79127474Stjr	if (bp->next)
80127474Stjr		eqn_box(p, bp->next);
81127474Stjr}
82127474Stjr