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